(self["webpackChunkcoros_web_v2"] = self["webpackChunkcoros_web_v2"] || []).push([[1826],{

/***/ 65447:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ql": () => (/* binding */ handleTransitionEnd4A11ySwiper),
/* harmony export */   "z6": () => (/* binding */ handleInit4a11ySwiper)
/* harmony export */ });
/* unused harmony exports selector4focusableElements, SELECTOR_FOR_MAY_FOCUSE_ELEMENTS */
const selector4focusableElements = 'button, [href], a, input, select, textarea, [tabindex]:not([tabindex="-1"])';
const SELECTOR_FOR_MAY_FOCUSE_ELEMENTS = 'button, [href], a, input, select, textarea, [tabindex]';

/**
 * swiper v5 无障碍适配辅助方法，隐藏不可见的slide 并移出tab 序列，依赖配置：watchSlidesProgress， watchSlidesVisibility
 */
function handleTransitionEnd4A11ySwiper() {
  const swiperInstance = this;

  // 初始化的时候tabindex 设置异常；暂时使用延时处理
  setTimeout(() => {
    Array.prototype.forEach.call(swiperInstance.slides, (slideEl) => {
      if (Array.prototype.find.call(swiperInstance.visibleSlides, (visibleSlide) => visibleSlide === slideEl)) {
        slideEl.setAttribute('aria-hidden', 'false');
      } else {
        slideEl.setAttribute('aria-hidden', 'true');
      }
    });

    const bannerFocusableEls = swiperInstance.$wrapperEl[0].querySelectorAll(SELECTOR_FOR_MAY_FOCUSE_ELEMENTS);
    Array.prototype.forEach.call(bannerFocusableEls.length ? bannerFocusableEls : swiperInstance.slides, (el) => {
      if (Array.prototype.some.call(swiperInstance.visibleSlides, (container) => container.contains(el))) {
        el.setAttribute('tabindex', 0);
      } else {
        el.setAttribute('tabindex', '-1');
      }
    });
  }, 500);
}

function handleInit4a11ySwiper() {
  this.a11y.liveRegion.attr('aria-live', 'polite');
  // 通知信息和按钮重复
  setTimeout(() => {
    this.params.a11y.nextSlideMessage = '';
    this.params.a11y.prevSlideMessage = '';
  }, 50);
}


/***/ }),

/***/ 67872:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "y": () => (/* binding */ assetsRequire)
/* harmony export */ });
const assetsRequire = function (filepath) {
  filepath = filepath.replace(/@assets/, "https://staticcn.coros.com/coros-v2");
  return filepath;
};


/***/ }),

/***/ 76891:
/***/ (() => {

(function flexible(window, document) {
  var docEl = document.documentElement;
  var dpr = window.devicePixelRatio || 1;

  // adjust body font size
  function setBodyFontSize() {
    if (document.body) {
      document.body.style.fontSize = 12 * dpr + 'px';
    } else {
      document.addEventListener('DOMContentLoaded', setBodyFontSize);
    }
  }
  setBodyFontSize();

  // set 1rem = viewWidth / 10
  function setRemUnit() {
    var rem = docEl.clientWidth / 10;
    docEl.style.fontSize = rem + 'px';
  }

  setRemUnit();

  // reset rem unit on page resize
  window.addEventListener('resize', setRemUnit);
  window.addEventListener('pageshow', function (e) {
    if (e.persisted) {
      setRemUnit();
    }
  });

  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement('body');
    var testElement = document.createElement('div');
    testElement.style.border = '.5px solid transparent';
    fakeBody.appendChild(testElement);
    docEl.appendChild(fakeBody);
    if (testElement.offsetHeight === 1) {
      docEl.classList.add('hairlines');
    }
    docEl.removeChild(fakeBody);
  }
})(window, document);


/***/ }),

/***/ 47128:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

/*
* SystemJS 6.11.0
*/
!function(){function e(e,t){return(t||"")+" (SystemJS Error#"+e+" https://git.io/JvFET#"+e+")"}function t(e,t){if(-1!==e.indexOf("\\")&&(e=e.replace(/\\/g,"/")),"/"===e[0]&&"/"===e[1])return t.slice(0,t.indexOf(":")+1)+e;if("."===e[0]&&("/"===e[1]||"."===e[1]&&("/"===e[2]||2===e.length&&(e+="/"))||1===e.length&&(e+="/"))||"/"===e[0]){var n,r=t.slice(0,t.indexOf(":")+1);if(n="/"===t[r.length+1]?"file:"!==r?(n=t.slice(r.length+2)).slice(n.indexOf("/")+1):t.slice(8):t.slice(r.length+("/"===t[r.length])),"/"===e[0])return t.slice(0,t.length-n.length-1)+e;for(var i=n.slice(0,n.lastIndexOf("/")+1)+e,o=[],s=-1,u=0;i.length>u;u++)-1!==s?"/"===i[u]&&(o.push(i.slice(s,u+1)),s=-1):"."===i[u]?"."!==i[u+1]||"/"!==i[u+2]&&u+2!==i.length?"/"===i[u+1]||u+1===i.length?u+=1:s=u:(o.pop(),u+=2):s=u;return-1!==s&&o.push(i.slice(s)),t.slice(0,t.length-n.length)+o.join("")}}function n(e,n){return t(e,n)||(-1!==e.indexOf(":")?e:t("./"+e,n))}function r(e,n,r,i,o){for(var c in e){var a=t(c,r)||c,f=e[c];if("string"==typeof f){var l=u(i,t(f,r)||f,o);l?n[a]=l:s("W1",c,f,"bare specifier did not resolve")}}}function i(e,t){if(t[e])return e;var n=e.length;do{var r=e.slice(0,n+1);if(r in t)return r}while(-1!==(n=e.lastIndexOf("/",n-1)))}function o(e,t){var n=i(e,t);if(n){var r=t[n];if(null===r)return;if(n.length>=e.length||"/"===r[r.length-1])return r+e.slice(n.length);s("W2",n,r,"should have a trailing '/'")}}function s(t,n,r,i){console.warn(e(t,"Package target "+i+", resolving target '"+r+"' for "+n))}function u(e,t,n){for(var r=e.scopes,s=n&&i(n,r);s;){var u=o(t,r[s]);if(u)return u;s=i(s.slice(0,s.lastIndexOf("/")),r)}return o(t,e.imports)||-1!==t.indexOf(":")&&t}function c(){this[E]={}}function a(e){return e.id}function f(e,t,n,r){if(e.onload(n,t.id,t.d&&t.d.map(a),!!r),n)throw n}function l(t,n,r){var i=t[E][n];if(i)return i;var o=[],s=Object.create(null);b&&Object.defineProperty(s,b,{value:"Module"});var u=Promise.resolve().then((function(){return t.instantiate(n,r)})).then((function(r){if(!r)throw Error(e(2,"Module "+n+" did not instantiate"));var u=r[1]((function(e,t){i.h=!0;var n=!1;if("string"==typeof e)e in s&&s[e]===t||(s[e]=t,n=!0);else{for(var r in e)t=e[r],r in s&&s[r]===t||(s[r]=t,n=!0);e&&e.__esModule&&(s.__esModule=e.__esModule)}if(n)for(var u=0;o.length>u;u++){var c=o[u];c&&c(s)}return t}),2===r[1].length?{import:function(e){return t.import(e,n)},meta:t.createContext(n)}:void 0);return i.e=u.execute||function(){},[r[0],u.setters||[]]}),(function(e){throw i.e=null,i.er=e,f(t,i,e,!0),e})),c=u.then((function(e){return Promise.all(e[0].map((function(r,i){var o=e[1][i];return Promise.resolve(t.resolve(r,n)).then((function(e){var r=l(t,e,n);return Promise.resolve(r.I).then((function(){return o&&(r.i.push(o),!r.h&&r.I||o(r.n)),r}))}))}))).then((function(e){i.d=e}))}));return i=t[E][n]={id:n,i:o,n:s,I:u,L:c,h:!1,d:void 0,e:void 0,er:void 0,E:void 0,C:void 0,p:void 0}}function d(){[].forEach.call(document.querySelectorAll("script"),(function(t){if(!t.sp)if("systemjs-module"===t.type){if(t.sp=!0,!t.src)return;System.import("import:"===t.src.slice(0,7)?t.src.slice(7):n(t.src,h)).catch((function(e){if(e.message.indexOf("https://git.io/JvFET#3")>-1){var n=document.createEvent("Event");n.initEvent("error",!1,!1),t.dispatchEvent(n)}return Promise.reject(e)}))}else if("systemjs-importmap"===t.type){t.sp=!0;var i=t.src?fetch(t.src,{integrity:t.integrity}).then((function(e){if(!e.ok)throw Error("Invalid status code: "+e.status);return e.text()})).catch((function(n){return n.message=e("W4","Error fetching systemjs-import map "+t.src)+"\n"+n.message,console.warn(n),"function"==typeof t.onerror&&t.onerror(),"{}"})):t.innerHTML;M=M.then((function(){return i})).then((function(i){!function(t,i,o){var s={};try{s=JSON.parse(i)}catch(u){console.warn(Error(e("W5","systemjs-importmap contains invalid JSON")+"\n\n"+i+"\n"))}!function(e,t,i){var o;for(o in e.imports&&r(e.imports,i.imports,t,i,null),e.scopes||{}){var s=n(o,t);r(e.scopes[o],i.scopes[s]||(i.scopes[s]={}),t,i,s)}for(o in e.depcache||{})i.depcache[n(o,t)]=e.depcache[o];for(o in e.integrity||{})i.integrity[n(o,t)]=e.integrity[o]}(s,o,t)}(L,i,t.src||h)}))}}))}var h,v="undefined"!=typeof Symbol,p="undefined"!=typeof self,m="undefined"!=typeof document,g=p?self:__webpack_require__.g;if(m){var y=document.querySelector("base[href]");y&&(h=y.href)}if(!h&&"undefined"!=typeof location){var w=(h=location.href.split("#")[0].split("?")[0]).lastIndexOf("/");-1!==w&&(h=h.slice(0,w+1))}var S,b=v&&Symbol.toStringTag,E=v?Symbol():"@",O=c.prototype;O.import=function(e,t){var n=this;return Promise.resolve(n.prepareImport()).then((function(){return n.resolve(e,t)})).then((function(e){var t=l(n,e);return t.C||function(e,t){return t.C=function e(t,n,r,i){if(!i[n.id])return i[n.id]=!0,Promise.resolve(n.L).then((function(){return n.p&&null!==n.p.e||(n.p=r),Promise.all(n.d.map((function(n){return e(t,n,r,i)})))})).catch((function(e){if(n.er)throw e;throw n.e=null,f(t,n,e,!1),e}))}(e,t,t,{}).then((function(){return function e(t,n,r){function i(){try{var e=n.e.call(x);if(e)return e=e.then((function(){n.C=n.n,n.E=null,f(t,n,null,!0)}),(function(e){throw n.er=e,n.E=null,f(t,n,e,!0),e})),n.E=e;n.C=n.n,n.L=n.I=void 0}catch(r){throw n.er=r,r}finally{n.e=null,f(t,n,n.er,!0)}}if(!r[n.id]){if(r[n.id]=!0,!n.e){if(n.er)throw n.er;return n.E?n.E:void 0}var o;return n.d.forEach((function(i){try{var s=e(t,i,r);s&&(o=o||[]).push(s)}catch(u){throw n.e=null,n.er=u,f(t,n,u,!1),u}})),o?Promise.all(o).then(i):i()}}(e,t,{})})).then((function(){return t.n}))}(n,t)}))},O.createContext=function(e){var t=this;return{url:e,resolve:function(n,r){return Promise.resolve(t.resolve(n,r||e))}}},O.onload=function(){},O.register=function(e,t){S=[e,t]},O.getRegister=function(){var e=S;return S=void 0,e};var x=Object.freeze(Object.create(null));g.System=new c;var j,P,M=Promise.resolve(),L={imports:{},scopes:{},depcache:{},integrity:{}},C=m;if(O.prepareImport=function(e){return(C||e)&&(d(),C=!1),M},m&&(d(),window.addEventListener("DOMContentLoaded",d)),m){window.addEventListener("error",(function(e){I=e.filename,W=e.error}));var R=location.origin}O.createScript=function(e){var t=document.createElement("script");t.async=!0,e.indexOf(R+"/")&&(t.crossOrigin="anonymous");var n=L.integrity[e];return n&&(t.integrity=n),t.src=e,t};var I,W,T={},A=O.register;O.register=function(e,t){if(m&&"loading"===document.readyState&&"string"!=typeof e){var n=document.querySelectorAll("script[src]"),r=n[n.length-1];if(r){j=e;var i=this;P=setTimeout((function(){T[r.src]=[e,t],i.import(r.src)}))}}else j=void 0;return A.call(this,e,t)},O.instantiate=function(t,n){var r=T[t];if(r)return delete T[t],r;var i=this;return Promise.resolve(O.createScript(t)).then((function(r){return new Promise((function(o,s){r.addEventListener("error",(function(){s(Error(e(3,"Error loading "+t+(n?" from "+n:""))))})),r.addEventListener("load",(function(){if(document.head.removeChild(r),I===t)s(W);else{var e=i.getRegister(t);e&&e[0]===j&&clearTimeout(P),o(e)}})),document.head.appendChild(r)}))}))},O.shouldFetch=function(){return!1},"undefined"!=typeof fetch&&(O.fetch=fetch);var J=O.instantiate,N=/^(text|application)\/(x-)?javascript(;|$)/;O.instantiate=function(t,n){var r=this;return this.shouldFetch(t)?this.fetch(t,{credentials:"same-origin",integrity:L.integrity[t]}).then((function(i){if(!i.ok)throw Error(e(7,i.status+" "+i.statusText+", loading "+t+(n?" from "+n:"")));var o=i.headers.get("content-type");if(!o||!N.test(o))throw Error(e(4,'Unknown Content-Type "'+o+'", loading '+t+(n?" from "+n:"")));return i.text().then((function(e){return 0>e.indexOf("//# sourceURL=")&&(e+="\n//# sourceURL="+t),(0,eval)(e),r.getRegister(t)}))})):J.apply(this,arguments)},O.resolve=function(n,r){return u(L,t(n,r=r||h)||n,r)||function(t,n){throw Error(e(8,"Unable to resolve bare specifier '"+t+(n?"' from "+n:"'")))}(n,r)};var _=O.instantiate;O.instantiate=function(e,t){var n=L.depcache[e];if(n)for(var r=0;n.length>r;r++)l(this,this.resolve(n[r],e),e);return _.call(this,e,t)},p&&"function"==typeof importScripts&&(O.instantiate=function(e){var t=this;return Promise.resolve().then((function(){return importScripts(e),t.getRegister(e)}))}),function(e){function t(t){return!e.hasOwnProperty(t)||!isNaN(t)&&e.length>t||a&&e[t]&&"undefined"!=typeof window&&e[t].parent===window}var n,r,i,o=e.System.constructor.prototype,s=o.import;o.import=function(o,u){return function(){for(var o in n=r=void 0,e)t(o)||(n?r||(r=o):n=o,i=o)}(),s.call(this,o,u)};var u=[[],function(){return{}}],c=o.getRegister;o.getRegister=function(){var o=c.call(this);if(o)return o;var s,a=function(o){var s,u,c=0;for(var a in e)if(!t(a)){if(0===c&&a!==n||1===c&&a!==r)return a;s?(i=a,u=o&&u||a):s=a===i,c++}return u}(this.firstGlobalProp);if(!a)return u;try{s=e[a]}catch(f){return u}return[[],function(e){return{execute:function(){e(s),e({default:s,__useDefault:!0})}}}]};var a="undefined"!=typeof navigator&&-1!==navigator.userAgent.indexOf("Trident")}("undefined"!=typeof self?self:__webpack_require__.g),function(e){var t=e.System.constructor.prototype,r=/^[^#?]+\.(css|html|json|wasm)([?#].*)?$/;t.shouldFetch=function(e){return r.test(e)};var i=/^application\/json(;|$)/,o=/^text\/css(;|$)/,s=/^application\/wasm(;|$)/,u=t.fetch;t.fetch=function(t,r){return u(t,r).then((function(r){if(!r.ok)return r;var u=r.headers.get("content-type");return i.test(u)?r.json().then((function(e){return new Response(new Blob(['System.register([],function(e){return{execute:function(){e("default",'+JSON.stringify(e)+")}}})"],{type:"application/javascript"}))})):o.test(u)?r.text().then((function(e){return e=e.replace(/url\(\s*(?:(["'])((?:\\.|[^\n\\"'])+)\1|((?:\\.|[^\s,"'()\\])+))\s*\)/g,(function(e,r,i,o){return"url("+r+n(i||o,t)+r+")"})),new Response(new Blob(["System.register([],function(e){return{execute:function(){var s=new CSSStyleSheet();s.replaceSync("+JSON.stringify(e)+');e("default",s)}}})'],{type:"application/javascript"}))})):s.test(u)?(WebAssembly.compileStreaming?WebAssembly.compileStreaming(r):r.arrayBuffer().then(WebAssembly.compile)).then((function(n){e.System.wasmModules||(e.System.wasmModules=Object.create(null)),e.System.wasmModules[t]=n;var r=[],i=[];return WebAssembly.Module.imports&&WebAssembly.Module.imports(n).forEach((function(e){var t=JSON.stringify(e.module);-1===r.indexOf(t)&&(r.push(t),i.push("function(m){i["+t+"]=m}"))})),new Response(new Blob(["System.register(["+r.join(",")+"],function(e){var i={};return{setters:["+i.join(",")+"],execute:function(){return WebAssembly.instantiate(System.wasmModules["+JSON.stringify(t)+"],i).then(function(m){e(m.exports)})}}})"],{type:"application/javascript"}))})):r}))}}("undefined"!=typeof self?self:__webpack_require__.g);var k="undefined"!=typeof Symbol&&Symbol.toStringTag;O.get=function(e){var t=this[E][e];if(t&&null===t.e&&!t.E)return t.er?null:t.n},O.set=function(t,n){try{new URL(t)}catch(s){console.warn(Error(e("W3",'"'+t+'" is not a valid URL to set in the module registry')))}var r;k&&"Module"===n[k]?r=n:(r=Object.assign(Object.create(null),n),k&&Object.defineProperty(r,k,{value:"Module"}));var i=Promise.resolve(r),o=this[E][t]||(this[E][t]={id:t,i:[],h:!1,d:[],e:null,er:void 0,E:void 0});return!o.e&&!o.E&&(Object.assign(o,{n:r,I:void 0,L:void 0,C:i}),r)},O.has=function(e){return!!this[E][e]},O.delete=function(e){var t=this[E],n=t[e];if(!n||n.p&&null!==n.p.e||n.E)return!1;var r=n.i;return n.d&&n.d.forEach((function(e){var t=e.i.indexOf(n);-1!==t&&e.i.splice(t,1)})),delete t[e],function(){var n=t[e];if(!n||!r||null!==n.e||n.E)return!1;r.forEach((function(e){n.i.push(e),e(n.n)})),r=null}};var U="undefined"!=typeof Symbol&&Symbol.iterator;O.entries=function(){var e,t,n=this,r=Object.keys(n[E]),i=0,o={next:function(){for(;void 0!==(t=r[i++])&&void 0===(e=n.get(t)););return{done:void 0===t,value:void 0!==t&&[t,e]}}};return o[U]=function(){return this},o}}();
//# sourceMappingURL=system.min.js.map


/***/ }),

/***/ 32064:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "t0": () => (/* binding */ SHOP_LINKS),
  "Fp": () => (/* binding */ THApi),
  "Xo": () => (/* binding */ apiHost),
  "CA": () => (/* binding */ currencyUnit),
  "P$": () => (/* binding */ defaultCollectionsIds),
  "ZH": () => (/* binding */ faqHost),
  "NV": () => (/* binding */ map4id2productAlias),
  "IR": () => (/* binding */ map4productLinks),
  "Yd": () => (/* binding */ shopifyConfig)
});

// UNUSED EXPORTS: regionConfig

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js + 3 modules
var slicedToArray = __webpack_require__(95266);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js
var reduce = __webpack_require__(53706);
var reduce_default = /*#__PURE__*/__webpack_require__.n(reduce);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/values.js
var values = __webpack_require__(31082);
var values_default = /*#__PURE__*/__webpack_require__.n(values);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/entries.js
var entries = __webpack_require__(39290);
var entries_default = /*#__PURE__*/__webpack_require__.n(entries);
;// CONCATENATED MODULE: ./app/web/component/layout/index/config/product-id-settings.js
// pace3 ek shopify id
var ID_SETTING_FOR_PACE3_EK = {
  us: '7961354698964',
  eu: '8441823002892',
  es: '8425752527116',
  de: '8425753051404',
  uk: '8701482533183',
  fr: '8501680472398',
  ca: '8090467369184',
  jp: '7382060564653',
  au: '7971770794138'
};

// vertix2s shopify id
var ID_SETTING_FOR_VERTIX2S = {
  us: '8223990907092',
  eu: '8693793259788',
  es: '8718299758860',
  de: '8718301331724',
  uk: '9269555331391',
  fr: '8843292639566',
  ca: '8370441388256',
  jp: '7626294821037',
  au: '8146030657690'
};

// dura shopify id
var ID_SETTING_FOR_DURA = {
  us: '8462293991636',
  eu: '8837678072076',
  es: '8837684461836',
  de: '8837692850444',
  uk: '9537430978879',
  fr: '8959070077262',
  ca: '8547061072096',
  jp: '7784264794285',
  au: '8264081047706'
};
function injectProductsIdSetting(_shopifyConfig) {
  for (var key in _shopifyConfig) {
    _shopifyConfig[key].products['pace3_ek'] = ID_SETTING_FOR_PACE3_EK[key];
    _shopifyConfig[key].products['vertix2s'] = ID_SETTING_FOR_VERTIX2S[key];
    _shopifyConfig[key].products['dura'] = ID_SETTING_FOR_DURA[key];
  }
  return _shopifyConfig;
}
;// CONCATENATED MODULE: ./app/web/component/layout/index/config/index.js

var _context;





var faqHost = {
  local: 'http://127.0.0.1:7001',
  test: 'https://webtestfaq.coros.com',
  usTest: 'https://webtestus-faq.coros.com',
  prod: 'https://faq.coros.com'
};
var apiHost = {
  rg1: 'https://opencn.coros.com',
  rg101: 'https://opencntest.coros.com',
  rg2: 'https://openus.coros.com',
  rg102: 'https://openustest.coros.com',
  rg3: 'https://openeu.coros.com',
  rg103: 'https://openeutest.coros.com'
};
var THApi = {
  devCnTest: {
    BASE_URL: 'https://teamcnapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 102,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region'
  },
  devEnTest: {
    BASE_URL: 'https://teamapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 101,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region'
  },
  devEuTest: {
    BASE_URL: 'https://teameuapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 103,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region'
  },
  devCn: {
    BASE_URL: 'https://teamcnapi.coros.com',
    LANG_TYPE: 1,
    REGION: 2,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region'
  },
  devEn: {
    BASE_URL: 'https://teamapi.coros.com',
    LANG_TYPE: 1,
    REGION: 1,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region'
  },
  devEu: {
    BASE_URL: 'https://teameuapitest.coros.com',
    LANG_TYPE: 1,
    REGION: 103,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region'
  },
  buildCnTest: {
    BASE_URL: 'https://teamcnapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 102,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region',
    OSSREGION: 'cn'
  },
  buildEnTest: {
    BASE_URL: 'https://teamapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 101,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region',
    OSSREGION: 'en'
  },
  buildEuTest: {
    BASE_URL: 'https://teameuapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 103,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region',
    OSSREGION: 'en'
  },
  buildCn: {
    BASE_URL: 'https://teamcnapi.coros.com',
    LANG_TYPE: 1,
    REGION: 2,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region',
    OSSREGION: 'cn'
  },
  buildEn: {
    BASE_URL: 'https://teamapi.coros.com',
    LANG_TYPE: 1,
    REGION: 1,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region',
    OSSREGION: 'en'
  },
  buildEu: {
    BASE_URL: 'https://teameuapitest.coros.com',
    LANG_TYPE: 1,
    REGION: 103,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region',
    OSSREGION: 'en'
  },
  startCnTest: {
    BASE_URL: 'https://teamcnapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 102,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region',
    OSSREGION: 'cn'
  },
  startEnTest: {
    BASE_URL: 'https://teamapitest.coros.com',
    LANG_TYPE: 3,
    REGION: 101,
    TOKEN: 'CPL-test-coros-token',
    CREGION: 'CPL-test-coros-region',
    OSSREGION: 'en'
  },
  startCn: {
    BASE_URL: 'https://teamcnapi.coros.com',
    LANG_TYPE: 1,
    REGION: 2,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region',
    OSSREGION: 'cn'
  },
  startEn: {
    BASE_URL: 'https://teamapi.coros.com',
    LANG_TYPE: 1,
    REGION: 1,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region',
    OSSREGION: 'en'
  },
  startEu: {
    BASE_URL: 'https://teameuapitest.coros.com',
    LANG_TYPE: 1,
    REGION: 103,
    TOKEN: 'CPL-coros-token',
    CREGION: 'CPL-coros-region',
    OSSREGION: 'en'
  }
};
var regionConfig = {
  1: {
    api: 'https://api.coros.com',
    usercenter: 'https://usercenter.coros.com'
  },
  2: {
    api: 'https://apicn.coros.com',
    usercenter: 'https://usercentercn.coros.com'
  },
  3: {
    api: 'https://apieu.coros.com',
    usercenter: 'https://usercentercn.coros.com'
  },
  101: {
    api: 'https://apitest.coros.com',
    usercenter: 'https://usercenter.coros.com'
  },
  102: {
    api: 'https://apicntest.coros.com',
    usercenter: 'https://usercentercn.coros.com'
  },
  103: {
    api: 'https://apieutest.coros.com',
    usercenter: 'https://usercentercn.coros.com'
  }
};
var shopifyConfig4jp = {
  domain: 'corosjp.myshopify.com',
  storefrontAccessToken: 'aed17babff88f3f1c48271b7291625a0',
  moneyFormat: '%24%7B%7Bamount%7D%7D',
  products: {
    bag: '7433498034349',
    carabiner: '7349215756461',
    vertix2: '6938440040621',
    apex2: '7291878047917',
    pace2: '5996665143469',
    pod2: '7291880964269',
    hrm: '7369078898861',
    pace3: '7382060564653',
    chamonix: '7378652037293'
  }
};
var shopifyConfig4au = {
  domain: 'coros-australia.myshopify.com',
  storefrontAccessToken: 'f6daecf4a6fdcc4d50e71a77a7b946b4',
  moneyFormat: '%24%7B%7Bamount%7D%7D',
  products: {
    bag: '7982050934938',
    carabiner: '7971773153434',
    vertix2: '7061457469594',
    apex2: '7589697945754',
    pace2: '7032316657818',
    pod2: '7594284449946',
    chamonix: '7971793272986',
    hrm: '7971769745562',
    pace3: '7971770794138'
  }
};
var shopifyConfig4eu = {
  domain: 'shop-eu.coros.com',
  storefrontAccessToken: '265f2b3cf58a140fc00989bc37d6a50b',
  moneyFormat: '%24%7B%7Bamount%7D%7D',
  products: {
    bag: '8494464598284',
    carabiner: '8441805078796',
    vertix2: '8441825034508',
    apex2: '8441819922700',
    pace2: '8441825624332',
    pod2: '8441801539852',
    mug: '8441807241484',
    kilian: '8199850623244',
    chamonix: '8441811632396',
    hrm: '8441796034828',
    valencia: '8386621964556',
    pace3: '8441823002892'
  }
};

// ES
var shopifyConfig4es = {
  domain: 'coroswearablesbv.myshopify.com',
  storefrontAccessToken: '265f2b3cf58a140fc00989bc37d6a50b',
  moneyFormat: '%24%7B%7Bamount%7D%7D',
  products: {
    bag: '8497187520780',
    carabiner: '8336388718860',
    vertix2: '8127256559884',
    apex2: '8127333859596',
    pace2: '8127146066188',
    pod2: '8127358730508',
    mug: '8160853262604',
    kilian: '8199850623244',
    chamonix: '8414830821644',
    hrm: '8396004851980',
    valencia: '8386621964556',
    pace3: '8425752527116'
  },
  collections: {
    vertix2: '482295185676',
    pace2: '402001854676',
    lifestyle: '402001920212'
  }
};
var shopifyConfig4de = {
  domain: 'shop-de.coros.com',
  storefrontAccessToken: '265f2b3cf58a140fc00989bc37d6a50b',
  moneyFormat: '%24%7B%7Bamount%7D%7D',
  products: {
    bag: '8497191289100',
    vertix2: '8360985624844',
    apex2: '8360975335692',
    pace2: '8360980349196',
    pod2: '8360960524556',
    kilian: '8360974614796',
    chamonix: '8414831804684',
    mug: '8360973926668',
    carabiner: '8360969502988',
    hrm: '8396004786444',
    pace3: '8425753051404'
  }
};
var shopifyConfig4fr = {
  domain: 'corosfrance.myshopify.com',
  storefrontAccessToken: '70a08b1ce26ae660751e6b81b9330e93',
  moneyFormat: '%24%7B%7Bamount%7D%7D',
  products: {
    bag: '8608766230862',
    carabiner: '8390819971406',
    vertix2: '8039189774640',
    apex2: '8039207829808',
    pace2: '8039152681264',
    pod2: '8039216152880',
    mug: '8067041067312',
    kilian: '8095565676848',
    chamonix: '8479548768590',
    hrm: '8454621364558',
    pace3: '8501680472398'
  },
  collections: {
    vertix2: '402001658068',
    pace2: '402001854676',
    lifestyle: '402001920212'
  }
};

// 全部配件合集, www/bag/index.vue 使用
var defaultCollectionsIds = {
  us: '413133504724',
  ca: '418632859872',
  uk: '459601740095',
  es: '498569543948',
  fr: '605964108110',
  jp: '294452986029',
  de: '498569642252',
  eu: '498915639564',
  au: '296708079770'
};
// 新 id 都在 injectProductsIdSetting 里面加
var _shopifyConfig = injectProductsIdSetting({
  eu: shopifyConfig4eu,
  fr: shopifyConfig4fr,
  es: shopifyConfig4es,
  de: shopifyConfig4de,
  au: shopifyConfig4au,
  us: {
    domain: 'coroswearables.myshopify.com',
    storefrontAccessToken: 'e39fdedb2cf10edf4ed48b330608f246',
    moneyFormat: '%24%7B%7Bamount%7D%7D',
    products: {
      bag: '7977889824980',
      carabiner: '7903737905364',
      loaner: '7886056685780',
      oc: '7889441521876',
      vertix2: '7011141845154',
      vertix: '3538665341021',
      apexPro: '3820040749149',
      apex: '1478742835293',
      apex2: '7803407761620',
      pace2: '5630374936738',
      pace2Molly: '7765442822356',
      pod: '4367147663453',
      pod2: '7791518187732',
      vertix2Carabiner: '7164779364514',
      vertix2NylonBand: '7500347408596',
      vertix2SiliconeBand: '7012910301346',
      vertixSiliconeBand: '3548931129437',
      vertixNylonBand: '5484099993762',
      apexProSiliconeBand: '1478780190813',
      apexProNylonBand: '5484133712034',
      pace2NylonBand: '5615498657954',
      pace2SiliconeBand: '4597172633693',
      paceSiliconeBand: '1303316889693',
      paceChargingCable: '1321603661917',
      chargingCable: '1478802079837',
      watchCharger: '6760955510946',
      armSleeve: '6950937755810',
      giftCard: '3520181829725',
      meshRunCap: '5785431474338',
      shirtShortSleeve_men: '4478810194013',
      shirtShortSleeve_women: '4478875959389',
      visor: '1990117589085',
      logoSticker: '1990115098717',
      exploreperfection: '4509171187805',
      keychainWatchCharger: '6760955510946',
      mug: '7843951608020',
      kilian: '7856769597652',
      chamonix: '7954150621396',
      hrm: '7939556704468',
      pace3: '7961354698964'
    },
    collections: {
      vertix2: '402001658068',
      vertix: '402001756372',
      apexPro: '402001821908',
      apex46: '402001821908',
      apex42: '402001854676',
      pace2: '402001854676',
      lifestyle: '402001920212'
    }
  },
  uk: {
    domain: 'coros-uk-8112.myshopify.com',
    storefrontAccessToken: 'b93802e9da11481bb5870ed238ab7b91',
    moneyFormat: '%C2%A3%7B%7Bamount%7D%7D',
    products: {
      bag: '9006872166719',
      carabiner: '8342121349439',
      vertix2: '8092181922111',
      apex2: '8092178284863',
      pace2: '8092152332607',
      pod2: '8092194177343',
      kilian: '8214918562111',
      chamonix: '8632064344383',
      hrm: '8531710017855',
      pace3: '8701482533183',
      mug: '8497198006591'
      // vertix: '5663502893210',
      // apexPro: '5663503417498',
      // apex: '5663501353114',
      // pace2Molly: '7239396786359',
      // pod: '5670779420826',
      // vertix2Carabiner: '7541217853664',
      // vertix2NylonBand: '7550952997088',
      // vertix2SiliconeBand: '6661724110910',
      // vertixSiliconeBand: '5663503319194',
      // vertixNylonBand: '5663509020826',
      // vertixChargePortCovers: '6578620760126',
      // apexProSiliconeBand: '5663502270618',
      // apexProNylonBand: '5663509184666',
      // apexChargePortCovers: '6578622824510',
      // pace2NylonBand: '5663509971098',
      // pace2SiliconeBand: '5663508725914',
      // pace2ChargePortCovers: '6578622824510',
      // paceSiliconeBand: '4370554683454',
      // paceChargingCable: '4370552684606',
      // chargingCable: '5663502368922',
      // keychainWatchCharger: '6775362289847',
      // armSleeve: '6633660121150',
      // giftCard: '4633538461758',
      // meshRunCap: '5785431474338',
      // shirtShortSleeve_men: '6572787826750',
      // shirtShortSleeve_women: '6572788908094',
      // visor: '7475978862816',
      // logoSticker: '1990115098717',
      // exploreperfection: '4509171187805',
    }
  },
  ca: {
    domain: 'coros-canada.myshopify.com',
    storefrontAccessToken: 'fb31dfb9e01d75fa793b9e63bef27dce',
    moneyFormat: '%24%7B%7Bamount%7D%7D',
    products: {
      bag: '8162859024608',
      carabiner: '8039684505824',
      vertix2: '6647967940670',
      vertix: '4370411978814',
      apexPro: '4370454741054',
      apex: '4370461065278',
      apex2: '7919081947360',
      pace2: '4675836248126',
      pace2Molly: '7928980340960',
      pod: '4370561040446',
      pod2: '7895789306080',
      vertix2Carabiner: '7541217853664',
      vertix2NylonBand: '7550952997088',
      vertix2SiliconeBand: '6661724110910',
      vertixSiliconeBand: '4370510020670',
      vertixNylonBand: '4655468281918',
      vertixChargePortCovers: '6578620760126',
      apexProSiliconeBand: '4370539413566',
      apexProNylonBand: '4655470936126',
      apex46ChargePortCovers: '5591719215266',
      pace2NylonBand: '4675828547646',
      pace2SiliconeBand: '4613917868094',
      pace2ChargePortCovers: '6578622824510',
      paceSiliconeBand: '4370554683454',
      paceChargingCable: '4370552684606',
      chargingCable: '4370550489150',
      watchCharger: '6760955510946',
      armSleeve: '6633660121150',
      giftCard: '4633538461758',
      meshRunCap: '6572785827902',
      shirtShortSleeve_men: '6572787826750',
      shirtShortSleeve_women: '6572788908094',
      visor: '7475978862816',
      logoSticker: '1990115098717',
      exploreperfection: '4509171187805',
      keychainWatchCharger: '6586221953086',
      mug: '7971005661408',
      kilian: '7984128688352',
      chamonix: '8083184713952',
      hrm: '8068873060576',
      pace3: '8090467369184'
    }
  },
  jp: shopifyConfig4jp
});
var shopifyConfig = _shopifyConfig;
var map4id2productAlias = reduce_default()(_context = values_default()(shopifyConfig)).call(_context, function (acc, item) {
  var _context2;
  for_each_default()(_context2 = entries_default()(item.products)).call(_context2, function (entry) {
    var _entry = (0,slicedToArray/* default */.Z)(entry, 2),
      key = _entry[0],
      value = _entry[1];
    acc[value] = key;
  });
  return acc;
}, {});
var map4productLinks = {
  vertix2: '/vertix2',
  vertix: '/vertix',
  apexPro: '/apex-pro',
  apex: '/apex',
  apex2: '/apex2',
  pace2: '/pace2',
  pace2Molly: '/molly',
  pod: '/pod',
  pod2: '/pod2',
  mug: '/progress',
  kilian: '/kilian',
  chamonix: '/chamonix',
  loaner: '/loaner',
  valencia: '/loaner/valencia',
  carabiner: '/carabiner',
  hrm: '/heart-rate-monitor',
  pace3: '/pace3',
  pace3_ek: '/pace3',
  pace3valencia: '/pace3',
  vertix2s: '/vertix2s',
  dura: '/dura'
};
var currencyUnit = {
  us: '$',
  ca: '$',
  uk: '£',
  de: '€',
  fr: '€',
  es: '€',
  eu: '€',
  jp: '￥',
  au: 'A$'
};
var SHOP_LINKS = {
  de: 'https://www.enjoyyourbike.com/COROS:.:350.html',
  cn: {
    vertix2s: 'https://detail.tmall.com/item.htm?id=786985369292',
    vertix2: 'https://detail.tmall.com/item.htm?id=653064205928',
    pod: 'https://detail.tmall.com/item.htm?spm=a1z10.5-b-s.w4011-23086932263.66.1f2972b89cty5s&id=599475427202&rn=ddb9794c405cd91a079d1b6ef7dc7b55&abbucket=8',
    vertix: 'https://detail.tmall.com/item.htm?spm=a212k0.12153887.0.0.4e60687dnWscpD&id=594510411754',
    pace2: 'https://detail.tmall.com/item.htm?spm=a212k0.12153887.0.0.4e60687dnWscpD&id=625610450950',
    'pace2-molly': 'https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w5003-23093449602.4.22fad3251ma6OD&id=674291277120',
    apex: 'https://detail.tmall.com/item.htm?spm=a212k0.12153887.0.0.4e60687dnWscpD&id=570277286468',
    apexPro: 'https://detail.tmall.com/item.htm?id=602859789991',
    pod2: 'https://detail.tmall.com/item.htm?app=chrome,chrome&bxsign=scdRGzgglCB4RlMJbIUv3f2QguEHVTurw2ljffAIBBthSzEi9wH4fUbABQQyOFBQG0SDkIahYnDUJd-CGmSaWV-LeS5puc9lCl0vxEHBOd5I31nGLAvUMdu6cucTlGGVgyP,scdRGzgglCB4RlMJbIUv3f2QguEHVTurw2ljffAIBBthSzEi9wH4fUbABQQyOFBQG0SDkIahYnDUJd-CGmSaWV-LeS5puc9lCl0vxEHBOd5I31nGLAvUMdu6cucTlGGVgyP&cpp=1,1&id=685194366312&price=9999,9999&share_crt_v=1,1&shareurl=true,true&short_name=h.UflYKzh,h.UflYKzh&sourceType=item,item,item,item&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid,gray_ShareGlobalNavigation_1_code_simpleAndroid&sp_tk=cmJFOGRhSmY2OEQ=,cmJFOGRhSmY2OEQ=&spm=a2159r.13376460.0.0,a2159r.13376460.0.0&suid=ecec2725-a193-479d-a723-07143929311b,ecec2725-a193-479d-a723-07143929311b&tbSocialPopKey=shareItem,shareItem&un=fb781d1137c34dc77bc9097ac7465126,fb781d1137c34dc77bc9097ac7465126&un_site=0,0&ut_sk=1.YOxszcRVGpQDAC8IBomccyku_21646297_1666835834719.Copy.ShareGlobalNavigation_1,1.YOxszcRVGpQDAC8IBomccyku_21646297_1666835834719.Copy.ShareGlobalNavigation_1&skuId=4901269937333',
    apex2: 'https://detail.tmall.com/item_o.htm?spm=a212z9.21433626.0.0.a35d2fea1NMUHH&releaseId=318828&bucketId=447258&id=685499995671',
    hrm: 'https://detail.tmall.com/item.htm?id=730520248492&spm=a21dvs.23580594.0.0.4d563d0dNA94Xd&skuld=5065227949365',
    dura: 'https://detail.tmall.com/item.htm?spm=a21dvs.23580594.0.0.1d293d0d8R9Mfm&id=792957425601',
    pace3: 'https://detail.tmall.com/item.htm?id=735191125564&skuId=5251940298690&spm=a21dvs.23580594.0.0.1d293d0dQ2cmwu'
  }
};

/***/ }),

/***/ 92154:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "YX": () => (/* binding */ resizeCb),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   "aT": () => (/* binding */ data)
/* harmony export */ });
/* harmony import */ var _babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(92381);
/* harmony import */ var _babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23279);
/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _component_layout_index_config_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32064);
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(91317);
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);
var _globalThis$addEventL;




var data = new (vue__WEBPACK_IMPORTED_MODULE_3___default())({
  data: function data() {
    return {
      innerWidth: ((_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0___default()) === null || (_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0___default()) === void 0 ? void 0 : (_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0___default().innerWidth)) || 1920,
      isShopAreaAvailable: true,
      mainHeaderIsCollapsed: false,
      mainHeaderAnimating: false,
      initHeight4mainHeader: 0,
      localeSwitchChange: false,
      country: '',
      loadingCart: false,
      cart: {
        lines: []
      }
    };
  },
  computed: {
    isMobile: function isMobile() {
      return this.innerWidth <= 750;
    },
    isPad: function isPad() {
      return this.innerWidth <= 834;
    },
    priceUnit: function priceUnit() {
      return _component_layout_index_config_index_js__WEBPACK_IMPORTED_MODULE_2__/* .currencyUnit */ .CA[this.country || 'us'];
    },
    isCn: function isCn() {
      return this.country === 'cn';
    },
    isUs: function isUs() {
      return this.country === 'us';
    },
    isCa: function isCa() {
      return this.country === 'ca';
    },
    isDe: function isDe() {
      return this.country === 'de';
    },
    isEs: function isEs() {
      return this.country === 'es';
    },
    isFr: function isFr() {
      return this.country === 'fr';
    },
    isUk: function isUk() {
      return this.country === 'uk';
    },
    isJp: function isJp() {
      return this.country === 'jp';
    },
    isAu: function isAu() {
      return this.country === 'au';
    }
  }
});
var resizeCb = function resizeCb() {
  data.innerWidth = innerWidth;
  var basisFontSize = Math.max(14, data.innerWidth / 750 * 24);
  document.documentElement.style.setProperty('--basis-font-size', "".concat(basisFontSize, "px"));
};
var debounceResizeCb = lodash_debounce__WEBPACK_IMPORTED_MODULE_1___default()(function () {
  resizeCb();
}, 100);
(_globalThis$addEventL = (_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0___default().addEventListener)) === null || _globalThis$addEventL === void 0 || _globalThis$addEventL.call((_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_0___default()), 'resize', debounceResizeCb);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
  install: function install(Vue) {
    if (Vue.prototype.hasOwnProperty('$dataBus')) return;
    Vue.prototype.$dataBus = data;
  }
});

/***/ }),

/***/ 11085:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "FV": () => (/* binding */ parseOssUrl),
/* harmony export */   "ZP": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony export parseLqipUrl */
/* harmony import */ var _babel_runtime_corejs3_helpers_typeof__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(19623);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(64043);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(57267);
/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(51791);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92381);
/* harmony import */ var _babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_parse_int__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(34300);
/* harmony import */ var _babel_runtime_corejs3_core_js_parse_int__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_parse_int__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _helper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7301);







function initLazyLoad(el, name, val) {
  el.setAttribute(name, val);
  //   重新触发懒加载 https://github.com/aFarkas/lazysizes/issues/46
  el.classList.add('lazyload');
}
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(el, binding) {
  var _context;
  if (_babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context = ['IMG', 'SOURCE']).call(_context, el.tagName) === -1) return;
  var oldLazyLoadVal = binding.oldValue;
  var lazyLoadVal = binding.value;
  if (oldLazyLoadVal !== lazyLoadVal) {
    var directiveArg = (0,_babel_runtime_corejs3_helpers_typeof__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(binding.arg) === 'object' ? binding.arg : {};
    var _directiveArg$targetA = directiveArg.targetAttr,
      targetAttr = _directiveArg$targetA === void 0 ? 'data-src' : _directiveArg$targetA,
      _directiveArg$quality = directiveArg.quality,
      quality = _directiveArg$quality === void 0 ? 80 : _directiveArg$quality,
      _directiveArg$lazyloa = directiveArg.lazyload,
      lazyload = _directiveArg$lazyloa === void 0 ? true : _directiveArg$lazyloa,
      _directiveArg$preferC = directiveArg.preferClientHeight,
      preferClientHeight = _directiveArg$preferC === void 0 ? false : _directiveArg$preferC;
    var _directiveArg$width = directiveArg.width,
      width = _directiveArg$width === void 0 ? 'auto' : _directiveArg$width,
      _directiveArg$height = directiveArg.height,
      height = _directiveArg$height === void 0 ? 'auto' : _directiveArg$height;
    if (preferClientHeight) {
      height = getComputedStyle(getContainer(el)).height.replace('px', '');
      width = 'auto';
    } else if (width === 'auto' && height === 'auto' && el.parentNode) {
      width = getComputedStyle(getContainer(el)).width.replace('px', '');
    }
    var _binding$modifiers$we = binding.modifiers.webp,
      webp = _binding$modifiers$we === void 0 ? false : _binding$modifiers$we;
    var imgUrl = parseOssUrl(lazyLoadVal, webp, quality, width, height);
    if (lazyload) {
      var _el$parentNode;
      var lqipImgUrl = parseLqipUrl(lazyLoadVal, webp, quality, width, height);
      if (((_el$parentNode = el.parentNode) === null || _el$parentNode === void 0 ? void 0 : _el$parentNode.tagName) === 'PICTURE') {
        if (el.tagName === 'IMG') {
          var _el$parentNode2;
          if ((_el$parentNode2 = el.parentNode) !== null && _el$parentNode2 !== void 0 && _el$parentNode2.querySelector('source')) {
            el.setAttribute(targetAttr.replace('data-', ''), lqipImgUrl);
          } else {
            initLazyLoad(el, targetAttr, lqipImgUrl);
          }
        } else {
          initLazyLoad(el, targetAttr, imgUrl);
        }
      } else {
        el.setAttribute(targetAttr.replace('data-', ''), lqipImgUrl);
        initLazyLoad(el, targetAttr, imgUrl);
      }
    } else {
      el.setAttribute(targetAttr.replace('data-', ''), imgUrl);
    }
  }
}

/**
 * 将原始图片地址解析成经过oss处理的图片地址（缩放、格式转换等）
 * @param {String} originalUrl 原始图片地址
 * @param {Boolean} webp 是否转换为webp
 * @param {Number} quality 转换后的图片质量
 * @param {Number} width 图片宽度
 * @param {Number} height 图片高度
 * @returns {String} 转换后的图片地址
 */
function parseOssUrl(originalUrl, webp, quality, width, height) {
  if (false) {}
  var widthVal = normalizeSize(width) * ((_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default().devicePixelRatio) || 1);
  var heightVal = normalizeSize(height) * ((_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default().devicePixelRatio) || 1);
  // 缩放裁剪服务只支持整数
  widthVal = _babel_runtime_corejs3_core_js_parse_int__WEBPACK_IMPORTED_MODULE_4___default()(widthVal);
  heightVal = _babel_runtime_corejs3_core_js_parse_int__WEBPACK_IMPORTED_MODULE_4___default()(heightVal);
  return _helper__WEBPACK_IMPORTED_MODULE_5__/* ["default"].getOssImageHandleUrl */ .Z.getOssImageHandleUrl(originalUrl, widthVal, heightVal, webp, quality);
}
function parseLqipUrl(rawUrl, webp, quality, width, height) {
  return parseOssUrl(rawUrl, webp, quality, normalizeSize(normalizeSize(width) / 5), normalizeSize(normalizeSize(height) / 5));
}

/**
 * 标准化大小数据
 * @param {String|Number} size 原始大小
 * @returns Number 处理后的大小
 */
function normalizeSize(size) {
  if (size === 'auto') return 0;
  return _babel_runtime_corejs3_core_js_parse_int__WEBPACK_IMPORTED_MODULE_4___default()(size);
}
function getContainer(el) {
  var parent = el.parentNode;
  return parent.tagName === 'PICTURE' ? getContainer(parent) : parent;
}

/***/ }),

/***/ 7301:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_corejs3_helpers_typeof__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(19623);
/* harmony import */ var _babel_runtime_corejs3_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(68420);
/* harmony import */ var _babel_runtime_corejs3_helpers_createClass__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(27344);
/* harmony import */ var core_js_modules_es_error_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(68932);
/* harmony import */ var core_js_modules_es_error_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_error_to_string_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30024);
/* harmony import */ var core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64043);
/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22462);
/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es_string_substr_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20372);
/* harmony import */ var core_js_modules_es_string_substr_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_substr_js__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_web_btoa_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(84645);
/* harmony import */ var core_js_modules_web_btoa_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_btoa_js__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var core_js_modules_web_dom_exception_constructor_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(97337);
/* harmony import */ var core_js_modules_web_dom_exception_constructor_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_exception_constructor_js__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var core_js_modules_web_dom_exception_stack_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(13429);
/* harmony import */ var core_js_modules_web_dom_exception_stack_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_exception_stack_js__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var core_js_modules_web_dom_exception_to_string_tag_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(37462);
/* harmony import */ var core_js_modules_web_dom_exception_to_string_tag_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_exception_to_string_tag_js__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(8571);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(51791);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_last_index_of__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(19178);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_last_index_of__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_last_index_of__WEBPACK_IMPORTED_MODULE_11__);















var SALT = 'EtsPYVgTCk184RxjLveofpW0BIMNn2wr';
var Helper = /*#__PURE__*/function () {
  function Helper() {
    (0,_babel_runtime_corejs3_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z)(this, Helper);
  }
  return (0,_babel_runtime_corejs3_helpers_createClass__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z)(Helper, [{
    key: "getImgSrcset",
    value: function getImgSrcset(fileName) {
      var name = fileName.split('.');
      if (name.length !== 2) {
        return '';
      }
      var result = '';
      for (var n = 1; n <= 3; n++) {
        var _context3, _context4, _context5;
        if (n === 1) {
          var _context, _context2;
          result += _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context2 = "".concat(name[0], ".")).call(_context2, name[1], " ")).call(_context, n, "x, ");
          continue;
        }
        result += _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context3 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context4 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context5 = "".concat(name[0], "@")).call(_context5, n, "x.")).call(_context4, name[1], " ")).call(_context3, n, "x, ");
      }
      result = result.substr(0, result.length - 2);
      return result;
    }
  }, {
    key: "getOS",
    value: function getOS() {
      var _context6;
      var sUserAgent = navigator.userAgent;
      var isWin = navigator.platform == 'Win32' || navigator.platform == 'Windows';
      var isMac = navigator.platform == 'Mac68K' || navigator.platform == 'MacPPC' || navigator.platform == 'Macintosh' || navigator.platform == 'MacIntel';
      if (isMac) return 'Mac';
      var isUnix = navigator.platform == 'X11' && !isWin && !isMac;
      if (isUnix) return 'Unix';
      var isLinux = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(_context6 = String(navigator.platform)).call(_context6, 'Linux') > -1;
      if (isLinux) return 'Linux';
      if (isWin) {
        var isWin2K = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows NT 5.0') > -1 || _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows 2000') > -1;
        if (isWin2K) return 'Win2000';
        var isWinXP = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows NT 5.1') > -1 || _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows XP') > -1;
        if (isWinXP) return 'WinXP';
        var isWin2003 = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows NT 5.2') > -1 || _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows 2003') > -1;
        if (isWin2003) return 'Win2003';
        var isWinVista = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows NT 6.0') > -1 || _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows Vista') > -1;
        if (isWinVista) return 'WinVista';
        var isWin7 = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows NT 6.1') > -1 || _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows 7') > -1;
        if (isWin7) return 'Win7';
        var isWin10 = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows NT 10') > -1 || _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(sUserAgent).call(sUserAgent, 'Windows 10') > -1;
        if (isWin10) return 'Win10';
      }
      return 'other';
    }
  }, {
    key: "getOssImageHandleUrl",
    value: function getOssImageHandleUrl(url) {
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
      var isSupportWebp = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
      var quality = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 80;
      try {
        // 判断文件格式
        //获取最后一个.的位置
        var index = _babel_runtime_corejs3_core_js_instance_last_index_of__WEBPACK_IMPORTED_MODULE_11___default()(url).call(url, '.');
        //获取后缀
        var ext = url.substr(index + 1);
        var supportArr = ['png', 'jpg', 'jpeg', 'webp'];
        var ossType = 'aws';
        if (_babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(supportArr).call(supportArr, ext) > -1) {
          var reg = /^http(s)?:\/\/(.*?)\//;
          var arr = reg.exec(url);
          if (!arr) {
            return url;
          }
          var host = arr[0];
          if (!host) return url;
          var ossTypeConfig = {
            aliyun: ['https://staticcn.coros.com/'],
            aws: ['https://static.coros.com/']
          };
          ossType = 'aliyun';
          for (var key in ossTypeConfig) {
            var item = ossTypeConfig[key];
            if (_babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(item).call(item, host) > -1) {
              ossType = key;
            }
          }
        } else {
          return url;
        }
        //输出结果
        if (ossType == 'aliyun') {
          var _context7, _context8, _context9, _context10;
          var format = isSupportWebp ? '/format,webp' : '';
          var resize = width > 0 || height > 0 ? _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context7 = "/resize,w_".concat(width, ",h_")).call(_context7, height) : '';
          var rawUrl = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context8 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context9 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context10 = "".concat(url, "?type=img&x-oss-process=image")).call(_context10, resize)).call(_context9, format, "/quality,q_")).call(_context8, quality, "/format,webp");
          // 规避阿里云文件名空格问题
          return encodeURI(rawUrl);
        } else {
          var _context11, _context12, _context13, _context14, _context15;
          var _host = 'https://d1teks7lx8pls2.cloudfront.net';
          var arrUrl = url.split('//');
          var path = arrUrl[arrUrl.length - 1];
          var start = _babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(path).call(path, '/');
          var relUrl = path.substring(start); //stop省略，截取从start开始到结尾的所有字符

          if (_babel_runtime_corejs3_core_js_instance_index_of__WEBPACK_IMPORTED_MODULE_10___default()(relUrl).call(relUrl, '?') != -1) {
            relUrl = relUrl.split('?')[0];
          }
          return _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context11 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context12 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context13 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context14 = _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context15 = "".concat(_host)).call(_context15, isSupportWebp ? '/filters:format(webp)' : '', "/filters:quality(")).call(_context14, quality, ")/fit-in/")).call(_context13, width, "x")).call(_context12, height)).call(_context11, relUrl);
        }
      } catch (err) {
        console.log(err);
        return url;
      }
    }
  }, {
    key: "getResult",
    value: function getResult(data) {
      var result = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'coros';
      for (var key in data) {
        if (data[key] && (0,_babel_runtime_corejs3_helpers_typeof__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z)(data[key]) == 'object') {
          this.getResult(data[key], result, prefix + '.' + key);
        } else {
          result[prefix + '.' + key] = data[key];
        }
      }
      return result;
    }
  }, {
    key: "signPassword",
    value: function signPassword(password) {
      var _context16;
      return _babel_runtime_corejs3_core_js_instance_concat__WEBPACK_IMPORTED_MODULE_9___default()(_context16 = "bear-".concat(SALT)).call(_context16, window.btoa(password));
    }
  }, {
    key: "clearAllCookie",
    value: function clearAllCookie() {
      var keys = document.cookie.match(/[^ =;]+(?==)/g);
      if (keys) {
        for (var i = keys.length; i--;) {
          document.cookie = keys[i] + '=0;path=/;domain=coros.com;expires=' + new Date(0).toUTCString();
        }
      }
    }
  }]);
}();
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new Helper());

/***/ }),

/***/ 75352:
/***/ ((module) => {

module.exports = {
  title: 'COROS VERTIX 2 GPS-Uhr',
  keywords: 'Stichwörter',
  description: 'Unsere leistungsstärkste Uhr für Abenteurer, die bis zum Äußersten gehen.',
  vertix2title: 'COROS VERTIX 2',
  vertix2accessories: 'ZUBEHÖR',
  content1c: 'Ein Abenteuer ist per Definition eine aufregende Erfahrung. Mit der VERTIX 2 GPS-Abenteueruhr bringt COROS mutige Innovationen und unvorstellbare Weiterentwicklungen bestehender Funktionen – damit du aufregende neue Herausforderungen meistern kannst, an die du vielleicht noch gar nicht gedacht hast. Egal, wohin dich deine Unternehmungen führen – die VERTIX 2 wird dich bei jedem Schritt begleiten.',
  content2tit: 'Willkommen auf der Überholspur',
  content2c: 'Die VERTIX 2 kann mit allen fünf großen Satellitensystemen (GPS, GLONASS, Galileo, QZSS und Beidou) gleichzeitig kommunizieren. Sie bietet sogar Dual-Frequency-Satellitenkommunikation – eine Expressspur für ein schnelleres, besseres Signal, das bisher nur in Luftfahrtprodukten verfügbar war.',
  content2desc: 'Die VERTIX 2 bringt enorme Verbesserungen bei der Navigation zwischen hohen Gebäuden, tief im Wald oder entlang von Felswänden, die für frühere Generationen von GPS-Uhren eine Herausforderung für die Genauigkeit darstellten.',
  content3tit: 'Noch mehr Leistung',
  content3c: 'Die VERTIX 2 wurde von Grund auf neu entwickelt und nutzt unseren Chipsatz und Prozessor der nächsten Generation, um ein noch besseres und schnelleres COROS-Erlebnis zu ermöglichen. Dank dieser Verbesserungen ist die VERTIX 2 über 20% schneller als die ursprüngliche VERTIX.',
  content4tit: 'Der große Bildschirm',
  content4c: 'Die VERTIX 2 verfügt über einen 1,4-Zoll-Bildschirm mit 16 % höherer Auflösung, der mehr Informationen auf einen Blick zeigt und dich jederzeit und überall über die wichtigsten Daten informiert. Die VERTIX 2 unterstützt außerdem bis zu acht Datenfelder auf einer einzigen Seite, damit du bei deinen Aktivitäten mehr Informationen erhältst.',
  'performance-improvement-1': '1,4 Zoll',
  'performance-improvement-2': '16,00%',
  content5tit: 'Neu gestaltete Benutzerschnittstelle',
  content5c: 'Unsere neue Benutzeroberfläche setzt das Potenzial unseres kultigen Digital Zifferblatts frei. Jetzt kannst du mühelos scrollen, um deine wichtigsten täglichen Messwerte anzuzeigen. Ein verbesserter Touchscreen ermöglicht es dir, bestimmte Aktionen mit der Fingerspitze auszuführen, was eine präzise Steuerung beim Navigieren sowie den Zugriff auf Musik- und Datenfelder ermöglicht.',
  content6tit: 'Atemberaubende Akkulaufzeit (Einmal mehr)',
  content6c: 'Was passiert, wenn du die erstaunliche Akkuleistung von COROS noch weiter verbesserst? Die VERTIX 2 gibt dir die Antwort. Sie bietet die längste Akkulaufzeit, die du je bei einer GPS-Uhr gesehen hast. Mit 127 Stunden Standard-GPS-Tracking und 39 Tagen normaler Nutzung hat die VERTIX 2 die Akkulaufzeit ihres bereits marktführenden Vorgängers mehr als verdoppelt. Die VERTIX 2 ist bereit für dein längstes und härtestes Abenteuer.',
  content6cKeyword: 'verdoppelt',
  content7tit: 'Wer die Welt regiert',
  content7c: 'Die VERTIX 2 GPS-Abenteueruhr bietet globale Offline-Karten und umfasst: Landschafts-, Topo- und Hybridmodus. Die VERTIX 2 wird mit einer vollständigen globalen Landschaftskarte ausgeliefert, und die Topo-Karten der einzelnen Regionen können kostenlos von COROS.com heruntergeladen werden. Die VERTIX 2 bietet das beste Navigationserlebnis am Handgelenk, indem du mit dem digitalen Zifferblatt in die Karte hinein- und herauszoomst oder mit dem reaktionsschnellen Touchscreen über die Karte ziehst.',
  content8tit: 'Mach dir keinen Stress',
  content8c: 'Mit der VERTIX 2 kannst du deine Herzfrequenzvariabilität (HRV) direkt am Handgelenk messen. Die HRV ist eine ideale Messgröße, um die Reaktion deines Körpers auf Stress und seine Fähigkeit, sich zu erholen, zu messen. Das COROS-System wandelt jede individuelle HRV in eine leicht vergleichbare Metrik für jeden einzelnen Sportler um.',
  content9tit: 'Wir haben den Beat',
  content9c: 'Die VERTIX 2 verfügt über 32 GB internen Speicherplatz für mehr Daten, mehr Trainingseinheiten, mehr Routen und - zum ersten Mal in einer COROS GPS-Uhr - für Musik. Jetzt kannst du deine Audiodateien direkt von deiner GPS-Uhr herunterladen und steuern. Die VERTIX 2 verfügt außerdem über zusätzliche Wi-Fi-Funktionen und bietet damit noch mehr Möglichkeiten für die Kopplung von Zubehör und mehr.',
  content10tit: 'Insta360™ Kamera-Fernbedienung',
  content10c: 'Wenn du eine Insta360™ Action-Kamera hast (Insta360 One X2 und One R), kannst du deine Kamera jetzt von deiner GPS-Uhr aus steuern. So kannst du deine Kamera auch außerhalb deiner Reichweite platzieren, um die besten Aufnahmen zu machen.',
  content11tit: 'Wie hängt sie?',
  content11c: 'Für Aktivitäten, bei denen eine Uhr am Handgelenk keinen Sinn macht, du aber trotzdem deine Daten brauchst, wie z. B. bei einer Big-Wall-Mission mit Tommy Caldwell - nutze den COROS Watch Carabiner. Dieses unverzichtbare Accessoire für Kletterer und andere Abenteurer lässt sich in den Rahmen deiner Uhr einrasten und an deinem Klettergurt oder anderer Ausrüstung befestigen.',
  content12tit: 'Das COROS-Ökosystem',
  content12c: 'Die VERTIX 2 bietet all das und diese tollen COROS-Funktionen.',
  learnmore: 'ENTDECKE MEHR',
  speedleft1: 'Modell',
  speedright1: ['COROS VERTIX 2 GPS Adventure Watch'],
  speedleft2: 'Displaygröße',
  speedright2: ['1,4 Zoll'],
  speedleft3: 'Displayauflösung',
  speedright3: ['280 x 280 (64 Farben)'],
  speedleft4: 'Displayart',
  speedright4: ['Touchscreen Always-On Memory-LCD'],
  speedleft5: 'Displaymaterial',
  speedright5: ['Saphirglas'],
  speedleft6: 'Fassungsmaterial',
  speedright6: ['Grade 5 Titanlegierung mit PVD-Beschichtung'],
  speedleft7: 'Gehäusematerial',
  speedright7: ['Titanlegierung mit PVD-Beschichtung'],
  speedleft8: 'Armband',
  speedright8: ['26 mm Quick-Fit-Band'],
  speedleft9: 'Armbandmaterial',
  speedright9: ['Silikon / Nylon'],
  speedleft10: 'Maße',
  speedright10: ['50,3 x 50,3 x 15,7 mm'],
  speedleft11: 'Gewicht mit Silikonband',
  speedright11: ['89 g'],
  speedleft12: 'Akkulaufzeit',
  speedright12: ['Standard GPS (GPS/QZSS): 140 Stunden', 'Standard GPS und Musik hören (GPS / QZSS): 35 Stunden', 'Alle Systeme AN (GPS / QZSS + GLONASS + Galileo + BeiDou): 90 Stunden', 'Alle Systeme AN und Musik hören (GPS / QZSS + GLONASS + Galileo + BeiDou): 30 Stunden', 'Alle Systeme + Duale Frequenz AN (GPS / QZSS + GLONASS + Galileo + BeiDou mit dualer Frequenz): 50 Stunden', 'UltraMax: 240 Stunden', 'Normaler Gebrauch (60 Tage)'],
  speedleft13: 'Drahtlose Verbindung',
  speedright13: ['Bluetooth 5.0 Dual Mode, Wi-Fi'],
  speedleft14: 'Zubehörverbindung',
  speedright14: ['Bluetooth'],
  speedleft15: 'Speicher',
  speedright15: ['32 GB'],
  speedleft16: 'Satelliten-Chipsatz',
  speedright16: ['All-Satellite Dual Frequency GNSS Chipsatz'],
  speedleft17: 'Sensoren',
  speedright17: ['Optisches Pulsoximeter', 'Optischer Herzfrequenzmesser', 'Elektrokardiogramm-Sensor', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Kompass', 'Gyroskop', 'Thermometer'],
  speedleft18: 'Wasserdichtigkeit',
  speedright18: ['10 ATM'],
  speedleft19: 'Betriebstemperatur',
  speedright19: ['-30 °C bis 50°C'],
  speedleft20: 'Lagertemperatur',
  speedright20: ['-30 °C bis 60°C'],
  speedleft21: 'Ladezeit',
  speedright21: ['Weniger als 2 Stunden'],
  speedleft22: 'Unterstützte Karten/Navigation',
  speedright22: ['Weltweite offline Straßen- und topographische Karten', 'Breadcrumb-Navigation mit Touchscreen und digitaler Krone', 'Zwischenstopps', 'Zurück zum Start', 'Details zur Höhenlage', 'Distanz zum Ziel', 'GPS- / UTM-Koordinaten', 'Unwetteralarm'],
  speedleft23: 'Unterstützte Musik',
  speedright23: ['Interner Speicher und Bluetooth-Kopfhörer-Streaming für Offline-Inhalte'],
  speedleft24: 'Musikformat',
  speedright24: ['MP3'],
  speedleft25: 'Unterstützte Workouts',
  speedright25: ['Run, Indoor Run, Trail Run, Track Run, Hike, Mountain Climb, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, Cross-country Ski, Ski Touring, Multisport, Strength, Training, Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing, Indoor Rower'],
  features: {
    category: 'Kategorie',
    categoryVal: ['Funktion'],
    activityAlert: 'Aktivitätsalarm',
    activityAlertVal: ['Schrittfrequenz-Alarm', 'Distanz-Alarm', 'Höhenzunahme- / Höhenabnahme-Alarm', 'Herzfrequenz-Alarm', 'Ernährungsalarm', 'Pace-Alarm', 'Leistungsalarm', 'Geschwindigkeitsalarm', 'Schrittalarm'],
    blt: 'Bluetooth-Zubehör',
    bltVal: ['Heimtrainer', 'Herzfrequenz übertragen', 'Concept 2 Rudergerät', 'COROS POD', 'Herzfrequenz-Brustgurt', 'Insta360', 'Leistungsmesser', 'Geschwindigkeits-/Schrittfrequenz-Sensor', 'Geschwindigkeits-/Trittfrequenzsensor', 'Stryd'],
    dailyAlert: 'Täglicher Alarm',
    dailyAlertVal: ['Kalorien- & Trainingszeit-Ziel', 'Höhenlagen-Alarm', 'Sturmalarm', 'Trainingsplan'],
    fitness: 'EvoLab – Allgemeine Fitness',
    fitnessVal: ['4-wöchige Intensitäts-Verteilung', '7-tägige Belastung & Empfehlung', 'Grundfitness', 'Ermüdung', 'Belastungswirkung', 'Erholungs-Timer & -Empfehlung', 'Trainingseffekt', 'Trainingslast'],
    roadRuning: 'EvoLab – Laufen',
    roadRuningVal: ['Marathon-Level', 'Rennvorhersage', 'Laufleistung', 'Max. Lauf-VO2', 'Herzfrequenz-Schwellenwert-Zonen', 'Pace-Schwellenwert-Zonen', 'Trainingsfokus'],
    nav: 'Navigation',
    navVal: ['Zurück zum Start', 'Zwischenstopps', 'Details Höhenzunahme', 'Hybrid-Kartenansicht', 'Landschafts-Kartenansicht', 'Topografische Kartenansicht', 'Routenabweichungs-Alarm', 'Touchscreen-fähige Breadcrumb-Navigation'],
    satellite: 'Satellitensysteme',
    satelliteVal: ['Alle Systeme + Dual FREQ AN (GPS, GLONASS, Galileo, Beidou, QZSS)', 'Alle Systeme AN (GPS, GLONASS, Galileo, Beidou, QZSS)', 'Standard-GPS', 'Ortungsdaten GPS-Satellit', 'MGRS/GPS', 'Satellitensignal'],
    sensors: 'Sensor',
    sensorsVal: ['3D-Kompass', 'Beschleunigungssensor', 'Alle Satelliten Duale Frequenz GNSS', 'Barometrischer Höhenmesser', 'Elektrokardiogramm-Sensor', 'Gyroskop', 'Thermometer', 'Handgelenkbasierter Herzfrequenz-Sensor', 'Handgelenkbasiertes Pulsoximeter'],
    system: 'System',
    systemVal: ['Alarm, Stoppuhr, Timer', 'Autom. Sperren', 'Hintergrund-Beleuchtung (Tasten-/Gesten-basiert)', 'Akkuverbrauchsbericht & -vorhersage', 'Individualisierbare Position des digitalen Zifferblatts', 'Digitales Zifferblatt', 'HRV-Index', 'Licht-Tastenkombination', 'Metronom', 'Musik (Offline)', 'Nachtmodus', 'Wi-Fi'],
    lang: 'Systemsprache',
    langVal: ['Deutsch, Englisch, Español, Français, Italiano, Polski, Português, Pусский, ภาษาไทย, 한국어, ⽇本語, 简体中文, 繁体中文'],
    widget: 'Tägliches Widget',
    widgetVal: ['Aktive Kalorien', 'Luftdruck', 'Höhenlage', 'Übungszeit', 'Gestiegene Stockwerke', 'Herzfrequenz', 'Wichtige EvoLab-Metriken', 'Schlaf-Tracking', 'Intelligente Benachrichtigungen', 'Schritte', 'Sonnenaufgang/Sonnenuntergang', 'Temperatur', 'Trainingsplan'],
    workoutFeats: 'Workout-Funktion',
    workoutFeatsVal: ['Auto-Pause', 'Automatisches Blättern', 'Hintergrundfarbe (Weiß/Schwarz)', 'Einfaches/Fortgeschrittenes Intervalltraining', 'Anpassbare Datenseite', 'Nachrichten- und Anrufbenachrichtigungen während des Trainings', 'Später fortsetzen', 'Scrollen durch Berührung', 'UltraMax', 'Virtueller Lauf', 'Handgelenksbasierte Laufleistung'],
    swim: 'Workout-Funktionen – Schwimmen im Pool / in offenen Gewässern',
    swimVal: ['Schlaganfall-Typ-Erkennung'],
    skiTouring: 'Workout-Funktion - Skitourengehen',
    skiTouringVal: ['Erkennung von Aufstieg/Abstieg'],
    snowboard: 'Workout-Funktion - Ski/Snowboard',
    snowboardVal: ['Erkennung von Aufstieg/Abstieg'],
    strength: 'Workout-Funktionen - Krafttraining',
    strengthVal: ['Wiederholungserkennung'],
    trackRun: 'Workout-Funktionen - Track Run',
    trackRunVal: ['Laufbahn-Erkennung'],
    workoutMode: 'Workout-Modus',
    workoutModeVal: ['Bike', 'Flatwater', 'GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Bike', 'Indoor Rower', 'Indoor Run', 'Mountain Climb', 'Multisport', 'Multi-Pitch Climb', 'Open Water', 'Pool Swim', 'Rowing', 'Run', 'Ski', 'Ski Touring', 'Snowboard', 'Speedsurfing', 'Strength', 'Track Run', 'Trail Run', 'Training (strukturierte Programme)', 'Trainingsplan', 'Triathlon', 'Gehen', 'Whitewater', 'Windsurfing', 'XC Ski']
  }
};

/***/ }),

/***/ 54090:
/***/ ((module) => {

module.exports = {
  title: 'COROS PACE 2 | Eliud Kipchoge Edition',
  keywords: 'COROS PACE 2 | The lightest GPS watch - packs a punch',
  description: 'COROS PACE 2 is the lightest GPS watch on the market and the perfect training partner for athletes aiming for a new personal best.',
  ekaccessories: 'SHOP PACE 2 ACCESSORIES',
  ektitle: 'COROS PACE 2 Eliud Kipchoge Edition',
  content1c: 'The greatest marathon runner of all time – there has never been a runner quite like Eliud Kipchoge. He has all the accolades one can hope to achieve over the 26.22 mile/42.195 km distance. The first human to dip under 2 hours for the marathon, the world record holder, Olympic Gold Medalist and winner of the Berlin, London, and Chicago marathons.',
  content1tit: '1:59:40',
  content2tit: 'NO HUMAN \n IS LIMITED',
  content2c: 'Eliud\'s mantra is "No Human is Limited" and with COROS, we Explore Perfection. Together, we set out to celebrate this spirit with a signature watch bundle that features Eliud\'s favorite COROS technology – The special edition COROS PACE 2 Eliud Kipchoge Edition , and the COROS POD. When you wear the EK Signature Edition PACE 2, we hope that you will be inspired by Eliud and will push yourself to train a little harder, and race a little faster.',
  content3tit: 'THE ELIUD KIPCHOGE PACE 2',
  content3c: 'Unlike the traditional PACE 2, the Eliud Kipchoge edition features red and green accents inspired by the flag Eliud\'s native Kenya. The watch also showcases a white bezel with a red digital dial and green lap/back button.',
  content4tit: 'ONE-OF-A-KIND BANDS',
  content4c: 'The Eliud Kipchoge PACE 2 Edition is equipped with both silicone and nylon wrist bands, which like the watch body feature a white base with red and green accents.',
  content5tit: 'BETTER DATA FOR\nBETTER RUNNING',
  content5c: 'To train with the same focus as Eliud Kipchoge, requires you to collect the same data as Eliud and that means utilizing his favorite accessory – the COROS POD. The POD (Performance Optimization Device) offers you and Eliud advanced metrics including:',
  'content5-icon-1-text': 'Stride Ratio',
  'content5-icon-1-text-sub': '(Height to Length)',
  'content5-icon-2-text': 'Ground',
  'content5-icon-2-text-sub': 'Contact Time',
  'content5-icon-3-text': 'Form',
  'content5-icon-3-text-sub': 'Power',
  'content5-icon-4-text': 'Left/Right',
  'content5-icon-4-text-sub': 'Balance',
  'content5-icon-5-text': 'Stride',
  'content5-icon-5-text-sub': 'Height',
  content5info: 'Using the POD in tandem with the PACE 2 will help you further optimize your training as you chase your goals.',
  content6tit: 'Train like the\nG.O.A.T. with EvoLab',
  content6c: 'When you use EvoLab, Eliud is always by your side. EvoLab provides each user with a unique marathon level score of 0 – 100. Did you know that Eliud’s sub 2-hour marathon is the model for the max score of 100? Now you can see how you and your training partners stack up against the greatest marathoner of all time. Even if you are not quite ready to break the 2-hour barrier, be sure to check out the all-new race predictor to see how you’re ready to perform at your next 5k, 10k, half marathon or Eliud’s favorite – marathon.',
  content7tit: 'Limited Special Edition',
  content7c: 'Eliud may be an Olympic Gold Medalist in the Marathon now, but his first senior-level gold medal came in the 5,000m at the 2003 World Championships in Paris. To honor this, COROS is making just 5,000 units of the COROS PACE 2 Eliud Kipchoge Edition!'
};

/***/ }),

/***/ 37070:
/***/ ((module) => {

module.exports = {
  //maps

  maptitle: 'Map Download',
  mapsubheader: 'Region Selection',
  mapdownloadentireregion: 'Download the entire regions',
  mapwelcome: 'Welcome to the all-new COROS Maps download page. Here you will find our current Topographic (Topo) and Landscape maps, available to download completely for free! At this time the Topo and Landscape maps below are only available on the VERTIX 2, however, we are excited to announce that the Topo maps will also be available to APEX Pro and VERTIX 1 users later this year.',
  mapdownload_instruction: 'Follow these instructions to download the Topographic (Topo) and/or Landscape Map for your region:',
  mapdownload_instruction_list1: '- Using the Region Selection tool below, hold the SHIFT button while dragging your mouse/cursor over the desired area.',
  mapdownload_instruction_list2: '- Once you have selected the desired region, press the “Download” button to view the approximate file sizes for downloading either the Topo or Landscape map for that region.',
  mapdownload_tips: '* Please keep in mind when choosing a region that the APEX Pro and VERTIX 1 models have 4GB of onboard storage while the VERTIX 2 has 32GB *',
  mapdownload_message: 'Download task has started, Close the pop-up window to view the progress',
  mapdownload_instruction_mobile: 'Please use your desktop computer to download maps from this page.',
  maplandscope_introduction: 'Landscape maps currently provide information such as streets, major road networks, natural features, and waterways. Landscape maps do not include international borders, administrative boundaries, or information on points of interest such as restaurants, gas stations, stores, schools, etc.',
  maptopo_introduction: 'Topo maps are a detailed record of a land area, giving geographic positions and elevations for both natural and man-made features. They show the shape of the land, the mountains, valleys, and plains by means of contour lines (lines of equal elevation above sea level)',
  maph4: 'Please select a region to download from the table below.',
  maph5: 'How to Install',
  mapl1: 'Please make sure you have enough space on your hard drive before downloading.',
  mapl2: 'Unzip the downloaded file on your hard drive.',
  mapl3: 'Locate the map folder and copy it to the watch.',
  mapl4: 'see:',
  maph6: 'Landscape Map ',
  mapt3: 'Estimated file transfer time: ',
  maph7: 'Topo Map ',
  mapt4: 'Estimated file transfer time: ',
  mapconditions: '©OpenStreetMap Terms and Conditions',
  mapconditions_1: 'This map was compiled using the community-generated ©OpenStreetMap (OSM) database. The use of this map is not subject to the terms of the End User License Agreement (EULA), but to the following terms and conditions of ©OpenStreetMap：',
  mapconditions_2: 'The ©OpenStreetMap data is the copyright of ©OpenStreetMap contributors and is subject to the Open Database License. Any rights to the individual content of ©OpenStreetMap data are licensed under the Database Content License.',
  maph9: 'Data Range',
  mapt7: 'This map includes only the street and trail network, waterways, and natural features. It does not include international borders, administrative boundaries, or points of interest such as stores, restaurants, or parking areas.',
  maph10: 'Warning',
  mapt8: '©COROS only formats and styles ©OpenStreetMap maps. ©COROS does not guarantee the accuracy or completeness of the map data in ©OpenStreetMap products. You agree to use it at your own risk.',
  mapt9: 'You undertake full responsibility and risk related to your use of the mapping data. ©COROS is not responsible to you for the mapping data and does not make or give to you any representations or warranties, express and implied, in connection with the mapping data, including, but not limited to, the accuracy, completeness, reliability or usability of the mapping data. Therefore, ©COROS is not liable to you for any damage or claim whatsoever, direct or indirect, arising from your use of the mapping data.',
  mapt10: '©COROS maps are intended as reference only and should not be used for any purpose that requires precise measurements of direction, distance, location or terrain.',
  mapt11: 'Hours',
  mapcopyright: '© 2021 | COROS Wearables Inc.',
  mapregion: 'region',
  mapgeomap: 'Landscape',
  downloadprocess: 'Generating files',
  shiftPress: 'To Select a Region: Hold SHIFT and drag Your Cursor/Mouse over the desired region.',
  mapcontours: 'Topo',
  maplanguage: 'language',
  mapcn: '中文',
  mapen: 'English',
  africa: 'Africa',
  antarctica: 'Antarctica',
  asia: 'Asia',
  asia1: 'Asia - 1',
  asia2: 'Asia - 2',
  asia3: 'Asia - 3',
  asia4: 'Asia - 4',
  'north-america1': 'North America - 1',
  'north-america2': 'North America - 2',
  'australia-oceania': 'Oceania',
  'central-america': 'Central America',
  europe: 'Europe',
  'north-america': 'North America',
  'south-america': 'South America',
  maplocaldown: 'Download',
  mapdownloadbutton: 'Download Map',
  maphelplink: 'Installation Instructions',
  mapdownloadtitle: 'Download maps below',
  mapmacoshelp: 'Detailed instructions for MacOS',
  mapwinhelp: 'Detailed instructions for Windows',
  macostitle: 'Installation Instructions',
  macost1: '1.	Select the zip file to unzip it. This will save the file to your hard drive and as a folder on your desktop (for example: Asia3_map.).',
  macost2: '2. Plug your COROS watch into the computer via the USB/charging cable and wait for the disk symbol to appear on your desktop.',
  macost3: '3. Select the disk symbol (VERTIX 2) to open the root directory of your watch. You will see two folders, “map” and “Music” already installed to the directory of your watch (see below).',
  macost4: '4. Next, press and hold the "option" key while dragging the downloaded “map” folder (labeled: map) to the root directory of your COROS watch. See the photo below for an example using Asia1_landscape as the example.',
  macost5: 'If prompted, select "Merge" in the pop-up dialog and wait for the copy to complete.',
  macoscautions: 'Please Read:',
  macosc1: '1. To avoid replacing the default [map] directory on your watch, please follow the steps below: When accessing and copying the map directory, press the "option" key on the keyboard while dragging and copying. Depending on your computers operating system, you may see a pop up box asking you to “Stop, Replace, or Merge”. If you see this pop-up, please select "Merge". Do not select “replace” as this will remove the original map files in the [map] directory of your watch.',
  macosc2: '2. Depending on internet speed and download size, map files can take a significant amount of time to be transferred to your watch hard drive. Please plan accordingly and ensure your computer is properly connected to power.',
  macosc3: '3. Please ensure that the [map] directory is placed in the root directory of your watch and do not rename the file as this will cause installation issues.',
  windowstitle: 'Instructions',
  windowst1: '1. Select the zip file to unzip it. This will save the file to your hard drive and as a folder on your desktop (for example: North_America_Contour).',
  windowst2: '2. Plug the watch into the computer via the USB cable, select “File Explorer” in the taskbar then “This PC” from the left pane. Here you will see your COROS watch appear as a hard drive.',
  windowst3: '3. Now locate the extracted directory/map file from Step 1 (on your desktop or in your files), right click on the [map] directory, click on the "Send" menu, then choose "VERTIX 2" and wait for the file transfer to finish.',
  windowscautions: 'Please Read:',
  windowsc1: '1. To avoid replacing the default [map] directory on your watch, if prompted, select "Merge" in the pop-up box. Please do not select “replace” as this will remove the original map files in the [map] directory of your watch.',
  windowsc2: '2. Depending on internet speed and download size, map files can take a significant amount of time to be transferred to your watch hard drive. Please plan accordingly and ensure your computer is properly connected to power.',
  windowsc3: '3.  Please ensure that the [map] directory is placed in the root directory of your watch and do not rename the file as this will cause installation issues.',
  estimated: 'Processing file, downloading expected to start in {estimated} seconds.',
  updatedAt: 'Update Time: {updateTime}',
  A3000: 'Select the firmware and update (update to the latest version is recommended)',
  A3001: '{version} and above',
  A3002: 'Other firmware updates',
  A3003: 'How to check your watch firmware version',
  A3004: 'Check the firmware version in COROS APP> Profile > Device page'
};

/***/ }),

/***/ 43675:
/***/ ((module) => {

module.exports = {
  title: 'COROS VERTIX 2 GPS Watch',
  keywords: 'keywords',
  description: 'Our most capable watch for adventurers who go to the extreme.',
  vertix2title: 'COROS VERTIX 2',
  vertix2accessories: 'ACCESSORIES',
  content1c: 'An adventure by definition is an exciting experience. With the VERTIX 2 GPS Adventure Watch, COROS brings you bold innovations as well as unimaginable advancements to existing features - all so you can conquer exciting new challenges you maybe haven’t even thought of yet. No matter where your pursuits take you – the VERTIX 2, will be there every step of the way.',
  content2tit: 'Welcome to the Express Lane',
  content2c: 'The VERTIX 2 can talk to all five major satellite systems (GPS, GLONASS, Galileo, QZSS, and Beidou) at the same time. It even offers Dual Frequency satellite communication - an express lane for a faster, better signal previously only available in aviation products. ',
  content2desc: 'VERTIX 2 brings huge improvements to GPS plotting when navigating between tall buildings, deep within the forest, or alongside rock walls, which have been considered an accuracy challenge for previous generations of GPS watches. ',
  content3tit: 'Even More Power',
  content3c: 'Built from the ground up, the VERTIX 2 utilizes our next-generation chipset and processor, allowing for a better and faster COROS experience. With these advancements, VERTIX 2 is over 20% faster than the original VERTIX.',
  content4tit: 'The Big Screen',
  content4c: 'A 1.4-inch screen with 16% higher resolution allows the VERTIX 2 to present more information at a glance and keep you updated with key metrics anytime and anywhere. The VERTIX 2 also supports up to eight data fields on a single page giving you more of the information you crave throughout your activities.',
  'performance-improvement-1': '1.4 in',
  'performance-improvement-2': '16%',
  content5tit: 'Redesigned User-Interface',
  content5c: 'Our new UI releases the potential of our iconic Digital Dial. Now you can effortlessly scroll to view your most important daily metrics. An improved touchscreen allows you to perform certain actions with the tip of your finger, providing precise control when navigating, as well as accessing music and data fields.',
  content6tit: 'Mind-Blowing Battery Life (Again)',
  content6c: 'What happens when you take the amazing COROS battery efficiency and make it even better? Look no further than the VERTIX 2 to find out. VERTIX 2 offers the longest battery life you’ve ever seen in a GPS Watch. With 127 hours of standard full GPS tracking and 39 days of normal use, the VERTIX 2 more than doubles the battery life of its already market leading predecessor. VERTIX 2 is ready for your longest and toughest adventure.',
  content6cKeyword: 'predecessor',
  content7tit: 'Who Runs the World',
  content7c: 'The VERTIX 2 GPS Adventure Watch offers global offline mapping, and includes: Landscape, Topo, and Hybrid modes. The VERTIX 2 comes with a full global Landscape map out of the box and users can download their Topo map by regions for free from COROS.com. By zooming in and out of the map with the digital-dial, or dragging around the map with the highly-responsive touch screen, the VERTIX 2 offers the best experience for on-wrist navigation.',
  content8tit: 'Don’t Stress',
  content8c: 'You can use VERTIX 2 to measure your Heart Rate Variability (HRV) straight from your wrist. HRV is an ideal metric for measuring your body’s response to stress and its ability to recover. The COROS system converts each individualized HRV into an easily comparable metric from athlete to athlete.',
  content9tit: 'We’ve got the beat',
  content9c: 'With 32 GB of onboard storage, the VERTIX 2 can hold more data, more workouts, more routes and for the first time in a COROS GPS Watch - music. Now you can download and control your audio files straight from your GPS Watch. Additional Wi-fi capabilities are also available on the VERTIX 2 adding even greater possibilities for accessory pairing and more.',
  content10tit: 'Insta360™ Camera Control Remote',
  content10c: 'If you have an Insta360™ action camera (Insta360 One X2 and One R), you can now control your camera from your GPS Watch. This means you can also place your camera out of your arms’ reach to get the best shots.',
  content11tit: 'How’s it hanging',
  content11c: 'For those activities when a watch on the wrist just doesn’t make sense but you still need your data, like on a big wall mission with Tommy Caldwell - take advantage of the COROS Watch Carabiner. This must have accessory for climbers and other adventurers, locks in the frame of your watch and clips onto your harness or other gear.',
  content12tit: 'The COROS Ecosystem',
  content12c: 'VERTIX 2 offers all of the above plus these other great COROS features.',
  learnmore: 'LEARN MORE',
  speedleft1: 'Model',
  speedright1: ['COROS VERTIX 2 GPS Adventure Watch'],
  speedleft2: 'Display Size',
  speedright2: ['1.4 inch'],
  speedleft3: 'Display Resolution',
  speedright3: ['280 x 280 (64 colors)'],
  speedleft4: 'Display Type',
  speedright4: ['Touch Screen Always-On Memory LCD'],
  speedleft5: 'Screen Material',
  speedright5: ['Sapphire Glass'],
  speedleft6: 'Bezel Material',
  speedright6: ['Grade 5 Titanium Alloy with PVD coating'],
  speedleft7: 'Cover Material',
  speedright7: ['Titanium Alloy with PVD coating'],
  speedleft8: 'Watch Band',
  speedright8: ['26mm Quick Fit Band'],
  speedleft9: 'Band Material',
  speedright9: ['Silicone/Nylon'],
  speedleft10: 'Physical Size',
  speedright10: ['50.3 x 50.3 x 15.7mm'],
  speedleft11: 'Weight With Silicone Band',
  speedright11: ['89g'],
  speedleft12: 'Battery Life',
  speedright12: ['Standard Full GPS (GPS/QZSS): 140 Hours', 'Standard Full GPS with Music Playing (GPS/QZSS): 35 Hours', 'All Systems On (GPS/QZSS+GLONASS+Galileo+BeiDou): 90 Hours', 'All Systems On with Music Playing (GPS/QZSS+GLONASS+Galileo+BeiDou): 30 Hours', 'All Systems + Dual Frequency On (GPS/QZSS+GLONASS+Galileo+BeiDou w/ Dual Frequency): 50 Hours', 'UltraMax: 240 Hours', 'Daily Use: 60 Days'],
  speedleft13: 'Wireless Connection',
  speedright13: ['Bluetooth® 5.0 Dual Mode, Wi-Fi®'],
  speedleft14: 'Accessory Connection	',
  speedright14: ['Bluetooth®'],
  speedleft15: 'Memory',
  speedright15: ['32GB'],
  speedleft16: 'Satellite Chipset',
  speedright16: ['All-Satellite Dual-Frequency GNSS Chipset'],
  speedleft17: 'Sensors',
  speedright17: ['Optical Pulse Oximeter', 'Optical Heart Rate Sensor', 'Electrocardiogram Sensor', 'Barometric Altimeter', 'Accelerometer', 'Compass', 'Gyroscope', 'Thermometer'],
  speedleft18: 'Water Resistance	',
  speedright18: ['10 ATM'],
  speedleft19: 'Working Temperature',
  speedright19: ['-22°F to 122°F (-30°C to 50°C)'],
  speedleft20: 'Storage Temperature	',
  speedright20: ['-22°F to 140°F (-30°C to 60°C)'],
  speedleft21: 'Charging Time',
  speedright21: ['Less than 2 Hours'],
  speedleft22: 'Map/Navigation Support',
  speedright22: ['Global Offline Street and Topographical Maps', 'Touchscreen and Digital Dial-enabled Breadcrumb Navigation', 'Checkpoint', 'Back to Start', 'Elevation Details', 'Distance to Destination', 'GPS/MGRS Coordinates', 'Storm Alert'],
  speedleft23: 'Music Support',
  speedright23: ['Internal Storage and Bluetooth Headphone Streaming for Offline Content'],
  speedleft24: 'Music Format',
  speedright24: ['MP3'],
  speedleft25: 'Supported Workouts',
  speedright25: ['Run, Indoor Run, Trail Run, Track Run, Hike, Mountain Climb, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, Cross-country Ski, Ski Touring, Multisport, Strength, Training, Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing, Indoor Rower'],
  features: {
    category: 'Category',
    categoryVal: ['Feature'],
    activityAlert: 'Activity Alert',
    activityAlertVal: ['Cadence Alert', 'Distance Alert', 'Elevation Gain/Loss Alert', 'Heart Rate Alert', 'Nutrition Alert', 'Pace Alert', 'Power Alert', 'Speed Alert', 'Steps Alert'],
    blt: 'Bluetooth Accessories',
    bltVal: ['Action Camera (GoPro, Insta360)', 'Bike Trainer', 'Broadcast Heart Rate', 'Concept 2 Rower', 'CORE Body Temperature Monitor', 'COROS POD', 'Heart Rate Chest Strap', 'Power Meter', 'Speed/Cadence Sensor', 'Stryd'],
    dailyAlert: 'Daily Alert',
    dailyAlertVal: ['Active Calories & Exercise Time Goal', 'Altitude Alert', 'Storm Alert', 'Training Plan'],
    fitness: 'EvoLab - General Fitness',
    fitnessVal: ['4-week Intensity Distribution', '7-day Total Load & Recommendation', 'Base Fitness', 'Fatigue', 'Load Impact', 'Recovery Timer & Suggestion', 'Training Effect', 'Training Load'],
    roadRuning: 'EvoLab - Road Running',
    roadRuningVal: ['Marathon Level', 'Race Predictor', 'Running Performance', 'RunningVO2 Max', 'Threshold Heart Rate Zones', 'Threshold Pace Zones', 'Training Focus'],
    nav: 'Navigation',
    navVal: ['Back-to-start', 'Checkpoints', 'Elevation Details', 'Hybrid Map Layer', 'Landscape Map Layer', 'Topo Map Layer', 'Off-route Alert', 'Touchscreen-enabled Breadcrumb Navigation'],
    satellite: 'Satellite Systems',
    satelliteVal: ['All Systems + Dual FREQ ON (GPS, GLONASS, Galileo, Beidou, QZSS)', 'All Systems ON (GPS, GLONASS, Galileo, Beidou, QZSS)', 'Standard GPS Only', 'GPS Satellite Location Data', 'Location Format - MGRS/GPS', 'Satellite Signal'],
    sensors: 'Sensor',
    sensorsVal: ['3D Compass', 'Accelerometer', 'All-Satellite Dual-Frequency GNSS', 'Barometric Altimeter', 'Electrocardiogram Sensor', 'Gyroscope', 'Thermometer', 'Wrist-based Heart Rate Sensor', 'Wrist-based Pulse Oximeter'],
    system: 'System',
    systemVal: ['Alarm, Stopwatch, Timer', 'Auto Lock', 'Backlight (Button/Guesture-based)', 'Battery Usage Report & Prediction', 'Customizable Digital Dial Location', 'Digital Dial', 'HRV Index', 'Light Key Shortcut', 'Metronome', 'Music (Offline)', 'Night Mode', 'Wi-Fi'],
    lang: 'System Language',
    langVal: ['Deutsch, English, Español, Français, Italiano, Polski, Português, Pусский, ภาษาไทย, 한국어, ⽇本語, 简体中文, 繁体中文'],
    widget: 'Daily Widget',
    widgetVal: ['Active Calories', 'Air Pressure', 'Elevation', 'Exercise Time', 'Floors Climbed', 'Heart Rate', 'Key EvoLab Metrics', 'Sleep Tracking', 'Smart Notifications', 'Steps', 'Sunrise/Sunset', 'Temperature', 'Training Plan'],
    workoutFeats: 'Workout Feature',
    workoutFeatsVal: ['Auto Pause', 'Auto Scroll', 'Background Color (White/Black)', 'Basic/Advanced Interval Training', 'Customizable Data Page', 'Message & Call Alerts During Training', 'Resume Later', 'Touch Scroll', 'UltraMax', 'Virtual Run', 'Wrist-based Running Power'],
    swim: 'Workout Feature - Pool Swim/Open Water',
    swimVal: ['Stroke Type Detection'],
    skiTouring: 'Workout Feature - Ski Touring',
    skiTouringVal: ['Ascent/Descent Detection'],
    snowboard: 'Workout Feature - Ski/Snowboard',
    snowboardVal: ['Lift/Descent Detection'],
    strength: 'Workout Feature - Strength',
    strengthVal: ['Reptition Detection'],
    trackRun: 'Workout Feature - Track Run',
    trackRunVal: ['Track Detection'],
    workoutMode: 'Workout Mode',
    workoutModeVal: ['Bike', 'Flatwater', 'GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Bike', 'Indoor Rower', 'Indoor Run', 'Mountain Climb', 'Multisport', 'Multi-Pitch Climb', 'Open Water', 'Pool Swim', 'Rowing', 'Run', 'Ski', 'Ski Touring', 'Snowboard', 'Speedsurfing', 'Strength', 'Track Run', 'Trail Run', 'Training (Structured Programs)', 'Training Plan', 'Triathlon', 'Walk', 'Whitewater', 'Windsurfing', 'XC Ski']
  }
};

/***/ }),

/***/ 38059:
/***/ ((module) => {

module.exports = {
  title: 'COROS PACE 2 | Edición Eliud Kipchoge',
  keywords: 'COROS PACE 2 | El reloj con GPS más ligero y con más fuerza',
  description: 'COROS PACE 2 es el reloj GPS más ligero del mercado y el compañero de entrenamiento perfecto para los atletas que buscan una nueva marca personal.',
  ekaccessories: 'COMPRAR ACCESORIOS PARA EL PACE 2',
  ektitle: 'COROS PACE 2 Edición Eliud Kipchoge',
  content1c: 'El mejor corredor de maratón de todos los tiempos: nunca ha habido un corredor como Eliud Kipchoge. Tiene todos los galardones que se pueden esperar en la distancia de 26,22 millas/42,195 km. Es el primer ser humano que baja de las 2 horas en el maratón, el plusmarquista mundial, el medallista de oro olímpico y el ganador de los maratones de Berlín, Londres y Chicago.',
  content1tit: '1:59:40',
  content2tit: 'NINGÚN HUMANO \n ESTÁ LIMITADO',
  content2c: 'El mantra de Eliud es "Ningún humano está limitado" y con COROS, exploramos la perfección. Juntos, nos hemos propuesto celebrar este espíritu con un paquete de relojes de firma que incluye la tecnología COROS favorita de Eliud: la edición especial COROS PACE 2 Eliud Kipchoge Edition , y el COROS POD. Cuando lleves el EK Signature Edition PACE 2, esperamos que te sientas inspirado por Eliud y te empujes a entrenar un poco más duro, y a Carrera un poco más rápido.',
  content3tit: 'ELIUD KIPCHOGE PACE 2',
  content3c: 'A diferencia del PACE 2 tradicional, la edición Eliud Kipchoge presenta detalles rojos y verdes inspirados en la bandera de Kenia, país natal de Eliud. El reloj también presenta un bisel blanco con una esfera digital roja y un botón de vuelta/retroceso verde.',
  content4tit: 'CORREAS ÚNICAS',
  content4c: 'El Eliud Kipchoge PACE 2 Edition está equipado con correas de silicona y nylon, que al igual que el cuerpo del reloj presentan una base blanca con acentos rojos y verdes.',
  content5tit: 'MEJORES DATOS PARA\nMEJORES CARRERAS',
  content5c: 'Para entrenar con el mismo enfoque que Eliud Kipchoge, es necesario recoger los mismos datos que Eliud y eso significa utilizar su accesorio favorito: el COROS POD. El POD (Dispositivo de Optimización del Rendimiento) le ofrece a usted y a Eliud métricas avanzadas que incluyen',
  'content5-icon-1-text': 'Relación de zancada',
  'content5-icon-1-text-sub': '(altura y longitud)',
  'content5-icon-2-text': 'Suelo',
  'content5-icon-2-text-sub': 'Tiempo de contacto',
  'content5-icon-3-text': 'Forma',
  'content5-icon-3-text-sub': 'Potencia',
  'content5-icon-4-text': 'Izquierda/Derecha',
  'content5-icon-4-text-sub': 'Equilibrio',
  'content5-icon-5-text': 'Zancada',
  'content5-icon-5-text-sub': 'Altura',
  content5info: 'El uso del POD junto con el PACE 2 te ayudará a optimizar aún más tu entrenamiento mientras persigues tus objetivos.',
  content6tit: 'Entrena como el\nG.O.A.T. con EvoLab',
  content6c: 'Cuando usas EvoLab, Eliud está siempre a tu lado. EvoLab proporciona a cada usuario una puntuación única de nivel de maratón de 0 a 100. ¿Sabías que el maratón de menos de 2 horas de Eliud es el modelo para la puntuación máxima de 100? Ahora puedes ver cómo tú y tus compañeros de entrenamiento se comparan con el mejor MARATONIANA de todos los tiempos. Incluso si no estás preparado para romper la barrera de las 2 horas, asegúrate de comprobar el nuevo predictor de carrera para ver cómo estás preparado para rendir en tu próxima 5k, 10k, media maratón o la favorita de Eliud: la maratón.',
  content7tit: 'Edición especial limitada',
  content7c: 'Eliud puede ser ahora un medallista de oro olímpico en el maratón, pero su primera medalla de oro a nivel senior llegó en los 5.000 metros en los Campeonatos del Mundo de 2003 en París. Para honrarlo, COROS está fabricando sólo 5.000 unidades del COROS PACE 2 Edición Eliud Kipchoge.'
};

/***/ }),

/***/ 14673:
/***/ ((module) => {

module.exports = {
  maptitle: 'Descarga de mapas',
  mapsubheader: 'Selección de regiones',
  mapdownloadentireregion: 'Descargue las regiones completas',
  mapwelcome: 'Bienvenido a la nueva página de descarga de mapas de COROS. Aquí encontrará nuestros mapas topográficos (Topo) y de paisaje actuales, disponibles para su descarga de forma totalmente gratuita. En este momento, los mapas Topográficos y de Paisaje que aparecen a continuación sólo están disponibles en el VERTIX 2, sin embargo, nos complace anunciar que los mapas Topográficos también estarán disponibles para los usuarios de APEX Pro y VERTIX 1 a finales de este año.',
  mapdownload_instruction: 'Siga estas instrucciones para descargar el mapa topográfico (Topo) y/o de paisaje de su región:',
  mapdownload_instruction_list1: '- Utilizando la herramienta de selección de regiones que aparece a continuación, mantenga pulsada la tecla SHIFT mientras arrastra el ratón/cursor sobre el área deseada.',
  mapdownload_instruction_list2: '- Una vez que haya seleccionado la región deseada, pulse el botón "Descargar" para ver los tamaños de archivo aproximados para descargar el mapa topográfico o paisajístico de esa región.',
  mapdownload_tips: '* Por favor, tenga en cuenta al elegir una región que los modelos APEX Pro y VERTIX 1 tienen 4GB de almacenamiento a bordo mientras que el VERTIX 2 tiene 32GB *',
  mapdownload_message: 'La tarea de descarga ha comenzado, cierre la ventana emergente para ver el progreso',
  mapdownload_instruction_mobile: 'Por favor, utilice su ordenador de sobremesa para descargar los mapas desde esta página.',
  maplandscope_introduction: 'Los mapas de paisajes proporcionan actualmente información como las calles, las principales redes de carreteras, las características naturales y los cursos de agua. Los mapas de paisajes no incluyen fronteras internacionales, límites administrativos ni información sobre puntos de interés como restaurantes, gasolineras, tiendas, escuelas, etc.',
  maptopo_introduction: 'Los mapas topográficos son un registro detallado de una zona terrestre, que ofrece posiciones geográficas y elevaciones de elementos naturales y artificiales. Muestran la forma del terreno, las montañas, los valles y las llanuras mediante curvas de nivel (líneas de igual elevación sobre el nivel del mar)',
  maph4: 'Por favor, seleccione una región para descargar de la tabla de abajo.',
  maph5: 'Cómo se instala',
  mapl1: 'Por favor, asegúrese de que tiene suficiente espacio en su disco duro antes de la descarga.',
  mapl2: 'Descomprima el archivo descargado en su disco duro.',
  mapl3: 'Localice la carpeta de mapas y cópiela en el reloj.',
  mapl4: 'ver:',
  maph6: 'Mapa del paisaje ',
  mapt3: 'Tiempo estimado de transferencia del archivo: ',
  maph7: 'Mapa Topográfico ',
  mapt4: 'Tiempo estimado de transferencia de archivos: ',
  mapconditions: 'Términos y condiciones de ©OpenStreetMap',
  mapconditions_1: 'Este mapa fue compilado utilizando la base de datos ©OpenStreetMap (OSM) generada por la comunidad. El uso de este mapa no está sujeto a los términos del Acuerdo de Licencia de Usuario Final (EULA), sino a los siguientes términos y condiciones de ©OpenStreetMap：',
  mapconditions_2: 'Los datos de ©OpenStreetMap son propiedad de los colaboradores de ©OpenStreetMap y están sujetos a la licencia de base de datos abierta. Cualquier derecho sobre el contenido individual de los datos de ©OpenStreetMap está sujeto a la licencia de contenido de bases de datos.',
  maph9: 'Alcance de los datos',
  mapt7: 'Este mapa incluye únicamente la red de calles y caminos, las vías fluviales y las características naturales. No incluye fronteras internacionales, límites administrativos ni puntos de interés como tiendas, restaurantes o zonas de aparcamiento.',
  maph10: 'Advertencia:',
  mapt8: '©COROS sólo da formato y estilo a los mapas de ©OpenStreetMap. ©COROS no garantiza la exactitud o integridad de los datos cartográficos de los productos ©OpenStreetMap. Usted acepta utilizarlos bajo su propia responsabilidad.',
  mapt9: 'Usted asume toda la responsabilidad y el riesgo relacionados con su uso de los datos cartográficos. ©COROS no se responsabiliza ante usted de los datos cartográficos y no hace ni le da ninguna representación o garantía, expresa o implícita, en relación con los datos cartográficos, incluyendo, pero sin limitarse a, la exactitud, integridad, fiabilidad o utilidad de los datos cartográficos. Por lo tanto, ©COROS no se hace responsable de ningún daño o reclamación, directa o indirecta, que se derive del uso de los datos cartográficos.',
  mapt10: 'Los mapas de ©COROS están pensados únicamente como referencia y no deben utilizarse para ningún propósito que requiera mediciones precisas de dirección, distancia, ubicación o terreno.',
  mapt11: 'Horas',
  mapcopyright: '© 2021 | COROS Wearables Inc.',
  mapregion: 'región',
  mapgeomap: 'Paisaje',
  downloadprocess: 'Generación de archivos',
  shiftPress: 'Para seleccionar una región: Mantenga pulsada la tecla SHIFT y arrastre el cursor/ratón sobre la región deseada.',
  mapcontours: 'Topo',
  maplanguage: 'idioma',
  mapcn: '中文',
  mapen: 'Inglés',
  africa: 'África',
  antarctica: 'Antártida',
  asia: 'Asia',
  asia1: 'Asia - 1',
  asia2: 'Asia - 2',
  asia3: 'Asia - 3',
  asia4: 'Asia - 4',
  'north-america1': 'América del Norte - 1',
  'north-america2': 'América del Norte - 2',
  'australia-oceania': 'Oceanía',
  'central-america': 'América Central',
  europe: 'Europa',
  'north-america': 'América del Norte',
  'south-america': 'América del Sur',
  maplocaldown: 'Descargar',
  mapdownloadbutton: 'Descargar mapa',
  maphelplink: 'Instrucciones de instalación',
  mapdownloadtitle: 'Descargue los mapas a continuación',
  mapmacoshelp: 'Instrucciones detalladas para MacOS',
  mapwinhelp: 'Instrucciones detalladas para Windows',
  macostitle: 'Instrucciones de instalación',
  macost1: '1. Seleccione el archivo zip para descomprimirlo. Esto guardará el archivo en su disco duro y como una carpeta en su escritorio (por ejemplo: Asia3_map.).',
  macost2: '2. Conecte su reloj COROS al ordenador a través del cable USB/de carga y espere a que aparezca el símbolo del disco en su escritorio.',
  macost3: '3. Seleccione el símbolo del disco (VERTIX 2) para abrir el directorio raíz de su reloj. Verás dos carpetas, "mapa" y "Música" ya instaladas en el directorio de tu reloj (ver más abajo).',
  macost4: '4. A continuación, mantenga pulsada la tecla "opción" mientras arrastra la carpeta "map" descargada (con la etiqueta: map) al directorio raíz de su reloj COROS. Vea en la foto de abajo un ejemplo utilizando Asia1_landscape como ejemplo.',
  macost5: 'Si se le pide, seleccione "Combinar" en el diálogo emergente y espere a que se complete la copia.',
  macoscautions: 'Por favor, lea:',
  macosc1: '1. Para no reemplazar el directorio [map] por defecto de su reloj, siga los siguientes pasos: Cuando acceda y copie el directorio de mapas, pulse la tecla "opción" del teclado mientras arrastra y copia. Dependiendo del sistema operativo de su ordenador, es posible que aparezca una ventana emergente en la que se le pide que "detenga, sustituya o combine". Si ve esta ventana emergente, seleccione "Combinar". No seleccione "reemplazar" ya que esto eliminará los archivos de mapas originales en el directorio [map] de su reloj.',
  macosc2: '2. Dependiendo de la velocidad de Internet y del tamaño de la descarga, los archivos de mapas pueden tardar bastante tiempo en ser transferidos al disco duro de su reloj. Por favor, planifique en consecuencia y asegúrese de que su ordenador está correctamente conectado a la corriente.',
  macosc3: '3. Asegúrese de que el directorio [map] se encuentra en el directorio raíz de su reloj y no cambie el nombre del archivo, ya que esto causará problemas de instalación.',
  windowstitle: 'Instrucciones',
  windowst1: '1. Seleccione el archivo zip para descomprimirlo. Esto guardará el archivo en su disco duro y como una carpeta en su escritorio (por ejemplo: North_America_Contour).',
  windowst2: '2. Conecte el reloj al ordenador mediante el cable USB, seleccione "Explorador de archivos" en la barra de tareas y luego "Este PC" en el panel izquierdo. Aquí verá que su reloj COROS aparece como un disco duro.',
  windowst3: '3. Ahora localice el directorio/archivo de mapa extraído del paso 1 (en su escritorio o en sus archivos), haga clic con el botón derecho del ratón en el directorio [mapa], haga clic en el menú "Enviar", luego elija "VERTIX 2" y espere a que finalice la transferencia del archivo.',
  windowscautions: 'Por favor, lee:',
  windowsc1: '1. Para evitar la sustitución del directorio [map] predeterminado en su reloj, si se le pide, seleccione "Combinar" en el cuadro emergente. Por favor, no seleccione "reemplazar" ya que esto eliminará los archivos de mapas originales en el directorio [mapa] de su reloj.',
  windowsc2: '2. Dependiendo de la velocidad de Internet y del tamaño de la descarga, los archivos de mapas pueden tardar bastante tiempo en ser transferidos al disco duro de su reloj. Por favor, planifique en consecuencia y asegúrese de que su ordenador está correctamente conectado a la corriente.',
  windowsc3: '3.  Asegúrese de que el directorio [map] se encuentra en el directorio raíz de su reloj y no cambie el nombre del archivo, ya que esto causará problemas de instalación.',
  updatedAt: 'Hora de actualización：{updateTime}',
  A3000: 'Select the firmware and update (update to the latest version is recommended)',
  A3001: '{version} and above',
  A3002: 'Other firmware updates',
  A3003: 'How to check your watch firmware version',
  A3004: 'Check the firmware version in COROS APP> Profile > Device page'
};

/***/ }),

/***/ 84216:
/***/ ((module) => {

module.exports = {
  title: 'Reloj GPS COROS VERTIX 2',
  keywords: 'palabras clave',
  description: 'Nuestro reloj más capaz para los aventureros que van al extremo.',
  vertix2title: 'COROS VERTIX 2',
  vertix2accessories: 'ACCESORIOS',
  content1c: 'Una aventura, por definición, es una experiencia emocionante. Con el reloj de aventura con GPS VERTIX 2, COROS le ofrece audaces innovaciones, así como avances inimaginables en las funciones existentes, todo ello para que pueda conquistar nuevos y emocionantes retos en los que quizá ni siquiera haya pensado. No importa a dónde te lleven tus actividades, el VERTIX 2 te acompañará en todo momento.',
  content2tit: 'Bienvenido al carril exprés',
  content2c: 'El VERTIX 2 puede hablar con los cinco principales sistemas de satélites (GPS, GLONASS, Galileo, QZSS y Beidou) al mismo tiempo. Incluso ofrece comunicación por satélite de doble frecuencia: un carril exprés para una señal más rápida y mejor que antes sólo estaba disponible en los productos de aviación.',
  content2desc: 'VERTIX 2 aporta enormes mejoras al trazado del GPS cuando se navega entre edificios altos, en lo profundo del bosque o junto a paredes rocosas, lo que se ha considerado un reto de precisión para las generaciones anteriores de relojes GPS.',
  content3tit: 'Aún más potencia',
  content3c: 'Construido desde cero, el VERTIX 2 utiliza nuestro chipset y procesador de última generación, lo que permite una experiencia COROS mejor y más rápida. Con estos avances, VERTIX 2 es más de un 20% más rápido que el VERTIX original.',
  content4tit: 'La gran pantalla',
  content4c: 'Una pantalla de 1,4 pulgadas con un 16% más de resolución permite al VERTIX 2 presentar más información de un vistazo y mantenerle al día de las métricas clave en cualquier momento y lugar. Además, el VERTIX 2 admite hasta ocho campos de datos en una sola página, lo que le permite disponer de más información durante sus actividades.',
  'performance-improvement-1': '1,4 en',
  'performance-improvement-2': '16%',
  content5tit: 'Interfaz de usuario rediseñada',
  content5c: 'Nuestra nueva interfaz de usuario libera el potencial de nuestro icónico dial digital. Ahora puedes desplazarte sin esfuerzo para ver tus métricas diarias más importantes. Una pantalla táctil mejorada te permite realizar ciertas acciones con la punta del dedo, proporcionando un control preciso al navegar, así como al acceder a los campos de música y datos.',
  content6tit: 'Duración de la batería alucinante (de nuevo)',
  content6c: '¿Qué sucede cuando se toma la increíble eficiencia de la batería de COROS y se la hace aún mejor? No busques más que el VERTIX 2 para descubrirlo. El VERTIX 2 ofrece la mayor duración de la batería que jamás haya visto en un reloj GPS. Con 127 horas de seguimiento GPS completo estándar y 39 días de uso normal, el VERTIX 2 duplica con creces la duración de la batería de su predecesor, ya líder en el mercado. El VERTIX 2 está preparado para tus aventuras más largas y duras.',
  content6cKeyword: 'mercado',
  content7tit: 'Quién dirige el mundo',
  content7c: 'El Reloj GPS de Aventura VERTIX 2 ofrece cartografía global sin conexión, e incluye: Paisaje, Topo y modos híbridos. El VERTIX 2 viene con un mapa global completo de Paisaje fuera de la caja y los usuarios pueden descargar su mapa Topo por regiones de forma gratuita desde COROS.com. Al acercar y alejar el mapa con el dial digital, o al arrastrar por el mapa con la pantalla táctil de gran respuesta, el VERTIX 2 ofrece la mejor experiencia de navegación en la muñeca.',
  content8tit: 'No te estreses',
  content8c: 'Puedes utilizar el VERTIX 2 para medir tu Variabilidad de la Frecuencia Cardíaca (VFC) directamente desde tu muñeca. La VFC es una métrica ideal para medir la respuesta de tu cuerpo al estrés y su capacidad de recuperación. El sistema COROS convierte cada VFC individualizada en una métrica fácilmente comparable de atleta a atleta.',
  content9tit: 'Tenemos el ritmo',
  content9c: 'Con 32 GB de almacenamiento a bordo, el VERTIX 2 puede guardar más datos, más entrenamientos, más rutas y, por primera vez en un reloj GPS COROS, música. Ahora puedes descargar y controlar tus archivos de audio directamente desde tu reloj GPS. El VERTIX 2 también dispone de capacidades Wi-fi adicionales que añaden aún más posibilidades de emparejamiento de accesorios y mucho más.',
  content10tit: 'Mando de control de la cámara Insta360™',
  content10c: 'Si tienes una cámara de acción Insta360™ (Insta360 One X2 y One R), ahora puedes controlar tu cámara desde tu Reloj GPS. Esto significa que también puedes colocar tu cámara fuera del alcance de tus brazos para conseguir las mejores tomas.',
  content11tit: 'Cómo se cuelga',
  content11c: 'Para aquellas actividades en las que un reloj en la muñeca no tiene sentido, pero aún así necesitas tus datos, como en una misión en una gran pared con Tommy Caldwell, aprovecha el COROS Watch Carabiner. Este accesorio imprescindible para los escaladores y otros aventureros, se bloquea en el marco de su reloj y se engancha a su arnés u otro equipo.',
  content12tit: 'El ecosistema COROS',
  content12c: 'VERTIX 2 ofrece todo lo anterior, además de estas otras fantásticas funciones de COROS.',
  learnmore: 'CONOZCA MÁS',
  speedleft1: 'Modelo',
  speedright1: ['Reloj de aventura con GPS COROS VERTIX 2'],
  speedleft2: 'Tamaño de la pantalla',
  speedright2: ['1,4 pulgadas'],
  speedleft3: 'Resolución de la pantalla',
  speedright3: ['280 x 280 (64 colores)'],
  speedleft4: 'Tipo de pantalla',
  speedright4: ['Pantalla táctil con memoria siempre activa LCD'],
  speedleft5: 'Material de la pantalla',
  speedright5: ['Cristal de zafiro'],
  speedleft6: 'Material del bisel',
  speedright6: ['Aleación de titanio de grado 5 con revestimiento de PVD'],
  speedleft7: 'Material de la cubierta',
  speedright7: ['Aleación de titanio con revestimiento de PVD'],
  speedleft8: 'Correa del reloj',
  speedright8: ['Correa de ajuste rápido de 26 mm'],
  speedleft9: 'Material de la correa',
  speedright9: ['Silicona/Nylon'],
  speedleft10: 'Tamaño físico',
  speedright10: ['50.3 x 50.3 x 15.7mm'],
  speedleft11: 'Peso con banda de silicona',
  speedright11: ['89g'],
  speedleft12: 'Duración de la batería',
  speedright12: ['GPS completo estándar (GPS/QZSS) 140 horas', 'GPS completo estándar con reproducción de música (GPS/QZSS): 35 horas', 'Todos los sistemas encendidos (GPS/QZSS+GLONASS+Galileo+BeiDou): 90 horas', 'Todos los sistemas encendidos con música (GPS/QZSS+GLONASS+Galileo+BeiDou): 30 horas', 'Todos los sistemas + doble frecuencia encendidos (GPS/QZSS+GLONASS+Galileo+BeiDou con doble frecuencia): 50 horas', 'UltraMax: 240 horas', 'Uso diario: 60 días'],
  speedleft13: 'Conexión inalámbrica',
  speedright13: ['Bluetooth® 5.0 modo dual, Wi-Fi®.'],
  speedleft14: 'Conexión de accesorios',
  speedright14: ['Bluetooth®.'],
  speedleft15: 'Memoria',
  speedright15: ['32 GB'],
  speedleft16: 'Chipset de satélite',
  speedright16: ['Chipset GNSS de doble frecuencia para todos los satélites'],
  speedleft17: 'Sensores',
  speedright17: ['Pulsioxímetro óptico', 'Sensor óptico de frecuencia cardíaca', 'Sensor de electrocardiograma', 'Altímetro barométrico', 'Acelerómetro', 'Brújula', 'Giroscopio', 'Termómetro'],
  speedleft18: 'Resistencia al agua',
  speedright18: ['10 ATM'],
  speedleft19: 'Temperatura de trabajo',
  speedright19: ['-30°C a 50°C (-22°F a 122°F)'],
  speedleft20: ' Temperatura de almacenamiento ',
  speedright20: ['-30°C a 60°C (-22°F a 140°F)'],
  speedleft21: 'Tiempo de carga',
  speedright21: ['Menos de 2 horas'],
  speedleft22: 'Soporte de mapas/navegación',
  speedright22: ['Mapas topográficos y de calles globales sin conexión', 'Navegación por migas de pan con pantalla táctil y dial digital', 'Punto de control', 'Volver al inicio', 'Detalles de elevación', 'Distancia al destino', 'Coordenadas GPS/MGRS', 'Alerta de tormenta'],
  speedleft23: 'Soporte de música',
  speedright23: ['Almacenamiento interno y transmisión por auriculares Bluetooth para contenidos sin conexión'],
  speedleft24: 'Formato de música',
  speedright24: ['MP3'],
  speedleft25: 'Entrenamientos soportados',
  speedright25: ['Carrera, cinta, pista, caminata, escalada de montaña, ciclismo, ciclo indoor, piscina, aguas abiertas, triatlón, cardio gym, cardio GPS, esquí, snowboard, esquí de fondo, esquí de travesía, multideporte, fuerza, entrenamiento, speedsurfing, windsurfing, aguas bravas, aguas tranquilas, remo, maquina de remo'],
  features: {
    category: 'Categoría',
    categoryVal: ['Característica'],
    activityAlert: 'Alerta de actividad',
    activityAlertVal: ['Alerta de cadencia', 'Alerta de distancia', 'Alerta de subida/bajada de altura', 'Alerta de ritmo cardíaco', 'Alerta de nutrición', 'Alerta de ritmo', 'Alerta de potencia', 'Alerta de velocidad', 'Alerta de pasos'],
    blt: 'Accesorios Bluetooth',
    bltVal: ['Cámara de acción (GoPro, Insta360)', 'Entrenador de ciclismo', 'Transmisión de la frecuencia cardíaca', 'Remo Concept 2', 'Monitor de temperatura corporal CORE', 'COROS POD', 'Correa de pecho para la frecuencia cardíaca', 'Medidor de potencia', 'Sensor de velocidad/cadencia', 'Stryd'],
    dailyAlert: 'Alerta diaria',
    dailyAlertVal: ['Calorías activas y objetivo de tiempo de ejercicio', 'Alerta de altitud', 'Alerta de tormenta', 'Plan de entrenamiento'],
    fitness: 'EvoLab - Fitness general',
    fitnessVal: ['Distribución de la intensidad en 4 semanas', 'Carga total de 7 días y recomendación', 'Condición física básica', 'Fatiga', 'Impacto de la carga', 'Temporizador de recuperación y sugerencia', 'Efecto del entrenamiento', 'Carga de entrenamiento'],
    roadRuning: 'EvoLab - Carrera en carretera',
    roadRuningVal: ['Nivel de maratón', 'Predictor de carrera', 'Rendimiento en carrera', 'RunningVO2 Max', 'Zonas de frecuencia cardíaca de umbral', 'Zonas de ritmo de umbral', 'Enfoque del entrenamiento'],
    nav: 'Navegación',
    navVal: ['Volver al Inicio', 'Puntos de control', 'Detalles de elevación', 'Capa de mapa híbrida', 'Capa de mapa de paisaje', 'Capa de mapa topográfico', 'Alerta de salida de la ruta', 'Navegación por migas de pan con pantalla táctil'],
    satellite: 'Sistemas de satélite',
    satelliteVal: ['Todos los sistemas + Dual FREQ ON (GPS, GLONASS, Galileo, Beidou, QZSS)', 'Todos los sistemas activados (GPS, GLONASS, Galileo, Beidou, QZSS)', 'Sólo GPS estándar', 'Datos de localización de satélites GPS', 'Formato de localización - MGRS/GPS', 'Señal de satélite'],
    sensors: 'Sensor',
    sensorsVal: ['Brújula 3D', 'Acelerómetro', 'GNSS de doble frecuencia para todos los satélites', 'Altímetro barométrico', 'Sensor de electrocardiograma', 'Giroscopio', 'Termómetro', 'Sensor de frecuencia cardíaca basado en la muñeca', 'Pulsioxímetro de muñeca'],
    system: 'Sistema',
    systemVal: ['Alarma, cronómetro, temporizador', 'Bloqueo automático', 'Luz de fondo (basada en botón/guía)', 'Informe y predicción del uso de la batería', 'Ubicación personalizable de la esfera digital', 'Dial digital', 'Índice HRV', 'Atajo de tecla de luz', 'Metrónomo', 'Música (sin conexión)', 'Modo nocturno', 'Wi-Fi'],
    lang: 'Idioma del sistema',
    langVal: ['Deutsch, English, Español, Français, Italiano, Polski, Português, Pусский, ภาษาไทย, 한국어, ⽇本語, 简体中文, 繁体中文'],
    widget: 'Widget diario',
    widgetVal: ['Calorías activas', 'Presión atmosférica', 'Elevación', 'Tiempo de ejercicio', 'Pisos subidos', 'Ritmo cardíaco', 'Métricas clave de EvoLab', 'Seguimiento del sueño', 'Notificaciones inteligentes', 'Pasos', 'Salida y puesta del sol', 'Temperatura', 'Plan de entrenamiento'],
    workoutFeats: 'Función de entrenamiento',
    workoutFeatsVal: ['Pausa automática', 'Desplazamiento automático', 'Color de fondo (blanco/negro)', 'Entrenamiento por intervalos básico/avanzado', 'Página de datos personalizable', 'Alertas de mensajes y llamadas durante el entrenamiento', 'Reanudar más tarde', 'Desplazamiento táctil', 'UltraMax', 'Carrera virtual', 'Potencia de carrera basada en la muñeca'],
    swim: 'Función de entrenamiento - piscina/agua abierta',
    swimVal: ['Detección del tipo de brazada'],
    skiTouring: 'Función de entrenamiento - Esquí de travesía',
    skiTouringVal: ['Detección de ascenso/descenso'],
    snowboard: 'Función de entrenamiento - Esquí/Snowboard',
    snowboardVal: ['Detección de ascenso/descenso'],
    strength: 'Característica de entrenamiento - Fuerza',
    strengthVal: ['Detección de repeticiones'],
    trackRun: 'Función de entrenamiento - pista',
    trackRunVal: ['Detección de pista'],
    workoutMode: 'Modo de entrenamiento',
    workoutModeVal: ['ciclismo', 'Agua plana', 'Cardio GPS', 'Cardio Gym', 'Caminata', 'Ciclo Indoor', 'Maquina de Remo', 'pista cubierta', 'Escalada de montaña', 'Multideporte', 'Escalada de varios niveles', 'Aguas abiertas', 'piscina', 'Remo', 'Carrera', 'Esquí', 'Esquí de travesía', 'Snowboard', 'Speedsurfing', 'Fuerza', 'pista', 'pista', 'Entrenamiento (Programas estructurados)', 'Plan de entrenamiento', 'Triatlón', 'Caminata', 'Aguas bravas', 'Windsurf', 'Esquí XC']
  }
};

/***/ }),

/***/ 83303:
/***/ ((module) => {

module.exports = {
  title: 'COROS PACE 2 | Édition Eliud Kipchoge',
  keywords: 'COROS PACE 2 - La montre GPS la plus légère, et qui a du punch.',
  description: 'COROS PACE 2 est la montre GPS la plus légère du marché et le partenaire d\'entraînement idéal pour les athlètes en quête d\'un nouveau record personnel.',
  ekaccessories: 'BOUTIQUE D\'ACCESSOIRES PACE 2',
  ektitle: 'COROS PACE 2 Edition Eliud Kipchoge',
  content1c: 'Le plus grand marathonien de tous les temps - il n\'y a jamais eu de coureur comme Eliud Kipchoge. Il possède tous les titres que l\'on peut rêver d\'obtenir sur la distance de 26,22 miles/42,195 km. Premier humain à passer sous les 2 heures sur marathon, détenteur du record du monde, médaillé d\'or olympique et vainqueur des marathons de Berlin, Londres et Chicago.',
  content1tit: '01:59:40',
  content2tit: 'NO HUMAN \n IS LIMITED',
  content2c: 'Le mantra d\'Eliud est "No Human is Limited" et avec COROS, nous explorons la perfection. Ensemble, nous avons décidé de célébrer cet esprit avec un package spécial à son effigie qui comprend la montre COROS préférée d\'Eliud - l\'édition spéciale COROS PACE 2 Eliud Kipchoge Edition, et le COROS POD. Lorsque vous porterez l\'EK Signature Edition PACE 2, nous espérons que vous serez inspiré par Eliud et que vous vous pousserez à vous entraîner un peu plus dur, et à courir un peu plus vite.',
  content3tit: 'LA PACE 2 D\'ELIUD KIPCHOGE',
  content3c: 'Contrairement à la PACE 2 traditionnelle, l\'édition Eliud Kipchoge présente des accents rouges et verts inspirés du drapeau du Kenya, pays natal d\'Eliud. La montre présente également une lunette blanche avec un cadran numérique rouge et un bouton lap/retour vert.',
  content4tit: 'DES BRACELETS UNIQUES EN LEUR GENRE',
  content4c: 'La PACE 2 Edition Eliud Kipchoge est équipée de bracelets en silicone et en nylon, qui, comme le corps de la montre, présentent une base blanche avec des accents rouges et verts.',
  content5tit: 'DE MEILLEURES DONNEES POUR DE MEILLEURES COURSES',
  content5c: 'Pour s\'entraîner avec la même concentration qu\'Eliud Kipchoge, il faut collecter les mêmes données qu\'Eliud et cela signifie utiliser son accessoire préféré - le COROS POD. Le POD (Performance Optimization Device) vous offre, comme à Eliud, des mesures avancées, notamment :',
  'content5-icon-1-text': 'Rapport de foulée',
  'content5-icon-1-text-sub': '(Hauteur/Longueur)',
  'content5-icon-2-text': 'Terrain',
  'content5-icon-2-text-sub': 'Temps de contact',
  'content5-icon-3-text': 'Forme',
  'content5-icon-3-text-sub': 'Puissance',
  'content5-icon-4-text': 'Gauche/Droite',
  'content5-icon-4-text-sub': 'Equilibre',
  'content5-icon-5-text': 'Foulée',
  'content5-icon-5-text-sub': 'Hauteur',
  content5info: 'L\'utilisation du POD en tandem avec le PACE 2 vous aidera à optimiser davantage votre entraînement pour atteindre vos objectifs.',
  content6tit: 'Entraîne-toi comme le G.O.A.T. avec EvoLab',
  content6c: 'Lorsque vous utilisez EvoLab, Eliud est toujours à vos côtés. EvoLab fournit à chaque utilisateur un score unique de niveau sur marathon de 0 à 100. Tu savais que le marathon d\'Eliud en moins de 2 heures est le référentiel pour le score maximal de 100 ? Tu peux maintenant voir comment toi et tes partenaires d\'entraînement vous situez par rapport au plus grand marathonien de tous les temps. Même si tu n\'es pas tout à fait prêt à franchir la barrière des 2 heures, n\'oublie pas de consulter le tout nouveau prédicteur de course pour voir comment tu peux performer lors de ton prochain 5 km, 10 km, semi-marathon ou marathon, la distance préférée d\'Eliud.',
  content7tit: 'Édition spéciale limitée',
  content7c: 'Eliud est peut-être médaillé d\'or olympique sur marathon aujourd\'hui, mais sa première médaille d\'or en senior a été remportée sur 5 000 m lors des Championnats du monde 2003 à Paris. Pour rendre hommage à ce titre, COROS n\'a produit que 5 000 unités de la COROS PACE 2 Eliud Kipchoge Edition !'
};

/***/ }),

/***/ 57687:
/***/ ((module) => {

module.exports = {
  maptitle: 'Téléchargement de la carte',
  mapsubheader: 'Sélection de la région',
  mapdownloadentireregion: 'Télécharger l\'ensemble des régions',
  mapwelcome: 'Bienvenue sur la toute nouvelle page de téléchargement des cartes COROS. Vous trouverez ici nos cartes topographiques (Topo) et paysages actuelles, disponibles en téléchargement entièrement gratuit ! Pour le moment, les cartes topographiques et paysagères ci-dessous ne sont disponibles que sur VERTIX 2, mais nous sommes heureux d\'annoncer que les cartes topographiques seront également disponibles pour les utilisateurs d\'APEX Pro et de VERTIX 1 au cours de l\'année.',
  mapdownload_instruction: 'Suivez ces instructions pour télécharger la carte topographique (Topo) et/ou paysage de votre région :',
  mapdownload_instruction_list1: '- À l\'aide de l\'outil de sélection de région ci-dessous, maintenez le bouton SHIFT enfoncé tout en faisant glisser votre souris/curseur sur la zone souhaitée.',
  mapdownload_instruction_list2: '- Une fois que vous avez sélectionné la région souhaitée, appuyez sur le bouton "Télécharger" pour afficher les tailles de fichier approximatives pour le téléchargement de la carte topographique ou paysage de cette région.',
  mapdownload_tips: '* Gardez à l\'esprit, lorsque vous choisissez une région, que les modèles APEX Pro et VERTIX 1 ont 4 Go de stockage embarqué, tandis que le modèle VERTIX 2 en a 32.',
  mapdownload_message: 'Le téléchargement a commencé, fermez la fenêtre pop-up pour voir la progression.',
  mapdownload_instruction_mobile: 'Veuillez utiliser votre ordinateur pour télécharger les cartes à partir de cette page.',
  maplandscope_introduction: 'Les cartes de paysages fournissent actuellement des informations telles que les rues, les principaux réseaux routiers, les caractéristiques naturelles et les cours d\'eau. Les cartes paysagères ne comprennent pas les frontières internationales, les limites administratives ou les informations sur les points d\'intérêt tels que les restaurants, les stations-service, les magasins, les écoles, etc.',
  maptopo_introduction: 'Les cartes topographiques sont un enregistrement détaillé d\'une zone terrestre, donnant les positions géographiques et les altitudes des éléments naturels et artificiels. Elles montrent la forme du terrain, les montagnes, les vallées et les plaines grâce à des courbes de niveau (lignes d\'altitude égale au-dessus du niveau de la mer).',
  maph4: 'Veuillez sélectionner une région à télécharger dans le tableau ci-dessous.',
  maph5: 'Comment installer',
  mapl1: 'Veuillez vous assurer que vous disposez de suffisamment d\'espace sur votre disque dur avant de télécharger.',
  mapl2: 'Décompressez le fichier téléchargé sur votre disque dur.',
  mapl3: 'Localisez le dossier de carte et copiez-le sur la montre.',
  mapl4: 'voir :',
  maph6: 'Carte de paysage',
  mapt3: 'Durée estimée du transfert du fichier :',
  maph7: 'Carte topographique',
  mapt4: 'Durée estimée du transfert du fichier :',
  mapconditions: '©OpenStreetMap conditions générales',
  mapconditions_1: 'Cette carte a été compilée en utilisant la base de données ©OpenStreetMap (OSM) générée par la communauté. L\'utilisation de cette carte n\'est pas soumise aux conditions du contrat de licence de l\'utilisateur final (CLUF), mais aux conditions suivantes de ©OpenStreetMap：.',
  mapconditions_2: 'Les données ©OpenStreetMap sont protégées par le droit d\'auteur des contributeurs ©OpenStreetMap et sont soumises à la licence Open Database License. Tous les droits sur le contenu individuel des données ©OpenStreetMap sont soumis à la licence de contenu de base de données.',
  maph9: 'Gamme de données',
  mapt7: 'Cette carte ne comprend que le réseau de rues et de sentiers, les cours d\'eau et les caractéristiques naturelles. Elle ne comprend pas les frontières internationales, les limites administratives ou les points d\'intérêt tels que les magasins, les restaurants ou les aires de stationnement.',
  maph10: 'Avertissement',
  mapt8: '©COROS ne fait que formater et styliser les cartes ©OpenStreetMap. ©COROS ne garantit pas l\'exactitude ou l\'exhaustivité des données cartographiques des produits ©OpenStreetMap. Vous acceptez de les utiliser à vos propres risques.',
  mapt9: 'Vous assumez l\'entière responsabilité et les risques liés à votre utilisation des données cartographiques. ©COROS n\'est pas responsable des données cartographiques et ne fait ni ne vous donne aucune représentation ou garantie, expresse ou implicite, en rapport avec les données cartographiques, y compris, mais sans s\'y limiter, l\'exactitude, l\'exhaustivité, la fiabilité ou la facilité d\'utilisation des données cartographiques. Par conséquent, ©COROS n\'est pas responsable envers vous de tout dommage ou réclamation, direct ou indirect, résultant de votre utilisation des données cartographiques.',
  mapt10: 'Les cartes ©COROS sont uniquement destinées à servir de référence et ne doivent pas être utilisées à des fins nécessitant des mesures précises de la direction, de la distance, de l\'emplacement ou du terrain.',
  mapt11: 'Heures',
  mapcopyright: '2021 | COROS Wearables Inc.',
  mapregion: 'région',
  mapgeomap: 'Paysage',
  downloadprocess: 'Génération de fichiers',
  shiftPress: 'Pour sélectionner une région : Maintenez la touche SHIFT enfoncée et faites glisser votre curseur/souris sur la région souhaitée.',
  mapcontours: 'Topo',
  maplanguage: 'langue',
  mapcn: '中文',
  mapen: 'Anglais',
  africa: 'Afrique',
  antarctica: 'Antarctique',
  asia: 'Asie',
  asia1: 'Asie - 1',
  asia2: 'Asie - 2',
  asia3: 'Asie - 3',
  asia4: 'Asie - 4',
  'north-america1': 'Amérique du Nord - 1',
  'north-america2': 'Amérique du Nord - 2',
  'australia-oceania': 'Océanie',
  'central-america': 'Amérique centrale',
  europe: 'Europe',
  'north-america': 'Amérique du Nord',
  'south-america': 'Amérique du Sud',
  maplocaldown: 'Télécharger',
  mapdownloadbutton: 'Télécharger la carte',
  maphelplink: 'Instructions d\'installation',
  mapdownloadtitle: 'Téléchargez les cartes ci-dessous',
  mapmacoshelp: 'Instructions détaillées pour MacOS',
  mapwinhelp: 'Instructions détaillées pour Windows',
  macostitle: 'Instructions d\'installation',
  macost1: '1.\n- Sélectionnez le fichier zip pour le décompresser. Le fichier sera alors enregistré sur votre disque dur et dans un dossier sur votre bureau (par exemple : Asia3_map.).',
  macost2: '2. Branchez votre montre COROS à l\'ordinateur via le câble USB/de recharge et attendez que le symbole du disque apparaisse sur votre bureau.',
  macost3: '3. Sélectionnez le symbole du disque (VERTIX 2) pour ouvrir le fichier de votre montre. Vous verrez deux dossiers, "map" et "Music" déjà installés dans le fichier de votre montre (voir ci-dessous).',
  macost4: '4. Ensuite, appuyez sur la touche "option" et maintenez-la enfoncée tout en faisant glisser le dossier "map" téléchargé (étiqueté : map) vers le fichier de votre montre COROS. Voir la photo ci-dessous par exemple utilisant Asia1_landscape comme exemple.',
  macost5: 'Si vous y êtes invité, sélectionnez "Fusionner" dans la boîte de dialogue contextuelle et attendez que la copie soit terminée.',
  macoscautions: 'Veuillez lire :',
  macosc1: '1. Pour éviter de remplacer le dossier [map] par défaut de votre montre, veuillez suivre les étapes suivantes : Lorsque vous accédez au répertoire des cartes et que vous le copiez, appuyez sur la touche \\"option\\" du clavier tout en faisant glisser et en copiant. Selon le système d\'exploitation de votre ordinateur, une fenêtre contextuelle peut s\'afficher vous demandant d\'arrêter, de remplacer ou de fusionner. Si vous voyez cette fenêtre, sélectionnez "Fusionner". Ne sélectionnez pas "remplacer", car cela supprimerait les fichiers de carte originaux dans le répertoire [map] de votre montre.',
  macosc2: '2. En fonction de la vitesse d\'Internet et de la taille du téléchargement, le transfert des fichiers cartographiques sur le disque dur de votre montre peut prendre un temps considérable. Veuillez prévoir en conséquence et vous assurer que votre ordinateur est correctement connecté à l\'alimentation.',
  macosc3: '3. Veuillez vous assurer que le dossier [map] est placé dans le fichier de votre montre et ne renommez pas le fichier, car cela entraînerait des problèmes d\'installation.',
  windowstitle: 'Instructions',
  windowst1: '1. Sélectionnez le fichier zip pour le décompresser. Le fichier sera alors enregistré sur votre disque dur dans un dossier sur votre bureau (par exemple : North_America_Contour).',
  windowst2: '2. Branchez la montre à l\'ordinateur via le câble USB, sélectionnez "Explorateur de fichiers" dans la barre des tâches puis "Ce PC" dans le volet de gauche. Vous verrez alors votre montre COROS apparaître comme un disque dur.',
  windowst3: '3. Localisez maintenant le dossier/fichier carte extrait de l\'étape 1 (sur votre bureau ou dans vos fichiers), faites un clic droit sur le répertoire [carte], cliquez sur le menu "Envoyer", puis choisissez "VERTIX 2" et attendez la fin du transfert du fichier.',
  windowscautions: 'Veuillez lire :',
  windowsc1: '1. Pour éviter de remplacer le dossier [map] par défaut de votre montre, si vous y êtes invité, sélectionnez "Fusionner" dans la fenêtre contextuelle. Ne sélectionnez pas "Remplacer", car cela supprimerait les fichiers de carte originaux dans le dossier [map] de votre montre.',
  windowsc2: '2. En fonction de la vitesse d\'Internet et de la taille du téléchargement, le transfert des fichiers cartographiques sur le disque dur de votre montre peut prendre un temps considérable. Veuillez prévoir en conséquence et vous assurer que votre ordinateur est correctement connecté à l\'alimentation.',
  windowsc3: '3.  Veuillez vous assurer que le dossier [map] est placé dans le fichier de votre montre et ne renommez pas le fichier, car cela entraînerait des problèmes d\'installation.',
  updatedAt: 'Update Time：{updateTime}',
  A3000: 'Select the firmware and update (update to the latest version is recommended)',
  A3001: '{version} and above',
  A3002: 'Other firmware updates',
  A3003: 'How to check your watch firmware version',
  A3004: 'Check the firmware version in COROS APP> Profile > Device page'
};

/***/ }),

/***/ 85988:
/***/ ((module) => {

module.exports = {
  title: 'Montre GPS COROS VERTIX 2',
  keywords: 'mots-clés',
  description: 'Pour les aventures en conditions extrêmes',
  vertix2title: 'COROS VERTIX 2',
  vertix2accessories: 'ACCESSOIRES',
  content1c: "Par définition, une aventure est une expérience passionnante. Avec la montre GPS d'aventure VERTIX 2, COROS vous propose des innovations et l'amélioration des fonctions existantes - tout cela pour vous permettre de relever de nouveaux défis auxquels vous n'avez peut-être même pas encore pensé. Quelle que soit votre destination, la VERTIX 2 sera là à chaque étape.",
  content2tit: 'Bienvenue sur la voie express',
  content2c: "La VERTIX 2 peut recevoir les cinq principaux systèmes de satellites (GPS, GLONASS, Galileo, QZSS et Beidou) en même temps. Elle propose également la communication par satellite à double fréquence - une voie express pour un signal plus rapide et de meilleure qualité qui n'était auparavant disponible que sur les produits d'aviation.",
  content2desc: "La VERTIX 2 apporte d'énormes améliorations au traçage GPS lors de la navigation entre de grands immeubles, au cœur de la forêt ou le long de parois rocheuses, ce qui était considéré comme un défi de précision pour les générations précédentes de montres GPS.",
  content3tit: 'Encore plus de puissance',
  content3c: 'La VERTIX 2 utilise notre puce et notre processeur de nouvelle génération, permettant une meilleure expérience COROS encore plus rapide. Grâce à ces avancées, VERTIX 2 est  plus de 20% plus rapide que la VERTIX originale.',
  content4tit: 'Le grand écran',
  content4c: "Un écran de 1,4 pouce avec une résolution améliorée de 16 % permet à la VERTIX 2 de lire plus d'informations en un coup d'œil et de vous tenir au courant des données clés à tout moment et en tout lieu. La VERTIX 2 prend également en charge jusqu'à huit champs de données sur un seul écran, ce qui vous permet de disposer de plus d'informations tout au long de vos activités.",
  'performance-improvement-1': '1.4 pouce',
  'performance-improvement-2': '16%',
  content5tit: 'Interface utilisateur redessinée',
  content5c: "Notre nouvelle interface utilisateur libère le potentiel de notre emblématique cadran numérique. Désormais, vous pouvez faire défiler les données sans effort pour afficher vos mesures quotidiennes les plus importantes. Un écran tactile amélioré vous permet d'effectuer certaines actions du bout du doigt, offrant un contrôle précis lors de la navigation, ainsi que l'accès à la musique et aux champs de données.",
  content6tit: 'Une autonomie époustouflante (encore)',
  content6c: "Que se passe-t-il lorsque vous prenez l'incroyable efficacité de la batterie COROS et que vous la rendez encore meilleure ? Ne cherchez pas plus loin que la VERTIX 2 pour le savoir. La VERTIX 2 offre la plus longue autonomie jamais vue dans une montre GPS. Avec 127 heures de suivi GPS complet standard et 39 jours d'utilisation normale, la VERTIX 2 fait plus que doubler l'autonomie de son prédécesseur, déjà leader du marché. La VERTIX 2 est prête pour vos aventures les plus longues et les plus difficiles.",
  content6cKeyword: 'marché',
  content7tit: 'Qui dirige le monde',
  content7c: "La montre GPS d'aventure VERTIX 2 offre une cartographie mondiale hors ligne, et comprend les modes Paysage, Topo et Hybride. La VERTIX 2 est livrée avec une carte Paysage mondiale complète. Les utilisateurs peuvent télécharger gratuitement leur carte Topo par région sur COROS.com. En effectuant un zoom avant et arrière sur la carte avec le cadran numérique, ou en faisant glisser la carte avec l'écran tactile très réactif, la VERTIX 2 offre la meilleure expérience de navigation au poignet.",
  content8tit: 'Ne stressez pas',
  content8c: "Grâce aux fonctions ECG (électrocardiogramme) de la VERTIX 2, vous pouvez utiliser votre montre GPS pour mesurer la variabilité de votre fréquence cardiaque (VFC) directement à partir de votre poignet. La VFC est une mesure idéale pour évaluer la réaction de votre corps au stress et sa capacité de récupération. Le système COROS convertit chaque VFC individualisée en une mesure facilement comparable d'un athlète à l'autre.",
  content9tit: 'Nous avons le rythme',
  content9c: "Avec 32 Go de stockage embarqué, la VERTIX 2 peut contenir plus de données, plus d'entraînements, plus d'itinéraires et, pour la première fois dans une montre GPS COROS, de la musique. Vous pouvez désormais télécharger et contrôler vos fichiers audio directement depuis votre montre GPS. Des fonctionnalités Wi-Fi supplémentaires sont également disponibles sur la VERTIX 2, ce qui augmente encore les possibilités de couplage d'accessoires.",
  content10tit: 'Télécommande de contrôle de la caméra Insta360™',
  content10c: 'Si vous avez une caméra Insta360™ (Insta360 Go 2, One X2 et One R), vous pouvez désormais contrôler votre caméra depuis votre montre GPS. Cela signifie que vous pouvez également placer votre caméra hors de portée de vos bras pour obtenir les meilleurs clichés.',
  content11tit: 'Comment ça se passe ?',
  content11c: "Pour ces activités où une montre au poignet n'a pas de sens mais où vous avez quand même besoin de vos données, comme lors d'une mission sur une grande paroi avec Tommy Caldwell, profitez du mousqueton pour montre COROS. Cet accessoire indispensable pour les grimpeurs et autres aventuriers se fixe sur le cadre de votre montre et se clipse sur votre harnais.",
  content12tit: "L'écosystème COROS",
  content12c: 'La VERTIX 2 offre tout ce qui précède, mais aussi ces autres grandes caractéristiques de COROS.',
  learnmore: 'EN SAVOIR PLUS',
  speedleft1: 'Modèle',
  speedright1: ["Montre d'aventure COROS VERTIX 2 GPS"],
  speedleft2: "Taille de l'écran",
  speedright2: ['1,4 pouce'],
  speedleft3: "Résolution de l'écran",
  speedright3: ['280 x 280 (64 couleurs)'],
  speedleft4: "Type d'affichage",
  speedright4: ['Écran tactile LCD à mémoire permanente'],
  speedleft5: "Matériau de l'écran",
  speedright5: ['Verre saphir'],
  speedleft6: 'Matériau de la lunette',
  speedright6: ['Alliage de titane de grade 5 avec revêtement PVD'],
  speedleft7: 'Matériel de couverture',
  speedright7: ['Alliage de titane avec revêtement PVD'],
  speedleft8: 'Bracelet de montre',
  speedright8: ['Bracelet de 26 mm à ajustement rapide'],
  speedleft9: 'Matériau du bracelet',
  speedright9: ['Silicone/Nylon'],
  speedleft10: 'Taille physique',
  speedright10: ['50,3 x 50,3 x 15,7mm'],
  speedleft11: 'Poids avec bracelet en silicone',
  speedright11: ['89g'],
  speedleft12: 'Autonomie de la batterie',
  speedright12: ['Mode full GPS standard (GPS/QZSS) : 140 heures', 'Mode full GPS standard avec lecture de musique (GPS/QZSS) : 35 heures', 'Tous systèmes activés (GPS/QZSS+GLONASS+Galileo+BeiDou) : 90 heures', 'Tous systèmes activés avec la musique (GPS/QZSS+GLONASS+Galileo+BeiDou) : 30 heures', 'Tous systèmes activés + double fréquence activée (GPS/QZSS+GLONASS+Galileo+BeiDou avec double fréquence) : 50 heures', 'UltraMax : 240 heures', 'Utilisation quotidienne : 60 jours'],
  speedleft13: 'Connexion sans fil',
  speedright13: ['Bluetooth® 5.0 Dual Mode, Wi-Fi®.'],
  speedleft14: 'Connexion des accessoires',
  speedright14: ['Bluetooth'],
  speedleft15: 'Mémoire',
  speedright15: ['32GB'],
  speedleft16: 'Puce satellite',
  speedright16: ['Puce GNSS dual-fréquence tout-satellite'],
  speedleft17: 'Capteurs',
  speedright17: ['Oxymètre de pouls optique', 'Capteur optique de fréquence cardiaque', "Capteur d'électrocardiogramme", 'Altimètre barométrique', 'Accéléromètre', 'Boussole', 'Gyroscope', 'Thermomètre'],
  speedleft18: "Résistance à l'eau",
  speedright18: ['10 ATM'],
  speedleft19: 'Température de fonctionnement',
  speedright19: ['De -30°C à 50°C (-22°F à 122°F)'],
  speedleft20: 'Température de stockage',
  speedright20: ['De -30°C à 60°C (-22°F à 140°F)'],
  speedleft21: 'Temps de charge',
  speedright21: ['Moins de 2 heures'],
  speedleft22: 'Support de carte/navigation',
  speedright22: ['Cartes routières et topographiques mondiales hors ligne', "Navigation par fil d'Ariane à l'aide d'un écran tactile et d'un cadran numérique", 'Checkpoint', 'Retour au départ', 'Détails du dénivelé', "Distance jusqu'à la destination", 'Coordonnées GPS/MGRS', 'Alerte de tempête'],
  speedleft23: 'Support musical',
  speedright23: ['Stockage interne et diffusion par casque Bluetooth du contenu hors ligne'],
  speedleft24: 'Format de la musique',
  speedright24: ['MP3'],
  speedleft25: 'Entraînements compatibles',
  speedright25: ['Course, Course sur tapis, Piste, Trail, Randonnée, Escalade, Vélo, Vélo en salle, Nage en piscine, Eau libre, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, Ski de fond, Ski de randonnée, Multisport, Force, Entraînement, Speedsurfing, Windsurfing, Eau vive, Eau calme, Aviron, Aviron en salle'],
  features: {
    category: 'Catégorie',
    categoryVal: ['Fonctionnalité'],
    activityAlert: "Alerte d'activité",
    activityAlertVal: ['Alerte de cadence', 'Alerte de distance', "Alerte de gain/perte d'altitude", 'Alerte de fréquence cardiaque', 'Alerte nutritionnelle', "Alerte d'allure", 'Alerte de puissance', 'Alerte de vitesse', 'Alerte de pas'],
    blt: 'Accessoires Bluetooth',
    bltVal: ['Caméra (GoPro, Insta360)', 'Bike Trainer', 'Diffusion de la fréquence cardiaque', 'Rameur Concept 2', 'Contrôle de température corporelle CORE', 'COROS POD', 'Ceinture de fréquence cardiaqu', 'Mesure de puissance', 'Capteur de vitesse/cadence', 'Stryd'],
    dailyAlert: 'Alerte quotidienne',
    dailyAlertVal: ["Calories d'activité et objectif de temps d'exercice", "Alerte d'altitude", 'Alerte de tempête', "Plan d'entraînement"],
    fitness: 'EvoLab - Conditionnement physique général',
    fitnessVal: ["Distribution de l'intensité sur 4 semaines", 'Charge totale sur 7 jours et recommandation', 'Forme générale', 'Fatigue', "Charge d'impact", 'Chronomètre de récupération et suggestion', "Effet de l'entraînement", "Charge d'entraînement"],
    roadRuning: 'EvoLab - Course sur route',
    roadRuningVal: ['Niveau sur marathon', 'Prédicteur de course', 'Performances de course', 'VO2 Max', 'Zones de fréquence cardiaque au seuil', "Zones d'allure au seuil", "Focus de l'entraînement"],
    nav: 'Navigation',
    navVal: ['Retour au départ', 'Checkpoints', 'Détails du dénivelé', 'Couche cartographique hybride', 'Couche cartographique paysage', 'Couche de carte topographique', 'Alerte hors itinéraire', "Navigation par fil d'Ariane sur écran tactile"],
    satellite: 'Systèmes de satellites',
    satelliteVal: ['Tous systèmes + Double FREQ activés (GPS, GLONASS, Galileo, Beidou, QZSS)', 'Tous systèmes activés (GPS, GLONASS, Galileo, Beidou, QZSS)', 'GPS standard uniquement', 'Données de localisation par satellite GPS', 'Format de localisation - MGRS/GPS', 'Signal satellite'],
    sensors: 'Capteur',
    sensorsVal: ['Boussole 3D', 'Accéléromètre', 'GNSS dual-fréquence tout-satellite', 'Altimètre barométrique', "Capteur d'électrocardiogramme", 'Gyroscope', 'Thermomètre', 'Capteur de fréquence cardiaque au poignet', 'Oxymètre de pouls au poignet'],
    system: 'Système',
    systemVal: ['Alarme, Chronomètre, Minuteur', 'Verrouillage automatique', 'Rétro-éclairage (par bouton/geste)', "Rapport et prévisions d'utilisation de la batterie", 'Emplacement du cadran numérique personnalisable', 'Bouton numérique', 'Graphique ECG', 'Indice VFC', 'Raccourci clavier de lumière', 'Métronome', 'Musique (hors ligne)', 'Mode nuit', 'Wi-Fi'],
    lang: 'Langue du système',
    langVal: ['Deutsch, English, Español, Français, Italiano, Polski, Português, Pусский, ภาษาไทย, 한국어, ⽇本語, 简体中文, 繁体中文'],
    widget: 'Widget quotidien',
    widgetVal: ["Calories d'activité", "Pression de l'air", 'Dénivelé', "Temps d'exercice", 'Étages montés', 'Fréquence cardiaque', "Mesures clés d'EvoLab", 'Suivi du sommeil', 'Notifications intelligentes', 'Pas', 'Lever/coucher du soleil', 'Température', "Plan d'entraînement"],
    workoutFeats: 'Fonction entraînement',
    workoutFeatsVal: ['Pause automatique', 'Défilement automatique', 'Couleur de fond (blanc/noir)', 'Entraînement fractionné de base/avancé', 'Page de données personnalisable', "Alertes de messages et d'appels pendant l'entraînement", 'Reprendre plus tard', 'Défilement tactile', 'UltraMax', 'Course virtuelle', 'Puissance de course basée sur le poignet'],
    swim: "Fonction d'entraînement - Piscine/eau libre",
    swimVal: ['Détection du type de nage'],
    skiTouring: 'Fonction entraînement - Ski de randonnée',
    skiTouringVal: ['Détection de la montée/descente'],
    snowboard: 'Fonction entraînement - Ski/Snowboard',
    snowboardVal: ['Détection téléski/descente'],
    strength: 'Fonction entraînement - Musculation',
    strengthVal: ['Détection de répétition'],
    trackRun: 'Fonction entraînement - Piste',
    trackRunVal: ['Détection de la piste'],
    workoutMode: "Mode d'entraînement",
    workoutModeVal: ['Vélo', 'Eau calme', 'GPS Cardio', 'Gym Cardio', 'Randonnée', "Vélo d'intérieur", 'Rameur intérieur', 'Course sur tapis', 'Escalade en montagne', 'Multisport', 'Escalade multi-pitch', 'Eau libre', 'Natation en piscine', 'Aviron', 'Course', 'Ski', 'Ski de randonnée', 'Snowboard', 'Speedsurfing', 'Musculation', 'Piste', 'Trail', 'Entraînement (programmes structurés)', "Plan d'entraînement", 'Triathlon', 'Marche', 'Eau calme', 'Planche à voile', 'Ski de fond']
  }
};

/***/ }),

/***/ 71591:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ index)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod);
// EXTERNAL MODULE: ./node_modules/vue-clipboard2/vue-clipboard.js
var vue_clipboard = __webpack_require__(54705);
var vue_clipboard_default = /*#__PURE__*/__webpack_require__.n(vue_clipboard);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/main.vue?vue&type=template&id=4ebbe927
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    staticClass: "app-content",
    attrs: {
      slot: "content"
    },
    slot: "content"
  }, [_vm._t("main")], 2);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/component/layout/index/main.vue?vue&type=template&id=4ebbe927

;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/main.vue?vue&type=script&lang=js
/* harmony default export */ const mainvue_type_script_lang_js = ({
  name: 'NavigationSuggestion',
  components: {
    // LayoutContent
  },
  props: {
    baseClass: {
      type: String
    }
  },
  data: function data() {
    return {};
  },
  computed: {},
  mounted: function mounted() {},
  methods: {}
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/main.vue?vue&type=script&lang=js
 /* harmony default export */ const index_mainvue_type_script_lang_js = (mainvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/component/layout/index/main.vue





/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  index_mainvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const main = (component.exports);
// EXTERNAL MODULE: ./app/web/component/layout/layout.js + 3 modules
var layout = __webpack_require__(10613);
// EXTERNAL MODULE: ./app/web/component/layout/index/helper/index.js
var helper = __webpack_require__(7301);
// EXTERNAL MODULE: ./app/web/component/layout/index/styles/main.css
var styles_main = __webpack_require__(42552);
// EXTERNAL MODULE: ./app/web/component/layout/index/components/pixelImage/index.vue + 4 modules
var pixelImage = __webpack_require__(43984);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/remoteJs/index.vue?vue&type=script&lang=js
/* harmony default export */ const remoteJsvue_type_script_lang_js = ({
  name: 'remote-js',
  props: {
    id: {
      type: String,
      "default": ''
    },
    dataUid: {
      type: String,
      "default": ''
    },
    src: {
      type: String,
      required: true
    }
  },
  render: function render(createElement) {
    return createElement('script', {
      attrs: {
        type: 'text/javascript',
        src: this.src,
        id: this.id,
        'data-uid': this.dataUid
      }
    });
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/remoteJs/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_remoteJsvue_type_script_lang_js = (remoteJsvue_type_script_lang_js); 
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/remoteJs/index.vue
var remoteJs_render, remoteJs_staticRenderFns
;



/* normalize component */
;
var remoteJs_component = (0,componentNormalizer/* default */.Z)(
  components_remoteJsvue_type_script_lang_js,
  remoteJs_render,
  remoteJs_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const remoteJs = (remoteJs_component.exports);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/localeSwitch/index.vue?vue&type=template&id=1cda61d5

var localeSwitchvue_type_template_id_1cda61d5_render = function render() {
  var _vm = this,
    _c = _vm._self._c,
    _setup = _vm._self._setupProxy;
  return _c("div", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.showLocaleSwitch && _vm.sessionShowLocaleSwitch,
      expression: "showLocaleSwitch && sessionShowLocaleSwitch"
    }],
    staticClass: "locale-switch relative flex-center-center flex-wrap"
  }, [_c("div", {
    staticClass: "margin-r-20 locale-tips md:mb-md-30 md:w-full",
    attrs: {
      id: "locale-label"
    }
  }, [_vm._v(_vm._s(_vm.$t("home.localeswitchtips", _vm.value)))]), _vm._v(" "), _c("div", {
    staticClass: "flex-start-center md:w-full"
  }, [_c("div", {
    staticClass: "mr-40 md:!mr-0 md:w-full"
  }, [_c(_setup.AccessiableSelect, {
    staticClass: "locale-el-select",
    attrs: {
      "popper-class": "locale-el-select-dropdown",
      placeholder: _vm.$t("select"),
      "aria-option-id-prefix": _setup.ariaOptionIdPrefix,
      "listbox-id": _setup.listboxId,
      labelledby: "locale-label"
    },
    on: {
      input: function input($event) {
        return _vm.redirect();
      }
    },
    model: {
      value: _vm.value,
      callback: function callback($$v) {
        _vm.value = $$v;
      },
      expression: "value"
    }
  }, [_vm._l(_vm.options, function (item) {
    return _c("el-option", {
      key: item.value,
      attrs: {
        label: _vm.$t(item.label),
        value: item.value
      }
    });
  }), _vm._v(" "), _c("template", {
    slot: "listbox"
  }, [_c("div", {
    staticClass: "w-0 h-0 overflow-hidden",
    attrs: {
      role: "listbox",
      id: _setup.listboxId
    }
  }, _vm._l(_vm.options, function (item, index) {
    var _context;
    return _c("div", {
      key: item.value,
      attrs: {
        id: concat_default()(_context = "".concat(_setup.ariaOptionIdPrefix)).call(_context, index),
        role: "option",
        "aria-selected": "".concat(item.value === _vm.value)
      }
    }, [_vm._v(_vm._s(_vm.$t(item.label)))]);
  }), 0)])], 2)], 1)]), _vm._v(" "), _c("button", {
    staticClass: "iconfont icon-close pointer border-0 bg-transparent",
    attrs: {
      "aria-label": "Close locale switcher"
    },
    on: {
      click: _vm.closeSwitch
    }
  })]);
};
var localeSwitchvue_type_template_id_1cda61d5_staticRenderFns = [];
localeSwitchvue_type_template_id_1cda61d5_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/component/layout/index/components/localeSwitch/index.vue?vue&type=template&id=1cda61d5

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find.js
var find = __webpack_require__(86981);
var find_default = /*#__PURE__*/__webpack_require__.n(find);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/assign.js
var object_assign = __webpack_require__(67552);
var assign_default = /*#__PURE__*/__webpack_require__.n(object_assign);
// EXTERNAL MODULE: ./app/web/component/layout/index/components/AccessiableSelect/index.vue + 4 modules
var AccessiableSelect = __webpack_require__(8957);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/localeSwitch/index.vue?vue&type=script&setup=true&lang=js




var __default__ = {
  name: 'LocaleSwitch',
  components: {
    AccessiableSelect: AccessiableSelect/* default */.Z
  },
  props: {
    baseClass: {
      type: String
    }
  },
  data: function data() {
    return {
      sessionShowLocaleSwitch: false,
      options: [{
        value: 'au',
        label: 'CommonHeaderMenu6nav10'
      }, {
        value: 'ca',
        label: 'CommonHeaderMenu6nav3'
      }, {
        value: 'eu',
        label: 'CommonHeaderMenu6nav9'
      }, {
        value: 'es',
        label: 'CommonHeaderMenu6nav8'
      }, {
        value: 'fr',
        label: 'CommonHeaderMenu6nav4'
      }, {
        value: 'de',
        label: 'CommonHeaderMenu6nav5'
      }, {
        value: 'uk',
        label: 'CommonHeaderMenu6nav2'
      }, {
        value: 'us',
        label: 'CommonHeaderMenu6nav1'
      }, {
        value: 'cn',
        label: 'CommonHeaderMenu6nav6'
      }, {
        value: 'jp',
        label: 'CommonHeaderMenu6nav7'
      }],
      value: 'us'
    };
  },
  computed: {
    matchedLocale: function matchedLocale() {
      var _context,
        _this = this;
      return find_default()(_context = this.options).call(_context, function (item) {
        return item.value === _this.value;
      });
    },
    showLocaleSwitch: function showLocaleSwitch() {
      if (this.$root.ip.locale) {
        return this.$root.ip.country != this.$root.country ? true : false;
      } else {
        return false;
      }
    }
  },
  mounted: function mounted() {
    if (true) {
      var _context2;
      var sessionShowLocaleSwitch = window.sessionStorage.localeSwitch;
      // 第一次打开
      if (sessionShowLocaleSwitch === undefined) {
        if (this.$root.ip.locale) {
          this.sessionShowLocaleSwitch = this.$root.ip.country != this.$root.country ? true : false;
        } else {
          this.sessionShowLocaleSwitch = false;
        }
      } else if (sessionShowLocaleSwitch == '1') {
        // 已关闭
        this.sessionShowLocaleSwitch = false;
        return;
      }
      var country = this.$root.ip.country;
      if (find_default()(_context2 = this.options).call(_context2, function (item) {
        return item.value === country;
      })) {
        this.value = country;
      }
      var options = this.options;
      var support = this.$root.ip.support || {};
      for_each_default()(options).call(options, function (item) {
        var host = support[item.value] ? support[item.value].host[0] : 'coros.com';
        item.href = "https://".concat(host);
      });
    }
  },
  methods: {
    closeSwitch: function closeSwitch() {
      this.sessionShowLocaleSwitch = false;
      window.sessionStorage.localeSwitch = '1';
      this.$dataBus.$dataBus.mainHeaderIsCollapsed = true;
    },
    redirect: function redirect() {
      var _context3,
        _this2 = this;
      var redirectLocation = find_default()(_context3 = this.options).call(_context3, function (item) {
        return item.value === _this2.value;
      }).href;
      window.location.href = redirectLocation;
    }
  }
};
/* harmony default export */ const localeSwitchvue_type_script_setup_true_lang_js = (/*#__PURE__*/assign_default()(__default__, {
  setup: function setup(__props) {
    var listboxId = 'locale-listbox';
    var ariaOptionIdPrefix = 'local-option-';
    return {
      __sfc: true,
      listboxId: listboxId,
      ariaOptionIdPrefix: ariaOptionIdPrefix,
      AccessiableSelect: AccessiableSelect/* default */.Z
    };
  }
}));
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/localeSwitch/index.vue?vue&type=script&setup=true&lang=js
 /* harmony default export */ const components_localeSwitchvue_type_script_setup_true_lang_js = (localeSwitchvue_type_script_setup_true_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/localeSwitch/index.vue?vue&type=style&index=0&id=1cda61d5&prod&lang=scss
var localeSwitchvue_type_style_index_0_id_1cda61d5_prod_lang_scss = __webpack_require__(93638);
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/localeSwitch/index.vue?vue&type=style&index=0&id=1cda61d5&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/component/layout/index/components/localeSwitch/index.vue



;


/* normalize component */

var localeSwitch_component = (0,componentNormalizer/* default */.Z)(
  components_localeSwitchvue_type_script_setup_true_lang_js,
  localeSwitchvue_type_template_id_1cda61d5_render,
  localeSwitchvue_type_template_id_1cda61d5_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const localeSwitch = (localeSwitch_component.exports);
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/index.js





var components = {
  PixelImage: pixelImage/* default */.Z,
  RemoteJs: remoteJs,
  LocaleSwitch: localeSwitch
};
var install = function install(Vue) {
  var _context;
  for_each_default()(_context = keys_default()(components)).call(_context, function (key) {
    Vue.component(key, components[key]);
  });
};
/* harmony default export */ const index_components = ({
  install: install
});
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/transitions/collapse-transition.js
var collapse_transition = __webpack_require__(32743);
;// CONCATENATED MODULE: ./app/web/component/layout/index/elementUi.js




/* harmony default export */ const elementUi = ({
  install: function install(Vue) {
    var _context;
    for_each_default()(_context = [element_ui_common.Dropdown, element_ui_common.DropdownMenu, element_ui_common.DropdownItem, element_ui_common.Main, element_ui_common.Link, element_ui_common.Input, element_ui_common.InputNumber, element_ui_common.Select, element_ui_common.Option, element_ui_common.Form, element_ui_common.FormItem, element_ui_common.Table, element_ui_common.TableColumn, element_ui_common.Collapse, element_ui_common.CollapseItem, element_ui_common.Dialog, element_ui_common.Button, element_ui_common.RadioGroup, element_ui_common.Radio, element_ui_common.Image, element_ui_common.Progress, collapse_transition["default"], element_ui_common.Breadcrumb, element_ui_common.BreadcrumbItem, element_ui_common.Row, element_ui_common.Col, element_ui_common.Tooltip, element_ui_common.Scrollbar, element_ui_common.Checkbox, element_ui_common.CheckboxGroup, element_ui_common.Tabs, element_ui_common.TabPane, element_ui_common.DatePicker, element_ui_common.Upload, element_ui_common.Pagination]).call(_context, function (comp) {
      Vue.component(comp.name, comp);
    });
    Vue.use(element_ui_common.Loading.directive);
    Vue.prototype.$msgbox = element_ui_common.MessageBox;
    Vue.prototype.$message = element_ui_common.Message;
    Vue.prototype.$alert = element_ui_common.MessageBox.alert;
    Vue.prototype.$confirm = element_ui_common.MessageBox.confirm;
    Vue.prototype.$prompt = element_ui_common.MessageBox.prompt;
  }
});
// EXTERNAL MODULE: ./node_modules/moment/moment.js
var moment = __webpack_require__(30381);
var moment_default = /*#__PURE__*/__webpack_require__.n(moment);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js + 3 modules
var slicedToArray = __webpack_require__(95266);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/date/now.js
var date_now = __webpack_require__(57647);
var now_default = /*#__PURE__*/__webpack_require__.n(date_now);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/parse-int.js
var parse_int = __webpack_require__(34300);
var parse_int_default = /*#__PURE__*/__webpack_require__.n(parse_int);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/index-of.js
var index_of = __webpack_require__(51791);
var index_of_default = /*#__PURE__*/__webpack_require__.n(index_of);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.date.to-string.js
var es_date_to_string = __webpack_require__(30024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.to-fixed.js
var es_number_to_fixed = __webpack_require__(97389);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.match.js
var es_string_match = __webpack_require__(22462);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/vue-i18n/dist/vue-i18n.esm.js
var vue_i18n_esm = __webpack_require__(17152);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/starts-with.js
var starts_with = __webpack_require__(45181);
var starts_with_default = /*#__PURE__*/__webpack_require__.n(starts_with);
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/map.js
/* harmony default export */ const map = ({
  maptitle: 'Map 地图下载',
  mapsubheader: '地区选择',
  mapwelcome: '欢迎来到全新的COROS地图下载页面。您可以根据需要选择下载地貌地图或等高线地图! 目前等高线地图和地貌图只适用于VERTIX 2，但是，我们很高兴地宣布，今年晚些时候，APEX Pro和VERTIX 1用户也可以通过更新固后使用等高线地图。',
  mapdownload_instruction: '遵照下列步步骤下载指定区域的等高线和地貌地图：',
  mapdownload_instruction_list1: '- 使用地图区域选择工具，在地图区域，按住Shift键，同时按住鼠标左键，选择目标区域。',
  mapdownload_instruction_list2: '- 区域成功选择后，点击右下方的下载按钮，查看地图文件大小，按照个人需要进行下载。',
  mapdownload_tips: '* 请注意，VERTIX和APEX Pro由于硬件限制，总储存空间约为3.5GB，请确保下载的地图文件总体积小于3.5GB。',
  mapdownload_message: '下载任务已开始, 关闭弹窗可以查看进度',
  mapdownload_instruction_mobile: '请使用电脑打开此页面以进行地图下载',
  maplandscope_introduction: '地貌地图仅包括街道和主要路网、水道、自然特征，不包括国际边界、行政边界，同时也不包括兴趣点如商店、餐厅、停车区、学校等信息。',
  maptopo_introduction: '等高线地图是对一个土地区域高度的详细记录，给出了自然和人造建筑物的海拔高度。它们通过等高线（高于海平面的等高线）显示土地的形状、山脉、山谷和平原。',
  maph4: '请从下面表格中选择您需要下载的地区',
  maph5: '使用说明',
  mapl1: '下载前保证硬盘有足够的空间。',
  mapl2: '将下载后的文件在硬盘上解压缩。',
  mapl3: '打开解压后的目录，并找到 map 目录，将其复制到手表中。',
  mapl4: '根据安装说明将地图安装到手表上：',
  maph6: '地貌地图 ',
  mapt3: '预计安装时间 ：',
  maph7: '等高线地图 ',
  mapt4: '预计安装时间 ：',
  mapconditions: '©OpenStreetMap 条款和条件',
  mapconditions_1: '本地图使用社区生成的 ©OpenStreetMap (OSM) 数据库编译。本地图的使用不受最终用户许可协议 (EULA)条款的约束，而是受©OpenStreetMap以下条款和条件的约束：',
  mapconditions_2: '©OpenStreetMap 数据是 ©OpenStreetMap贡献者的版权，并受开放数据库许可的约束。©OpenStreetMap数据个别内容的任何权利均根据数据库内容许可获得许可。',
  maph9: '数据范围',
  mapt7: '本地图仅包括街道和越野网络、水道、自然特征，不包括国际边界、行政边界、也不包括兴趣点如商店、餐厅、停车区、',
  maph10: '风险提示',
  mapt8: '©COROS 仅对 ©OpenStreetMap 地图做格式与样式转换，©COROS 对 ©OpenStreetMap 产品中地图数据的准确性或完整性不作任何保证，您同意自行承担使用它的风险。',
  mapt9: '©COROS及其许可方的许可方、服务提供商、渠道合作伙伴和供应商以及附属公司，不作任何形式的、明示或暗示的、或其他方式的保证，包括但不仅限于从地图产品获得的内容、质量、准确性、完整性、有效性、可靠性、适销性、特定用途的适用性、有用性、用途或结果，或者内容或服务器不会中断或没有错误。',
  mapt10: '©COROS地图仅用做辅助工具，不得用于任何需要精确测量方向、距离、位置或地形。',
  mapcopyright: '© 2021 | COROS Wearables, Inc.',
  mapt11: '小时',
  mapregion: '区域',
  mapgeomap: '地貌图',
  downloadprocess: '下载进度',
  shiftPress: '按住shift拖动鼠标选择地图范围',
  mapcontours: '等高线',
  maplanguage: '选择语言',
  mapcn: '中文',
  mapen: 'English',
  africa: '非洲',
  antarctica: '南极洲',
  asia: '亚洲',
  asia1: '亚洲局部-1',
  asia2: '亚洲局部-2',
  asia3: '亚洲局部-3',
  asia4: '亚洲局部-4',
  'north-america1': '北美局部-1',
  'north-america2': '北美局部-2',
  'australia-oceania': '大洋洲',
  'central-america': '中美洲',
  europe: '欧洲',
  'north-america': '北美洲',
  'south-america': '南美洲',
  maplocaldown: '下载',
  mapdownloadbutton: '下载地图',
  maphelplink: '安装说明',
  mapdownloadtitle: '下载',
  mapmacoshelp: 'Mac OS 安装方法',
  mapwinhelp: 'Windows 安装方法',
  macostitle: '使用说明',
  macost1: '1. 将下载的zip文件解压到硬盘上。',
  macost2: '2. 将手表通过USB线插入计算机中，并等待磁盘符出现。',
  macost3: '3. 按住键盘的"option"键，同时将整个 [ map ] 目录复制到手表USB 磁盘的根目录中。',
  macost4: '4. 在弹出对话框中选择“合并”，并等待复制完成.',
  macoscautions: '注意事项',
  macosc1: '1. 在MacOS下，如果通过访达来复制map目录，原手表中 [ map ] 目录中的地图文件有可能会被替换掉。为了避免这种情况，在拖动复制时同时按下键盘的“ option ”键，在弹出的提示框内选择“合并”。',
  macosc2: '2. 地图文件复制的时间比较长，如果使用笔记本注意提前将电源适配器接上，并将临时关闭休眠设置。',
  macosc3: '3. [ map ] 目录必须在根目录中，也不要对 [ map ] 目录重新命名。',
  windowstitle: '使用说明',
  windowst1: '1. 将下载的zip文件解压到硬盘上。',
  windowst2: '2. 将手表通过USB线插入计算机中，并等待磁盘符出现。',
  windowst3: '3. 打开解压后的目录，在[map]目录上按鼠标右键，点击“发送”菜单，选择 “VERTIX 2”，并等待复制完成。',
  windowscautions: '注意事项',
  windowsc1: '1. 地图文件复制的时间比较长，如果使用笔记本注意提前将电源适配器接上，并将临时关闭休眠设置。',
  windowsc2: '2. [ map ] 目录必须在根目录中，也不要对 [ map ] 目录重新命名。',
  estimated: '文件处理中, 预计 {estimated}s 后开始下载',
  updatedAt: '更新时间：{updateTime}',
  A3000: '选择手表的版本号下载（建议升级至最新版本）',
  A3001: '{version} 及以上版本',
  A3002: '其他版本下载',
  A3003: '如何查看手表固件版本',
  A3004: '在COROS APP【我】-【设备详情】-【固件版本】中查看'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/vertix2.js
/* harmony default export */ const vertix2 = ({
  title: 'COROS VERTIX 2 | Next Generation Adventure',
  keywords: 'keywords',
  description: 'COROS VERTIX 2 | Next Generation Adventure',
  vertix2title: 'COROS VERTIX 2',
  vertix2accessories: 'ACCESSORIES',
  content1c: '冒险永远让人充满期待。 VERTIX 2 GPS 户外探险表，由COROS 为您带来了大胆的创新以及对现有功能的难以想象的改进——所有这些都让您可以帮助你克服那些从未想过的，激动人心的新挑战。无论你的目标在哪里——VERTIX 2，都会与你一起完成坚实的每一步。',
  content2tit: '双频GPS，为探险家保驾护航',
  content2c: 'VERTIX 2 可以同时以两个并发频率 (L1+L5*) 与五大卫星系统*连接，在户外复杂地形与城市高楼林立的使用环境中，仍然保持极强的信号，时刻记录精准轨迹。（三种地貌场景：弯曲复杂的山路、峡谷岩壁、城市楼宇）',
  content2desc: '*L5 (1176 MHz) 是专为航空安全服务保留卫星信号频段。它具有更高的功率、更大的带宽和先进的信号设计。除了交通，L5 还将为全球用户提供最先进的民用 GPS 信号。 *五大卫星系统：GPS、GLONASS、伽利略、QZSS 和北斗',
  content3tit: '性能全面升级',
  content3c: 'VERTIX 2 全新升级架构，采用全新一代芯片组和处理器，可提供更好、更快的使用体验。全局响应与处理速度比上一代提升20%以上。',
  content4tit: '更大屏幕，全面掌握运动数据',
  content4c: 'VETIX 2采用1.4 英寸屏幕，分辨率更是提升16%，运动中的数据最多可支持8种自定义数据，为你呈现更全面的信息，随时关注实时体能数据与训练目标。',
  'performance-improvement-1': '1.4 in',
  'performance-improvement-2': '16%',
  content5tit: '界面升级，全新交互体验',
  content5c: '针对COROS的光电旋钮特色交互方式，界面再次升级，只需轻轻转动旋钮，你就可以看到几乎所有你要的数据指标。同时在地图、音乐和图表查看中，你还可以使用触控屏拖动屏幕。',
  content6tit: '续航再次突破，与你尽情驰骋',
  content6c: '得益于COROS对电量管理的研发突破，配合升级高密度电池，VERTIX 2 获得了惊人的续航时间。39天户外持续使用与127小时高精度GPS运动模式，等待与你进行一次漫长而又难忘的探险之旅。',
  content6cKeyword: '之旅',
  content7tit: '全球地形图，户外导航能力进一步提升',
  content7c: '支持导入全球地形图*，户外活动中提供离线导航，预判环境规划路线触控屏拖动地图，旋钮旋转缩放，精准的操控带来全新腕上导航体验',
  content8tit: '升级体征系统，全面评估压力状态',
  content8c: '体征系统加入HRV（心率变异性），通过表圈内置ECG传感器快速测量HRV指数。能够防止过度训练、减少受伤风险，维持高水平发挥',
  content9tit: '探险之路，一路音乐相随',
  content9c: '支持存储音乐，蓝牙播放，让你的旅程不再枯燥',
  content10tit: 'Insta360™ 相机控制遥控器',
  content10c: '与 Insta360™ 运动相机合作，您可以通过手表控制您的insta360相机，现在你可以用更意想不到的角度与方式，记录你的运动影像',
  content11tit: 'COROS快挂配件',
  content11c: 'Tommy Caldwell，COROS全球代言人，被称作“大岩壁之王”，作为攀岩界的顶级选手，他依然需要手表记录运动数据，COROS开发快挂配件，可以将手表固定在装备之上。',
  content12tit: 'The COROS Ecosystem',
  content12c: 'VERTIX 2 offers all of the above plus these other great COROS features.',
  learnmore: 'LEARN MORE',
  speedleft1: 'Model',
  speedright1: ['COROS VERTIX 2 GPS Adventure Watch'],
  speedleft2: 'Display Size',
  speedright2: ['1.4 inch'],
  speedleft3: 'Display Resolution',
  speedright3: ['280 x 280 (64 colors)'],
  speedleft4: 'Display Type',
  speedright4: ['Touch Screen Always-On Memory LCD'],
  speedleft5: 'Screen Material',
  speedright5: ['Sapphire Glass'],
  speedleft6: 'Bezel Material',
  speedright6: ['Grade 5 Titanium Alloy with PVD coating'],
  speedleft7: 'Cover Material',
  speedright7: ['Titanium Alloy with PVD coating'],
  speedleft8: 'Watch Band',
  speedright8: ['26mm Quick Fit Band'],
  speedleft9: 'Band Material',
  speedright9: ['Silicone/Nylon'],
  speedleft10: 'Physical Size',
  speedright10: ['50.3 x 50.3 x 15.7mm'],
  speedleft11: 'Weight With Silicone Band',
  speedright11: ['89g'],
  speedleft12: 'Battery Life',
  speedright12: ['Standard Full GPS (GPS/QZSS): 140 Hours', 'Standard Full GPS with Music Playing (GPS/QZSS): 35 Hours', 'All Systems On (GPS/QZSS+GLONASS+Galileo+BeiDou): 90 Hours', 'All Systems On with Music Playing (GPS/QZSS+GLONASS+Galileo+BeiDou): 30 Hours', 'All Systems + Dual Frequency On (GPS/QZSS+GLONASS+Galileo+BeiDou w/ Dual Frequency): 50 Hours', 'UltraMax: 240 Hours', 'Daily Use: 60 Days'],
  speedleft13: 'Wireless Connection',
  speedright13: ['Bluetooth® 5.0 Dual Mode, Wi-Fi®'],
  speedleft14: 'Accessory Connection',
  speedright14: ['Bluetooth®'],
  speedleft15: 'Memory',
  speedright15: ['32GB'],
  speedleft16: 'Satellite Chipset',
  speedright16: ['All-Satellite Dual-Frequency GNSS Chipset'],
  speedleft17: 'Sensors',
  speedright17: ['Optical Pulse Oximeter', 'Optical Heart Rate Sensor', 'Electrocardiogram Sensor', 'Barometric Altimeter', 'Accelerometer', 'Compass', 'Gyroscope', 'Thermometer'],
  speedleft18: 'Water Resistance',
  speedright18: ['10 ATM'],
  speedleft19: 'Working Temperature',
  speedright19: ['-22°F to 122°F (-30°C to 50°C)'],
  speedleft20: 'Storage Temperature',
  speedright20: ['-22°F to 140°F (-30°C to 60°C)'],
  speedleft21: 'Charging Time',
  speedright21: ['Less than 2 Hours'],
  speedleft22: 'Map/Navigation Support',
  speedright22: ['Global Offline Street and Topographical Maps', 'Touchscreen and Digital Dial-enabled Breadcrumb Navigation', 'Checkpoint', 'Back to Start', 'Elevation Details', 'Distance to Destination', 'GPS/MGRS Coordinates', 'Storm Alert'],
  speedleft23: 'Music Support',
  speedright23: ['Internal Storage and Bluetooth Headphone Streaming for Offline Content'],
  speedleft24: 'Music Format',
  speedright24: ['MP3'],
  speedleft25: 'Supported Workouts',
  speedright25: ['Run, Indoor Run, Trail Run, Track Run, Hike, Mountain Climb, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, Cross-country Ski, Ski Touring, Multisport, Strength, Training, Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing, Indoor Rower']
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/home.js
/* harmony default export */ const home = ({
  title: 'COROS高驰｜中国｜官方网站',
  desc: 'Innovation for runners, adventurers and athletes of all sports.',
  localeswitchtips: '跳转到正确的地区？',
  insName: 'COROS高驰',
  learnMore: '了解更多',
  buy: '购买',
  offShelf: '售罄',
  vertix2: {
    name: 'COROS VERTIX 2',
    desc: '户外探险表'
  },
  pace2: {
    name: 'COROS PACE 2',
    desc: '竞技运动表'
  },
  apexPro: {
    name: 'COROS APEX Pro',
    desc: '越野竞速表'
  },
  apex: {
    name: 'COROS APEX',
    desc: '越野竞速表'
  },
  apex2: {
    name: 'COROS APEX 2',
    desc: '户外运动表'
  },
  vertix: {
    name: 'COROS VERTIX',
    desc: '户外探险表'
  },
  pod: {
    name: 'COROS POD',
    desc: '跑步动态传感器'
  },
  pod2: {
    name: 'COROS POD 2',
    desc: '多功能运动传感器'
  },
  trainingHub: {
    title: 'COROS TRAINING HUB',
    desc: '了解你的过去，分析你的现在，创建你的未来。COROS Training Hub将数据可视化，帮助你与教练高效分析体能状况，确保为下一场挑战做好准备。'
  },
  athletes: {
    title: 'COROS精英运动员'
  },
  plans: {
    title: 'COROS训练计划',
    desc: '周期性的训练，科学提升运动能力'
  },
  outOfStock: '售罄'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/vertix.js
/* harmony default export */ const vertix = ({
  name: 'COROS VERTIX',
  accessories: 'ACCESSORIES',
  readMore: '了解更多',
  'Rugged YET premium': {
    title: "\u552F\u6709\u575A\u97E7\u4E0D\u62D4\n      \u624D\u80FD\u4E0E\u5C71\u5BF9\u8BDD",
    desc: '由钛合金构成的轻量化高强度机身，以54g机身承受150米防水压力。蓝宝石镜面结合DLC钻石镀膜历经风雨仍能光亮如新。'
  },
  'Virtually scratch proof screen': {
    title: "\u5386\u7ECF\u78E8\u783A\n      \u4ECD\u80FD\u5149\u4EAE\u5982\u65B0",
    desc: "\u84DD\u5B9D\u77F3\u955C\u9762\u7ED3\u5408DLC\u94BB\u77F3\u9540\u819C\uFF0C\u4E00\u5757\u51E0\u4E4E\u4E0D\u4F1A\u522E\u82B1\u7684\u5C4F\u5E55\u73BB\u7483"
  },
  'The ONLY GPS watch with a 150-meter waterproof rating': {
    title: '150米防水级别',
    desc: '超高强度机身，承受150水压的考验'
  },
  'Ultra-light Durability': {
    title: '轻量化设计',
    desc: 'VERTIX机身仅重54克，这可能是同类手表中最轻的'
  },
  'VERTIX is your Sherpa': {
    title: "\u9AD8\u539F\u4E4B\u4E0A\n      \u4E3A\u4F60\u5B88\u62A4\u5B89\u5168",
    desc: '通过监测不同海拔下人体血氧浓度，评估高原适应性，结合运动心率，为高原户外运动者提供运动强度建议，及时避免高原反应的发生'
  },
  'Industry leading performance in extreme cold': {
    title: "\u6781\u9650\u5883\u5730\n      \u4E0E\u52C7\u8005\u4E00\u8D77\u524D\u884C",
    desc: '无论是极地的酷寒，还是沙漠的灼热，都无法阻挡探索的勇气，VERTIX在-25℃到60℃，仍可持续工作。'
  },
  'EASY use in ANY condition': {
    title: '光电旋钮，精准操作',
    desc: '精心调校的光电旋钮，即使佩戴手套，仍可完成精准操作'
  },
  'Track your path': {
    title: "\u5C71\u9AD8\u8DEF\u8FDC\uFF0C\n      \u4F60\u8D70\u8FC7\u7684\u8DEF\u6211\u90FD\u8BB0\u5F97",
    desc: '专为户外精确测量而设计，GPS天线效率进一步提升。多组高灵敏传感器，配合高精度的数据运算。为探险家保驾护航。'
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'COROS训练计划',
    desc: '使用COROS训练模式可以让你在App中建立跑步，骑车，游泳或力量训练导入手表进行训练。上百种训练动作库，可自由创建训练项目，如私教般指导每一次训练。微信公众号“COROS高驰”将会定期发布由专业运动员和教练制作的训练计划，你也可以通过微信与其他运动爱好者一起分享你喜欢的训练计划。'
  },
  'Light up the Night’s Sky': {
    title: "\u591C\u5149\u6A21\u5F0F\n      \u5E38\u4EAE\u67D4\u5149\u4E0D\u523A\u773C",
    desc: '夜间运动时开启，屏幕会亮起柔和背光，让你在夜跑中可以随时查看手表运动数据，无需进行点亮操作。'
  },
  'Stay on Track': {
    title: '运动场模式，跑圈更准',
    desc: '专为场地训练优化精准数据，一圈400米标准操场距离计算误差仅几米，单圈计时几乎与秒表同步，为对数据精度要求极高的严肃跑者的训练带来巨大提升。'
  },
  'Ice Breaker': {
    title: '冰蓝特别版',
    desc: '打破你对户外手表的想象'
  },
  'Stand out in a Crowd': {
    title: '剔透冰蓝',
    desc: '采用蓝色的钛合金外壳和透明机身材, 精美工艺，带给你不一样的佩戴体验'
  },
  'Handled With Care': {
    title: '依旧强悍',
    desc: '透明机身克服了大量工艺技术难题，找到精美与强悍之间的平衡'
  },
  batteryLife: {
    title: "\u5F3A\u608D\u7684\u8EAB\u8EAF\u91CC\n      \u662F\u81EA\u7531\u7684\u7075\u9B42",
    desc: "\u8D85\u957F\u7EED\u822A\u65F6\u95F4\uFF0C\u6EE1\u8DB3\u957F\u9014\u63A2\u9669\u8981\u6C42\n      \u5929\u9AD8\u5730\u9614\uFF0C\u4F34\u4F60\u81EA\u7531\u9A70\u9A8B",
    reqular: {
      title: '45天',
      desc: "45\u5929\n        \u65E5\u5E38\u4F7F\u7528"
    },
    gps: {
      title: '60小时',
      desc: "60\u5C0F\u65F6 \u7CBE\u51C6\n        GPS\u7EED\u822A"
    },
    ultraMax: {
      title: '110小时',
      desc: "110 \u5C0F\u65F6\n        \u8D85\u957F\u7EED\u822A\u6A21\u5F0F"
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/apexPro.js
/* harmony default export */ const apexPro = ({
  name: 'COROS APEX Pro',
  accessories: 'ACCESSORIES',
  trailTested: {
    title: "\u575A\u6BC5\u4E4B\u8EAF\n      \u6311\u6218\u4E0D\u51E1\u8D5B\u9053",
    desc: 'TC4钛合金成刚硬机身，足以承受百米水压，DLC钻石镀膜蓝宝石玻璃，无惧磨砺，历久如新。'
  },
  battery: {
    desc: 'APEX Pro的续航能力大幅提升，使其成为长距离越野赛事必备,为你提供40小时精准GPS续航时间，日常使用30天'
  },
  mountainGuide: {
    title: '高原之上，为你守护安全',
    desc: '具备心率血氧2合一传感器，配合高原守护系统，可在高原运动时，监测血氧与运动强度，在过量运动时发出预警，提前预防高原反应的发生。'
  },
  touchFeat: {
    title: "\u5168\u65B0\u4EA4\u4E92\u4F53\u9A8C\n      \u53D1\u73B0\u66F4\u591A\u73A9\u6CD5",
    desc: '特色光电旋钮设计，让手表的操作变得简单。一根手指就可以快速完成各项手表操作。同时可以在拖动地图、数据图表时使用触控屏进行操作。',
    videos: ['视频']
  },
  trainingMode: {
    title: 'COROS训练计划',
    desc: '使用COROS训练模式可以让你在App中建立跑步，骑车，游泳或力量训练导入手表进行训练。上百种训练动作库，可自由创建训练项目，如私教般指导每一次训练。微信公众号“COROS高驰”将会定期发布由专业运动员和教练制作的训练计划，你也可以通过微信与其他运动爱好者一起分享你喜欢的训练计划。'
  },
  nightMode: {
    title: '夜光模式，常亮柔光不刺眼',
    desc: '夜间运动时开启，屏幕会亮起柔和背光，让你在夜跑中可以随时查看手表运动数据，无需进行点亮操作。'
  },
  stayTrack: {
    title: '运动场模式，跑圈更准',
    desc: '专为场地训练优化精准数据，一圈400米标准操场距离计算误差仅几米，单圈计时几乎与秒表同步，为对数据精度要求极高的严肃跑者的训练带来巨大提升。'
  },
  batteryDetails: {
    duration: ['续航能力提升14%'],
    subDesc: "\u8D85\u957F\u7EED\u822A\n      \u6EE1\u6000\u4FE1\u5FC3\u81EA\u7531\u9A70\u9A8B"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/apex.js
/* harmony default export */ const apex = ({
  accessories: 'ACCESSORIES',
  battery_life: {
    title: '超长续航\n满怀信心自由驰骋',
    desc: "APEX\u7684\u8D85\u957F\u7EED\u822A\u80FD\u529B\u8BA9\u4F60\u4E0D\u518D\u9700\u8981\u9891\u7E41\u5145\u7535\u3002\u9AD8\u7CBE\u5EA6GPS\u8FD0\u52A8\u6A21\u5F0F\u7EED\u822A\u8FBE\u5230\u4E8635\u5C0F\u65F6\uFF0C\u65E5\u5E38\u4F7F\u752830\u5929\uFF0CUltraMax\u8D85\u957F\u7EED\u822A\u6A21\u5F0F\u5219\u53EF\u4E3A\u4F60\u63D0\u4F9B\u957F\u8FBE70\u5C0F\u65F6\u7684\u8FD0\u52A8\u8BB0\u5F55\u3002"
  },
  'Built in Premium': {
    title: '坚韧，无惧艰险',
    desc: "APEX\u4F7F\u7528\u5168\u65B0\u6750\u6599\uFF0C\u6253\u9020\u8F7B\u76C8\u5374\u575A\u97E7\u7684\u673A\u8EABADLC\u949B\u5408\u91D1\u9762\u5708\uFF0C\u786C\u5EA6\u5927\u5E45\u5EA6\u63D0\u5347\u84DD\u5B9D\u77F3\u73BB\u7483\u5C4F\u5E55\uFF0C\u62D2\u7EDD\u5212\u75D5\uFF0C\u9AD8\u5F3A\u5EA6\u7EA4\u7EF4\u5C3C\u9F99\uFF0C\u786C\u5EA6\u63D0\u534780%\uFF0C100\u7C73\u9AD8\u538B\u9632\u6C34\uFF0C\u8FD9\u4E00\u6B21\u6F5C\u7684\u66F4\u6DF1\u3002"
  },
  'Simplicity at its Finest': {
    title: '光电旋钮快人一步',
    desc: "\u7279\u8272\u5149\u7535\u65CB\u94AE\u8BBE\u8BA1\uFF0C\u8BA9\u624B\u8868\u7684\u64CD\u4F5C\u53D8\u5F97\u7B80\u5355\u3002\u4E00\u6839\u624B\u6307\u5C31\u53EF\u4EE5\u5FEB\u901F\u5B8C\u6210\u5404\u9879\u624B\u8868\u64CD\u4F5C\u3001\u67E5\u770B\u4E30\u5BCC\u6570\u636E\u56FE\u8868\u3002"
  },
  'Training Efficiency Without Injury': {
    title: '科学训练\n事半功倍',
    desc: "\u79D1\u5B66\u7684\u5B89\u6392\u8BAD\u7EC3\u4E0E\u4F11\u606F\u53EF\u4EE5\u63D0\u9AD8\u8BAD\u7EC3\u6548\u7387\uFF0C\u51CF\u5C11\u4F24\u75C5\u3002\u6211\u4EEC\u53EF\u4EE5\u901A\u8FC7\u8FD0\u52A8\u751F\u7406\u6570\u636E\u51C6\u786E\u7684\u4F30\u7B97\u4F60\u7684\u4F53\u529B\u503C\uFF0C\u8BC4\u4F30\u8FD0\u52A8\u5F3A\u5EA6\u662F\u5426\u8D85\u8FC7\u80FD\u529B\u6C34\u5E73\uFF0C\u53CA\u65F6\u63D0\u9192\u4F11\u606F\uFF0C\u8BA9\u4F60\u66F4\u597D\u7684\u6295\u5165\u5230\u4E0B\u4E00\u6B21\u8BAD\u7EC3\u5F53\u4E2D\u3002"
  },
  'Navigation Track': {
    title: '轨迹导航，指明前进方向',
    desc: "\u53EF\u901A\u8FC7\u5FAE\u4FE1\u5728\u624B\u673A\u4E0A\u5FEB\u901F\u5BFC\u5165\u3001\u5206\u4EAB\u7EBF\u8DEF\uFF0C\u5728\u8D8A\u91CE\u8DD1\u4E2D\u4F7F\u7528\u624B\u8868\u8FDB\u884C\u5BFC\u822A\uFF0C\u65F6\u523B\u4FDD\u6301\u9632\u7EBF\uFF1B\u652F\u6301\u5FAA\u8FF9\u8FD4\u822A\u529F\u80FD\uFF0C\u5E2E\u4F60\u627E\u5230\u56DE\u5BB6\u7684\u8DEF"
  },
  'Smart Learning Stride Length': {
    title: '智能步幅算法',
    desc: "\u5F15\u5165\u667A\u80FD\u6B65\u5E45\u7B97\u6CD5\uFF0C\u667A\u80FD\u6B65\u5E45\u7B97\u6CD5\u91C7\u7528\u673A\u5668\u5B66\u4E60\u7684\u65B9\u5F0F\uFF0C\u8BB0\u5F55\u60A8\u7684\u8DD1\u6B65\u52A8\u4F5C\u4EE5\u53CA\u8FD0\u52A8\u4E60\u60EF\uFF0C\u5EFA\u7ACB\u60A8\u7684\u6B65\u5E45\u6A21\u578B\uFF0C\u65E0\u8BBA\u662F\u5728\u8DD1\u6B65\u673A\u3001\u5BA4\u5185\u8BAD\u7EC3\uFF0C\u8FD8\u662F\u96A7\u9053\u3001\u9AD8\u697C\u4E1B\u6797\u7B49GPS\u4FE1\u53F7\u5F31\u7684\u73AF\u5883\uFF0C\u90FD\u80FD\u6709\u6548\u7684\u63D0\u9AD8\u901F\u5EA6\u548C\u8DDD\u79BB\u7B49\u6570\u636E\u7684\u51C6\u786E\u5EA6\u3002"
  },
  gpsAbilities: ['学习跑步动作/运动习惯\n建立步幅模型', '智能补全\nGPS信号丢失后距离/轨迹'],
  'Your Complete Training Guide': {
    title: '测算最大摄氧量，评定体力等级',
    desc: "\u6839\u636E\u6700\u5927\u6444\u6C27\u91CF\u3001\u4E73\u9178\u9608\u5FC3\u7387\uFF0C\u7ED3\u5408\u8FD0\u52A8\u7ADE\u6280\u6027\u6307\u6807\u878D\u5408\u5206\u6790\uFF0C\u8BC4\u5B9A\u4F60\u7684\u4F53\u529B\u7B49\u7EA7\u3002\u771F\u5B9E\u53CD\u6620\u8010\u529B\u8FD0\u52A8\u4E2D\u8868\u73B0\u51FA\u7684\u6F5C\u529B\u4E0E\u7EFC\u5408\u6C34\u5E73\u3002"
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'COROS训练计划',
    desc: "\u4F7F\u7528COROS\u8BAD\u7EC3\u6A21\u5F0F\u53EF\u4EE5\u8BA9\u4F60\u5728App\u4E2D\u5EFA\u7ACB\u8DD1\u6B65\uFF0C\u9A91\u8F66\uFF0C\u6E38\u6CF3\u6216\u529B\u91CF\u8BAD\u7EC3\u5BFC\u5165\u624B\u8868\u8FDB\u884C\u8BAD\u7EC3\u3002\u4E0A\u767E\u79CD\u8BAD\u7EC3\u52A8\u4F5C\u5E93\uFF0C\u53EF\u81EA\u7531\u521B\u5EFA\u8BAD\u7EC3\u9879\u76EE\uFF0C\u5982\u79C1\u6559\u822C\u6307\u5BFC\u6BCF\u4E00\u6B21\u8BAD\u7EC3\u3002\u5FAE\u4FE1\u516C\u4F17\u53F7\u201CCOROS\u9AD8\u9A70\u201D\u5C06\u4F1A\u5B9A\u671F\u53D1\u5E03\u7531\u4E13\u4E1A\u8FD0\u52A8\u5458\u548C\u6559\u7EC3\u5236\u4F5C\u7684\u8BAD\u7EC3\u8BA1\u5212\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u901A\u8FC7\u5FAE\u4FE1\u4E0E\u5176\u4ED6\u8FD0\u52A8\u7231\u597D\u8005\u4E00\u8D77\u5206\u4EAB\u4F60\u559C\u6B22\u7684\u8BAD\u7EC3\u8BA1\u5212\u3002"
  },
  'Stay on Track': {
    title: '运动场模式，跑圈更准',
    desc: "\u4E13\u4E3A\u573A\u5730\u8BAD\u7EC3\u4F18\u5316\u7CBE\u51C6\u6570\u636E\uFF0C\u4E00\u5708400\u7C73\u6807\u51C6\u64CD\u573A\u8DDD\u79BB\u8BA1\u7B97\u8BEF\u5DEE\u4EC5\u51E0\u7C73\uFF0C\u5355\u5708\u8BA1\u65F6\u51E0\u4E4E\u4E0E\u79D2\u8868\u540C\u6B65\uFF0C\u4E3A\u5BF9\u6570\u636E\u7CBE\u5EA6\u8981\u6C42\u6781\u9AD8\u7684\u4E25\u8083\u8DD1\u8005\u7684\u8BAD\u7EC3\u5E26\u6765\u5DE8\u5927\u63D0\u5347\u3002"
  },
  pod: '配合COROS POD进行跑步，APEX还可以为你提供更加丰富的跑步动态数据，让你的跑步训练更加的科学高效。',
  battery: {
    size46: {
      normal: "35 \u5C0F\u65F6\n        \u9AD8\u7CBE\u5EA6GPS\u7EED\u822A",
      ultra: "70 \u5C0F\u65F6\n        \u8D85\u957F\u7EED\u822A\u6A21\u5F0F",
      regular: "30 \u5929\n              \u6237\u5916\u6301\u7EED\u4F7F\u7528"
    },
    size42: {
      normal: "25 \u5C0F\u65F6\n        \u9AD8\u7CBE\u5EA6GPS\u7EED\u822A",
      ultra: "60 \u5C0F\u65F6\n        \u8D85\u957F\u7EED\u822A\u6A21\u5F0F",
      regular: "24 \u5929\n              \u6237\u5916\u6301\u7EED\u4F7F\u7528"
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/apex2.js
/* harmony default export */ const apex2 = ({
  apex2title: 'COROS APEX 2/2 Pro',
  title: 'COROS APEX 2户外运动表',
  desc: '专为户外运动爱好者打造',
  apex2Accessories: 'APEX 2 ACCESSORIES',
  apex2proAccessories: 'APEX 2 Pro ACCESSORIES',
  productTitle: '越野，越强',
  productDesc1: "APEX \u7CFB\u5217\u6237\u5916\u8FD0\u52A8\u8868\uFF0C\u4E13\u4E3A\u957F\u8DDD\u79BB\u8D8A\u91CE\u8DD1\u8005\u91CF\u8EAB\u6253\u9020\u7684\u88C5\u5907\uFF0C\u4E3A\u4F60\n\u7684\u6237\u5916\u8FD0\u52A8\u4FDD\u9A7E\u62A4\u822A\u3002\u5168\u65B0\u4E00\u4EE3 APEX 2 \u548C APEX 2 Pro \u6765\u4E86\u3002 ",
  productDesc2: "\u66F4\u5F3A\u608D\u7684\u673A\u8EAB\uFF0C\u66F4\u4F18\u79C0\u7684\u5929\u7EBF\u6027\u80FD\uFF0C\u66F4\u51FA\u8272\u7684\u5BFC\u822A\u4F53\u9A8C\uFF0C\u5168\u65B0\u591A\u4F20\u611F\u5668\n\u5149\u7535\u7CFB\u7EDF\uFF0C\u66F4\u6301\u4E45\u7684GPS\u7EED\u822A\uFF0CAPEX 2 \u548C APEX 2 Pro \u7ED9\u4F60\u5E26\u6765\u66F4\u597D\u7684\u6237\n\u5916\u4F53\u9A8C\uFF0C\u5E2E\u52A9\u4F60\u5B9E\u73B0\u81EA\u6211\u8D85\u8D8A\u3002",
  productDescMobile1: "APEX \u7CFB\u5217\u6237\u5916\u8FD0\u52A8\u8868\uFF0C\u4E13\u4E3A\u957F\u8DDD\u79BB\u8D8A\u91CE\u8DD1\u8005\n\u91CF\u8EAB\u6253\u9020\u7684\u88C5\u5907\uFF0C\u4E3A\u4F60\u7684\u6237\u5916\u8FD0\u52A8\u4FDD\u9A7E\u62A4\u822A\u3002\n\u5168\u65B0\u4E00\u4EE3 APEX 2 \u548C APEX 2 Pro \u6765\u4E86\u3002",
  productDescMobile2: "\u66F4\u5F3A\u608D\u7684\u673A\u8EAB\uFF0C\u66F4\u4F18\u79C0\u7684\u5929\u7EBF\u6027\u80FD\uFF0C\u66F4\u51FA\u8272\u7684\n\u5BFC\u822A\u4F53\u9A8C\uFF0C\u5168\u65B0\u591A\u4F20\u611F\u5668\u5149\u7535\u7CFB\u7EDF\uFF0C\u66F4\u6301\u4E45\u7684\n GPS \u7EED\u822A\uFF0CAPEX 2 \u548C APEX 2 Pro \u7ED9\u4F60\u5E26\u6765\u66F4\n\u597D\u7684\u6237\u5916\u4F53\u9A8C\uFF0C\u5E2E\u52A9\u4F60\u5B9E\u73B0\u81EA\u6211\u8D85\u8D8A\u3002",
  explorationTitle: '强悍机身\n带你探索极致',
  explorationDesc: "\u6211\u4EEC\u5728\u8BBE\u8BA1 APEX 2 \u548C APEX 2 Pro \u65F6\uFF0C\u8003\u8651\u5230\u4E86\u6BCF\u4E00\u4E2A\u7EC6\u8282\uFF0C\u8BA9\u5B83\u4EEC\u517C\u5177\u8010\u7528\u6027\u548C\u529F\u80FD\u6027\u3002\nAPEX 2 \u548C APEX 2 Pro \u5C06\u4F1A\u6301\u4E45\u966A\u4F34\u4F60\uFF0C\u5B8C\u6210\u6BCF\u4E00\u6B21\u6237\u5916\u63A2\u7D22\u3002",
  designLabel1: "\u949B\u5408\u91D1\u9762\u5708",
  designLabel2: "\u4E0D\u9508\u94A2\n\u5149\u7535\u65CB\u94AE",
  designLabel3: "\u84DD\u5B9D\u77F3\u955C\u9762",
  explorationDescMobile: "\u6211\u4EEC\u5728\u8BBE\u8BA1 APEX 2 \u548C APEX 2 Pro \u65F6\uFF0C\n\u8003\u8651\u5230\u4E86\u6BCF\u4E00\u4E2A\u7EC6\u8282\uFF0C\u8BA9\u5B83\u4EEC\u517C\u5177\u8010\u7528\n\u6027\u548C\u529F\u80FD\u6027\u3002APEX 2 \u548C APEX 2 Pro \u5C06\n\u4F1A\u6301\u4E45\u966A\u4F34\u4F60\uFF0C\u5B8C\u6210\u6BCF\u4E00\u6B21\u6237\u5916\u63A2\u7D22\u3002",
  designTitle: '坚韧轻盈，\n与你飞驰于山野',
  designDesc: "APEX 2 \u7CFB\u5217\u529B\u6C42\u5B8C\u7F8E\u5E73\u8861\u575A\u56FA\u548C\u8F7B\u91CF\uFF0C\u8BA9\u4F60\u9A70\u9A8B\u5C71\u91CE\u65F6\uFF0C\u4E5F\u591A\u4E00\u5206\u5B89\u5FC3\u3002\nAPEX 2 \u548C APEX 2 Pro \u5747\u642D\u914D\u84DD\u5B9D\u77F3\u955C\u9762\u548C\u949B\u5408\u91D1\u9762\u5708\uFF0C\u8010\u78E8\u5EA6\u8F83\u4E0A\u4E00\u4EE3\u63D0\u534750%\u3002",
  designDescMobile: "APEX 2 \u7CFB\u5217\u529B\u6C42\u5B8C\u7F8E\u5E73\u8861\u575A\u56FA\u548C\u8F7B\u91CF\uFF0C\u8BA9\u4F60\u9A70\u9A8B\n\u5C71\u91CE\u65F6\uFF0C\u4E5F\u591A\u4E00\u5206\u5B89\u5FC3\u3002APEX 2 \u548C APEX 2 Pro \u5747\n\u642D\u914D\u84DD\u5B9D\u77F3\u955C\u9762\u548C\u949B\u5408\u91D1\u9762\u5708\uFF0C\u8010\u78E8\u5EA6\u8F83\u4E0A\u4E00\u4EE3\n\u63D0\u534750%\u3002",
  temperatureResistanTitle: '极限境地，与勇者同行',
  temperatureResistanDesc: '无论是极地的酷寒，还是沙漠的灼热，都无法阻挡探索的勇气，\nAPEX 2系列在-20℃ 到 50℃的环境中都能陪伴你探索极限。',
  temperatureResistanDescMobile: '无论是极地的酷寒，还是沙漠的灼热，都无法阻\n挡探索的勇气，APEX 2 系列在 -20℃ 到 50℃ 的\n环境中都能陪伴你探索极限。',
  temperatureResistanLower: -20,
  temperatureResistanUpper: 50,
  temperatureUnit: '℃',
  waterproofTitle: '无惧雨雪',
  waterproofDesc: "\u65E0\u8BBA\u662F\u9634\u96E8\u8FD8\u662F\u98CE\u96EA\u5929\u6C14\uFF0CAPEX 2 \u90FD\n\u53EF\u4EE5\u4F9D\u7136\u4FDD\u6301\u4F18\u5F02\u7684\u6027\u80FD\uFF0C\u5176\u62E5\u6709 50m \n\u7684\u9632\u6C34\uFF0C\u6EE1\u8DB3\u4F60\u66F4\u591A\u7684\u8FD0\u52A8\u573A\u666F\u9700\u6C42\u3002",
  waterproofDescMobile: "\u65E0\u8BBA\u662F\u9634\u96E8\u8FD8\u662F\u98CE\u96EA\n\u5929\u6C14\uFF0CAPEX 2 \u90FD\u53EF\u4EE5\n\u4F9D\u7136\u4FDD\u6301\u4F18\u5F02\u7684\u6027\u80FD\uFF0C\n\u5176\u62E5\u6709 50m \u7684\u9632\u6C34\uFF0C\n\u6EE1\u8DB3\u4F60\u66F4\u591A\u7684\u8FD0\u52A8\u573A\n\u666F\u9700\u6C42\u3002",
  dialTitle: '上手就操作，简单不用学',
  dialDesc: "\u5168\u9762\u89E6\u6478\u5C4F\uFF0C\u5149\u7535\u65CB\u94AE\u8BBE\u8BA1\uFF0C\n\u4E13\u4E1A\u8FD0\u52A8\u624B\u8868\uFF0C\u64CD\u4F5C\u53EF\u4EE5\u5F88\u7B80\u5355\u3002",
  dialDescMobile: "\u5168\u9762\u89E6\u6478\u5C4F\uFF0C\u5149\u7535\u65CB\u94AE\u8BBE\u8BA1\uFF0C\n\u4E13\u4E1A\u8FD0\u52A8\u624B\u8868\uFF0C\u64CD\u4F5C\u53EF\u4EE5\u5F88\u7B80\u5355\u3002",
  batteryTitle: '续航够，才能野个够',
  batteryDesc: "APEX 2 \u6807\u51C6GPS\u6A21\u5F0F\u7EED\u822A\u53EF\u8FBE40\u5C0F\u65F6\uFF0CAPEX 2 Pro\u6807\u51C6GPS\u6A21\u5F0F\u7EED\u822A\u53EF\u8FBE66\u5C0F\u65F6\u3002\n\u7535\u91CF\u4ECE0\u523050%\uFF0C\u5145\u753545\u5206\u949F\u5C31\u8BA9\u624B\u8868\u6D3B\u529B\u56DB\u5C04\u3002",
  batteryDescKeyword: '66小时',
  batteryDescMobile: "APEX 2 \u6807\u51C6GPS\u6A21\u5F0F\u7EED\u822A\u53EF\u8FBE40\u5C0F\u65F6\uFF0CAPEX 2 Pro\n\u6807\u51C6GPS\u6A21\u5F0F\u7EED\u822A\u53EF\u8FBE66\u5C0F\u65F6\u3002\u7535\u91CF\u4ECE 0 \u5230 50%\uFF0C\n45\u5206\u949F\u8BA9\u624B\u8868\u6D3B\u529B\u56DB\u5C04\u3002",
  batteryDescMobileKeyword: '66小时',
  batteryCompareImprove: '提升',
  batteryCompareImproveTitle: '更持久的GPS续航',
  navTitle: '为户外运动\n保驾护航',
  navDesc: "APEX 2 \u7CFB\u5217\u63D0\u4F9B\u4E86\u51FA\u8272\u7684\u6237\u5916\u5BFC\u822A\u529F\u80FD\uFF0C\n\u8BA9\u4F60\u5728\u6237\u5916\u968F\u65F6\u4E86\u89E3\u81EA\u5DF1\u8EAB\u5904\u4F55\u5730\uFF0C\u5E76\u53EF\u4EE5\u968F\u65F6\u8FD4\u822A\u3002",
  navDescMobile: "APEX 2 \u7CFB\u5217\u63D0\u4F9B\u4E86\u51FA\u8272\u7684\u6237\u5916\u5BFC\u822A\n\u529F\u80FD\uFF0C\u8BA9\u4F60\u5728\u6237\u5916\u968F\u65F6\u4E86\u89E3\u81EA\u5DF1\u8EAB\u5904\u4F55\u5730\uFF0C\n\u5E76\u53EF\u4EE5\u968F\u65F6\u8FD4\u822A\u3002",
  gpsTitle: '你的位置，更准了',
  gpsTitleMobile: '你的位置，\n更准了',
  gpsDesc: "APEX 2 \u7CFB\u5217\u652F\u6301\u5168\u661F\u5EA7\u5B9A\u4F4D\u7CFB\u7EDF\uFF0C\u5927\u5E45\n\u63D0\u5347\u53EF\u7528\u536B\u661F\u6570\u91CF\uFF0C\u667A\u80FD\u9009\u62E9\u4F18\u52BF\u4FE1\u53F7\n\u8FDB\u884C\u5B9A\u4F4D\u3002\u5929\u7EBF\u6027\u80FD\u63D0\u5347 50% \uFF0C\u4FE1\u53F7\u66F4\u597D\uFF0C\n\u66F4\u7A33\u5B9A\u3002APEX 2 Pro \u66F4\u652F\u6301\u53CC\u9891\u5168\u661F\u5EA7\u5B9A\n\u4F4D\uFF0C\u60AC\u5D16\u5CED\u58C1\u4E0A\uFF0C\u4E5F\u80FD\u7ED8\u5236\u7ACB\u4F53\u8F68\u8FF9\u3002",
  gpsDescMobile: "APEX 2 \u7CFB\u5217\u652F\u6301\u5168\u661F\u5EA7\u5B9A\u4F4D\n\u7CFB\u7EDF\uFF0C\u5927\u5E45\u63D0\u5347\u53EF\u7528\u536B\u661F\u6570\n\u91CF\uFF0C\u667A\u80FD\u9009\u62E9\u4F18\u52BF\u4FE1\u53F7\u8FDB\u884C\u5B9A\n\u4F4D\u3002\u5929\u7EBF\u6027\u80FD\u63D0\u5347 50%\uFF0C\u4FE1\u53F7\n\u66F4\u597D\uFF0C\u66F4\u7A33\u5B9A\u3002APEX 2 Pro \u66F4\n\u652F\u6301\u53CC\u9891\u5168\u661F\u5EA7\u5B9A\u4F4D\uFF0C\u60AC\u5D16\u5CED\n\u58C1\u4E0A\uFF0C\u4E5F\u80FD\u7ED8\u5236\u7ACB\u4F53\u8F68\u8FF9\u3002",
  outdoorNavTitle: '户外探索，不再迷路',
  outdoorNavDesc: "APEX\u5168\u7CFB\u5217\u652F\u6301\u5730\u56FE\u663E\u793A\uFF0C\u53EF\u5B9E\u73B0\u5206\u5757\u533A\u57DF\u4E0B\u8F7D\uFF0C\n\u7ED9\u4F60\u5E26\u6765\u66F4\u597D\u7684\u5730\u56FE\u5BFC\u822A\u4F53\u9A8C\u3002APEX 2 Pro \u66F4\u662F\u62E5\u6709\n 32G \u5185\u5B58\uFF0C\u53EF\u4E00\u6B21\u4FDD\u5B58\u5168\u7403\u5730\u8C8C\u56FE\u3002\u5149\u7535\u65CB\u94AE\uFF0C\u8BA9\u4F60\u968F\u5FC3\u6240\n\u6B32\u653E\u5927\u7F29\u5C0F\uFF1B\u89E6\u63A7\u5C4F\u5E55\uFF0C\u5E2E\u4F60\u770B\u5230\u66F4\u8FDC\u7684\u8DEF\u3002 ",
  outdoorNavLabel1: "\u65E5\u51FA\u65E5\u843D.",
  outdoorNavLabel2: "\u722C\u5347\u6570\u636E.",
  outdoorNavLabel3: "\u8DDD\u79BB\u7EC8\u70B9\u8FD8\u6709\u591A\u8FDC\uFF1F",
  outdoorNavLabel4: "\u504F\u822A\u63D0\u9192.",
  outdoorNavLabel5: "\u6807\u8BB0\u70B9.",
  outdoorNavLabel6: "\u7CBE\u51C6\u7684GPS\u5750\u6807.",
  outdoorNavScene1: "\u8FD8\u6709\u591A\u4E45\u5929\u9ED1\uFF0C\u770B\u8868\u5C31OK",
  outdoorNavScene2: "\u5E2E\u52A9\u4F60\u968F\u65F6\u638C\u63E1\u6D77\u62D4\u53D8\u5316",
  outdoorNavScene3: "\u65E0\u8BBA\u524D\u65B9\u662F\u4E0B\u4E00\u4E2ACP\u70B9\u8FD8\u662F\u7EC8\u70B9\uFF0C\u4F60\u90FD\u80FD\u8F7B\u677E\u638C\u63E1\u4FE1\u606F",
  outdoorNavScene4: "\u504F\u822A\u4E86\uFF1F\u6211\u4EEC\u4F1A\u5E2E\u52A9\u4F60\u91CD\u56DE\u6B63\u8F68",
  outdoorNavScene5: "\u5E2E\u52A9\u4F60\u638C\u63E1\u8865\u7ED9\u7AD9\u3001\u996E\u6C34\u70B9\u7B49\u6807\u6CE8\u70B9\uFF0C\u4ECE\u5BB9\u89C4\u5212\u6BD4\u8D5B",
  outdoorNavScene6: "GPS\u5750\u6807\u3001\u6C14\u538B\u3001\u6D77\u62D4\u9AD8\u5EA6\uFF0C\u4E00\u624B\u638C\u63E1\u4F4D\u7F6E\u4FE1\u606F",
  plan: "\u4E0B\u4E00\u6B21\u8DEF\u7EBF\uFF0C\u63D0\u524D\u89C4\u5212",
  planDesc1: "\u5168\u65B0 APP 3.0 \u5DF2\u4E0A\u7EBF\uFF0C\u65B0\u589E\u7684\u8DEF\u7EBF\u89C4\u5212\u529F\u80FD\u652F\u6301\u624B\u52A8\u7ED8\n\u5236\u8DEF\u7EBF\uFF0C\u5F00\u8F9F\u4F60\u7684\u72EC\u5BB6\u3010\u8D8A\u91CE\u8DD1/\u767B\u5C71/\u5F92\u6B65/\u9A91\u884C/\u8DEF\u8DD1\u3011\n\u8DEF\u7EBF\u3002\u5174\u8DA3\u70B9\u7BA1\u7406\u652F\u6301\u81EA\u5B9A\u4E49\u4FDD\u5B58\u591A\u4E2A\u5174\u8DA3\u70B9\uFF0C\u5C0F\u4F17\u666F\u70B9\n\u3001\u9732\u8425\u5730\u3001\u4F11\u606F\u533A\u3001\u9493\u9C7C\u70B9\u2026\u2026",
  planDesc2: "\u6807\u8BB0\u597D\u5B9D\u85CF\u5730\uFF0C\u65B9\u4FBF\u4E0B\u6B21\u5BFC\u822A\u518D\u6765\u3002",
  planDescMobile: "Coming soon, the COROS App will add a new route-\n planning feature to our robust navigational \n ecosystem. Simply open your app, start drawing \n your preferred route, and let Route Planner choose \n your optimal path based on the closest trails or \n streets available. Check distance and elevation, save \n it, transfer it to your watch, or share it with your friends. \n Currently, the COROS ecosystem is compatible with \n popular 3rd party route builders, such as Strava and Komoot.",
  planDescMobile1: "\u5168\u65B0 APP 3.0 \u5373\u5C06\u4E0A\u7EBF\uFF0C\u65B0\u589E\u7684\u8DEF\u7EBF\u89C4\u5212\u529F\u80FD\u652F\u6301\u624B\u52A8\u7ED8\u5236\u8DEF\u7EBF\uFF0C\u5F00\u8F9F\u4F60\u7684\u72EC\u5BB6\u3010\u8D8A\u91CE\u8DD1/\u767B\u5C71/\u5F92\u6B65/\u9A91\u884C/\u8DEF\u8DD1\u3011\u8DEF\u7EBF\u3002\u5174\u8DA3\u70B9\u7BA1\u7406\u652F\u6301\u81EA\u5B9A\u4E49\u4FDD\u5B58\u591A\u4E2A\u5174\u8DA3\u70B9\uFF0C\u5C0F\u4F17\u666F\u70B9\u3001\u9732\u8425\u5730\u3001\u4F11\u606F\u533A\u3001\u9493\u9C7C\u70B9 \u2026\u2026",
  planDescMobile2: "\u6807\u8BB0\u597D\u5B9D\u85CF\u5730\uFF0C\u65B9\u4FBF\u4E0B\u6B21\u5BFC\u822A\u518D\u6765\u3002",
  prepareTitle: "\u4ECE\u5BB9\u5E94\u5BF9\u6BCF\u6B21\u98CE\u9669",
  prepareTitleMobile: "\u4ECE\u5BB9\u5E94\u5BF9\n\u6BCF\u6B21\u98CE\u9669",
  prepareDesc: "\u6237\u5916\u98CE\u666F\u867D\u7F8E\uFF0C\u4F46\u4E5F\u5371\u673A\u56DB\u4F0F\u3002\n\u66B4\u98CE\u96E8\u5929\u6C14\u3001\u9AD8\u539F\u53CD\u5E94\u3001\u9ED1\u591C\u3001\u8131\u6C34\u2014\u2014\u8FD9\u4E9B\u90FD\u662F\u6237\u5916\u63A2\u9669\u4E2D\u7684\u6F5C\u5728\u98CE\u9669\u3002\nAPEX 2 \u548C APEX 2 Pro \u4E3A\u4F60\u8003\u8651\u4E86\u6BCF\u4E00\u6B21\u98CE\u9669\uFF0C\n\u8BA9\u4F60\u4ECE\u5BB9\u5E94\u5BF9\u6311\u6218\uFF0C\u5B89\u5168\u56DE\u5BB6\u3002",
  prepareDescMobile: "\u6237\u5916\u98CE\u666F\u867D\u7F8E\uFF0C\u4F46\u4E5F\u5371\u673A\u56DB\u4F0F\u3002\n\u66B4\u98CE\u96E8\u5929\u6C14\u3001\u9AD8\u539F\u53CD\u5E94\u3001\u9ED1\u591C\u3001\u8131\u6C34\u2014\u2014\u8FD9\u4E9B\u90FD\u662F\u6237\u5916\u63A2\u9669\u4E2D\u7684\u6F5C\u5728\u98CE\u9669\u3002\nAPEX 2 \u548C APEX 2 Pro \u4E3A\u4F60\u8003\u8651\u4E86\u6BCF\u4E00\u6B21\u98CE\u9669\uFF0C\n\u8BA9\u4F60\u4ECE\u5BB9\u5E94\u5BF9\u6311\u6218\uFF0C\u5B89\u5168\u56DE\u5BB6\u3002",
  nutritionAlert: "\u8865\u7ED9\u63D0\u9192",
  sunMovements: "\u65E5\u51FA/\u65E5\u843D",
  stormAlert: "\u66B4\u98CE\u96E8\u9884\u8B66",
  cameraControl: "\u76F8\u673A\u9065\u63A7",
  altitudeMode: "\u9AD8\u539F\u5B88\u62A4",
  nightMode: "\u591C\u5149\u6A21\u5F0F",
  fitnessTitle: "\u79D1\u5B66\u8BAD\u7EC3\n\u53EF\u4EE5\u5F88\u7B80\u5355",
  fitnessDesc: "COROS APEX 2\u548CAPEX 2 Pro\u642D\u914DCOROS EvoLab\uFF0C\n\u53EF\u4EE5\u5E2E\u52A9\u4F60\u5B9E\u73B0\u4E0B\u4E00\u4E2A\u8FD0\u52A8\u76EE\u6807\uFF0C\u521B\u9020PB\u3002\n\u4F60\u505A\u597D\u51C6\u5907\u4E86\u5417\uFF1F",
  fitnessDescMobile: "COROS APEX 2\u548CAPEX 2 Pro\u642D\u914DCOROS EvoLab\uFF0C\n\u53EF\u4EE5\u5E2E\u52A9\u4F60\u5B9E\u73B0\u4E0B\u4E00\u4E2A\u8FD0\u52A8\u76EE\u6807\uFF0C\u521B\u9020PB\u3002\n\u4F60\u505A\u597D\u51C6\u5907\u4E86\u5417\uFF1F",
  sensorTitle: "\u4ECE\u5FC3\u5F00\u59CB\uFF0C\u4E86\u89E3\u4F60",
  sensorDesc: "\u5FC3\u7387\u8D8A\u51C6\u786E\uFF0C\u8D8A\u80FD\u5E2E\u52A9\u4F60\u638C\u63E1\u6BCF\u4E00\u6B21\u8BAD\u7EC3\u3002 APEX 2 \u5168\u7CFB\u5217\u642D\u8F7D\u5168\u65B0\u591A\u4F20\u611F\u5668\u5149\u7535\u7CFB\u7EDF\uFF0C\u6355\u6349\u6BCF\u4E00\u6B21\u5FC3\u8DF3\uFF0C\u642D\u914D\u9AD8\u9A70\u5FC3\u7387\u7B97\u6CD5\uFF0C\u63D0\u4F9B\u66F4\u51C6\u786E\u7684\u5FC3\u7387\u6570\u636E\u3002\u65E0\u8BBA\u4F60\u9A70\u9A8B\u4E8E\u5C71\u91CE\uFF0C\u8FD8\u662F\u5728\u68A6\u4E61\u4E2D\u4F11\u61A9\uFF0CAPEX 2 \u7CFB\u5217\u90FD\u5C06\u4F1A\u8BB0\u5F55\u4E0B\u4F60\u6BCF\u4E00\u523B\u7684\u72B6\u6001\u3002",
  sensorDescMobile: "\u5FC3\u7387\u8D8A\u51C6\u786E\uFF0C\u8D8A\u80FD\u5E2E\u52A9\u4F60\u638C\u63E1\u6BCF\u4E00\u6B21\u8BAD\u7EC3\u3002APEX 2 \u5168\u7CFB\u5217\u642D\u8F7D\u5168\u65B0\u591A\u4F20\u611F\u5668\u5149\u7535\u7CFB\u7EDF\uFF0C\u6355\u6349\u6BCF\u4E00\u6B21\u5FC3\u8DF3\uFF0C\u642D\u914D\u9AD8\u9A70\u5FC3\u7387\u7B97\u6CD5\uFF0C\u63D0\u4F9B\u66F4\u51C6\u786E\u7684\u5FC3\u7387\u6570\u636E\u3002\u65E0\u8BBA\u4F60\u9A70\u9A8B\u4E8E\u5C71\u91CE\uFF0C\u8FD8\u662F\u5728\u68A6\u4E61\u4E2D\u4F11\u61A9\uFF0CAPEX 2 \u7CFB\u5217\u90FD\u5C06\u4F1A\u8BB0\u5F55\u4E0B\u4F60\u6BCF\u4E00\u523B\u7684\u72B6\u6001\u3002",
  trackRecoverTitle: "\u4F11\u606F\u5F97\u5982\u4F55\uFF0C\u6211\u4EEC\u77E5\u9053",
  trackRecoverDesc: "APEX 2\u548CAPEX 2 Pro\u53EF\u4EE5\u5E2E\u52A9\u4F60\u76D1\u6D4B\u7761\u7720\n\u8D28\u91CF\uFF0C\u7761\u7720\u7684\u6BCF\u4E2A\u9636\u6BB5\uFF08\u6DF1\u5EA6\u7761\u7720\u3001\u6D45\u5EA6\u7761\u7720\u3001\n\u5FEB\u901F\u773C\u52A8\u7761\u7720\uFF09\u5C3D\u5728\u638C\u63A7\u3002\u9192\u6765\u4E4B\u540E\uFF0C\u6D4B\u91CF\u81EA\u5DF1\u7684\u6E05\u6668HRV\n\u6307\u6570\uFF0C\u8BC4\u4F30\u81EA\u5DF1\u7684\u8EAB\u4F53\u662F\u5426\u5DF2\u7ECF\u505A\u597D\u51C6\u5907\u3002\u5982\u679C\u4F60\u5728\u9AD8\u6D77\u62D4\u5730\u533A\u8BAD\u7EC3\uFF0C\u5F00\u542F\u9AD8\u539F\u5B88\u62A4\u6A21\u5F0F\uFF0C\u624B\u8868\u4F1A\u5E2E\u52A9\u4F60\u76D1\u6D4B\u8840\u6C27\u9971\u548C\u5EA6\uFF0C\u8BC4\u4F30\u8EAB\u4F53\u9002\u5E94\u7A0B\u5EA6\u3002",
  trackRecoverDescMobile: "APEX 2 \u548C APEX 2 Pro \u53EF\u4EE5\u5E2E\u52A9\u4F60\u76D1\u6D4B\u7761\u7720\u8D28\u91CF\uFF0C\u7761\u7720\u7684\u6BCF\u4E2A\u9636\u6BB5\uFF08\u6DF1\u5EA6\u7761\u7720\u3001\u6D45\u5EA6\u7761\u7720\u3001\u5FEB\u901F\u773C\u52A8\u7761\u7720\uFF09\u5C3D\u5728\u638C\u63A7\u3002\u9192\u6765\u4E4B\u540E\uFF0C\u6D4B\u91CF\u81EA\u5DF1\u7684\u6E05\u6668HRV\u6307\u6570\uFF0C\u8BC4\u4F30\u81EA\u5DF1\u7684\u8EAB\u4F53\u662F\u5426\u5DF2\u7ECF\u505A\u597D\u51C6\u5907\u3002\u5982\u679C\u4F60\u5728\u9AD8\u6D77\u62D4\u5730\u533A\u8BAD\u7EC3\uFF0C\u5F00\u542F\u9AD8\u539F\u5B88\u62A4\u6A21\u5F0F\uFF0C\u624B\u8868\u4F1A\u5E2E\u52A9\u4F60\u76D1\u6D4B\u8840\u6C27\u9971\u548C\u5EA6\uFF0C\u8BC4\u4F30\u8EAB\u4F53\u9002\u5E94\u7A0B\u5EA6\u3002",
  trainingSolutionTitle: "\u4F60\u7684\u79D1\u5B66\u8BAD\u7EC3\u7BA1\u7406\u4E13\u5BB6",
  trainingSolutionTitleMobile: "\u4F60\u7684\u79D1\u5B66\u8BAD\u7EC3\u7BA1\u7406\u4E13\u5BB6",
  trainingSolutionDesc: "\u81EA\u53D1\u5E03\u4EE5\u6765\uFF0CCOROS EvoLab \u548C COROS Training Hub \u5DF2\u7ECF\u5728\u8BF8\u591A\u7EAA\u5F55\u4E2D\u626E\u6F14\u91CD\u8981\u4F5C\u7528\u3002\nEliud Kipchoge \u7684\u9A6C\u62C9\u677E\u4E16\u754C\u7EAA\u5F55\uFF0CKilian Jornet \u7684 UTMB \u8D5B\u9053\u7EAA\u5F55\u7B49\u7B49\u3002\n\u6709\u4E86 APEX 2 \u548C APEX 2 Pro \u7684\u52A0\u6301\uFF0C\u4F60\u53EF\u4EE5\u548C\u4E16\u754C\u9876\u7EA7\u8FD0\u52A8\u5458\u4E00\u6837\uFF0C\u4F53\u9A8C COROS \u7684\u8BAD\u7EC3\u5DE5\u5177\u3002",
  trainingSolutionDescMobile: "\u81EA\u53D1\u5E03\u4EE5\u6765\uFF0CCOROS EvoLab \u548C COROS Training Hub \u5DF2\u7ECF\u5728\u8BF8\u591A\u7EAA\u5F55\u4E2D\u626E\u6F14\u91CD\u8981\u4F5C\u7528\u3002Eliud Kipchoge \u7684\u9A6C\u62C9\u677E\u4E16\u754C\u7EAA\u5F55\uFF0CKilian Jornet \u7684 UTMB \u8D5B\u9053\u7EAA\u5F55\u7B49\u7B49\u3002\u6709\u4E86 APEX 2 \u548C APEX 2 Pro \u7684\u52A0\u6301\uFF0C\u4F60\u53EF\u4EE5\u548C\u4E16\u754C\u9876\u7EA7\u8FD0\u52A8\u5458\u4E00\u6837\uFF0C\u4F53\u9A8C COROS \u7684\u8BAD\u7EC3\u5DE5\u5177\u3002",
  traninghubTitle: "\u8BAD\u7EC3\uFF0C\u53EF\u4EE5\u5982\u6B64\u9AD8\u6548",
  traninghubDesc: "COROS \u7684\u8BAD\u7EC3\u5DE5\u5177\u8BA9\u4F60\u7684\u8BAD\u7EC3\u66F4\u52A0\u6709\u6548\uFF0C\u5E76\u5E2E\u52A9\u4F60\n\u76D1\u6D4B\u8BAD\u7EC3\u6548\u679C\u3002COROS \u4E0E\u4E13\u4E1A\u6559\u7EC3\u5408\u4F5C\uFF0C\u51C6\u5907\u4E86\u4E30\n\u5BCC\u7684\u5B98\u65B9\u8BAD\u7EC3\u7EC4\u5408\u548C\u8BAD\u7EC3\u8BA1\u5212\uFF0C\u968F\u65F6\u514D\u8D39\u4E0B\u8F7D\uFF0C\u63A5\n\u53D7\u6559\u7EC3\u8FDC\u7A0B\u6307\u5BFC\u3002\u5173\u6CE8 \u201CCOROS\u9AD8\u9A70\u201D \u5FAE\u4FE1\u516C\u4F17\u53F7\uFF0C\n\u6301\u7EED\u83B7\u53D6\u6700\u65B0\u8BAD\u7EC3\u7EC4\u5408\u548C\u8BAD\u7EC3\u8BA1\u5212\u3002",
  trainingLabel1: "\u8D1F\u8377\u6307\u6807.",
  trainingLabel2: "\u6210\u7EE9\u9884\u6D4B.",
  trainingLabel3: "7\u5929\u8D1F\u8377\u603B\u548C.",
  trainingLabel4: "\u7B49\u5F3A\u914D\u901F.",
  trainingLabel5: "\u8BAD\u7EC3\u91CD\u70B9.",
  trainingLabel6: "\u6062\u590D\u65F6\u95F4.",
  trainingDesc1: "\u8BC4\u4F30\u8FC7\u53BB\u8FD1\u671F\u8BAD\u7EC3\n\u7ED9\u8EAB\u4F53\u5E26\u6765\u7684\u5F71\u54CD",
  trainingDesc2: "\u9884\u6D4B\u4F60\u5728\u4E0D\u540C\u8DDD\u79BB\u7684\u5B8C\u8D5B\u65F6\u95F4\uFF0C\n\u4E3A\u6BD4\u8D5B\u7B56\u7565\u5236\u5B9A\u63D0\u4F9B\u53C2\u8003",
  trainingDesc3: "\u5BF9\u81EA\u5DF1\u8FC7\u53BB\u4E00\u5468\u7684\n\u8BAD\u7EC3\u8D1F\u8377\u4E00\u76EE\u4E86\u7136",
  trainingDesc4: "\u51C6\u786E\u638C\u63E1\u6BCF\u4E00\u6B21\n\u8DD1\u6B65\u7684\u771F\u5B9E\u5F3A\u5EA6",
  trainingDesc5: "\u603B\u7ED3\u5355\u6B21\u8BAD\u7EC3\u7ED9\u8EAB\n\u4F53\u5E26\u6765\u7684\u4E3B\u8981\u63D0\u9AD8",
  trainingDesc6: "\u5E2E\u52A9\u4F60\u5408\u7406\u5B89\n\u6392\u8BAD\u7EC3\u548C\u6062\u590D",
  repsTrackTitle: "\u529B\u91CF\u8BAD\u7EC3\uFF0C\u6FC0\u53D1\u771F\u6B63\u6F5C\u80FD",
  repsTrackDesc: "COROS\u5728\u529B\u91CF\u8BAD\u7EC3\u4E2D\u8BC6\u522B\u52A8\u4F5C\uFF0C\u81EA\u52A8\u8BA1\u6570\u8BA1\u7EC4\uFF0C\u901A\u8FC7\u5B9E\u65F6\n\u5FC3\u7387\u8BA1\u7B97\u4F53\u80FD\u6D88\u8017\uFF0C\u5E2E\u52A9\u4F60\u63A7\u5236\u8FD0\u52A8\u5F3A\u5EA6\u3002APP \u5185\u7F6E\u8D85\u8FC7\n 200 \u79CD\u8BAD\u7EC3\u52A8\u4F5C\uFF0C\u5E2E\u52A9\u4F60\u521B\u5EFA\u5C5E\u4E8E\u81EA\u5DF1\u7684\u529B\u91CF\u8BAD\u7EC3\u3002\u5F53\u7136\uFF0C\n\u4F60\u4E5F\u53EF\u4EE5\u901A\u8FC7\u793E\u4EA4\u5E73\u53F0\u548C\u5176\u4ED6\u4EBA\u5206\u4EAB\u81EA\u5DF1\u7684\u529B\u91CF\u8BAD\u7EC3\u3002",
  repsTrackDescMobile: "COROS\u5728\u529B\u91CF\u8BAD\u7EC3\u4E2D\u8BC6\u522B\u52A8\u4F5C\uFF0C\u81EA\u52A8\u8BA1\u6570\u8BA1\u7EC4\uFF0C\u901A\u8FC7\u5B9E\u65F6\u5FC3\u7387\u8BA1\u7B97\u4F53\u80FD\u6D88\u8017\uFF0C\u5E2E\u52A9\u4F60\u63A7\u5236\u8FD0\u52A8\u5F3A\u5EA6\u3002APP \u5185\u7F6E\u8D85\u8FC7 200 \u79CD\u8BAD\u7EC3\u52A8\u4F5C\uFF0C\u5E2E\u52A9\u4F60\u521B\u5EFA\u5C5E\u4E8E\u81EA\u5DF1\u7684\u529B\u91CF\u8BAD\u7EC3\u3002\u5F53\u7136\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u901A\u8FC7\u793E\u4EA4\u5E73\u53F0\u548C\u5176\u4ED6\u4EBA\u5206\u4EAB\u81EA\u5DF1\u7684\u529B\u91CF\u8BAD\u7EC3\u3002",
  packagelist: [{
    name: 'COROS APEX 2/2 Pro',
    num: 1
  }, {
    name: '充电线',
    num: 1
  }, {
    name: '织物表带',
    num: 1
  }],
  comingSoon: '即将上线',
  dustyPinkDesc: "\u5728\u65E5\u51FA\u7834\u6653\u6216\u8005\u9EC4\u660F\u65F6\u5206\uFF0C\u9633\u5149\u7167\u8000\u5728\u6CE5\u571F\u3001\u6C99\u783E\u3001\u77FF\u77F3\u4E0A\uFF0C\u5728\u4E0D\u540C\u7684\u81EA\u7136\u666F\u89C2\u4E2D\uFF0C\u603B\u4F1A\u51FA\u73B0\u4E00\u62B9\u5999\u4E0D\u53EF\u8A00\u7684\u85D5\u7C89\u8272\u3002\n  APEX 2 \u85D5\u7C89\u8272\u7684\u914D\u8272\u7075\u611F\uFF0C\u6765\u81EA\u8FD9\u4E9B\u5927\u81EA\u7136\u7684\u5947\u5999\u77AC\u95F4\uFF0C\u73B0\u5728\uFF0C\u5B83\u4EEC\u4E00\u8D77\u6765\u5230\u4E86\u4F60\u7684\u624B\u8155\u3002",
  gobiDescs: ["COROS APEX 2 Pro \u8D85\u7EA7\u6208\u58C1\u9650\u91CF\u6B3E\uFF0C\u914D\u8272\u7075\u611F\u6765\u6E90\u4E8E\u6208\u58C1\u7684\u58EE\u4E3D\u666F\u89C2\u3002\n    \u5728\u6D77\u6D0B\u65F6\u4EE3\u5230\u6765\u4E4B\u524D\uFF0C\u4E2D\u897F\u5343\u5E74\u6587\u660E\u4EA4\u878D\uFF0C\u5728\u6F2B\u6F2B\u6208\u58C1\u5F62\u6210\u3002\n    \u4E00\u4EE3\u53C8\u4E00\u4EE3\u6208\u58C1\u63A2\u7D22\u5BB6\uFF0C\u5728\u8FD9\u91CC\u7528\u811A\u6B65\u4E08\u91CF\u5386\u53F2\u7684\u8DDD\u79BB\uFF0C\u53E9\u95EE\u751F\u547D\u7684\u5965\u4E49\u3002", "\u8D85\u957F\u7EED\u822A\u3001\u8F7B\u91CF\u575A\u786C\u3001\u7CBE\u51C6\u5BFC\u822A\uFF0CCOROS APEX 2 Pro \u966A\u4F60\u968F\u65F6\u53BB\u6237\u5916\u63A2\u9669\u3002\n    \u6562\u4E8E\u51FA\u53D1\u3001\u65E0\u754F\u6311\u6218\uFF0C\u5171\u540C\u5411\u6208\u58C1\u529B\u91CF\u81F4\u656C\u3002"],
  gobiDescsMobile: ["COROS APEX 2 Pro \u8D85\u7EA7\u6208\u58C1\u9650\u91CF\u6B3E\uFF0C\n    \u914D\u8272\u7075\u611F\u6765\u6E90\u4E8E\u6208\u58C1\u7684\u58EE\u4E3D\u666F\u89C2\u3002 ", "\u5728\u6D77\u6D0B\u65F6\u4EE3\u5230\u6765\u4E4B\u524D\uFF0C\u4E2D\u897F\u5343\u5E74\u6587\u660E\u4EA4\u878D\uFF0C\n    \u5728\u6F2B\u6F2B\u6208\u58C1\u5F62\u6210\u3002\u4E00\u4EE3\u53C8\u4E00\u4EE3\u6208\u58C1\u63A2\u7D22\u5BB6\uFF0C\n    \u5728\u8FD9\u91CC\u7528\u811A\u6B65\u4E08\u91CF\u5386\u53F2\u7684\u8DDD\u79BB\uFF0C\u53E9\u95EE\u751F\u547D\u7684\u5965\u4E49\u3002", "\u8D85\u957F\u7EED\u822A\u3001\u8F7B\u91CF\u575A\u786C\u3001\u7CBE\u51C6\u5BFC\u822A\uFF0C\n    COROS APEX 2 Pro \u966A\u4F60\u968F\u65F6\u53BB\u6237\u5916\u63A2\u9669\u3002\n    \u6562\u4E8E\u51FA\u53D1\u3001\u65E0\u754F\u6311\u6218\uFF0C\u5171\u540C\u5411\u6208\u58C1\u529B\u91CF\u81F4\u656C\u3002"]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/common.js
/* harmony default export */ const common = ({
  header: {
    support: '服务支持',
    stories: '品牌故事',
    products: '产品信息',
    training_science: '科学训练',
    technology: 'Technology',
    people: 'People',
    trainingHub: 'Training Hub',
    plans: '训练计划',
    workouts: '训练课程',
    trainingBlog: 'Training Blog',
    retail: 'Store Locator',
    shopNow: '立即购买',
    storeLocation: '线下门店',
    historyData: '历史数据',
    buyOnline: '在线购买',
    specs: '规格',
    login: '登录',
    login2trainingHub: '登录 Training Hub',
    all_watches: '所有手表',
    menu1: {
      name: 'PRODUCT',
      subnav: {
        nav1: 'COROS VERTIX 2',
        nav2: 'COROS VERTIX',
        nav3: 'COROS APEX Pro',
        nav4: 'COROS APEX',
        nav5: 'COROS PACE 2',
        nav6: 'COROS PACE 2 EK',
        nav7: 'COROS POD',
        nav8: 'Accessories',
        nav9: 'Others',
        nav10: 'COROS PACE',
        nav11: 'SafeSound-MOUNTAIN',
        nav12: 'SafeSound-ROAD',
        nav13: 'SafeSound-URBAN',
        nav14: 'OMNI',
        nav15: 'LINX'
      }
    },
    menu2: {
      name: 'COMMUNITY',
      subnav: {
        nav1: 'COROS STORIES',
        nav2: 'COROS PRO ATHLETE',
        nav3: 'TRADE IN PROGRAM',
        nav4: 'VERIFIED WORKOUT',
        nav5: 'TRAINING PLANS'
      }
    },
    menu3: {
      name: 'SUPPORT',
      subnav: {
        nav1: 'USER LOGIN',
        nav2: 'HELP CENTER',
        nav3: 'WARRANTY',
        nav4: 'RELEASE NOTES',
        nav5: 'WATCH COMPARISON'
      }
    },
    menu4: {
      name: 'ABOUT',
      subnav: {
        nav1: 'ABOUT US',
        nav2: 'IN THE NEWS',
        nav3: 'CONTACT',
        nav4: 'EVENTS',
        nav5: 'CAREERS'
      }
    },
    menu5: {
      name: 'STORE LOCATOR'
    },
    menu6: {
      name: 'COUNTRY',
      subnav: {
        nav1: 'United States (English)',
        nav2: 'United Kingdom (English)',
        nav3: 'Canada (English)',
        nav4: 'France (Français)',
        nav5: 'Germany (Deutsch)',
        nav6: '中国(中文)',
        nav7: '日本(日本語)'
      }
    }
  },
  footer: {
    countries: "国家地区",
    selectYourLocation: "选择国家地区",
    DealerLogin: 'Dealer Login',
    ReturnRefund: 'Return & Refund',
    WatchComparison: '手表对比',
    TermsConditions: '服务条款',
    ReleaseNotes: '更新日志',
    PrivacyPolicy: '隐私政策',
    CookieSettings: 'Cookie Settings',
    WheretoDownload: 'APP下载',
    copyright: '© 2020 | COROS Wearables Inc.',
    trainingHub: 'Training Hub',
    evolab: 'EvoLab',
    warranty: '售后政策',
    helpCenter: '帮助中心',
    maps: '地图',
    software: 'COROS产品',
    hardware: 'Hardware',
    support: '服务支持',
    company: 'Company',
    news: 'Newsroom',
    inTheNews: 'In the News',
    about: '关于COROS',
    aboutMenu: '关于我们',
    careers: '加入我们',
    contact: '联系我们',
    joinUs: 'JOIN US',
    subscripPlaceholder: 'SIGN UP FOR NEWS'
  },
  country: {
    usa: '美国',
    kingdom: '英国',
    newzealand: '新西兰'
  },
  home: '首页',
  shopnow: '立即购买',
  speecs: '规格',
  comparisonchart: 'COROS 手表对比表',
  video: {
    play: '播放',
    pause: '暂停',
    replay: '重新播放'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/specs.js
/* harmony default export */ const specs = ({
  model: '型号',
  navigation: '卫星模式',
  sensors: 'Sensors',
  batteryLife: 'Battery Life',
  supportedWorkouts: '支持运动类型',
  resolution: '分辨率',
  positioning: '产品定位',
  yes: 'Yes',
  fullWeight: '整体重量',
  operation: '操作方式',
  heartRate: '光电心率',
  bloodOxygen: '血氧检测',
  dataStorage: '数据储存',
  normalBatteryLife: '日常续航',
  gpsModelLife: 'GPS模式',
  compass: '指南针',
  trackNavigation: '轨迹导航',
  nightMode: '夜光模式',
  flipDisplay: '翻转显示',
  hrv: 'HRV检测',
  weightWithNylon: '整体重量（配织物表带）',
  weightWithSilicone: '整体重量（配硅胶表带）',
  included: '√',
  notIncluded: '—',
  TIM: '上市时间',
  comparePageTitle: '手表对比',
  comparePlaceholder: '请选择一款手表进行对比',
  'FULL WATCH COMPARISON': '全系手表对比',
  'Hide Duplicated Details': '隐藏相同信息',
  compareLabel: {
    'Size and Weight': '尺寸及重量',
    Dimensions: '尺寸',
    Weight: '重量',
    Display: '屏幕',
    'Display Size': '屏幕尺寸',
    'Display Resolution': '分辨率',
    'Display Type': '屏幕类型',
    Materials: '材质',
    'Screen Material': '屏幕材质',
    'Bezel Material': '面圈材质',
    'Cover Material': '底壳外圈材质',
    'Band Material': '表带材质',
    'Watch Band': '表带',
    Width: '宽度',
    'Installation Type': '安装方式',
    Design: '交互设计',
    Button: '按钮',
    Connectivity: '连接',
    Phone: '手机',
    Accessories: '配件',
    'Data Sync': '数据同步',
    Durability: '耐用性',
    'Water Resistance': '防水等级',
    'Working Temperature': '工作温度',
    'Storage Temperature': '储存温度',
    Battery: '电池续航',
    batteryDesc: '最近更新日期：2024年2月5日',
    'UltraMax GPS Mode': '超长续航模式',
    'Standard Full GPS': '标准GPS模式',
    'All Systems On': '全星座模式',
    'All Systems + Dual Frequency On': '双频全星座',
    'Daily Use': '日常续航',
    'Charging Time': '充电时间',
    'Geo Location': '定位系统',
    'Satellite Systems': '卫星系统',
    'GNSS Chipset': '卫星定位芯片',
    Navigation: '导航',
    'Map Layer': '地图类型',
    'Additional Features': '其他功能',
    'Data Tracking': '数据监测',
    Sensors: '传感器',
    'Training Features': '训练相关',
    'Daily Features': '日常使用',
    '3rd Party Integration': '支持的第三方App',
    'System Languages': '系统语言',
    'Supported Activity Modes': '支持的运动模式',
    Run: '跑步',
    Mountain: '山地',
    Bike: '骑行',
    Water: '水上运动',
    Winter: '冬季运动',
    Cardio: '有氧运动',
    Special: '其他',
    Compatibility: 'Compatibility',
    'COROS VERTIX 2': 'COROS VERTIX 2',
    'COROS PACE 2': 'COROS PACE 2',
    'COROS VERTIX': 'COROS VERTIX',
    'COROS APEX Pro': 'COROS APEX Pro',
    'COROS APEX 42mm/46mm': 'COROS APEX 42mm/46mm',
    'COROS PACE': 'COROS PACE',
    'POD Dimensions': '尺寸',
    'Features & Metrics': '数据项',
    'Charging Dock Capacity': '充电盒',
    'Charging Dock Cable': '充电盒端口',
    'Activity Mode': '运动续航',
    'Standby Mode': '待机续航',
    'COROS App': 'COROS App',
    'COROS Watch': 'COROS手表',
    'Case Material': '外壳材料',
    'Foot Clip Material': '鞋夹材料',
    'Waist Clip Material': '腰夹材料',
    'Weight - COROS POD 2': '重量 - COROS POD 2',
    'Weight - Charging Dock': '重量 - 充电盒',
    Fit: '佩戴',
    'Hrm Dimensions': '尺寸',
    'Hrm Weight - Case Only': '重量 - 传感器',
    'Hrm Weight - Case + Band': '重量 - 传感器和臂带',
    'Hrm Band Material': '臂带材质',
    'Hrm Optical Heart Rate Hardware': '光电心率传感器',
    'Hrm Band Circumference': '臂带尺寸',
    'Hrm Wearing Position': '建议佩戴位置',
    'Hrm Wireless Connection': '无线连接',
    'Hrm Supported Devices': '适配设备',
    'Hrm Data Sync': '数据传输',
    'Hrm Water Resistance': '防水性能',
    'Hrm Working Temperature': '工作温度',
    'Hrm Storage Temperature': '储存温度',
    'Hrm Charging Temperature': '充电温度',
    'Hrm Activity Mode': '运动续航',
    'Hrm Standby Mode': '待机续航',
    'Hrm Battery Capacity': '电池容量',
    'Hrm Charging Time': '充电时间',
    'Hrm Charging Cable': '充电线',
    'Internal Memory': '内置内存',
    'Activity Memory': '运动内存',
    Memory: '内存',
    Climb: '攀登',
    'Dura Dimensions': '尺寸',
    'Dura Weight - Device': '机身重量',
    'Dura Weight - Mount': '支架重量',
    'Dura Display Size': '屏幕尺寸',
    'Dura Display Resolution': '分辨率',
    'Dura Display Type': '屏幕类型',
    'Dura Screen': '屏幕盖板',
    'Dura Body': '机身',
    'Dura Mount': '支架',
    'Dura Length': '尺寸',
    'Dura Compatible Handlebars': '兼容管径',
    'Dura Button': '按钮',
    'Dura Phone': '手机',
    'Dura Accessories': '配件',
    'Dura Accessory Types': '配件类型',
    'Dura Data Sync': '数据同步',
    'Dura Water & Dust Resistance': '防护等级',
    'Dura Working Temperature': '工作温度',
    'Dura Storage Temperature': '储存温度',
    'Dura All Systems On': '全星座模式',
    'Dura All Systems + Dual Frequency On': '双频全星座',
    'Dura Solar Efficiency': '太阳能充电效率',
    'Dura Charging Time': '预估充电时长',
    'Dura Internal Memory': '内置内存',
    'Dura Activity Memory': '运动内存',
    'Dura Satellite Systems': '多星定位',
    'Dura GNSS Chipset': '多频定位',
    'Dura Map Layer': '地图类型',
    'Dura Additional Features': '其他功能',
    'Dura Sensors': '传感器',
    'Dura Training Features': '训练相关',
    'Dura Safety Features': '安全相关',
    'Dura 3rd Party Integration': '支持的第三方App',
    'Dura System Languages': '系统语言',
    'Dura Outdoor': '户外运动',
    'Dura Electric': '电助力运动',
    'Dura Indoor': '室内运动',
    'Dura Size and Weight': '尺寸及重量',
    'Dura Display': '屏幕',
    'Dura Materials': '材质',
    'Dura Out-Front Handlebar Mount': '支架',
    'Dura Design': '交互设计',
    'Dura Connectivity': '连接',
    'Dura Durability': '耐用性',
    'Dura Battery': '电池续航',
    'Dura Memory': '内存',
    'Dura Geo Location': '定位系统',
    'Dura Navigation': '导航',
    'Dura Data Tracking': '数据监测',
    'Dura Supported Activity Modes': '支持的运动模式',
    'Dura Compatible Apps': '支持的第三方App',
    'Dura Display Language': '系统语言',
    'Size - Nylon': '尺寸 - 硅胶',
    'Size - Silicone': '尺寸 - 织物'
  },
  pod: {
    weight: 'Weight',
    waterproof: 'Waterproof',
    podType: 'Pod Type',
    connection: 'Connection',
    battery: 'Battery',
    batteryLife: 'Battery Life',
    compatibility: 'Compatibility',
    formPower: 'Form Power',
    balance: 'L/R Balance',
    strideHeight: 'Stride Height',
    strideRatio: 'Stride Ratio',
    groundTime: 'Ground Time',
    strideLength: 'Stride Length',
    cadence: 'Cadence',
    podTypeVal: 'Waist',
    batteryLifeVal: '1 Year (2 Hours/Day)',
    TIMVal: ''
  },
  vertix2: {
    modeVal: 'COROS VERTIX2',
    compdispsizeVal: '1.4英寸',
    compscreenmaterialVal: '蓝宝石玻璃 + TC4钛合金',
    weightWithNylonVal: '74克',
    weightWithSiliconeVal: '89克',
    gpsModelLifeVal: '约140小时',
    normalBatteryLifeVal: '约60天',
    dataStorageVal: '200小时运动记录',
    compwaterresistanceVal: '100米',
    resolutionVal: '280x280',
    positioningVal: '极限户外运动',
    compquickreleasefitbandVal: '26毫米（快拆）',
    compphysicalsizeVal: '50.3*15.7*261.1毫米（表盘内径*最厚处*佩戴周长）',
    navigationVal: '标准GPS/全星座定位模式/双频全星座定位模式',
    operationVal: '按键+旋钮+触控（部分场景）',
    heartRateVal: '√',
    bloodOxygenVal: '√',
    compassVal: '√',
    trackNavigationVal: '√',
    nightModeVal: '√',
    flipDisplayVal: '√',
    hrvVal: '√',
    supportedWorkoutsVal: '健走、越野跑、登山、徒步、滑雪运动、竞速帆板/帆板、激流运动、多段攀登',
    TIMVal: '2021年8月'
  },
  vertix: {
    modeVal: 'COROS VERTIX',
    compdispsizeVal: '1.2英寸',
    compscreenmaterialVal: '蓝宝石玻璃 + TC4钛合金',
    weightWithNylonVal: '63克',
    weightWithSiliconeVal: '76克',
    gpsModelLifeVal: '约60小时',
    normalBatteryLifeVal: '约45天',
    dataStorageVal: '200小时运动记录',
    compwaterresistanceVal: '150米',
    resolutionVal: '240x240',
    positioningVal: '极限户外运动',
    compquickreleasefitbandVal: '22毫米（快拆）',
    compphysicalsizeVal: '47*17.3*244.38毫米（表盘内径*最厚处*佩戴周长）',
    navigationVal: '标准GPS / GPS，GLONASS，Galileo,QZSS/ GPS，Beidou，Galileo，QZSS',
    operationVal: '按键+旋钮+触控（部分场景）',
    heartRateVal: '√',
    bloodOxygenVal: '√',
    compassVal: '√',
    trackNavigationVal: '√',
    nightModeVal: '√',
    flipDisplayVal: '√',
    hrvVal: '—',
    supportedWorkoutsVal: '健走、越野跑、登山、徒步、滑雪运动、竞速帆板/帆板、激流运动',
    TIMVal: '2019年5月'
  },
  apex: {
    modeVal: ['APEX 46mm', 'APEX 42mm'],
    compdispsizeVal: ['1.2英寸', '1.1英寸'],
    compscreenmaterialVal: ['蓝宝石玻璃 + TC4钛合金', '蓝宝石玻璃 + TC4钛合金'],
    compphysicalsizeVal: ['45.8*13.75*233.7毫米（表盘内径*最厚处*佩戴周长）', '41.8*13.6*216.3毫米（表盘内径*最厚处*佩戴周长）'],
    compquickreleasefitbandVal: ['22毫米（快拆）', '20毫米（快拆）'],
    positioningVal: '户外越野竞速',
    resolutionVal: ['240x240', '218x218'],
    weightWithNylonVal: ['45克', '38克'],
    weightWithSiliconeVal: ['55.3克', '49克'],
    sensorsVal2: '气压高度计',
    sensorsVal3: 'Accelerometer',
    normalBatteryLifeVal: ['约30天', '约24天'],
    gpsModelLifeVal: ['约35小时', '约25小时'],
    compwaterresistanceVal: ['100米', '100米'],
    workingTemp: '14°F to 140°F (-10°C to 60°C)',
    navigationVal: 'GPS，QZSS/ GPS，GLONASS，Galileo，QZSS/ GPS，Beidou，Galileo，QZSS',
    dataStorageVal: '200小时运动记录',
    operationVal: ['按键+旋钮', '按键+旋钮'],
    included: ['√', '√'],
    notIncluded: ['—', '—'],
    heartRateVal: ['√', '√'],
    bloodOxygenVal: ['—', '—'],
    compassVal: ['√', '√'],
    trackNavigationVal: ['√', '√'],
    nightModeVal: ['—', '—'],
    flipDisplayVal: ['√', '√'],
    hrvVal: '—',
    supportedWorkoutsVal: '越野跑、登山、徒步、滑雪运动',
    TIMVal: '2018年10月'
  },
  apexPro: {
    modeVal: 'COROS APEX Pro',
    compdispsizeVal: '1.2英寸',
    positioningVal: '长距离户外越野竞速',
    compscreenmaterialVal: '蓝宝石玻璃 + TC4钛合金',
    gpsModelLifeVal: '约40小时',
    normalBatteryLifeVal: '约30天',
    weightWithNylonVal: '49克',
    weightWithSiliconeVal: '59克',
    dataStorageVal: '200小时运动记录',
    compwaterresistanceVal: '100米',
    resolutionVal: '240x240',
    navigationVal: '标准GPS / GPS，GLONASS，Galileo,QZSS/ GPS，Beidou，Galileo，QZSS',
    compquickreleasefitbandVal: '22毫米（快拆）',
    compphysicalsizeVal: '47*14.6*232.3毫米（表盘内径*最厚处*佩戴周长）',
    operationVal: '按键+旋钮+触控（部分场景）',
    heartRateVal: '√',
    bloodOxygenVal: '√',
    compassVal: '√',
    trackNavigationVal: '√',
    nightModeVal: '√',
    flipDisplayVal: '√',
    hrvVal: '—',
    supportedWorkoutsVal: '健走、越野跑、登山、徒步、滑雪运动、竞速帆板/帆板、激流运动',
    TIMVal: '2019年9月'
  },
  pace2: {
    modeVal: 'PACE 2',
    positioningVal: '轻量级竞速',
    compdispsizeVal: '1.2英寸',
    compphysicalsizeVal: '42*13.57*222.7毫米（表盘内径*最厚处*佩戴周长）',
    compquickreleasefitbandVal: '20毫米（快拆）',
    resolutionVal: '240x240',
    compscreenmaterialVal: '矿物玻璃 + 高强度聚合物',
    weightWithNylonVal: '29-30克',
    weightWithSiliconeVal: '35-36克',
    navigationVal: '标准GPS / GPS，GLONASS，Galileo,QZSS/ GPS，Beidou，Galileo，QZSS',
    dataStorageVal: '200小时运动记录',
    compwaterresistanceVal: '50米',
    gpsModelLifeVal: '约30小时',
    normalBatteryLifeVal: '约20天',
    operationVal: '按键+旋钮',
    heartRateVal: '√',
    bloodOxygenVal: '—',
    compassVal: '√',
    trackNavigationVal: '—',
    nightModeVal: '√',
    flipDisplayVal: '√',
    hrvVal: '—',
    supportedWorkoutsVal: '健走',
    TIMVal: '2020年8月'
  },
  comparsion: {
    pace3: {
      dimensionsVal: '41.9 x 41.9 x 11.7毫米\n厚度不包括光电心率传感器',
      weightVal: ['39克\n搭配硅胶表带', '30克\n搭配织物表带'],
      displaySizeVal: '1.2英寸',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '矿物玻璃',
      bezelMaterialVal: '高强度聚合物',
      coverMaterialVal: '高强度聚合物',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '22毫米',
      sizeNylonVal: '135毫米 - 205毫米 (标准)|||150毫米 - 235毫米 (长版)',
      sizeSiliconeVal: '130毫米 - 215毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '—'],
      phoneVal: '蓝牙',
      accessoriesVal: '蓝牙',
      dataSyncVal: 'Wi-Fi / COROS APP',
      waterResistanceVal: '50米',
      workingTemperatureVal: '零下20至零上50摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上60摄氏度\n关机状态',
      standardFullGpsVal: ['约38小时\n接收GPS和QZSS信号', '约10小时（含音乐播放）\n接收GPS和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsOnVal: ['约25小时\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约9小时（含音乐播放）\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsDualFrequencyOnVal: ['约15小时\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约7小时（含音乐播放）\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      dailyUseVal: ['约17天\n日常和睡眠追踪', '约15天 （含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '4GB',
      activityMemoryVal: '约1200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, 北斗, QZSS',
      gnssChipsetVal: '双频全星座',
      mapLayerVal: ['面包屑导航', '—'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光电血氧传感器', '—'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过Wi-Fi和COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '音乐\n配对蓝牙耳机，播放离线音乐'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '—', '—', '—'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '—'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    vertix2: {
      dimensionsVal: '50.3 x 50.3 x 15.7毫米',
      weightVal: ['89克\n搭配硅胶表带', '72克\n搭配织物表带'],
      displaySizeVal: '1.4英寸',
      displayResolutionVal: '280 x 280\n64 色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '钛合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '26毫米',
      sizeNylonVal: '155毫米 - 225毫米',
      sizeSiliconeVal: '130毫米 - 240毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '背光键'],
      phoneVal: '蓝牙',
      accessoriesVal: '蓝牙',
      dataSyncVal: 'Wi-Fi / COROS APP',
      waterResistanceVal: '100米',
      workingTemperatureVal: '零下30至零上50摄氏度\n开机状态',
      storageTemperatureVal: '零下30至零上60摄氏度\n关机状态',
      standardFullGpsVal: ['约127小时\n接收GPS和QZSS信号', '约32小时（含音乐播放）\n接收GPS和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsOnVal: ['约89小时\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约29小时（含音乐播放）\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsDualFrequencyOnVal: ['约49小时\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约23小时（含音乐播放）\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      dailyUseVal: ['约43天\n日常和睡眠追踪', '约39天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '32GB',
      activityMemoryVal: '约1200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '双频全星座',
      mapLayerVal: ['地貌图\n可导入全球地貌图', '等高线图\n可导入区域等高线地图'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光电血氧传感器', '心电传感器'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过Wi-Fi和COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '音乐\n配对蓝牙耳机，播放离线音乐'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['户外攀登\n优化多段攀登和大岩壁攀登的数据记录', '室内攀岩\n支持多种室内攀岩类型', '登山', '抱石'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '激流运动', '帆板', '竞速帆板'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    vertix2s: {
      dimensionsVal: '50.3 x 50.3 x 16毫米',
      weightVal: ['87克\n搭配硅胶表带', '70克\n搭配织物表带'],
      displaySizeVal: '1.4英寸',
      displayResolutionVal: '280 x 280\n64 色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '钛合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '26毫米',
      sizeNylonVal: '155毫米 - 225毫米',
      sizeSiliconeVal: '130毫米 - 240毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '背光键'],
      phoneVal: '蓝牙',
      accessoriesVal: '蓝牙',
      dataSyncVal: 'Wi-Fi / COROS APP',
      waterResistanceVal: '100米',
      workingTemperatureVal: '零下30至零上50摄氏度\n开机状态',
      storageTemperatureVal: '零下30至零上60摄氏度\n关机状态',
      standardFullGpsVal: ['约118小时\n接收GPS和QZSS信号', '约32小时（含音乐播放）\n接收GPS和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsOnVal: ['约73小时\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约27小时（含音乐播放）\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsDualFrequencyOnVal: ['约43小时\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约22小时（含音乐播放）\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      dailyUseVal: ['约40天\n日常和睡眠追踪', '约36天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '32GB',
      activityMemoryVal: '约1200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '双频全星座',
      mapLayerVal: ['地貌图\n可导入全球地貌图', '等高线图\n可导入区域等高线地图'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光电血氧传感器', '心电传感器'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过Wi-Fi和COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '音乐\n配对蓝牙耳机，播放离线音乐'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['户外攀登\n优化多段攀登和大岩壁攀登的数据记录', '室内攀岩\n支持多种室内攀岩类型', '登山', '抱石'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '激流运动', '帆板', '竞速帆板'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    vertix: {
      dimensionsVal: '47 x 47 x 15.6毫米',
      weightVal: ['76克\n搭配硅胶表带', '63克\n搭配织物表带'],
      displaySizeVal: '1.2英寸',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '钛合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '22毫米',
      sizeNylonVal: '155毫米 - 225毫米',
      sizeSiliconeVal: '130毫米 - 240毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '背光键'],
      phoneVal: '蓝牙',
      accessoriesVal: 'ANT+ / 蓝牙',
      dataSyncVal: 'COROS APP',
      waterResistanceVal: '150米',
      workingTemperatureVal: '零下20至零上60摄氏度\n开机状态',
      storageTemperatureVal: '零下30至零上70摄氏度\n关机状态',
      standardFullGpsVal: ['约58小时\n接收GPS和QZSS信号', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['约27天\n日常和睡眠追踪', '约22天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '4GB',
      activityMemoryVal: '约200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '单频',
      mapLayerVal: ['地貌图\n可导入全球地貌图', '等高线图\n可导入区域等高线地图'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光学脉搏血氧仪', '—'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '—'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['—', '室内攀岩\n支持多种室内攀岩类型', '登山', '抱石'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '激流运动', '帆板', '竞速帆板'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    apexPro: {
      dimensionsVal: '47 x 47 x 13.4毫米',
      weightVal: ['59克\n搭配硅胶表带', '49克\n搭配织物表带'],
      displaySizeVal: '1.2英寸',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '铝合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '22毫米',
      sizeNylonVal: '145毫米 - 220毫米 (标准)|||130毫米 - 195毫米 (短版)',
      sizeSiliconeVal: '145毫米 - 220毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '背光键'],
      phoneVal: '蓝牙',
      accessoriesVal: 'ANT+ / 蓝牙',
      dataSyncVal: 'COROS APP',
      waterResistanceVal: '100米',
      workingTemperatureVal: '零下10至零上60摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上70摄氏度\n关机状态',
      standardFullGpsVal: ['约37小时\n接收GPS和QZSS信号', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['约18天\n日常和睡眠追踪', '约14天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '4GB',
      activityMemoryVal: '约200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '单频',
      mapLayerVal: ['地貌图\n可导入全球地貌图', '等高线图\n可导入区域等高线地图'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光学脉搏血氧仪', '—'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '—'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['—', '室内攀岩\n支持多种室内攀岩类型', '登山', '抱石'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '激流运动', '帆板', '竞速帆板'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    apex46: {
      dimensionsVal: '46 x 46 x 11.9毫米',
      weightVal: ['55.3克\n搭配硅胶表带', '45克\n搭配织物表带'],
      displaySizeVal: '1.2英寸',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: '全时可视 MIP 显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '铝合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '22毫米',
      sizeNylonVal: '145毫米 - 220毫米 (标准)|||130毫米 - 195毫米 (短版)',
      sizeSiliconeVal: '145毫米 - 220毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '—'],
      phoneVal: '蓝牙',
      accessoriesVal: 'ANT+ / 蓝牙',
      dataSyncVal: 'COROS APP',
      waterResistanceVal: '100米',
      workingTemperatureVal: '零下10至零上60摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上65摄氏度\n关机状态',
      standardFullGpsVal: ['约35小时\n接收GPS和QZSS信号', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['约30天', '—'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '—',
      activityMemoryVal: '约200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '单频',
      mapLayerVal: ['面包屑导航', '—'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '—'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '—', '—'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '—', '—', '水下心率', '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过COROS APP', '—', '—', '—', '—', '—'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，葡萄牙语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['—', '—', '登山', '—'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '—', '—', '—'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '—', '—'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    apex42: {
      dimensionsVal: '42 x 42 x 11.75毫米',
      weightVal: ['49克\n搭配硅胶表带', '38克\n搭配织物表带'],
      displaySizeVal: '1.1英寸',
      displayResolutionVal: '218 x 218\n64 色',
      displayTypeVal: '全时可视 MIP 显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '不锈钢',
      coverMaterialVal: '铝合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '20毫米',
      sizeNylonVal: '135毫米 - 205毫米',
      sizeSiliconeVal: '130毫米 - 210毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '—'],
      phoneVal: '蓝牙',
      accessoriesVal: 'ANT+ / 蓝牙',
      dataSyncVal: 'COROS APP',
      waterResistanceVal: '100米',
      workingTemperatureVal: '零下10至零上60摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上65摄氏度\n关机状态',
      standardFullGpsVal: ['约25小时\n接收GPS和QZSS信号', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['约24天', '—'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '—',
      activityMemoryVal: '约200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '单频',
      mapLayerVal: ['面包屑导航', '—'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '—'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '—', '—'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '—', '—', '水下心率', '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过COROS APP', '—', '—', '—', '—', '—'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，葡萄牙语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['—', '—', '登山', '—'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '—', '—', '—'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '—', '—'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    pace2: {
      dimensionsVal: '42 x 42 x 11.7毫米',
      weightVal: ['35-36克\n搭配硅胶表带', '29-30克\n搭配织物表带'],
      displaySizeVal: '1.2英寸',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: '全时可视 MIP 显示屏',
      screenMaterialVal: '矿物玻璃',
      bezelMaterialVal: '高强度聚合物',
      coverMaterialVal: '高强度聚合物',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '20毫米',
      sizeNylonVal: '135毫米 - 205毫米',
      sizeSiliconeVal: '130毫米 - 210毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '—'],
      phoneVal: '蓝牙',
      accessoriesVal: 'ANT+ / 蓝牙',
      dataSyncVal: 'COROS APP',
      waterResistanceVal: '50米',
      workingTemperatureVal: '零下20至零上60摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上65摄氏度\n关机状态',
      standardFullGpsVal: ['约27小时\n接收GPS和QZSS信号', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['约14天\n日常和睡眠追踪', '约11天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '—',
      activityMemoryVal: '约200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '单频',
      mapLayerVal: ['面包屑导航', '—'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '—'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '—', '—'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '—', '—', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过COROS APP', '寻找手机', '寻找手表', '背光常亮', '—', '—'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '—'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '—', '—', '—'],
      winterVal: ['—', '—', '—', '—'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    pod2: {
      podDimensionsVal: '27.1 x 33.9 x 8.6mm',
      weightCorosPod2Val: '5.6g\n仅主机',
      weightChargingDockVal: '17.6g',
      caseMaterialVal: '纤维增强聚合物\nCOROS POD 2和充电盒',
      footClipMaterialVal: '纤维增强聚合物',
      waistClipMaterialVal: '硅胶',
      corosAppVal: '蓝牙',
      corosWatchVal: '蓝牙',
      dataSyncVal: '实时同步数据至手表',
      waterResistanceVal: '3 ATM\n仅主机',
      workingTemperatureVal: '-10°C 到 60°C',
      storageTemperatureVal: '-20°C 到 70°C',
      activityModeVal: '25小时\n持续跑步状态下',
      standbyModeVal: '40天',
      chargingTimeVal: '少于2小时\nCOROS POD 2和充电盒',
      chargingDockCapacityVal: '额外提供5次充电机会',
      chargingDockCableVal: 'USB Type-C',
      sensorsVal: ['气压高度计', '温度计', '地磁传感器', '加速度计', '陀螺仪'],
      corosVertix2Val: '蓝牙',
      corosPace2Val: '蓝牙',
      corosVertixVal: '蓝牙',
      corosApexProVal: '蓝牙',
      corosApex42Mm46MmVal: '蓝牙\n预计11月固件更新后支持连接',
      featuresMetricsVal: ['足部记录\n配速、距离、等强配速、坡度、累计上升/下降、温度、步频、步幅', '腰部记录\n踏地时间、左右平衡、垂直振幅、垂直比']
    },
    apex2: {
      dimensionsVal: '43.0 x 42.8 x 12.8毫米',
      weightVal: ['53克\n搭配硅胶表带', '42克\n搭配织物表带'],
      displaySizeVal: '1.2英寸',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '钛合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '20毫米',
      sizeNylonVal: '135毫米 - 205毫米',
      sizeSiliconeVal: '130毫米 - 210毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '背光键'],
      phoneVal: '蓝牙',
      accessoriesVal: '蓝牙',
      dataSyncVal: 'Wi-Fi / COROS APP',
      waterResistanceVal: '50米',
      workingTemperatureVal: '零下20至零上50摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上60摄氏度\n关机状态',
      standardFullGpsVal: ['约40小时\n接收GPS和QZSS信号', '约10小时（含音乐播放）\n接收GPS和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsOnVal: ['约25小时\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约9小时（含音乐播放）\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['约14天\n日常和睡眠追踪', '约13天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '8GB',
      activityMemoryVal: '约1200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '单频全星座',
      mapLayerVal: ['地貌图\n可导入全球地貌图', '等高线图\n可导入区域等高线地图'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光电血氧传感器', '心电传感器'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过Wi-Fi和COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '音乐\n配对蓝牙耳机，播放离线音乐'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['—', '室内攀岩\n支持多种室内攀岩类型', '登山', '抱石'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '激流运动', '帆板', '竞速帆板'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    apex2pro: {
      dimensionsVal: '46.1 x 46.5 x 14毫米',
      weightVal: ['66克\n搭配硅胶表带', '53克\n搭配织物表带'],
      displaySizeVal: '1.3英寸',
      displayResolutionVal: '260 x 260\n64色',
      displayTypeVal: '全时可视 MIP 触摸显示屏',
      screenMaterialVal: '蓝宝石镜面',
      bezelMaterialVal: '钛合金',
      coverMaterialVal: '钛合金',
      bandMaterialVal: '硅胶 / 织物',
      widthVal: '22毫米',
      sizeNylonVal: '145毫米 - 220毫米 (标准)|||130毫米 - 195毫米 (短版)',
      sizeSiliconeVal: '145毫米 - 220毫米',
      installationTypeVal: '快拆',
      buttonVal: ['光电旋钮', '返回键', '背光键'],
      phoneVal: '蓝牙',
      accessoriesVal: '蓝牙',
      dataSyncVal: 'Wi-Fi / COROS APP',
      waterResistanceVal: '50米',
      workingTemperatureVal: '零下20至零上50摄氏度\n开机状态',
      storageTemperatureVal: '零下20至零上60摄氏度\n关机状态',
      standardFullGpsVal: ['约66小时\n接收GPS和QZSS信号', '约18小时（含音乐播放）\n接收GPS和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsOnVal: ['约41小时\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约15小时（含音乐播放）\n同时接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      allSystemsDualFrequencyOnVal: ['约24小时\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号', '约12小时（含音乐播放）\n同时以两个频率接收GPS, GLONASS, GALILEO, 北斗和QZSS信号并且配对蓝牙耳机播放离线音乐'],
      dailyUseVal: ['约24天\n日常和睡眠追踪', '约21天（含全天压力）\n全天候身体压力监测'],
      chargingTimeVal: '少于2小时',
      internalMemoryVal: '32GB',
      activityMemoryVal: '约1200小时\n根据户外活动估算',
      satelliteSystemsVal: 'GPS, GLONASS, GALILEO, 北斗, QZSS',
      gnssChipsetVal: '双频全星座',
      mapLayerVal: ['地貌图\n可导入全球地貌图', '等高线图\n可导入区域等高线地图'],
      additionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制'],
      sensorsVal: ['光电心率', '气压高度计', '加速度计', '陀螺仪', '3D指南针', '温度计\n记录训练中的体温数据（通过连接第三方配件）', '光电血氧传感器', '心电传感器'],
      trainingFeaturesVal: ['等强配速', 'EvoLab\n跑步能力、成绩预测、本周负荷、训练量评估、体力恢复等', '运动提醒\n步频，距离，配速，心率，功率等', '间歇训练', '训练课程', '训练计划', '跑步能力', '静息心率', '水下心率', '相机遥控\n支持部分GoPro和Insta360相机', '虚拟领跑员', '虚拟跑步', '跑姿测试\n需要连接COROS POD或者COROS POD 2', '高原守护\n在高海拔（2500米以上）地区监测血氧饱和度和适应状况', '触屏翻页', '扩展屏'],
      dailyFeaturesVal: ['全天压力', '健康快测', '消息通知\n日常使用和训练中均支持', '睡眠监测\n支持快速眼动睡眠监测', '闹钟', '计时器', '秒表', '日常提醒\n包括运动卡路里，运动时间，暴风雨预警等', '固件更新\n通过Wi-Fi和COROS APP', '寻找手机', '寻找手表', '背光常亮', 'HRV测量', '音乐\n配对蓝牙耳机，播放离线音乐'],
      '3rdPartyIntegrationVal': '悦跑圈，咕咚，苹果健康，微信运动，两步路，郁金香，Keep等',
      systemLanguagesVal: '简体中文，繁体中文，英语，德语，西班牙语，法语，波兰语，泰语，日语，韩语，葡萄牙语，意大利语，俄语',
      runVal: ['跑步', '跑步机', '运动场跑步', '越野跑'],
      climbVal: ['户外攀登\n优化多段攀登和大岩壁攀登的数据记录', '室内攀岩\n支持多种室内攀岩类型', '登山', '抱石'],
      bikeVal: ['骑行', '室内骑行'],
      waterVal: ['公开水域', '泳池游泳', '静水运动', '赛艇', '激流运动', '帆板', '竞速帆板'],
      winterVal: ['雪场双板', '雪场单板', '越野滑雪', '登山滑雪'],
      cardioVal: ['户外有氧', '室内有氧', '徒步', '划船机', '健走', '跳绳'],
      specialVal: ['铁人三项', '组合运动', '健身', '训练课程', '训练计划']
    },
    hrm: {
      hrmDimensionsVal: '42.5 x 28.4 x 9.1mm',
      hrmWeightCaseOnlyVal: '9.7g',
      hrmWeightCaseBandVal: '19g',
      hrmBandMaterialVal: '聚酯纤维、尼龙、氨纶',
      hrmOpticalHeartRateHardwareVal: '多通道式',
      hrmBandCircumferenceVal: '适配臂围 180-320mm',
      hrmWearingPositionVal: '上臂',
      hrmWirelessConnectionVal: '蓝牙',
      hrmSupportedDevicesVal: '支持接收心率数据的蓝牙设备\n支持同时连接最多3个无线设备',
      hrmDataSyncVal: '实时心率数据',
      hrmWaterResistanceVal: '3 ATM',
      hrmWorkingTemperatureVal: '-20°C - 50°C',
      hrmStorageTemperatureVal: '-20°C - 60°C',
      hrmChargingTemperatureVal: '0°C - 45°C',
      hrmActivityModeVal: '38小时',
      hrmStandbyModeVal: '80天',
      hrmBatteryCapacityVal: '55 mAh',
      hrmChargingTimeVal: '小于2小时',
      hrmChargingCableVal: 'USB Type-A\n通过磁吸接口连接传感器充电'
    },
    dura: {
      duraDimensionsVal: '99.5 x 60.8 x 15.7mm\n（不包含支架连接底座）',
      duraWeightDeviceVal: '102g',
      duraWeightMountVal: '53g',
      duraDisplaySizeVal: '2.7英寸',
      duraDisplayResolutionVal: '400 x 240\n64色',
      duraDisplayTypeVal: '全时可视 MIP 触摸显示屏',
      duraScreenVal: '矿物玻璃',
      duraBodyVal: '高强度聚合物',
      duraMountVal: '高强度聚合物',
      duraLengthVal: '长度：70mm（底座中心-车把圆管中心距）',
      duraCompatibleHandlebarsVal: '25.4mm / 31.8mm',
      duraButtonVal: ['光电旋钮', '返回键'],
      duraPhoneVal: '蓝牙',
      duraAccessoriesVal: 'ANT+ / 蓝牙\n最多支持同时连接12台蓝牙配件',
      duraAccessoryTypesVal: '心率带、功率计、骑行台、速度计、踏频计、雷达尾灯、电子变速系统',
      duraDataSyncVal: '通过蓝牙连接手机COROS APP\n或通过Wi-Fi连接COROS服务器',
      duraWaterDustResistanceVal: 'IP67',
      duraWorkingTemperatureVal: '-20℃ ~ 60℃',
      duraStorageTemperatureVal: '-30℃ ~ 70℃',
      duraAllSystemsOnVal: '120小时\n不包含太阳能充电',
      duraAllSystemsDualFrequencyOnVal: '70小时\n不包含太阳能充电',
      duraSolarEfficiencyVal: '1小时阳光直射下提供最多2小时额外续航',
      duraChargingTimeVal: 'TYPE-C充电线|||15℃ ~ 50℃ 约 2.5 小时|||0℃ ~ 15℃ 约 4 小时\n0℃及以下及45℃以上：0℃及以下及45℃以上为了保护电池，禁止充电',
      duraInternalMemoryVal: '32GB',
      duraActivityMemoryVal: '支持约 1200 小时运动数据记录',
      duraSatelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      duraGnssChipsetVal: '支持L1+L5双频定位',
      duraMapLayerVal: '地貌图\n支持存储全球地图',
      duraAdditionalFeaturesVal: ['标记点', '循迹返航', '偏航提醒', '触屏控制', '转弯提醒', '连接APP在线导航', '爬坡提示'],
      duraSensorsVal: ['气压高度计', '加速度计', '陀螺仪', '电子罗盘', '温度传感器'],
      duraTrainingFeaturesVal: ['EvoLab体能管理系统\n训练负荷，长期负荷，短期负荷', '本周训练负荷建议', 'FTP评估', '恢复时间评估', '运动提醒\n速度、距离、心率、功率等', '训练课程', '训练计划', '触屏翻页'],
      duraSafetyFeaturesVal: ['骑行组队\n需要连接APP', '安全守护\n需要连接APP', '自行车防盗警报\n需要连接APP'],
      duraCompatibleAppsVal: 'Komoot、TrainingPeaks、Strava、Relive、Final Surge、Decathlon、苹果健康、微信运动……',
      duraDisplayLanguageVal: '简体中文、繁体中文、英语、德语、西班牙语、法语、波兰语、泰语、日语、韩语、葡萄牙语、意大利语、俄语',
      duraOutdoorVal: ['公路', '砾石路', '山地'],
      duraElectricVal: ['电助力', '山地电助力'],
      duraIndoorVal: '骑行台'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/pace2.js
/* harmony default export */ const pace2 = ({
  viewPlans: 'Verified Training Plan',
  viewWorkouts: 'Verified Workout Program',
  accessories: 'ACCESSORIES',
  section: {
    light: {
      title: '轻若无物',
      desc: 'COROS PACE 2搭配运动织物表带，重量仅29克，更轻的装备使你在激烈的竞技运动中减少装备带来的负担，专心投入到高速赛道与激烈对抗之中。'
    },
    processor: {
      title: '性能进一步提升',
      desc: 'COROS PACE 2的处理器比较上一代提升高1.5倍，存储空间4倍提升，为更丰富的功能留下了充足的空间。得益于强大的性能，COROS PACE 2将是你的最佳训练伙伴。',
      pace: 'COROS PACE PROCESSOR',
      pace2: 'COROS PACE 2 PROCESSOR',
      compareDesc: ['ADDITIONAL', 'MORE', 'STORAGE']
    },
    counts: {
      title: '升级光电旋钮',
      desc: '当你处在最佳竞技状态时，每一秒都很重要，所以COROS帮助你花更少的时间获取重要信息。COROS PACE 2新增光电旋钮。告别略显复杂的4按键设计，在激烈的竞赛中，只需一根手指就可以快速精准的完成手表的操作。'
    },
    packs: {
      title: '续航从不妥协',
      desc: 'PACE 2使用了全新的高密度电池，同时进一步优化系统功耗，用更小的电池体积维持了不俗的续航，达到了30小时的高精度GPS续航时间，可以满足绝大多数竞技运动的续航需求。',
      descKeyword: '时间'
    },
    endurance: {
      title: '日常使用11天',
      desc: 'COROS PACE 2日常使用续航长达20天。持续提供24小时心率监测、日常活动记录、睡眠监测、消息提醒等日常功能。',
      descKeyword: '天'
    },
    night: {
      title: '夜光模式，常亮柔光不刺眼',
      desc: '夜间运动时开启，屏幕会亮起柔和背光，让你在夜跑中可以随时查看手表运动数据，无需进行点亮操作。'
    },
    laps: {
      title: "\u6C34\u4E0A\u8FD0\u52A8\n        \u4E0D\u5728\u8BDD\u4E0B",
      desc: 'COROS PACE 2 具备50米防水级别，可以满佩戴手表进行各种水上运动，满足你的不同训练需求。'
    },
    possibilities: {
      title: '多一种表带，多一种选择',
      desc: '高强度硅胶运动表带，耐磨抗拉伸；更加密集的透气孔设计，进一步减轻重量并提升排汗性能； 运动织物表带轻盈贴合，加入纳米银抗菌工艺，透气舒适，更加适合在高强度训练中使用。'
    },
    athlete: {
      title: '丰富训练模式',
      desc: 'COROS PACE 2 提供丰富的竞技训练模式，不论是跑步、骑行、游泳、还是力量训练，都可以为你提供精准的运动数据，帮助你更加科学的完成训练。'
    },
    trainer: {
      title: '你的贴身私教',
      desc: '内置百种不同运动训练项目，可自由创建运动项目组合，并在训练中监测你的各项运动数据。'
    },
    muscleHeatmap: {
      title: '均衡训练指导',
      desc: '力量训练后生成肌肉热图，清晰展示肌群锻炼效果合理安排训练项目，均衡强化全身肌肉。'
    },
    learn: {
      title: '分享你的训练计划',
      desc: '微信订阅号“COROS高驰”将会定期发布由专业运动员和教练制作的训练计划，你也可以通过微信与其他运动爱好者一起分享你喜欢的训练计划。'
    },
    follow: {
      title: '多运动优化心率算法',
      desc: '根据不同运动时的心率变化特点，优化算法，有效过滤不同运动对心率数据的干扰，在各种运动中都可以持续为你提供精准的心率数据。'
    },
    track: {
      title: '运动场模式，跑圈更准',
      mobileTitle: "\u8FD0\u52A8\u573A\u6A21\u5F0F\n        \u8DD1\u5708\u66F4\u51C6",
      desc: '专为场地训练优化精准数据，一圈400米标准操场距离计算误差仅几米，单圈计时几乎与秒表同步，为对数据精度要求极高的严肃跑者的训练带来巨大提升。'
    },
    smart: {
      title: '你的最佳训练伙伴',
      desc: 'COROS满足你对运动手表的一切想象，不论是精准的训练数据，科学的训练方案还是实用的日常功能，成为你最佳训练伙伴。'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/products.js
/* harmony default export */ const products = ({
  pageMeta: {
    title: 'Discover COROS Premium GPS Watches',
    keywords: 'Marathon ultra cross country race smart watch notifications mountaineering calories sleep tracking waterproof distance miles heart rate monitor GPS Running Swimming Triathlon Training Camping Hiking Exercise Fitness Tracker Compass',
    description: 'Premium GPS sport watches built for runners, adventurers and all athletes. COROS leads the revolution of athletic training through advanced technology.'
  },
  compareEntrance: '手表对比',
  pageTitle: 'COROS手表系列',
  pageSubtitle: '和训练配件',
  pageDesc: '每一款COROS手表都为运动爱好者量身打造。通过精心设计、测试和完善，为每一位用户提供可靠的装备，帮助他们探索极致。',
  pace2: {
    name: 'COROS PACE 2',
    header: '竞技运动表',
    desc: '为各种竞技运动设计'
  },
  pace2_ek: {
    name: 'COROS PACE 2 EK',
    header: 'ELIUD KIPCHOGE EDITION',
    desc: "Eliud's watch inspires to train a little harder, and race a little faster"
  },
  apex2: {
    name: 'COROS APEX 2',
    header: '户外运动表',
    desc: '户外运动表'
  },
  apex2pro: {
    name: 'COROS APEX 2 Pro',
    header: '户外运动表',
    desc: '户外运动表'
  },
  apex_42: {
    name: 'COROS APEX',
    header: '越野竞速表',
    desc: '为越野跑等长距离山地耐力运动设计'
  },
  apex_46: {
    name: 'COROS APEX',
    header: '越野竞速表',
    desc: '为越野跑等长距离山地耐力运动设计'
  },
  apex_pro: {
    name: 'COROS APEX Pro',
    header: '越野竞速表',
    desc: '为越野跑等长距离山地耐力运动设计'
  },
  vertix: {
    name: 'COROS VERTIX',
    header: '户外探险表',
    desc: '户外探险家必选产品'
  },
  vertix2: {
    name: 'COROS VERTIX 2',
    header: '户外探险表',
    desc: '户外探险表'
  },
  pod: {
    name: 'COROS POD',
    header: '跑步动态传感器',
    desc: '了解各项跑步技术指标'
  },
  pod2: {
    name: 'COROS POD 2',
    header: '跑步动态传感器',
    desc: '多功能运动传感器'
  },
  hrm: {
    name: 'COROS心率臂带',
    header: '心率臂带',
    desc: '准能舒服，颠覆想象'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/evolab.js
/* harmony default export */ const evolab = ({
  pages: [{
    title: 'EvoLab',
    desc: ['训练会给你的体能带来怎样的影响？COROS EvoLab帮助你每一次评估训练，预估恢复时长，并提供一流的体能分析。EvoLab对所有的COROS用户免费开放，关注运动爱好者在赛季内的体能变化情况，并针对路跑运动提供更全面的运动表现分析。', 'EvoLab具有革新意义，完美将手表与个人体能算法相结合。']
  }, {
    title: '训练负荷',
    desc: ['手表会在运动过程中实时显示身体所承受的训练负荷。这一数字从0开始，会随着训练强度和训练时长的变化而不断增长。在历史数据页面，你可以对比今天的训练和过去的训练对身体带来的影响有何不同。']
  }, {
    title: '训练效果',
    desc: ['训练通常被分成两类，有氧训练和无氧训练，乳酸阈是二者的分界线。EvoLab会分别计算单次运动的有氧效果和无氧效果，并实时显示在手表上。']
  }, {
    title: '适应负荷和刺激负荷',
    desc: ['一次效果良好的训练，并不意味着你就可以马上PB。同样，一次糟糕的训练也并不意味你的训练遭遇瓶颈。EvoLab评估你的刺激负荷（过去7天的训练负荷）和适应负荷（过去6周的训练负荷）。手表同样会基于你的训练情况，推荐7天适宜负荷区间。']
  }, {
    title: '负荷疲劳',
    desc: ['不同的跑者对相同的负荷，存在不同的身体反应。100公里一周的训练量对于基普乔格来说，或许很简单，但对于很多普通跑者来说遥不可及。适应负荷和刺激负荷之差，便是你的负荷疲劳，它虽然会让你的身体感到疲惫，但同时也会让你变得更加强大。COROS EvoLab会评估你的负荷疲劳，并通过0-100的数字来量化，1-5区。']
  }, {
    title: '路跑专有数据',
    desc: ['• EvoLab提供你当下的马拉松运动能力，通过量化的分数让你对自己的水平一目了然', '• 让你了解最近的训练是否给自己带来了能力上的提高', '• 让你对单次训练中的重点一目了然']
  }, {
    title: '运动能力',
    desc: ['尽管马拉松并非纸上谈兵的考试，但为了帮助你了解自己的马拉松水平，EvoLab提供了0-100分的运动能力数据。这一数据基于你的全马能力（100分相当于马拉松2小时的水平），同时也可以让你对自己的5k、10k、半马水平一目了然。']
  }, {
    title: '运动表现',
    desc: ['如果你想看到更动态的数据，80%-120%的运动表现评分让你对自己当下的状态了如指掌。很多因素会对你的运动表现产生影响——睡眠、恢复、营养、压力、天气等。如果你的运动表现持续保持在100%之上，那基本可以肯定你的能力在得到提高。']
  }, {
    title: '成绩预测',
    desc: ['不管你是进行5公里、10公里、半马还是全马的训练，EvoLab都会提供你的路跑成绩预测，并可以在你的手表上展现。一些训练只会对部分成绩的预测产生影响，而不会改变所有距离的成绩预测。']
  }, {
    title: '训练重点',
    desc: ['每一次跑步都应当有它的重点，EvoLab采取心率、配速及其他运动数据，告诉你单次训练的重点。需要注意的是，这里的训练重点并非运动的类型，而是你通过这次训练提高的地方。']
  }, {
    title: '其他数据分析',
    desc: ['EvoLab用简易化的视图向你展示过往的体能数据和变化趋势。打开COROS app，访问个人数据主页，你就能看到自己取得的进步。通过图表，你还可以轻松找到自己赛季中最佳状态的节点。']
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/terms.js
/* harmony default export */ const terms = ({
  termsofservice: '服务条款',
  lastUpdate: '',
  baseTOS: "\u8FD9\u4E9B\u670D\u52A1\u6761\u6B3E\uFF08\u4EE5\u4E0B\u7B80\u79F0\u201C\u6761\u6B3E\u201D\uFF09\u9002\u7528\u4E8E\u60A8\u4F7F\u7528COROS\u4EA7\u54C1\uFF0C\u6211\u4EEC\u7684\u7F51\u7AD9\uFF08\u5305\u62ECwww.coros.com\uFF09\uFF0C\u5D4C\u5165\u5728COROS\u8BBE\u5907\u4E2D\u7684\u8F6F\u4EF6\uFF0CCOROS\u8F6F\u4EF6\uFF0CCOROS\u79FB\u52A8\u5E94\u7528\u7A0B\u5E8F\u548C\u5176\u4ED6COROS\u670D\u52A1\uFF08\u7EDF\u79F0\u4E3A\u201C COROS\u670D\u52A1\u201C\uFF09\u3002\n    \u60A8\u5FC5\u987B\u63A5\u53D7\u8FD9\u4E9B\u6761\u6B3E\u624D\u80FD\u521B\u5EFACOROS\u5E10\u6237\u5E76\u4F7F\u7528COROS\u670D\u52A1\u3002 \u5982\u679C\u60A8\u6CA1\u6709\u5E10\u6237\uFF0C\u8BF7\u901A\u8FC7\u8BBF\u95EEwww.coros.com\u6216\u4F7F\u7528COROS\u670D\u52A1\u7684\u4EFB\u4F55\u90E8\u5206\u6765\u63A5\u53D7\u8FD9\u4E9B\u6761\u6B3E\u3002 \u5982\u679C\u60A8\u4E0D\u63A5\u53D7\u4EFB\u4F55\u8FD9\u4E9B\u6761\u6B3E\uFF0C\u8BF7\u4E0D\u8981\u521B\u5EFACOROS\u5E10\u6237\uFF0C\u8BF7\u8BBF\u95EEwww.coros.com\u6216\u4F7F\u7528COROS\u670D\u52A1\u3002",
  whoCanUse: {
    title: '谁可以使用COROS',
    desc: "\u8981\u4F7F\u7528COROS\u670D\u52A1\uFF0C\u60A8\u5FC5\u987B\u81F3\u5C11\u5341\u4E09\uFF0813\uFF09\u5C81\u3002 \u5982\u679C\u60A8\u81F3\u5C11\u5341\u4E09\uFF0813\uFF09\u5C81\uFF0C\u4F46\u60A8\u5C45\u4F4F\u7684\u672A\u6210\u5E74\u4EBA\uFF0C\u5219\u60A8\u5FC5\u987B\u67E5\u770B\u6761\u6B3E\u5E76\u8BA9\u60A8\u7684\u5BB6\u957F\u6216\u6CD5\u5B9A\u76D1\u62A4\u4EBA\u4EE3\u8868\u60A8\u5B8C\u6210\u6CE8\u518C\uFF0C\u4EE5\u4FBF\u60A8\u4F7F\u7528COROS\u670D\u52A1\u3002 \u5B8C\u6210\u6CE8\u518C\u7684\u4EBA\u5458\u5FC5\u987B\u5177\u6709\u6CD5\u5F8B\u8D44\u683C\u3002 \u5982\u679C\u60A8\u5BF9\u4EA7\u54C1\u6216\u5E94\u7528\u662F\u5426\u7B26\u5408\u6388\u6743\u8FDE\u63A5\u7684\u8D44\u683C\u6709\u7591\u95EE\uFF0C\u8BF7\u8054\u7CFBinfo@coros.com"
  },
  account: {
    title: '注册和登录帐户',
    desc: "\u4E3A\u4E86\u5145\u5206\u5229\u7528COROS\u670D\u52A1\uFF0C\u60A8\u9700\u8981\u4E3A\u6211\u4EEC\u63D0\u4F9B\u4E00\u4E2A\u6709\u6548\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740\u548C\u5B89\u5168\u5BC6\u7801\u6765\u521B\u5EFA\u4E00\u4E2A\u5E10\u6237\u3002 \u60A8\u4E5F\u53EF\u4EE5\u521B\u5EFA\u4E00\u4E2A\u5E10\u6237\u6216\u4F7F\u7528\u7B2C\u4E09\u65B9\u5E10\u6237\u767B\u5F55\u3002 \u6839\u636E\u7B2C\u4E09\u65B9\u5E10\u6237\u534F\u8BAE\uFF0C\u6211\u4EEC\u53EF\u4EE5\u8BBF\u95EE\u60A8\u7684\u7528\u6237\u540D\uFF0C\u7F29\u7565\u56FE\uFF0C\u6027\u522B\u3002 \u60A8\u5BF9\u4E0E\u60A8\u7684\u5E10\u6237\u5173\u8054\u7684\u6240\u6709\u6D3B\u52A8\u8D1F\u8D23\u3002 \u5BF9\u4E8E\u60A8\u672A\u80FD\u7EF4\u62A4\u60A8\u7684\u8D26\u6237\u8BC1\u4E66\u5B89\u5168\u6027\u800C\u9020\u6210\u7684\u4EFB\u4F55\u635F\u5931\u6216\u635F\u5BB3\uFF0CCOROS\u6982\u4E0D\u8D1F\u8D23\u3002\n      \u6211\u4EEC\u53EF\u80FD\u9700\u8981\u8054\u7CFB\u60A8\u5173\u4E8E\u60A8\u4F7F\u7528COROS\u670D\u52A1\u7684\u4FE1\u606F\u3002 \u8FD9\u4E9B\u901A\u4FE1\u662FCOROS\u670D\u52A1\u7684\u4E00\u90E8\u5206\uFF0C\u60A8\u4E0D\u53EF\u4EE5\u9009\u62E9\u4E0D\u63A5\u6536\u5B83\u4EEC\u3002 \u60A8\u53EF\u4EE5\u7BA1\u7406\u548C\u9000\u51FA\u63A5\u6536\u5176\u4ED6\u901A\u4FE1\uFF0C\u5E76\u4F7F\u60A8\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740\u4FDD\u6301\u60A8\u7684\u5E10\u6237\u8BBE\u7F6E\u7684\u6700\u65B0\u72B6\u6001\u3002"
  },
  equipment: {
    title: '必要的设备',
    desc: "\u5145\u5206\u4F7F\u7528COROS\u670D\u52A1\u53D6\u51B3\u4E8E\u60A8\u4F7F\u7528\u5177\u6709\u8DB3\u591F\u8F6F\u4EF6\u6216\u53D7\u652F\u6301\u7684\u79FB\u52A8\u8BBE\u5907\u548CInternet\u8BBF\u95EE\u7684\u8BA1\u7B97\u673A\u3002\u6B64\u8BBE\u5907\u7684\u7EF4\u62A4\u548C\u5B89\u5168\u53EF\u80FD\u4F1A\u5F71\u54CDCOROS\u670D\u52A1\u7684\u6027\u80FD\uFF0C\u60A8\u6709\u8D23\u4EFB\u786E\u4FDD\u8BBE\u5907\u7684\u529F\u80FD\u5B89\u5168\u3002\u5BF9\u4E8E\u60A8\u672A\u80FD\u4FDD\u6301\u8BBE\u5907\u5B89\u5168\u6027\u800C\u9020\u6210\u7684\u4EFB\u4F55\u635F\u5931\u6216\u635F\u5BB3\uFF0CCOROS\u6982\u4E0D\u8D1F\u8D23\u3002"
  },
  disclaimers: {
    title: '免责声明',
    desc: "\u6211\u4EEC\u4E0D\u4FDD\u8BC1COROS\u670D\u52A1\u80FD\u591F\u6EE1\u8DB3\u60A8\u7684\u8981\u6C42\uFF0C\u4E5F\u4E0D\u4F1A\u4EE5\u4E0D\u95F4\u65AD\uFF0C\u5B89\u5168\u6216\u65E0\u5DEE\u9519\u7684\u65B9\u5F0F\u63D0\u4F9B\u3002\u6211\u4EEC\u4E0D\u4FDD\u8BC1COROS\u670D\u52A1\u7684\u8D28\u91CF\uFF0C\u51C6\u786E\u6027\uFF0C\u53CA\u65F6\u6027\uFF0C\u771F\u5B9E\u6027\uFF0C\u5B8C\u6574\u6027\u6216\u53EF\u9760\u6027\u3002\u6211\u4EEC\u4E0D\u4FDD\u8BC1COROS\u670D\u52A1\u4E2D\u7684\u6240\u6709\u9519\u8BEF\u5C06\u5F97\u5230\u53CA\u65F6\u66F4\u6B63\u548C\u66F4\u65B0\u3002\n      COROS\u670D\u52A1\u65E0\u610F\u8BCA\u65AD\uFF0C\u6CBB\u7597\uFF0C\u9884\u9632\u6216\u9884\u9632\u4EFB\u4F55\u75BE\u75C5\u3002 COROS\u670D\u52A1\u63D0\u4F9B\u7684\u6240\u6709\u201CCOROS\u5185\u5BB9\u201D\uFF0C\u5305\u62EC\u6587\u672C\uFF0C\u56FE\u5F62\uFF0C\u56FE\u50CF\uFF0C\u97F3\u4E50\uFF0C\u8F6F\u4EF6\uFF0C\u97F3\u9891\uFF0C\u89C6\u9891\uFF0C\u4EFB\u4F55\u7C7B\u578B\u7684\u8457\u4F5C\u6743\u4F5C\u54C1\u4EE5\u53CA\u4FE1\u606F\u6216\u5176\u4ED6\u6750\u6599\u90FD\u4E0D\u80FD\u4F7F\u7528\u6216\u53D6\u4EE3\u60A8\u7684\u533B\u751F\u6216\u5176\u4ED6\u4E13\u4E1A\u4EBA\u58EB\u7684\u4FE1\u606F\u548C\u5EFA\u8BAE\u3002 COROS\u5185\u5BB9\u7981\u6B62\u7528\u4E8E\u4EFB\u4F55\u533B\u7597\u539F\u56E0\uFF0C\u6216\u4EFB\u4F55\u5305\u88C5\u6216\u6807\u7B7E\u3002\n      \u5982\u679C\u60A8\u6709\u533B\u7597\u6216\u5FC3\u810F\u75C5\uFF0C\u8BF7\u5728\u4F7F\u7528COROS\u670D\u52A1\u4E4B\u524D\u54A8\u8BE2\u60A8\u7684\u533B\u751F\uFF0C\u53C2\u4E0E\u953B\u70BC\u8BA1\u5212\u6216\u66F4\u6539\u996E\u98DF\u3002\u5982\u679C\u60A8\u9047\u5230\u533B\u7597\u7D27\u6025\u60C5\u51B5\uFF0C\u8BF7\u505C\u6B62\u4F7F\u7528COROS\u670D\u52A1\u5E76\u54A8\u8BE2\u533B\u7597\u4E13\u4E1A\u4EBA\u5458\u3002\u5BF9\u4E8E\u60A8\u901A\u8FC7COROS\u670D\u52A1\u4E86\u89E3\u5230\u7684\u57F9\u8BAD\u8BA1\u5212\uFF0C\u54A8\u8BE2\uFF0C\u4EA7\u54C1\u6216\u4E8B\u4EF6\u53EF\u80FD\u5BFC\u81F4\u7684\u4EFB\u4F55\u5065\u5EB7\u95EE\u9898\uFF0C\u6211\u4EEC\u6982\u4E0D\u8D1F\u8D23\u3002\u5982\u679C\u60A8\u4ECE\u4E8B\u4EFB\u4F55\u901A\u8FC7COROS\u670D\u52A1\u83B7\u5F97\u6216\u4E86\u89E3\u7684\u953B\u70BC\u8BA1\u5212\uFF0C\u5219\u60A8\u540C\u610F\u81EA\u5DF1\u627F\u62C5\u98CE\u9669\u5E76\u81EA\u613F\u53C2\u4E0E\u8FD9\u4E9B\u6D3B\u52A8\u3002\n      \u60A8\u540C\u610F\u60A8\u5BF9\u4E0E\u60A8\u7684\u6D3B\u52A8\u6709\u5173\u7684\u4EFB\u4F55\u4E2A\u4EBA\u6216\u8D22\u4EA7\u98CE\u9669\u8D1F\u8D23\uFF0C\u5305\u62EC\u4F46\u4E0D\u9650\u4E8E\u7531COROS\u670D\u52A1\u63D0\u4F9B\u7684\u9A91\u8F66\uFF0C\u8DD1\u6B65\uFF0C\u6E38\u6CF3\u6216\u57F9\u8BAD\u8BA1\u5212\u3002 COROS\u4E0D\u627F\u62C5\u4EFB\u4F55\u4EBA\u8EAB\u4F24\u5BB3\u548C\u8D22\u4EA7\u635F\u5931\u7684\u98CE\u9669\u3002\n      \u60A8\u540C\u610FCOROS\u4E0D\u5BF9\u7531\u4E8E\u672A\u53D1\u9001SOS\u4FE1\u606F\u800C\u5BFC\u81F4\u7684\u4EFB\u4F55\u7ED3\u679C\u627F\u62C5\u8D23\u4EFB\u3002\u6211\u4EEC\u4E0D\u4FDD\u8BC1SOS\u4FE1\u606F\u4F1A\u5728\u4EFB\u4F55\u60C5\u51B5\u4E0B\u53D1\u9001\u51FA\u53BB\u3002\u60A8\u540C\u610F\u5728\u4F7F\u7528COROS\u4EA7\u54C1\u65F6\uFF0CSOS\u6D88\u606F\u53D6\u51B3\u4E8E\u8702\u7A9D\u7F51\u7EDC\uFF0C\u670D\u52A1\u5668\u7EF4\u62A4\u548C\u5176\u4ED6\u4E0D\u53EF\u9884\u77E5\u7684\u95EE\u9898\u3002\n      \u60A8\u540C\u610FCOROS\u670D\u52A1\u6839\u636E\u7B2C\u4E09\u65B9\u653F\u7B56\u5C06\u60A8\u7684\u4FE1\u606F\u548C\u6D3B\u52A8\u6570\u636E\u4E0A\u4F20\u5230\u7B2C\u4E09\u65B9\u670D\u52A1\u5668\u3002 COROS\u670D\u52A1\u53EF\u80FD\u4E3A\u60A8\u63D0\u4F9B\u5C06COROS\u5E10\u6237\uFF0CCOROS\u6570\u636E\u6216COROS\u670D\u52A1\u4E0E\u7B2C\u4E09\u65B9\u670D\u52A1\u76F8\u5173\u8054\u7684\u673A\u4F1A\u3002\u867D\u7136\u6211\u4EEC\u63D0\u4F9B\u8FD9\u4E2A\u673A\u4F1A\uFF0C\u4F46\u60A8\u627F\u8BA4\u60A8\u4F7F\u7528COROS\u670D\u52A1\u7684\u4EFB\u4F55\u7B2C\u4E09\u65B9\u670D\u52A1\u4E0D\u5C5E\u4E8ECOROS\u670D\u52A1\u7684\u4E00\u90E8\u5206\u3002\u60A8\u627F\u8BA4\u8FD9\u4E9B\u6761\u6B3E\u548CCOROS\u9690\u79C1\u653F\u7B56\u4E0D\u9002\u7528\u4E8E\u4EFB\u4F55\u7B2C\u4E09\u65B9\u670D\u52A1\u3002\u60A8\u6709\u8D23\u4EFB\u9605\u8BFB\u548C\u7406\u89E3\u9002\u7528\u4E8E\u60A8\u4F7F\u7528\u4EFB\u4F55\u7B2C\u4E09\u65B9\u670D\u52A1\u7684\u6761\u6B3E\u548C\u6761\u4EF6\u4EE5\u53CA\u9690\u79C1\u653F\u7B56\u3002"
  },
  UOS: {
    title: '使用COROS服务',
    desc: "\u957F\u65F6\u95F4\u63A5\u89E6\u53EF\u7A7F\u6234\u8BBE\u5907\u53EF\u80FD\u4F1A\u5BFC\u81F4\u67D0\u4E9B\u7528\u6237\u76AE\u80A4\u8FC7\u654F\u6216\u8FC7\u654F\u3002\u4E3A\u4E86\u51CF\u5C11\u523A\u6FC0\uFF0C\u9075\u5FAA\u4EE5\u4E0B\u56DB\u4E2A\u7B80\u5355\u7684\u78E8\u635F\u548C\u62A4\u7406\u63D0\u793A\uFF1A\uFF081\uFF09\u4FDD\u6301\u5E72\u51C0; \uFF082\uFF09\u4FDD\u6301\u5E72\u71E5; \uFF083\uFF09\u4E0D\u8981\u628A\u5B83\u6234\u5F97\u592A\u7D27\uFF0C\u4EE5\u53CA\uFF084\uFF09\u5728\u957F\u65F6\u95F4\u4F69\u6234\u4E4B\u540E\uFF0C\u5C06\u8155\u5E26\u53D6\u4E0B\u4E00\u5C0F\u65F6\uFF0C\u8BA9\u624B\u8155\u4F11\u606F\u4E00\u4E0B\u3002\u5982\u679C\u60A8\u53D1\u73B0\u4EFB\u4F55\u76AE\u80A4\u523A\u6FC0\uFF0C\u8BF7\u79FB\u9664\u60A8\u7684\u8BBE\u5907\u5E76\u54A8\u8BE2\u60A8\u7684\u533B\u751F\u3002\n      \u4F7F\u7528\u5177\u6709\u5FC3\u7387\u8DDF\u8E2A\u529F\u80FD\u7684COROS\u4EA7\u54C1\u53EF\u80FD\u4F1A\u5BF9\u5177\u6709\u67D0\u4E9B\u5065\u5EB7\u72B6\u51B5\u7684\u7528\u6237\u6784\u6210\u98CE\u9669\u3002\u5982\u679C\u60A8\uFF081\uFF09\u60A3\u6709\u533B\u7597\u6216\u5FC3\u810F\u75BE\u75C5\uFF0C\uFF082\uFF09\u6B63\u5728\u670D\u7528\u4EFB\u4F55\u5149\u654F\u836F\u7269\uFF0C\uFF083\uFF09\u60A3\u6709\u766B\u75EB\u75C7\u6216\u5BF9\u95EA\u5149\u706F\u654F\u611F\uFF0C\uFF084\uFF09\u6613\u4E8E\u51CF\u5C11\u8840\u6DB2\u5FAA\u73AF\u6216\u7600\u4F24\uFF0C\u6216\uFF085\uFF09\u6709\u808C\u8171\u708E\uFF0C\u8155\u7BA1\u7EFC\u5408\u5F81\u6216\u5176\u4ED6\u808C\u8089\u9AA8\u9ABC\u75BE\u75C5\u3002\u5982\u679C\u60A8\u5728\u4F69\u6234\u4EA7\u54C1\u65F6\u6216\u4F69\u6234\u4EA7\u54C1\u540E\u611F\u5230\u9178\u75DB\uFF0C\u523A\u75DB\uFF0C\u9EBB\u6728\uFF0C\u624B\u8155\u6216\u624B\u8155\u50F5\u786C\uFF0C\u8BF7\u7ACB\u5373\u505C\u6B62\u4F7F\u7528\u3002"
  },
  feedbackPolicy: {
    title: '反馈政策',
    desc: "\u5982\u679C\u60A8\u5411\u6211\u4EEC\u63D0\u4EA4\u610F\u89C1\uFF0C\u60F3\u6CD5\u6216\u53CD\u9988\uFF0C\u60A8\u540C\u610F\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u8FD9\u4E9B\u610F\u89C1\uFF0C\u800C\u4E0D\u53D7\u4EFB\u4F55\u9650\u5236\u6216\u8D54\u507F\u3002\u6211\u4EEC\u4E0D\u653E\u5F03\u4F7F\u7528COROS\u5F00\u53D1\u7684\u6216\u4ECE\u60A8\u4EE5\u5916\u7684\u6E20\u9053\u83B7\u5F97\u7684\u4EE5\u524D\u77E5\u9053\u7684\u7C7B\u4F3C\u6216\u76F8\u5173\u60F3\u6CD5\u6216\u53CD\u9988\u7684\u6743\u5229\u3002\u60A8\u53EF\u4EE5\u901A\u8FC7info@coros.com\u4E0E\u6211\u4EEC\u8054\u7CFB\u3002\u672A\u7ECF\u60A8\u7684\u6388\u6743\uFF0C\u8BF7\u52FF\u5411\u6211\u4EEC\u53D1\u9001\u4EFB\u4F55\u53CD\u9988\u3002\u6211\u4EEC\u7684\u53CD\u9988\u653F\u7B56\u4E5F\u662F\u6761\u6B3E\u7684\u4E00\u90E8\u5206\u3002"
  },
  distribution: {
    title: '争议解决',
    desc: "\u60A8\u540C\u610F\uFF0C\u7531\u4E8E\u672C\u670D\u52A1\u6761\u6B3E\uFF0CCOROS\u670D\u52A1\u6216\u4EFB\u4F55\u5176\u4ED6COROS\u4EA7\u54C1\u6216\u670D\u52A1\uFF08\u7EDF\u79F0\u4E3A\u201C\u4E89\u8BAE\u201D\uFF09\u5F15\u8D77\u6216\u4E0E\u4E4B\u6709\u5173\u7684\u60A8\u548CCOROS\u4E4B\u95F4\u7684\u4EFB\u4F55\u4E89\u8BAE\u5C06\u53D7\u4EE5\u4E0B\u4EF2\u88C1\u7A0B\u5E8F\u7EA6\u675F\u3002\n      \u9664\u6CD5\u5F8B\u51B2\u7A81\u4E0B\u7684\u5F3A\u884C\u89C4\u5B9A\u5916\uFF0C\u672C\u4F7F\u7528\u6761\u6B3E\u7684\u5185\u5BB9\u3001\u5C65\u884C\u53CA\u89E3\u91CA\u9002\u7528\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD\u6CD5\u5F8B\u3002\u56E0\u672C\u4F7F\u7528\u6761\u6B3E\u6216\u672C\u7F51\u7AD9\u5F15\u8D77\u7684\u4EFB\u4F55\u51B2\u7A81\u6216\u4E89\u8BAE\uFF0C\u7ECF\u53CB\u597D\u534F\u5546\u65E0\u6CD5\u89E3\u51B3\uFF0C\u5E94\u63D0\u4EA4\u4E2D\u56FD\u4E1C\u839E\u4EF2\u88C1\u59D4\u5458\u4F1A\u6309\u7167\u5176\u5F53\u65F6\u7684\u4EF2\u88C1\u89C4\u5219\u4EE5\u4EF2\u88C1\u65B9\u5F0F\u89E3\u51B3\u3002\u4EF2\u88C1\u5730\u70B9\u4E3A\u4E2D\u56FD\u4E1C\u839E\uFF0C\u4EF2\u88C1\u4F7F\u7528\u4E2D\u6587\uFF0C\u5305\u62EC\u63D0\u4EA4\u7684\u6587\u4EF6\u53CA\u4EF2\u88C1\u8FC7\u7A0B\u4F7F\u7528\u7684\u8BED\u8A00\u3002\u4EF2\u88C1\u88C1\u51B3\u4E3A\u7EC8\u6781\u88C1\u51B3\uFF0C\u5BF9\u5404\u65B9\u5747\u6709\u7EA6\u675F\u529B\u3002"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/trainingHub.js
/* harmony default export */ const trainingHub = ({
  desc: '基于COROS EvoLab算法，COROS Training Hub为你或教练提供优秀的训练管理平台。通过网页端可以快速分析自己过往和当下的数据，与教练互动交流，创建训练计划，加入或管理一支团队。',
  visualize: {
    title: "\u4E86\u89E3\u4F60\u7684\u8FC7\u53BB\n        \u5206\u6790\u4F60\u7684\u73B0\u5728\n        \u521B\u5EFA\u4F60\u7684\u672A\u6765",
    desc: "COROS Training Hub\u5C06\u6570\u636E\u53EF\u89C6\u5316\uFF0C\u5E2E\u52A9\n\u4F60\u4E0E\u6559\u7EC3\u9AD8\u6548\u5206\u6790\u4F53\u80FD\u72B6\u51B5\uFF0C\u786E\u4FDD\u4E3A\u4E0B\u4E00\n\u573A\u6311\u6218\u505A\u597D\u51C6\u5907\u3002"
  },
  plans: {
    title: '开启计划',
    desc: "\u5FEB\u901F\u6DFB\u52A0\u8BAD\u7EC3\u5185\u5BB9\uFF0C\u5B9E\u65F6\u9884\u6D4B\u672A\u6765\u8BAD\u7EC3\u7ED9\u8EAB\u4F53\n\u5E26\u6765\u7684\u75B2\u52B3\u5927\u5C0F\uFF0C\u76F4\u89C2\u663E\u793A\u8BAD\u7EC3\u5B8C\u6210\u60C5\u51B5\uFF0C\u5E2E\n\u52A9\u4F60\u548C\u6559\u7EC3\u8F7B\u677E\u6253\u9020\u4E2A\u6027\u5316\u7684\u8BAD\u7EC3\u65E5\u7A0B\u3002"
  },
  interact: {
    title: '高效互动',
    desc: "\u6559\u7EC3\u53EF\u4EE5\u5728\u5E73\u53F0\u4E2D\u5BF9\u8BAD\u7EC3\u8FDB\u884C\u8BC4\u4EF7\uFF0C\u5E76\u901A\u8FC7\nCOROS app\u63A8\u9001\u901A\u77E5\uFF0C\u4E3A\u5B66\u5458\u548C\u6559\u7EC3\u4E4B\u95F4\n\u521B\u9020\u4E00\u6761\u7545\u901A\u65E0\u963B\u7684\u53CC\u5411\u4EA4\u6D41\u901A\u9053\u3002"
  },
  team: {
    title: '开启团练',
    desc: "\u65E0\u8BBA\u662F\u7EBF\u4E0B\u8DD1\u56E2\u8FD8\u662F\u7EBF\u4E0A\u8BAD\u7EC3\u8425\u7684\u4E00\u5458\uFF0C\u4F60\u90FD\n\u53EF\u4EE5\u901A\u8FC7COROS Training Hub\u67E5\u770B\u56E2\u961F\u4E2D\u5176\n\u4ED6\u6210\u5458\u7684\u6570\u636E\uFF0C\u5E76\u4E0E\u5927\u5BB6\u4E00\u540C\u5171\u5EFA\u4F18\u79C0\u7684\u8BAD\u7EC3\u56E2\u961F\u3002"
  },
  knowMore: {
    title: '了解更多',
    desc: "\xB7\u8BF7\u8BBF\u95EE\u201C\u670D\u52A1\u652F\u6301-\u5E38\u89C1\u95EE\u9898\u201D\uFF0C\u4E86\u89E3\u66F4\u591A\u5173\u4E8ECOROS Training Hub\u7684\u5185\u5BB9\u3002\n        \xB7\u666E\u901A\u7528\u6237\u53EF\u70B9\u51FB\u4E0B\u65B9\u5DE6\u4FA7\u6309\u94AE\uFF0C\u8FDB\u5165COROS Training Hub\uFF0C\u5F00\u542F\u4F53\u9A8C\u3002\n        \xB7\u6559\u7EC3\u56E2\u961F\u6A21\u5757\u662FCOROS Training Hub\u7684\u91CD\u8981\u529F\u80FD\uFF0C\u6211\u4EEC\u5C06\u957F\u671F\u8FDB\u884C\u6559\u7EC3\u62DB\u52DF\uFF0C\u53C2\u4E0E\u4F53\u9A8C\u3002\u70B9\u51FB\u4E0B\u65B9\u53F3\u4FA7\u6309\u94AE\u8FDB\u884C\u62A5\u540D\u7533\u8BF7\uFF0C\u6211\u4EEC\u4F1A\u6309\u7533\u8BF7\u987A\u5E8F\u8FDB\u884C\u5BA1\u6838\uFF0C\u5E76\u8054\u7CFB\u7B26\u5408\u8981\u6C42\u7684\u6559\u7EC3\uFF0C\u5F00\u542F\u529F\u80FD\u6743\u9650\u4E0E\u76F8\u5173\u57F9\u8BAD\u3002"
  },
  coachSignup: '教练申请',
  athleteSignup: '用户登录',
  login: '登录',
  privacy: '隐私政策',
  readPrivacy: '我已阅读并同意COROS的',
  forgot: '忘记密码',
  rememderMe: '记住密码',
  loginFailed: '账号或密码错误',
  notOpen: '暂未开放',
  email: '请输入邮箱账号',
  password: '请输入密码',
  welcomeBack: '欢迎回来！',
  launch: '启动应用',
  logOut: '退出',
  agreeNotify: '请先阅读并勾选隐私政策'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/pod.js
/* harmony default export */ const pod = ({
  performanceTitle: '跑步动态传感器',
  performanceDesc: 'COROS跑步动态传感器，又称为COROS POD，提供丰富的跑步动态数据，和COROS手表一起，帮助您提升跑步水平。',
  useDemo: '将POD正确佩戴于后腰中央，即可自动记录丰富跑步动态数据，帮助分析跑步技术与姿态，帮助分析跑步技术与姿态，据此进行针对性训练，有效提升运动水平。',
  features: [{
    title: '左/右平衡',
    desc: '左右两侧哪只脚触地时间较长，占两侧触地时间之和的百分比也就略多。运动中若出现严重的不平衡状况，可能出现损伤风险。'
  }, {
    title: '垂直步幅比',
    desc: "垂直步幅比通常被认为这是一个评价移动效率的指标，用垂直振荡的距离除以步幅得出。步幅越大、身体上下晃动越小，表明身体花费在垂直方向的能量就越少，前进方向的移动效率也就越高。"
  }, {
    title: '垂直振幅',
    desc: '垂直振幅用来代表身体重心在竖直方向的波动情况，在跑步过程中，身体重心起伏越小，表明浪费在上下振动的能量就越少。当跑步技术较差、下肢力量相对薄弱或已经明显出现运动疲劳时，容易出现较大的上下波动。'
  }, {
    title: '踏地时间',
    desc: '踏地时间是衡量跑步技术的重要参考数据，通常优秀的运动员倾向于更短的触地时间，以便快速完成蹬伸动作，继续向前推进。马拉松顶尖运动员的触地时间可达到180ms左右。'
  }, {
    title: '姿势功率',
    desc: '姿势功率是指单位时间内，人体在行走或跑步过程中，身体用于维持身体姿势所做的功。无助于身体向前推进的功率输出，在相同总功率的输出下，姿势功率占比越小，说明水平推进的功率占比越大，则跑步的经济性越高。'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/pod2.js
/* harmony default export */ const pod2 = ({
  title: 'COROS POD 2 - 「准」能突破',
  desc: '多功能运动传感器',
  product_desc: '',
  name: 'COROS POD 2',
  subtitle: '「准」能突破',
  product_detail: "COROS POD 2\uFF0C\u9AD8\u9A70\u5168\u65B0\u4E00\u4EE3\u591A\u529F\u80FD\u8FD0\u52A8\u4F20\u611F\u5668\uFF0C\u5B83\u5C06\u4F1A\u5728\u4F60\u7684\u8DB3\u90E8\u548C\u8170\u95F4\u5927\u663E\u8EAB\u624B\uFF0C\u8BA9\u4F60\u7684\u8DD1\u6B65\u6570\u636E\u66F4\u52A0\u7CBE\u51C6\u3002\u642D\u8F7D\u4F18\u8D28\u786C\u4EF6\u548C\u72EC\u5BB6\u7B97\u6CD5\uFF0CCOROS POD 2\u53EF\u4EE5\u76F4\u63A5\u901A\u8FC7\u811A\u6B65\u548C\u8EAB\u4F53\u79FB\u52A8\u83B7\u53D6\u8DD1\u6B65\u6570\u636E\uFF0C\u5E76\u5728\u548CCOROS\u624B\u8868\u8FDE\u63A5\u540E\uFF0C\u5B9E\u65F6\u5C55\u793A\u5728\u8868\u76D8\u4E4B\u4E0A\uFF0C\u5E2E\u52A9\u4F60\u5728\u8BAD\u7EC3\u548C\u6BD4\u8D5B\u4E2D\u83B7\u53D6\u66F4\u7CBE\u51C6\u7684\u6570\u636E\u3002",
  problem: '过往痛点',
  problem_desc: 'GPS 可以帮助我们记录运动数据，但并不完美。',
  problem_desc_mobile: 'GPS 可以帮助我们记录运动数据，\n 但并不完美。',
  problem_scene1: '城市高楼间\n卫星信号受到干扰',
  problem_scene2: '配速响应存在\n多达10秒的延迟',
  problem_scene2_mobile: '配速响应存在\n多达10秒的延迟',
  problem_scene3: "\u5BA4\u5185\n\u65E0\u6CD5\u83B7\u53D6\u4FE1\u53F7",
  solution: '我们的解决方案',
  solution_desc: "COROS POD 2 \u7A81\u7834\u4E86 GPS \u5C40\u9650\uFF0C\u914D\u901F\u54CD\u5E94\u5EF6\u8FDF\u3001\u536B\u661F\u4FE1\u53F7\u5F31\u3001\u536B\u661F\u8FDE\u63A5\u4E2D\u65AD\u8FD9\u4E9B\u5236\u7EA6\u624B\u8868\u7684\u56E0\u7D20\u90FD\u4E0D\u590D\u5B58\u5728\u3002\u914D\u901F\u3001\u8DDD\u79BB\u3001\u8F68\u8FF9\u90FD\u66F4\u51C6\u4E86\uFF0C\u8BA9\u4F60\u7684\u8BAD\u7EC3\u66F4\u52A0\u9AD8\u6548\u3002",
  more: '更',
  more1: '更实时',
  more2: '更精准',
  more3: '更精确',
  more4: '更实时',
  sensitive: '的配速响应',
  datalag: '和数据延迟说再见',
  datalag_desc: "COROS POD 2 \u5185\u7F6E\u7684\u4F20\u611F\u5668\u53EF\u4EE5\u76D1\u6D4B\u811A\u90E8\u52A8\u4F5C\uFF0C\u79D2\u901F\u7EA7\u54CD\u5E94\u914D\u901F\u53D8\u5316\uFF0C\u8BA9\u4F60\u5F7B\u5E95\u6446\u8131 GPS \u4FE1\u53F7\u675F\u7F1A\u3002COROS POD 2 \u548C\u624B\u8868\u5B8C\u6210\u914D\u5BF9\u540E\uFF0C\u4F60\u53EF\u4EE5\u6253\u5F00\u624B\u8868\u7684\u914D\u901F\u63D0\u9192\u529F\u80FD\uFF0C\u5E2E\u52A9\u4F60\u968F\u65F6\u4FDD\u6301\u5728\u76EE\u6807\u914D\u901F\u533A\u95F4\u3002",
  accurate: '的室内跑步记录',
  accurate_subtitle: '计算室内跑步距离',
  accurate_desc: "COROS POD 2 \u53EF\u4EE5\u4E3A\u4F60\u63D0\u4F9B\u66F4\u7CBE\u51C6\u7684\u5BA4\u5185\u8DD1\u6B65\u8DDD\u79BB\u3002\u65E0\u8BBA\u662F\u5728\u8DD1\u6B65\u673A\u8FD8\u662F\u5BA4\u5185\u8DD1\u9053\u4E0A\uFF0CCOROS POD 2 \u90FD\u53EF\u4EE5\u901A\u8FC7\u5185\u7F6E\u4F20\u611F\u5668\uFF0C\u7CBE\u51C6\u8BA1\u7B97\u4F60\u7684\u6B65\u5E45\u53CA\u8DDD\u79BB\u3002\u65E0\u8BBA\u5728\u5BD2\u51B7\u7684\u51AC\u5B63\u8FD8\u662F\u9634\u96E8\u5929\u6C14\uFF0CCOROS POD 2 \u90FD\u662F\u4F60\u4F18\u8D28\u7684\u8BAD\u7EC3\u4F19\u4F34\uFF0C\u8BB0\u5F55\u4F60\u7684\u5BA4\u5185\u8DD1\u6B65\u3002",
  consistent: '的户外跑步配速',
  gps: 'GPS 信号弱的地方，配速也很准',
  gps_desc: "\u7A7F\u6865\u6D1E\u3001\u5E26\u9876\u7BF7\u8FD0\u52A8\u573A\u3001\u57CE\u5E02\u9AD8\u697C\u95F4\u7B49\u573A\u666F\u4E0B\uFF0C GPS \u4FE1\u53F7\u5B58\u5728\u52A3\u52BF\uFF0C\u624B\u8868\u5F80\u5F80\u5F88\u96BE\u63D0\u4F9B\u7CBE\u51C6\u7684\u914D\u901F\u548C\u8DDD\u79BB\u6570\u636E\u3002 \u800C COROS POD 2 \u5219\u6446\u8131\u4E86\u8FD9\u4E00\u675F\u7F1A\uFF0C\u5185\u7F6E\u7684\u4E5D\u8F74\u4F20\u611F\u5668\u642D\u914D\u8FD0\u52A8\u7B97\u6CD5\uFF0C\u63D0\u4F9B\u66F4\u52A0\u7CBE\u51C6\u7684\u8DD1\u6B65\u914D\u901F\u548C\u8DDD\u79BB\u3002\u5728\u57CE\u5E02\u9AD8\u697C\u95F4\u8DD1\u6B65\uFF0C\u4E0D\u518D\u62C5\u5FC3 GPS \u4FE1\u53F7\u4E22\u5931\u3002",
  precise: '的等强配速',
  comprehensive_metric: '等强配速 —— 训练强度综合指标',
  comprehensive_metric_desc: "\u8DD1\u6B65\u8BAD\u7EC3\u65F6\uFF0C\u96BE\u514D\u9047\u5230\u5761\u5EA6\u8DEF\u9762\u3002COROS \u63D0\u4F9B\u7684\u7B49\u5F3A\u914D\u901F\u80FD\u5C06\u5761\u5EA6\u914D\u901F\u5B9E\u65F6\u8F6C\u6362\u4E3A\u5E73\u8DEF\u914D\u901F\uFF0C\u5E2E\u4F60\u66F4\u4E86\u89E3\u81EA\u8EAB\u8BAD\u7EC3\u72B6\u6001\uFF0C\u7BA1\u7406\u4F53\u80FD\u66F4\u8F7B\u677E\u3002 \u5F97\u76CA\u4E8E COROS POD 2 \u63D0\u4F9B\u7684\u5B9E\u65F6\u6570\u636E\uFF0C\u4F60\u5C06\u770B\u5230\u79D2\u901F\u7EA7\uFF08 \u8FBE\u5230\u6807\u51C6 GPS \u76845\u500D\u901F \uFF09\u7CBE\u51C6\u7A0B\u5EA6\u7684\u7B49\u5F3A\u914D\u901F\uFF0C\u968F\u65F6\u638C\u63E1\u8BAD\u7EC3\u72B6\u6001\u3002",
  learn_effort_pace: 'Learn more about Effort Pace',
  beyond_gps: '不止于此',
  beyond_gps_desc: "COROS POD 2 \u9664\u4E86\u89E3\u51B3\u4E86GPS\u7684\u5C40\u9650\u6027\uFF0C\u8FD8\u6709\u66F4\u591A\u60CA\u559C\u3002\n \u5B83\u8F7B\u91CF\u9632\u6C34\uFF0C\u53EF\u4EE5\u63D0\u4F9B\u8DD1\u59FF\u6570\u636E\uFF0C\u64CD\u4F5C\u7B80\u5355\uFF0C\u7EED\u822A\u5F3A\u52B2\u3002",
  even: 'EVEN',
  even1: '查看',
  running_insights: '跑姿数据',
  beyound_gps_desc1: "COROS POD 2 \u63D0\u4F9B\u4E86\u591A\u9879\u8DD1\u59FF\u6570\u636E\uFF0C\u5168\u9762\u8BB0\u5F55\u8DD1\u6B65\uFF0C\n\u5E2E\u52A9\u4F60\u5B9E\u73B0\u8DD1\u59FF\u79D1\u5B66\u4E0D\u53D7\u4F24\u3002",
  stride_height: '垂直振幅',
  balance: '左/右平衡',
  ground_contact_time: '踏地时间',
  stride_ratio: '垂直比',
  monitor: '掌控',
  temperature: '室外温度',
  monitor_desc: "COROS POD 2 \u5728\u8FD0\u52A8\u8FC7\u7A0B\u4E2D\u8BB0\u5F55\u6E29\u5EA6\uFF0C\u8BA9\u4F60\u5BF9\u51B7\u6696\u53D8\u5316\u4E86\u7136\u4E8E\u5FC3\u3002\n\u6709\u4E86\u8FD9\u9879\u6570\u636E\uFF0C\u4F60\u53EF\u4EE5\u66F4\u597D\u5730\u5206\u6790\u81EA\u5DF1\u5728\u4E0D\u540C\u6E29\u5EA6\u6761\u4EF6\u4E0B\u7684\u8BAD\u7EC3\u60C5\u51B5\u3002",
  battery: '持久的',
  battery_1: '运动记录续航',
  battery_desc: "COROS POD 2 \u8FD0\u52A8\u8BB0\u5F55\u7EED\u822A\u53EF\u8FBE 25 \u5C0F\u65F6\uFF0C\u5145\u7535\u76D2\u8FD8\u80FD\u989D\u5916\u63D0\u4F9B\u5145\u7535 5 \u6B21\u673A\u4F1A\uFF0C\n\u6EE1\u8DB3\u957F\u65F6\u95F4\u8BAD\u7EC3\u9700\u8981\u3002\u4F60\u518D\u4E5F\u6CA1\u6709\u7535\u91CF\u7126\u8651\u4E86\u3002",
  continuous_running: "\u81F3\u591A 25 \u5C0F\u65F6\u7684\u8FD0\u52A8\u8BB0\u5F55\u7EED\u822A",
  total_running: "\u642D\u914D\u5145\u7535\u76D2\uFF0C\u81F3\u591A 150 \u5C0F\u65F6\u7684\u7EED\u822A",
  lightweight: '轻便',
  and: '和',
  weatherproof: '防水',
  light_waterproof_desc: "5.6g \u7684\u673A\u8EAB\u91CD\u91CF\uFF0C\u8F7B\u82E5\u65E0\u7269\u3002\u6BCF\u4E2A\u5B63\u8282\uFF08-10\xB0C - 60\xB0C\u73AF\u5883\u6E29\u5EA6\uFF09\uFF0C\u5B83\u90FD\u53EF\u4EE5\u4F34\u4F60\u5DE6\u53F3\u3002\u673A\u8EAB\u652F\u630130\u7C73\u9632\u6C34\uFF0C\u6237\u5916\u5F00\u8DD1\uFF0C\u96E8\u96EA\u6CFC\u6E85\u3001\u8DEF\u9762\u79EF\u6C34\u90FD\u4E0D\u6015\u3002",
  setup: '快速上手',
  setup_desc: "COROS POD 2 \u53EF\u4EE5\u4F69\u6234\u5728\u8170\u95F4\u6216\u8005\u8DB3\u90E8\uFF0C\n \u667A\u80FD\u8BC6\u522B\u4F69\u6234\u4F4D\u7F6E\u3002",
  pair: '连接',
  pair_desc: "\u7528 COROS APP \u626B\u5305\u88C5\u4E8C\u7EF4\u7801\uFF0C\n\u6309\u63D0\u793A\u6DFB\u52A0\u8BBE\u5907\uFF0C\n\u624B\u8868\u5C06\u81EA\u52A8\u8FDE\u63A5 COROS POD 2\u3002",
  clip: '佩戴',
  clip_desc: "\u5C06 COROS POD 2 \u56FA\u5B9A\u5728\u540E\u8170\u6B63\u4E2D\u95F4\n\u6216\u8005\u978B\u9762\u3002",
  go: '运动',
  go_desc: "\u4E00\u5207\u51C6\u5907\u5C31\u7EEA\uFF0C\n \u6234\u4E0A\u4F60\u7684 COROS POD 2 \u51FA\u53D1\uFF0C\n \u5F00\u542F\u8DD1\u6B65\u5427",
  in_the_box: '产品包装',
  in_the_box_desc: "COROS POD 2 \u5305\u88C5\u5185\u542B\uFF1ACOROS POD 2 \u4E3B\u673A\u3001\u5145\u7535\u76D2\u3001\u8DB3\u90E8\u5939\u3001\u8170\u90E8\u5939\u3001\u5145\u7535\u7EBF\u3001\u8BF4\u660E\u4E66\u3002",
  faq: '常见问题',
  faq_list1: [{
    ask: 'COROS POD 2 可以和其他品牌手表连接使用么？',
    ans: '不可以，COROS POD 2 只能和COROS手表配对。'
  }, {
    ask: 'COROS POD 2 会提供跑步功率数据么？',
    ans: '不会，COROS POD 2 提供等强配速数据，这一简单个性化的指标方便用户理解，更直观了解自己的努力程度。'
  }, {
    ask: 'COROS POD 2 可以帮我提升训练效果么？',
    ans: "COROS POD 2 \u53EF\u4EE5\u5728\u8BAD\u7EC3\u4E2D\u548C\u8BAD\u7EC3\u540E\u90FD\u4E3A\u4F60\u63D0\u4F9B\u5E2E\u52A9\u3002\u767B\u9646<a class=\"color-danger\" href=\"https://coros.com/traininghub\">COROS Training Hub</a> \uFF0C\u4F60\u53EF\u4EE5\u770B\u5230\u6BCF\u4E00\u6B21\u8BAD\u7EC3\u7684\u51C6\u786E\u6570\u636E\uFF0C\u5206\u6790\u81EA\u5DF1\u7684\u4F18\u52BF\u548C\u52A3\u52BF\u3002\u8FD9\u5C06\u4E3A\u4F60\u4E4B\u540E\u7684\u8BAD\u7EC3\u548C\u6BD4\u8D5B\u8C03\u6574\u63D0\u4F9B\u53C2\u8003\u3002"
  }, {
    ask: 'COROS POD 2 可以帮我提升在比赛中的表现么？',
    ans: "COROS POD 2 \u53EF\u4EE5\u5728\u4E24\u4E2A\u65B9\u9762\u5E2E\u52A9\u5230\u4F60\u3002\u4F60\u53EF\u4EE5\u901A\u8FC7\u7B49\u5F3A\u914D\u901F\uFF0C\u66F4\u597D\u5730\u7406\u89E3\u81EA\u5DF1\u5728\u8D77\u4F0F\u8DEF\u9762\u4E0A\u4ED8\u51FA\u7684\u52AA\u529B\u3002\u540C\u65F6\uFF0C\u66F4\u7CBE\u51C6\u5B9E\u65F6\u7684\u914D\u901F\u53EF\u4EE5\u5E2E\u52A9\u4F60\u53CA\u65F6\u8C03\u6574\u6BD4\u8D5B\u8282\u594F\uFF0C\u8BA9\u4F60\u59CB\u7EC8\u4FDD\u6301\u5728\u76EE\u6807\u914D\u901F\u533A\u95F4\u5185\u3002"
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/plans.js
/* harmony default export */ const plans = ({
  roadRunning: '路跑',
  getItNow: '即刻获取',
  bannerTitle: '训练计划',
  running: {
    '439320473550110720': {
      homeRecommendedTitle: ['8周计划', '休赛期训练']
    },
    '440155314267013120': {
      homeRecommendedTitle: ['8周计划', '乳酸阈训练']
    },
    '440156884337606657': {
      homeRecommendedTitle: ['12周计划', '速度提升']
    },
    439482808549949440: {
      homeRecommendedTitle: ['12周计划', '半马训练']
    },
    '439017670032146438': {
      homeRecommendedTitle: ['训练计划', '入门跑者']
    },
    '8-Week Off-Season Training Plan': {
      homeRecommendedTitle: '8 Week\nOff-Season Training Plan',
      title: '8周计划',
      label: '休赛期训练',
      desc: '本计划共8周，每周的跑量在25-40公里，同时穿插了交叉训练。该训练的整体强度相对较低，以有氧训练为主，主要目的是帮助跑者在休赛期保持状态的同时，身体能够得到恢复，为下一个马拉松赛季做好准备。'
    },
    '8 Week Threshold Development': {
      title: '8周计划',
      label: '乳酸阈训练',
      desc: '该计划旨在延长跑者在乳酸阈强度和最大摄氧量强度下的运动时间。按照计划执行，跑步能力将会得到提高。本计划每周训练5-6次，周训练量为40-65公里，适用于有一定跑步基础的跑者。'
    },
    '12 Week Run Speed Development': {
      title: '12周计划',
      label: '速度提升',
      desc: '该计划的周跑量为40-50公里，以速度训练为主。由于训练强度较大，如果跑者在恢复过程中感觉疲劳，可适当延长恢复时间。按照计划训练，12周之后，你的乳酸阈、最大摄氧量和跑步经济性都会得到提升。 '
    },
    '12 Week Half Marathon HR Plan': {
      homeRecommendedTitle: 'Half Marathon\n12 Week Training',
      title: '12周计划',
      label: '半马训练',
      desc: '该计划基于心率强度，穿插轻松跑、节奏跑、间歇跑等多种训练课程。旨在提高跑者的有氧能力和速度能力，并让跑者逐步适应比赛的节奏。完成该训练计划，你将有能力完成近50公里的周跑量，为参加之后的马拉松训练打下基础。'
    },
    'Beginner Runner Base Plan (Imperial)': {
      title: '10周计划',
      label: '入门跑者训练',
      desc: '该10周训练计划专为入门跑者量身打造，循序渐进，旨在通过轻松跑训练帮助跑者逐步提高基础有氧耐力，最终可适应月跑量近200公里的训练计划。'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/convos.js
/* harmony default export */ const convos = ({
  eps: [{
    title: 'EMMA BATES – 2021年美国最快女性马拉松运动员',
    mobileTitle: "EMMA BATES\n2021\u5E74\u7F8E\u56FD\u6700\u5FEB\n\u5973\u6027\u9A6C\u62C9\u677E\u8FD0\u52A8\u5458",
    desc: '作为一颗冉冉升起的马拉松明星，Emma在2021年芝加哥马拉松获得亚军，并创造了当年的美国女子马拉松纪录（2小时24分20秒）。2021年11月，高驰与Emma相约进行了一场对话，她揭示了自己最艰难的挣扎，如何重新开始，她在芝加哥创造的纪录，以及女性耐力运动员的心理建设与训练生活。',
    title4highlights: '职业生涯高光时刻',
    highlights: ['2021年美国最快女性马拉松运动员', '2021年芝加哥马拉松，美国选手中排名第一', '2019年芝加哥马拉松，美国选手中排名第一', '2019年美国马拉松冠军', '2014 年NCAA D1 10000米冠军', '12次NCAA D1全美最佳阵容'],
    shopDesc: "Emma\u540C\u6B3E\u624B\u8868\nCOROS APEX 42mm"
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/athlete.js
/* harmony default export */ const athlete = ({
  pageTitle: "\u9AD8\u9A70\u7CBE\u82F1\u8FD0\u52A8\u5458",
  mobilePageTitle: "\u9AD8\u9A70\u7CBE\u82F1\u8FD0\u52A8\u5458",
  pageDesc: "\u9AD8\u9A70\u7CBE\u82F1\u8FD0\u52A8\u5458\u4E00\u76F4\u81F4\u529B\u4E8E\u6311\u6218\u6781\u9650\uFF0C\u7A81\u7834\u81EA\u6211\u3002\u4ED6\u4EEC\u9664\u4E86\u5728\u8BAD\u7EC3\u548C\u6BD4\u8D5B\u65F6\u4F7F\u7528\u9AD8\u9A70\u4EA7\u54C1\uFF0C\u4ED6\u4EEC\u4E5F\u4E0D\u65AD\u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u63D0\u51FA\u5EFA\u8BAE\uFF0C\u529B\u56FE\u4E3A\u5168\u7403\u8FD0\u52A8\u7231\u597D\u8005\u6253\u9020\u66F4\u597D\u7684\u4EA7\u54C1\u3002",
  trailAthletes: '越野跑运动员',
  roadAthletes: '路跑\n运动员',
  alpineAthletes: '极限\n运动员'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/athleteDetails.js
/* harmony default export */ const athleteDetails = ({
  more: '更多运动员',
  athletes: '专业运动员',
  kilian_journet: {
    name: 'Kilian Jornet',
    country: '西班牙',
    countryIcon: 'spain',
    achievement: "4\u6B21UTMB\u51A0\u519B\n      5\u6B21Hardrock 100\u51A0\u519B\n      4\u6B21\u767B\u5C71\u6ED1\u96EA\u4E16\u754C\u51A0\u519B\n      3\u6B21Sky Running World Series\u51A0\u519B\n      \u65E0\u6570\u6237\u5916\u8FD0\u52A8\u7EAA\u5F55\u4FDD\u6301\u8005",
    desc: '毫无争议，Kilian是这个世界上最传奇的越野跑者之一。童年成长于比利牛斯山脉的Kilian，3岁便开始登山。他年纪轻轻便在越野跑的舞台上崭露头角，于2007年赢得了自己的第一个Sky Running World Series的冠军。第二年，他还赢得了UTMB的冠军。你很容易就能在一场越野跑比赛的领奖台上看到Kilian的身影，Western States, Sierre-Zinal, Pikes Peak Marathon, Zegama, Hardrock, Marathon du Mont Blanc......这些都是越野跑圈赫赫有名的比赛。\n\n让Kilian成为一名传奇运动员，绝不仅是他在越野跑上所取得的成就。在登山滑雪领域，他同样是一名世界级的运动员。自2002年以来，Kilian一直参加登山滑雪比赛，赢得过各个年龄段的欧洲冠军和世界冠军。如今，Kilian和他的伴侣Emelie以及两个女儿定居在挪威。'
  },
  dane_jackson: {
    name: 'Dane Jackson',
    country: '美国',
    countryIcon: 'usa',
    achievement: "\u9996\u6B21\u5B8C\u6210134\u82F1\u5C3A\u7684\u667A\u5229Salto Maule\u7011\u5E03\u4E0B\u964D\n    7\u6B21100\u82F1\u5C3A+\u7011\u5E03\u4E0B\u964D\n    4\u6B21North Fork\u9526\u6807\u8D5B\u51A0\u519B\n    3\u6B21Whitewater Grand Prix\u83B7\u80DC\u8005\n    4\u6B21Green Race\u83B7\u80DC\u8005",
    desc: "Dane Jackson\u5728\u7236\u4EB2\u7684\u5F71\u54CD\u4E0B\uFF0C\u63A5\u89E6\u76AE\u5212\u824720\u591A\u5E74\u5E76\u6210\u4E3A\u4E86\u4E00\u540D\u76AE\u5212\u8247\u8FD0\u52A8\u5458\u3002Dane\u5E38\u9A7B\u5728\u7530\u7EB3\u897F\u5DDE\uFF0C\u4F46\u4ED6\u4E00\u5E74\u4F1A\u67096\u4E2A\u6708\u4EE5\u4E0A\u7684\u65F6\u95F4\u5728\u4E0D\u540C\u7684\u56FD\u5BB6\u63A2\u9669\uFF0C\u58A8\u897F\u54E5\u3001\u80AF\u5C3C\u4E9A\u3001\u52A0\u62FF\u5927\u2026\u2026 \u5728\u4E0D\u540C\u7684\u6C34\u57DF\u8FDB\u884C\u76AE\u5212\u8247\u8FD0\u52A8\uFF0C\u4ED6\u66FE\u8BF4\u4ED6\u6700\u559C\u6B22\u7684\u662F\u8D5E\u6BD4\u897F\u6CB3\u3001\u6E25\u592A\u534E\u6CB3\u548C\u5C3C\u7F57\u6CB3\u3002\u4ED6\u62E5\u6709\u6765\u81EA\u4E16\u754C\u5404\u5730\u6BD4\u8D5B\u768480\u591A\u679A\u51A0\u519B\u5956\u724C\uFF0C\u88AB\u8BA4\u4E3A\u662F\u4E16\u754C\u6700\u9876\u5C16\u7684\u5168\u80FD\u76AE\u5212\u8247\u624B\u3002"
  },
  adrian_ballinger: {
    name: 'Adrian Ballinger',
    country: '美国',
    countryIcon: 'usa',
    achievement: "\u65E0\u6C27\u901F\u6500\u73E0\u5CF0\uFF0C\u767B\u9876K2\n    \u9996\u6B21\u6ED1\u96EA\u901F\u964D\u4E16\u754C\u7B2C\u516B\u9AD8\u5CF0\u9A6C\u7EB3\u65AF\u5362\u5C71\n    Alpenglow Expeditions\u521B\u59CB\u4EBA\n    17\u6B21\u767B\u98768000\u7C73\u9AD8\u5CF0",
    desc: "Adrian Ballinger\u662F\u4E00\u540D\u767B\u5C71\u8FD0\u52A8\u5458\u548C\u6ED1\u96EA\u8FD0\u52A8\u5458\uFF0C\u4E5F\u662F\u4E00\u540D\u77E5\u540D\u767B\u5C71\u5411\u5BFC\u3002\u4ED6\u662FAlpenglow Expeditions\u7684\u521B\u59CB\u4EBA\uFF0C\u8FD9\u4E2A\u7EC4\u7EC7\u6BCF\u5E74\u5E26\u98866000\u591A\u4EBA\u5728\u5854\u970D\u6E56\u4EE5\u53CA\u4E16\u754C\u5404\u5730\u53BB\u6ED1\u96EA\u3001\u6500\u5CA9\u548C\u767B\u5C71\u3002\u4ED6\u5728\u516D\u5927\u6D32\u5E26\u9886\u4E86150\u591A\u6B21\u56FD\u9645\u6500\u767B\u63A2\u9669\uFF0C\u5E76\u6210\u529F\u767B\u9876\u4E8617\u6B218000\u7C73\u9AD8\u7684\u5C71\u5CF0\uFF0C\u5176\u4E2D\u5305\u62EC8\u6B21\u73E0\u7A46\u6717\u739B\u5CF0\u3002\u4ED6\u5F00\u521B\u4E86\u5546\u4E1A\u63A2\u9669\u7684\u9884\u9002\u5E94\u6280\u672F\uFF0C\u6539\u53D8\u4E86\u6781\u9AD8\u6D77\u62D4\u5C71\u5CF0\u6500\u767B\u8FD9\u4E2A\u884C\u4E1A\u3002\u65B0\u51A0\u75AB\u60C5\u671F\u95F4Adrian\u4E13\u6CE8\u6500\u5CA9\uFF0C\u4E00\u5E74\u540E\u4ED6\u5B8C\u6500\u4E86\u4ED6\u7684\u7B2C\u4E00\u4E2A8a/5.13b\u3002Adrian\u73B0\u5728\u7684\u76EE\u6807\u662F\u5728\u4E09\u4E2A\u9886\u57DF\u4E2D\u90FD\u80FD\u6709\u6240\u6210\u5C31\u2014\u2014\u767B\u5C71\u3001\u6500\u5CA9\u548C\u6ED1\u96EA\u3002"
  },
  emelie_forsberg: {
    name: 'Emelie Forsberg',
    country: '瑞典',
    countryIcon: 'sweden',
    achievement: "4\u6B21SkyRunner World Series\u51A0\u519B\n      6\u679A\u4E16\u754C\u767B\u5C71\u6ED1\u96EA\u51A0\u519B\u8D5B\u5956\u724C\n      2\u6B21Transvulcania\u51A0\u519B\n      \u591A\u9879FKT",
    desc: 'Emelie是一名成就卓越的瑞典山地运动员，如今生活在挪威。早年间，她作为一名攀登者而被人熟知。后来，她开始踏足越野跑领域，于2009年参加了自己第一场正式的越野跑比赛。自那以后，Emelie逐渐成为这个领域的顶尖运动员，从垂直爬升赛到百英里比赛，她都能脱颖而出。Emelie的登山滑雪生涯起始于2012年，她于当年参加了一场比赛，用借来的滑具赢得了第三名。从此，在欧洲和世界比赛的舞台上，我们经常可以看到她势如破竹的表现。\n\nEmelie在2019年迎来了她和Kilian Jornet第一个女儿的出生。二人在2021年4月又有了第二个女儿。现在，她正着眼于回归训练，并希望能在2022年重回世界顶尖选手行列。'
  },
  emma_coburn: {
    name: 'Emma Coburn',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2017\u5E74\u4E16\u9526\u8D5B3000\u7C73\u969C\u788D\u51A0\u519B\n      2019\u5E74\u4E16\u9526\u8D5B3000\u7C73\u969C\u788D\u4E9A\u519B\n      2016\u5E74\u5965\u8FD0\u4F1A3000\u7C73\u969C\u788D\u94DC\u724C\n      9 \u6B21\u5168\u7F8E\u51A0\u519B\n      6 \u6B21NCAA\u6700\u4F73\u9635\u5BB9",
    desc: '作为一名土生土长的科罗拉多人，Emma在科罗拉多大学期间赢得了3次全国冠军，6次入选最佳阵容名单。在主项3000米障碍上，Emma共赢得过9次全美冠军，同时在世界赛场上揽誉无数，包括里约奥运会的铜牌，2019年世锦赛的银牌以及2017年世锦赛的金牌。Emma跟随她的丈夫Joe训练，如今Joe也是一名全美顶尖的教练。赛场之外，Emma在其他领域也有所建树，包括最近出版的烹饪书籍，以及组织“Emma Coburn’s Elk Run 5k”，这一活动也募集到了大量的善款，帮助科罗拉多本地的抗癌斗士。'
  },
  emily_infeld: {
    name: 'Emily Infeld',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2015\u5E74\u4E16\u9526\u8D5B\u4E07\u7C73\u5B63\u519B\n      2016\u5E74\u53C2\u52A0\u5965\u8FD0\u4F1A\u4E07\u7C73\u6BD4\u8D5B\n      2017\u5E74\u4E16\u9526\u8D5B\u4E07\u7C73\u7B2C6\u540D\n      11\u6B21\u5168\u7F8E\u6700\u4F73\u9635\u5BB9\n      NCAA\u51A0\u519B",
    desc: 'Emily的中学履历十分出色，曾夺得过全国冠军，并成为1英里跑的州纪录保持者。进入乔治城大学后，她变得更加出色，于2012年获得NCAA的3000米冠军。此外她11次入选全美最佳阵容，并在2011年带领队伍染指全国冠军。毕业之后，她继续着辉煌生涯，2015年北京田径世锦赛，她斩落铜牌，这也是她生涯迄今为止最大成就。随后的2016年，她代表美国参加里约奥运会，次年再次出征世锦赛并获得万米第6名。'
  },
  eliud_kipchoge: {
    name: 'Eliud Kipchoge',
    country: '肯尼亚',
    countryIcon: 'kenya',
    achievement: "\u9A6C\u62C9\u677E\u4E16\u754C\u7EAA\u5F55\u4FDD\u6301\u8005\uFF082:01:09\uFF09-2022\u5E74\u67CF\u6797\n      \u9A6C\u62C9\u677E\u7834\u201C2\u201D\u7B2C\u4E00\u4EBA\uFF081:59:40\uFF09-2019\u5E74\u7EF4\u4E5F\u7EB3\n      10\u6B21\u9A6C\u62C9\u677E\u5927\u6EE1\u8D2F\u8D5B\u4E8B\u51A0\u519B\n      2\u679A\u4E16\u754C\u8D5B\u5956\u724C\u83B7\u5F97\u8005\n      3\u679A\u5965\u8FD0\u4F1A\u5956\u724C\u83B7\u5F97\u8005",
    desc: '埃鲁德·基普乔格秉持着/“No Human is Limited/”的信仰，在训练和比赛中，他不断向世人展示着这一点。2003年，年仅18岁的基普乔格便在世锦赛中崭露头角，获得男子5000米冠军，并在之后的十年内，三次在世界性大赛中获得该项目的奖牌。而在2013年，基普乔格选择转型，开始主攻马拉松项目。他在自己的全马首秀中，便获得冠军，并打破赛道纪录。接下来发生的一切，更让人为之震惊。基普乔格在短短几年时间内，11次获得马拉松正式比赛的冠军，包括8次大满贯赛事的获胜和一次奥运会冠军。在此期间，他两破伦敦马拉松的赛道纪录，并于2018年在柏林马拉松打破世界纪录（同时打破30公里、35公里和40公里世界纪录）。除了上述的这些成就，基普乔格还有一项跨时代的壮举——破“2”。2019年10月，他在奥地利维也纳成为历史上第一位将马拉松跑进2小时的运动员。基普乔格其他获得的荣誉包括：联合国2018年度肯尼亚人物，2018、2019年国际田联最佳男子运动员。基普乔格常年生活训练在肯尼亚的埃尔多雷特附近，在那儿，他还有着另外的身份——一名丈夫和三个孩子的父亲。'
  },
  desiree_linden: {
    name: 'Desiree Linden',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2018\u5E74\u6CE2\u58EB\u987F\u9A6C\u62C9\u677E\u51A0\u519B\n      \u4E24\u5C4A\u5965\u8FD0\u4F1A\u53C2\u8D5B\n      \u4E16\u754C\u9A6C\u62C9\u677E\u516D\u5927\u6EE1\u8D2F\u8D5B\u4E8B 9\u6B21\u524D5\u5B8C\u8D5B\n      \u4E24\u6B21\u7F8E\u56FD\u9A6C\u62C9\u677E\u8D5B \u4E9A\u519B\n      \u5496\u5561\u8FF7\u548CLinden X 2\u7684\u6240\u6709\u8005\n      \u5A01\u58EB\u5FCC\u9274\u8D4F\u5BB6\uFF0C\u97F3\u4E50\u8FF7\uFF0C\u4E66\u5446\u5B50\uFF0C\u65C5\u884C\u5BB6",
    desc: '2018年4月，Des Linden迎着逆风和暴雨，成为自1985年以来在波士顿马拉松比赛中的首位美国女子冠军。她的成绩被载入史册，因为她在历史上最恶劣的比赛条件中夺得冠军。她两次代表美国参加奥运会马拉松比赛，在里约奥运会上获得第七名。她在加利福尼亚州圣迭戈郊区丘拉维斯塔的岗顶高中开始自己的跑步生涯，在那里她获得了州冠军。之后Des进入亚利桑那州立大学，在那里，她是越野比赛和跑道上的全美冠军。毕业后，她搬到了密歇根州的罗彻斯特，加入了Hansons Brooks长跑计划。她目前在密歇根州北部训练，并代表Brooks参赛。在2019年，她再次参加波士顿马拉松赛，获得第五名。随后在秋天的纽约马拉松比赛中，她以1:11:40的成绩在半程排名第一，并最终以第6名的成绩完赛，这一成绩可以在美国历史上排名第4。Des自称为培根迷，其爱好包括阅读和写作、收集各种威士忌、喝LindenX TWO咖啡、为MLB比赛开球、与狗狗阿特拉斯和波士顿一起放松以及听听优美的音乐。她的另一大乐趣便是在跑步中超越她同为马拉松运动员的丈夫Ryan Linden。'
  },
  grayson_murphy: {
    name: 'Grayson Murphy',
    country: '美国',
    countryIcon: 'usa',
    achievement: "5\u6B21NCAA\u5168\u7F8E\u7B2C\u4E00\u9635\u5BB9 \u72B9\u4ED6\u5927\u5B66\n      2019\u5E74 Boilermaker 15\u516C\u91CC \u7F8E\u56FD\u9009\u624B\u4E2D\u6392\u540D\u7B2C\u4E8C\n      \u72B9\u4ED6\u5927\u5B66\u6821\u7EAA\u5F55\u4FDD\u6301\u8005\u2013 3000\u7C73\u969C\u788D\uFF0C5000\u7C73\uFF08\u5BA4\u5185\u548C\u5BA4\u5916\uFF09\uFF0C10000\u7C73",
    desc: 'Grayson在她的家乡犹他州盐湖城训练，并且是爱达荷州长跑计划的成员，她主要致力于参加路跑和越野赛。她于2018年毕业于犹他大学，获得土木工程学士学位。在校期间，她5次在路跑和越野跑项目上进入全美最佳阵容。她在赛道上的个人纪录包括10公里中的32:28、5公里中的15:44和3000米障碍赛中的9:44。最近，Grayson在纽约州由提卡举行的Boilermaker 15公里比赛中获得第二名，这是美国规模最大的15公里比赛。谈及未来，Grayson希望提高她所有的个人最佳成绩，并参加各种各样的越野赛和山地赛。'
  },
  emma_bates: {
    name: 'Emma Bates',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2019\u5E74\u829D\u52A0\u54E5\u9A6C\u62C9\u677E-\u7F8E\u56FD\u9009\u624B\u4E2D\u6392\u540D\u7B2C\u4E00\n      2019\u5E74\u7F8E\u56FD\u9A6C\u62C9\u677E\u51A0\u519B\n      12\u6B21NCAA D1\u5168\u7F8E\u6700\u4F73\u9635\u5BB9\n      2014 \u5E74NCAA DI 10000\u7C73\u51A0\u519B",
    desc: 'Emma在爱达荷州博伊西市训练，并且是爱达荷州长跑计划的成员，主要参加中长距离路跑比赛。艾玛毕业于博伊西州立大学，曾12次入选NCAA一级联盟全美最佳阵容，并在2014年获得10000米比赛的 NCAA冠军。此后，Emma不仅赢得过2018年美国女子马拉松锦标赛冠军，并且还曾以2:25:27的个人最佳成绩在2019年芝加哥马拉松比赛中排名第四。Emma自由奔放的心态使她成为美国的顶尖运动员之一，她也将拥有无与伦比的光明前景。'
  },
  parker_stinson: {
    name: 'Parker Stinson',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2019\u5E7425\u516C\u91CC \u5168\u7F8E\u7EAA\u5F55\u62E5\u6709\u8005\n      2019\u829D\u52A0\u54E5\u9A6C\u62C9\u677E\u8D5B\u2013\uFF08\u7F8E\u56FD\u9009\u624B\u7B2C\u4E00\u540D\uFF09\n      9\u6B21\u5165\u9009 NCAA D1\u5168\u7F8E\u6700\u4F73\u9635\u5BB9",
    desc: 'Parker是全美25公里跑的纪录保持者，居住在科罗拉多州的博尔德。他在俄勒冈大学期间，九次入选全美最佳阵容，并在NCAA锦标赛5000米比赛中连续两年获得第三名。帕克年轻时曾三度夺得青年组（U19）10000米冠军。他的一些最新成就包括赢得2019年美国田径协会25公里冠军，并在2019年芝加哥马拉松比赛中以2:10:53的成绩刷新个人PB，并在所有美国选手中排名第一。Parker希望在COROS的帮助下，继续超越自己的极限，成为更加强大的运动员。'
  },
  reed_fischer: {
    name: 'Reed Fischer',
    country: '美国',
    countryIcon: 'usa',
    achievement: "\u521B\u9020\u7F8E\u56FD\u5386\u53F2\u4E0A\u7B2C20\u6700\u5FEB\u7684\u534A\u7A0B\u9A6C\u62C9\u677E\u6210\u7EE9\n      2019\u5E74Aramco Houston\u534A\u7A0B\u9A6C\u62C9\u677E \u7F8E\u56FD\u9009\u624B\u4E2D\u6392\u540D\u7B2C\u4E00\n      \u7F8E\u56FD\u7530\u5F84\u534F\u4F1A10000\u7C73\u6BD4\u8D5B \u7B2C\u56DB\u540D\n      \u4E24\u6B21\u7F8E\u56FD\u56FD\u5BB6\u961F\u51A0\u519B\u6210\u5458",
    desc: 'Reed来自明尼苏达州，目前在科罗拉多州博尔德市和Tinman Elite一起生活和训练。 作为这支年轻团队的创始人之一，Reed有一些关于长距离跑步的诀窍。他自认为大器晚成，在德雷克大学期间，他仅仅在2017年NCAA锦标赛上获得第9名。Reed从没有进过全美最佳阵容的第一阵容，但他现在已经成长为美国最有前途的运动员之一。 尽管Reed只有24岁，他已经在半程马拉松比赛中创造过1:01:37的个人最佳成绩。他希望这些好成绩能够在他的马拉松生涯中不断为他自己注入动力。'
  },
  coree_woltering: {
    name: 'Coree Woltering',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2019\u5E74Superior Spring 50k-\u7B2C1\u540D\n        2018\u5E74American River 50m & Quick Silver 50k-\u7B2C2\u540D\n        2018\u5E74Superior 100 Mile-\u7B2C4\u540D\n        2020\u5E74Ice Age Trail (1147 \u82F1\u91CC) FKT",
    desc: 'Coree常年在伊利诺伊州的渥太华居住训练，是一名罕见的美国中西部地区的超马精英运动员。尽管他现在十分热衷于长距离的比赛，但在生涯初期，他是一名专攻400米和800米的运动员。而这样的经历也帮助他为之后的运动生涯打下了良好基础。在第一次参加马拉松比赛之前，Coree跑过最长距离的比赛仅为16英里，但他在马拉松赛场的初次亮相就跑出了令人惊艳的2小时37分。一年之后，他便能在其参加的超马比赛中所向披靡，战无不胜。时光荏苒，2018年，他在著名的Western States获得25名。而他最近一次在成绩薄上写下浓墨重彩的一笔，则是于去年在Ice Age Trail创下一项FKT，用时21天13小时35分完成了一条长达1147英里的路线。在跑步之余，Coree是一名父亲，同时还从事跳伞运动。对于那些寻求多样性户外运动的人群来说，他就是最好的楷模。'
  },
  john_kelly: {
    name: 'John Kelly',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2017\u5E74Barkley Marathons-\u51A0\u519B\n      2018\u5E74ITU Long Course Age Group-\u51A0\u519B\n      2020\u5E74Spine-\u51A0\u519B\n      \u7B2C\u4E00\u4F4D\u5B8C\u6210\u82F1\u56FD\u201CThe Grand Round\u201D\u73AF\u7EBF\u7684\u8FD0\u52A8\u5458\n      \u4E00\u9879\u5409\u5C3C\u65AF\u4E16\u754C\u7EAA\u5F55\uFF1A\u8DD1\u5F97\u6700\u5FEB\u7684\u88C5\u626E\u6210\u6E38\u620F\u89D2\u8272\u7684\u9A6C\u62C9\u677E\u8FD0\u52A8\u5458\uFF082016\u5E74\u6CE2\u58EB\u987F\u9A6C\u62C9\u677E\uFF09",
    desc: 'John擅长于在山地进行多天作战，无论是The Barkley Marathons, The Spine Race, Tor Des Geants这样的赛事，还是长距离的FKT，对于他来说都是家常便饭。譬如近期，他便完成了Grand Round挑战——连续征服英国三条极具挑战的线路。John在美国田纳西州东部地区长大，在那里他开始爱上关于山地的一切。现如今，他与妻子及四个孩子一起生活在英国，并在他联合创始的一家创业公司里担任CTO。未来，John会继续探索山地和自己的极限，挑战一切不可能。除此之外，他希望能通过自己的行为来感染孩子和他人，借此宣扬对野生生态环境的敬畏和保护。'
  },
  camille_herron: {
    name: 'Camille Herron',
    country: '美国',
    countryIcon: 'usa',
    achievement: "3\u6B21\u5965\u8FD0\u9A6C\u62C9\u677E\u9884\u9009\u8D5B\uFF0808\u5E74\uFF0C12\u5E74\uFF0C16\u5E74\uFF09\n      2\u6B21\u4E16\u754C\u51A0\u519B\uFF0850\u516C\u91CC\uFF0C100\u516C\u91CC\uFF09\n      2017\u5E74Comrades Marathon\u51A0\u519B\n      100\u82F1\u91CC\u8D8A\u91CE\u8DD1\u4E2A\u4EBA\u6700\u5FEB\u7EAA\u5F55\uFF0C12:42:40\n      4\u9879\u4E16\u754C\u7EAA\u5F55\uFF0850\u82F1\u91CC\uFF0C12\u5C0F\u65F6\uFF0C100\u82F1\u91CC\uFF0C24\u5C0F\u65F6\uFF09\u548C8\u9879\u5168\u7F8E\u7EAA\u5F55",
    desc: 'Camille正努力成为在各种地形和距离上跑得最快的女性超马运动员。她的速度、全能、韧性和技术让她成为了这项运动中的传奇人物。Camille和她的丈夫兼教练Conor一起养了两只牧羊犬——Hawi和Winny，他们共同生活在俄克拉荷马州的沃尔埃克斯或科罗拉多州的阿拉莫萨。平时，她在俄克拉荷马大学健康科学中心担任教练和研究助理，同时担任公共演说家和品牌大使。自2012年以来，她还一直担任美国田径协会女子长跑委员会的干事。'
  },
  hayden_hawks: {
    name: 'Hayden Hawks',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2016\u5E74Speedgoat 50\u516C\u91CC-\u7B2C\u4E00\u540D\n      2016\u5E74/2017\u5E74TNF SF50\u82F1\u91CC-\u7B2C\u4E8C/\u7B2C\u4E09\u540D\n      2017\u5E74 CCC\uFF08100\u516C\u91CC\uFF09- \u593A\u51A0\u5E76\u521B\u9020\u8D5B\u4F1A\u7EAA\u5F55\n      2018\u5E74 Lavaredo Ultra Trail 120\u516C\u91CC - \u7B2C\u4E00\u540D\n      Zion Traverse\u5DF2\u77E5\u6700\u5FEB\u5B8C\u6210\u65F6\u95F4\uFF08FKT\uFF0948\u82F1\u91CC",
    desc: 'Hayden是来自犹他州雪松城的顶级超马运动员和山地运动员。他喜欢在国家公园里和自己家附近的山脉中、峡谷里和沙漠上奔跑。对他来说，生命中最重要的两个人就是他的妻子和年幼的儿子，他们常常一起旅行，探索世界。多年来，他已经在他专攻的各种赛道上都取得了成功，包括田径赛道、越野赛道、公路赛道、山地赛道以及现在的超级马拉松。'
  },
  tim_tollefson: {
    name: 'Tim Tollefson',
    country: '美国',
    countryIcon: 'usa',
    achievement: "\u4E24\u6B21\u53C2\u52A0\u7F8E\u56FD\u5965\u8FD0\u4F1A\u9A6C\u62C9\u677E\u9884\u9009\u8D5B\n      2014\u5E74US 50k Trail National\u51A0\u519B\n      2016\u5E74UTMB\u7B2C\u4E09\u540D\n      2017\u5E74UTMB\u7B2C\u4E09\u540D\n      2017\u5E74Ultra Trail Australia\u51A0\u519B",
    desc: 'Tim Tollefson是一位山地运动员，他与妻子Lindsay一起居住在加州的马姆莫斯湖。Tim曾经是一名路跑运动员，先后两次参加奥运会马拉松选拔赛。在结束了其成功的路跑生涯后，他开始转型成为一名越野跑运动员。在短短的三年时间内，他取得了多项成就，包括赢得2014年USATF 50k Trail的全国冠军、代表美国队参加IAU Ultra Trail世界锦标赛、赢得Ultra Trail Australia的冠军，并两次获得UTMB的季军，这项赛事也是一年之中最激烈的100英里超马比赛。Tim还全职担任理疗师，为东锯齿山脉地区的居民和来访的运动员提供服务。谈及未来，Tim希望自己能成为越野跑、登山滑雪和高山滑雪项目的顶级运动员，同时也希望与全球更多的运动爱好者保持联系，让更多的人能了解并终身享受山地运动。'
  },
  magda_boulet: {
    name: 'Magda Boulet',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2008\u5E74\u5965\u8FD0\u4F1A\u9A6C\u62C9\u677E\u9009\u62D4\u8D5B\u7B2C\u4E8C\u540D\n        \u9A6C\u62C9\u677E\u4E2A\u4EBA\u6700\u4F73\u6210\u7EE92:26:22\uFF082010\u5E74\uFF0C\u9E7F\u7279\u4E39\uFF09\n        2015\u5E74Western States 100\u51A0\u519B\n        2015\u5E74\u5317\u7F8E\u5E74\u5EA6\u6700\u4F73\u8D85\u9A6C \u8FD0\u52A8\u5458\n        2017\u5E74Western States\u4E9A\u519B\n        2017 Terewara 102\u516C\u91CC\u4E9A\u519B",
    desc: 'Magda在波兰长大，于2001年移民到美国，并在同年取得了美国公民身份。她曾先后拿到加州大学伯克利分校的人类生物动力学学士学位和加州州立大学海沃德分校的运动生理学硕士学位。在传奇的Jack Daniels的执教下，Magda在路跑和越野跑上均取得了巨大的成功。她在2008年奥运会选拔赛中获得亚军，并取得了北京奥运会马拉松比赛参赛资格。在2010年的鹿特丹马拉松比赛中，她创造了个人最佳成绩2:26:22，这一成绩至今仍位列美国女子马拉松历史成绩第11位。2013年，Magda转型成为越野跑和超马运动员，仅仅两年后，她就在其首次参加的长距离赛事——Western States 100中获得胜利。她的出色表现也帮助她当选2015年“北美年度最佳超马运动员”。Magda与丈夫Richie、儿子Owen一起住在加利福尼亚州的奥克兰。平时，她就职于GU能量实验室——在那里你可以发现她极具灵感的产品。'
  },
  sally_mcrae: {
    name: 'Sally McRae',
    country: '美国',
    countryIcon: 'usa',
    achievement: "10\u6B21\u8D85\u9A6C\u51A0\u519B\n      20\u6B21\u767B\u4E0A\u9886\u5956\u53F0\n      2\u6B21Western States 100\u524D\u5341\u540D",
    desc: 'Sally McRae是一个勇于追逐梦想和冒险的人。她是一名妻子和两个孩子的母亲，同时也是一名专业的越野跑运动员，在世界各地参赛。除此之外，她还是兼职教练、作家和演讲者，鼓励着其他人过充实的生活。'
  },
  hillary_allen: {
    name: 'Hillary Allen',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2018\u5E74 Cortina Trail race \u593A\u51A0\n      2018\u5E74 TNF Endurance Challenge Chile 80\u516C\u91CC \u8D5B\u9053\u7EAA\u5F55\n      2017\u5E74 World Sky Running Ultra\u6392\u540D\u7B2C\u4E8C\n      2017\u5E74 Maderia Skyrace \u8D5B\u9053\u7EAA\u5F55\n      2017\u5E74 Transvulcania\u7B2C\u4E09\u540D\n      2016\u5E74 \u7F8E\u56FD\u5C71\u5730\u56FD\u5BB6\u961F\u6210\u5458\n      2016\u5E74 Ultra Skyrunning World Series\u7B2C\u4E09\u540D\n      2016\u5E74 TNF Cortina Trail \u8D5B\u9053\u7EAA\u5F55\n      2015\u5E74 US Sky Running Ultra\u51A0\u519B\n      2015\u5E74 Speedgoat 50\u516C\u91CC \u8D5B\u9053\u7EAA\u5F55",
    desc: '人们将Hillary Allen称为“希利山羊”并非毫无根据，因为她迅速证明了自己可以在山地中快速奔跑，尤其是在通往高处的赛道上。Allen以前是一名网球运动员，直到读研究生时才开始练习长跑。当时，她正在攻读神经科学的学位，需要一种方式能让她的头脑保持清醒。她便开始与一些当地的跑者一起训练，从此一发不可收拾。她迅速在长距离越野赛中展现实力，并登上领奖台。自此以后，她开始在世界各地参加跑步比赛，不断登上领奖台并创下赛道纪录。尽管成绩如此优异，她依然能保持谦虚和幽默。'
  },
  sage_canaday: {
    name: 'Sage Canaday',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2\u6B21\u7F8E\u56FD\u5965\u8FD0\u4F1A\u9A6C\u62C9\u677E\u9884\u9009\u8D5B\u53C2\u8D5B\n        3\u6B21Speedgoat 50\u516C\u91CC\u51A0\u519B\n        3\u573A\u7F8E\u56FD\u7530\u5F84\u534F\u4F1A\u56FD\u5BB6\u51A0\u519B\uFF08100\u516C\u91CC\u8D8A\u91CE\u8DD1\uFF0C\u5C71\u5730\u8D8A\u91CE\u8DD1\u548C\u8D8A\u91CE\u9A6C\u62C9\u677E\uFF09\n        2\u6B21Tarawera 100\u516C\u91CC\u51A0\u519B\n        2\u6B21Lake Sonoma 50\u82F1\u91CC\u51A0\u519B\n        \u65E7\u91D1\u5C71The North Face 50-mile Endurance Challenge \u83B7\u80DC\n        2014\u5E74\u4E16\u754C\u957F\u8DDD\u79BB\u5C71\u5730\u8DD1\u51A0\u519B\uFF082:10\u767B\u9876\u6D3E\u514B\u5CF0\uFF09",
    desc: '自2012年移居到科罗拉多州博尔德市之后，Sage便成为了一名山地超级越野运动员。而在此之前，他一直在公路和跑道上参加比赛。2007年，他便成为美国奥运会马拉松选拔赛中最年轻的参赛者，彼时他只有21岁。2012年开始，他逐渐转型参加越野赛和山地赛，此后他成为全美山地赛冠军。几年后，他又将100公里越野跑和马拉松越野赛赛事的全美冠军收入囊中。在国际比赛中，他先后两次赢得新西兰Tarawera 100公里的冠军，并于2014年在派克峰获得了世界长距离山地赛冠军。此外，他还赢得过旧金山著名的North Face Endurance Challenge 50-mile的比赛，并且3次拿下Speedgoat 50公里的冠军。谈及未来，Sage希望能参加世界上最激烈的山地超级越野赛。'
  },
  cody_reed: {
    name: 'Cody Reed',
    country: '美国',
    countryIcon: 'usa',
    achievement: "2014 \u5E74NCAA Cross Country\u5168\u56FD\u8D5B\u53C2\u8D5B\n      2014\u5E74Big Sky Indoor Conference Championships (in Flagstaff) 3\u516C\u91CC \u7B2C\u4E8C\u540D\n      2016\u5E74Tamalpa Headlands 50\u516C\u91CC \u7B2C\u4E00\u540D\n      2017\u5E74Way Too Cool\u7B2C\u4E00\u540D\n      2018\u5E74Western States\u7B2C\u4E03\u540D",
    desc: 'Cody和Coconino Cowboys一起在亚利桑那州弗拉格斯塔夫附近的山脉和峡谷中生活和训练。自中学时代起，他就一直参加各类跑步比赛，但直到2016年，科迪才决定尝试越野跑，此后他便一往无前。Cody一直以自己喜欢的方式环游世界，并向世人展示越野跑是一件多么有意义的事情。'
  },
  harry_jones: {
    name: 'Harry Jones',
    country: '英国',
    countryIcon: 'kingdom',
    achievement: '',
    desc: 'Harry在大三的时候开始在赛道上练习跑步，后来又逐渐转型参加超级越野比赛。在过去的两年中，他一直专注于100公里，并在许多国际比赛中登上领奖台，其中包括拿下Tarawera Ultramarathon, Cappadocia Ultra-Trail和Ultra-Trail Australia等三项比赛的季军。业余时间，Harry担任跑步教练和“油管”拍客，记录他在世界各地的训练和比赛。'
  },
  zach_bitter: {
    name: 'Zach Bitter',
    country: '美国',
    countryIcon: 'usa',
    achievement: "\u5168\u7F8E\u7EAA\u5F55\u548C\u4E16\u754C\u7EAA\u5F55\u4FDD\u6301\u8005\n      2012\u5E74\u548C2015\u5E74\u5168\u56FD\u51A0\u519B\uFF0850\u82F1\u91CC\uFF09\n      2014\u5E74\u5168\u56FD\u51A0\u519B\uFF08100\u82F1\u91CC\uFF09\n      JFK 50 Mile Course \u2013 \u5386\u53F2\u7B2C9\u5FEB\u6210\u7EE9",
    desc: 'Zach Bitter是一位极限耐力运动员和教练。他保持着100英里跑（11小时19分13秒）和12个小时跑（104.88英里）的世界纪录。Zach在世界各地参加比赛，包括代表美国队三度参加世界100公里锦标赛。除了参加路跑和跑道上的比赛，Zach同样会参加越野赛，他在Javelina 100英里和San Diego 100英里比赛中均获得了胜利。'
  },
  audrey_tanguy: {
    name: 'Audrey Tanguy',
    country: '法国',
    countryIcon: 'france',
    achievement: "2019 \u5E74Lavaredo Ultra Trail \u7B2C\u4E8C\u540D\n      2019\u5E74 MIUT Ultra Trail de Mad\xE8re\u7B2C\u4E09\u540D\n      2019\u5E74 TransJejuCor\xE9e\uFF0850\u516C\u91CC\uFF09\u7B2C\u4E00\u540D\n      2018\u5E74\uFF062019\u5E74Trace des Ducs de Savoie\uFF0874\uFF09\u7B2C\u4E00\u540D\n      2018\u5E74 90 kms du Mont Blanc (74) \u7B2C\u4E8C\u540D",
    desc: 'Audrey Tanguy在法国阿尔卑斯山居住和训练，在那里她被训练成为欧洲最好的越野跑运动员之一。她在Marathon Du Mont-Blanc和Lavaredo Ultra Trail超级越野赛均登上领奖台上，令人印象深刻。同时，她在Madeira Island Ultra Trail上也先后两次登上领奖台。此外，她先后两次卫冕UTMB-TDS赛事。Audrey拥有对越野跑的无限热情，她希望在迎接新冒险的同时继续捍卫自己的头衔。'
  },
  scotty_hawker: {
    name: 'Scotty Hawker',
    country: '新西兰',
    countryIcon: 'newzealand',
    achievement: "2019\u5E74\u9999\u6E2F100 \u7B2C\u4E94\u540D\n      2019\u5E74\u6FB3\u5927\u5229\u4E9AMt Solitary Ultra 45\u516C\u91CC \u7B2C\u4E00\u540D\n      2019\u5E74\u7F57\u9A6C\u5C3C\u4E9A Retezat Skyrace 28\u516C\u91CC \u7B2C\u4E09\u540D\n      2019\u5E74\u610F\u5927\u5229Lavaredo Ultra Dolomites \u7B2C\u4E09\u540D\n      2019\u5E74\u5965\u5730\u5229Grossglockner Ultra Trail 50\u516C\u91CC \u7B2C\u4E8C\u540D\n      2019\u5E74\u6CD5\u56FDUTMB \u7B2C\u4E09\u540D\n      2019\u5E74\u6CF0\u56FDMaesalong 10\u516C\u91CC \u7B2C\u4E00\u540D",
    desc: 'Scotty Hawke是来自新西兰基督城的越野跑和马拉松选手。他一年中有6个月的时间会与妻子和三岁的女儿一起在欧洲旅行。他们喜欢探索新的国家，这为Scotty提供了参加一些世界上最激烈的越野赛和超马比赛的机会。2019年，Scotty在享有盛名的UTMB取得了第三名，结束了一个伟大的赛季。这对于在2018赛季经历巨大挫折并几乎要放弃这项运动的他来说，是一次来之不易的胜利。对于他来说，UTMB的完赛也让他在备战2020赛季的时候充满了信心。平时，Scotty是一位教练，帮助来自世界各地的运动员为越野和超马比赛做准备。他喜欢与他人分享他在越野跑运动中的知识和经验，在这一过程中，他发现同时作为一名教练员和运动员可以帮助他平衡生活。'
  },
  tommy_caldwell: {
    name: 'Tommy Caldwell',
    country: '美国',
    countryIcon: 'usa',
    achievement: "Dawn Wall\u81EA\u7531\u9996\u6500\n      Dihedral Wall\u81EA\u7531\u9996\u6500\n      11\u5C0F\u65F6\u5185\u5B8C\u6210Nose\u81EA\u7531\u6500\n      The Nose1\u5C0F\u65F658\u5206\u7684\u901F\u6500\u7EAA\u5F55\n      Fitz Roy Traverse\u9996\u6500\n      ",
    desc: '《国家地理》杂志将Tommy称之为“这个星球上最全能的攀岩家”。Tommy致力于在世界各地登山、攀岩，并在岩壁上开发自己的高难度线路。无论是黎明墙（Dawn Wall）的自由首攀，还是The Nose的速攀纪录，Tommy一直在证明着一件事，人类的身体潜力是无穷的。'
  },
  john_price: {
    name: 'John Price',
    country: '加拿大',
    countryIcon: 'canada',
    achievement: '',
    desc: 'John Price is a photographer and climber who has spent the last six years travelling all over the world, while basing himself out of Canada.  Over the last four years, Price has been actively climbing and photographing rock, ice, and alpine ascents throughout North America, the remote corners of the Himalaya, rural Japan, Ice climbs in China and extensively throughout the Canadian Rockies.  He is currently based in Canmore, Alberta where he works as a freelance adventure, lifestyle, and landscape photographer.'
  },
  luke_smithwick: {
    name: 'Luke Smithwick',
    country: '美国',
    countryIcon: 'usa',
    achievement: '',
    desc: '一位记者最近大加赞赏COROS签约的专业滑雪登山和攀登运动员Luke Smithwick，称他是近年来喜马拉雅山上最高产的登山者之一。 在过去的9年中，他进行了73次喜马拉雅的探险，专注于该地区的探索性滑雪和攀登活动。借助颇具设计感的脚踏动力设备，Smithwick已在喜马拉雅山完成了超过30条首次滑雪下撤线路，从而积累了别人所不具备的丰富知识和滑雪履历。他的家坐落在特顿山脚下的维克多，位于爱达荷州。他现已加入了COROS精英运动员团队，将和其他人一同实现他们的宏伟计划。'
  },
  hilaree_nelson: {
    name: 'Hilaree Nelson',
    country: '美国',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Combining a passion for exploration, mountain adventures and skiing, Hilaree Nelson has travelled to some of the most exotic mountain ranges on earth. Her expedition career has led her to many “firsts” in the world of ski mountaineering including linking two 8000m peaks (Everest and Lhotse) in one push, first ski descents on Baffin Island, a first American ascent and ski descent of Papsura peak in India, and most recently a first ski descent of the 4th highest peak in the world, Lhotse. She is the Captain of the North Face Athlete Team, an active leader on climate with Protect Our Winters, and an avid proponent of wild places such as the Arctic National Wildlife Refuge. She holds to the philosophy that these remaining wild places have huge significance on the well-being of both the planet and the human psyche. Recently named by Men’s Journal as one of the most adventurous women of the last 25 years, as well as National Geographic’s 2018 Adventurer of the Year, Hilaree rounds out her athletic endeavors by sharing her many stories on stages across the country in hopes of inspiring imagination and passion in the people she encounters. Hilaree is also the mother of two wild boys and finds her sanity in the San Juan Mountains near her home in Telluride, Colorado. '
  },
  jim_morrison: {
    name: 'Jim Morrison',
    country: '美国',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Jim Morrison cemented his reputation as one of the greatest ski mountaineers of all time with a first descent of the Lhotse Couloir, in 2018, one of the last remaining premiere high-altitude ski lines in the world. Decades before that landmark achievement, Morrison was accumulating a lifetime of skiing experience around the globe. From Chamonix to Alaska and the Indian Himalaya, Morrison has climbed and skied the some of the world’s most demanding peaks, including a first descent of Papsura, a new ski line on Cho Oyu, as well as a summit and partial ski descent of Mt. Everest. In addition to his time in the mountains, Morrison is also a successful entrepreneur, owning and operating a luxury home construction business in Lake Tahoe. On top of that, he gives back to his community as a board member of his local airport district and is actively involved in the environmental non-profit, Protect Our Winters.'
  },
  jason_antin: {
    name: 'Jason Antin',
    country: '美国',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Jason Antin是新英格兰人，现在科罗拉多州安家。他将所有时间都花在努力实现工作与生活的平衡上。除了帮助创立了少数几个专注于户外的初创公司之外，他还花费大量时间作为Alpenglow Mountain guides和Denver Mountain Guiding的登山技术指导。除此之外，他还在位于科罗拉多州博尔德的高山训练中心担任力量和体能训练教练，在那里他会帮助运动员提前适应山地中将要遇到的身体和精神上的严峻考验。在工作之余，Jason会与妻子Jenny和三岁的女儿Avery在科罗拉多州戈尔登共享他们美好的家庭时光。他喜欢在山区的岩石、冰上或者是雪中快速移动。'
  },
  molly: {
    name: 'Molly Seidel',
    country: '美国',
    countryIcon: 'usa',
    achievement: "\u5965\u6797\u5339\u514B\u94DC\u724C\u83B7\u5956\u8005\uFF082020 \u4E1C\u4EAC\u5965\u8FD0\u4F1A\uFF09\n    2021\u7EBD\u7EA6\u9A6C\u62C9\u677E\u7B2C\u56DB\u540D\n    4\u5C4ANCAA\u51A0\u519B\u5F97\u4E3B",
    desc: '莫莉·赛德尔职业生涯的第一场马拉松赛事就取得了奥运会资格，第三场赛事就取得了奥运会铜牌，一度成为赛场最强“黑马”。Molly小时候患有注意力缺陷多动障碍，脑中的想法总是变得很快。她发现只有跑步才能让大脑和身体处于同频状态，重新掌握自己的世界。跑步已经成为了Molly无法分割的一部分，她爱的，是跑步本身这件事：“即使不做职业跑者，我也会继续跑下去。”'
  },
  申加升: {
    name: '申加升',
    country: '中国',
    countryIcon: 'china',
    achievement: "2023\u73AF\u52C3\u6717\u5CF0\u8D8A\u91CE\u8D5BCCC\u7EC4\u522B\u4E9A\u519B\n    2023\u897F\u90E8100\u8010\u529B\u8D5B\u7B2C\u56DB\u540D\n    2022\u745E\u58EB\u827E\u683C\u5CF0\u8D8A\u91CE\u8D5B101\u516C\u91CC\u51A0\u519B\n    2021\u5E74TNF100\u83AB\u5E72\u5C71\u8D8A\u91CE\u8D5B100\u516C\u91CC\u51A0\u519B\n    2019\u5E74\u9999\u6E2F100\u7537\u5B50\u51A0\u519B",
    desc: '来自中国云南的申加升，曾靠自己的努力跑进了专业队，障碍赛、场地赛、马拉松，申加升都练过，但成绩差强人意，从未被定义为“成功者”。开始接触越野跑后，他终于找到了属于自己的天空，天赋尽显，成为备受瞩目的越野新生代力量，被跑圈亲切地称为“申申”。近年更是不断站上国际竞技舞台取得佳绩，让世界看到了来自中国的越野力量。未来他希望自己能够释放出更大的能量：帮助更多人一起探索越野跑的魅力、追求热爱的力量、自我超越的意义。'
  },
  巴斯: {
    name: '巴斯（李鹏程）',
    country: '中国',
    countryIcon: 'china',
    achievement: "2023 IRONMAN\u4E16\u754C\u9526\u6807\u8D5B30-34\u5E74\u9F84\u7EC4\u5B63\u519B\n    2019 IRONMAN \u4E16\u754C\u9526\u6807\u8D5B 25~29\u5C81\u7EC4\u4E9A\u6D32\u7B2C\u4E00\n    2018 IRONMAN \u4E16\u754C\u9526\u6807\u8D5B \u5237\u65B0\u4E2D\u56FD\u5927\u94C1\u6210\u7EE9\u7EAA\u5F55\n    \u4E2D\u56FD\u9996\u4F4D\u767B\u4E0A KONA \u4E16\u9526\u8D5B\u9886\u5956\u53F0\u7537\u5B50\u9009\u624B",
    desc: '铁人三项运动员巴斯（李鹏程），是首位以个人身份参加全运会的铁人三项运动员。在大学接触铁三运动后，便一发不可收拾，走上了一条充满艰困但也充满热爱的小路。一周游泳 2 万米、跑步 80 公里、骑行 500 公里……每一次训练，他都不糊弄，这是巴斯站上竞技场的底气。因为疫情，几度错过世锦赛圆梦之旅。蛰伏三年，他最终在2023 IRONMAN世界锦标赛取得年龄组季军，实现了“打铁梦”！从业余爱好者，到站上世界领奖台，巴斯让我们看到了他是如何用热爱的力量，打磨出一个更强的自己。'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/about.js
/* harmony default export */ const about = ({
  pageTitle: 'COROS',
  subTitle: '我们是谁？',
  desc: "COROS\u9AD8\u9A70\u81F4\u529B\u4E8E\u4E3A\u5168\u7403\u6237\u5916\u8FD0\u52A8\u7231\u597D\u8005\u8BBE\u8BA1\u5236\u9020\u79D1\u6280\u4EA7\u54C1\uFF0C\u4E3A\u4F53\u80FD\u8BAD\u7EC3\u548C\u6237\u5916\u63A2\u7D22\u63D0\u4F9B\u652F\u6301\u548C\u5E2E\u52A9\u3002 \u4E3A\u66F4\u597D\u5730\u5B9E\u73B0\u8FD9\u4E00\u76EE\u6807\uFF0C\u6211\u4EEC\u5728\u591A\u4E2A\u56FD\u5BB6\u7EC4\u5EFA\u56E2\u961F\uFF0C\u5E76\u4E0E\u4E16\u754C\u5404\u56FD\u7684\u8FD0\u52A8\u5BB6\u3001\u63A2\u9669\u5BB6\u4E00\u8D77\u5408\u4F5C\uFF0C\u6253\u9020\u5353\u8D8A\u7684\u4EA7\u54C1\uFF0C\u63D0\u4F9B\u9AD8\u54C1\u8D28\u7684\u7528\u6237\u670D\u52A1\u3002\u201C\u4FDD\u6301\u4E13\u6CE8\uFF0C\u4E50\u4E8E\u521B\u65B0\uFF0C\u6EE1\u6000\u70ED\u60C5\u201D\u662F\u6211\u4EEC\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002 \u6211\u4EEC\u5E0C\u671B\u8BA9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u4E4B\u7F8E\uFF0C\u62E5\u62B1\u66F4\u5BBD\u5E7F\u7684\u4E16\u754C\uFF0C\u4F53\u9A8C\u66F4\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n\n    2014 \u5E74\u6210\u7ACB\u4E8E\u4E2D\u56FD\uFF0C\u76EE\u524D\u516C\u53F8\u5458\u5DE5 300\u4F59\u4EBA\uFF0C\u9500\u552E\u4E0E\u670D\u52A1\u7F51\u7EDC\u8986\u76D6\u5168\u7403100\u591A\u4E2A\u56FD\u5BB6\u548C\u5730\u533A\u3002 \u73B0\u5DF2\u6210\u4E3A\u6DF1\u53D7\u5168\u7403\u6237\u5916\u63A2\u9669\u5BB6\u53CA\u8FD0\u52A8\u8005\u559C\u7231\u7684\u4E13\u4E1A\u8FD0\u52A8\u79D1\u6280\u54C1\u724C\u3002",
  visionTitle: '使命与愿景',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/contact.js
/* harmony default export */ const contact = ({
  pageTitle: '联系我们',
  marketing: '市场合作',
  pr: '媒体合作',
  hr: '人才招聘',
  purchase: '供应商合作',
  sales: '经销商合作'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/careers.js
/* harmony default export */ const careers = ({
  pageTitle: '加入COROS',
  desc: "\u6211\u4EEC\u8BDA\u631A\u6B22\u8FCE\u4F18\u79C0\u7684\u4F60\u4EEC\u52A0\u5165\uFF0CCOROS \u79C9\u6301\u7740\u6210\u4E3A\u6700\u4F18\u79C0\u7684\u8FD0\u52A8\u79D1\u6280\u516C\u53F8\uFF0C\u901A\u8FC7\u6570\u636E \u6280\u672F\u63A8\u52A8\u8FD0\u52A8\u8BAD\u7EC3\u53D8\u9769\u7684\u613F\u666F\uFF0C\u5E0C\u671B\u4E0E\u5927\u5BB6\u4E00\u8D77\u575A\u6301\u957F\u671F\u3001\u7406\u6027\u3001\u5766\u8BDA\u3001\u8BDA\u4FE1\u3001\u521B\u65B0\u3001 \u6210\u957F\u7684\u4EF7\u503C\u89C2\uFF0C\u5EFA\u7ACB\u7B26\u5408 COROS\n  \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002\u5BF9\u4EC0\u4E48\u662F\u201CCOROS \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u201D\u611F\u5174\u8DA3?\u521A\u597D\uFF0C\u6211\u4EEC\u4E5F\u5BF9\u4F18\u79C0\u7684\u4F60\u611F\u5174\u8DA3\u3002",
  visionTitle: '投递简历：'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/login.js
/* harmony default export */ const login = ({
  loginTitle: '登录',
  Email: '请输入邮箱',
  account: '请输入手机号或邮箱',
  password: '请输入密码',
  signIn: '登录',
  createAccount: '创建账户',
  forgotYourPassword: '忘记密码?',
  DownloadPlugin: '下载插件',
  sendEmai: '输入您的 COROS 账号',
  forgot: '忘记密码',
  submit: '提交',
  validateEmailSuccess: '验证码已发送至您的邮箱，请注意查收',
  newPassword: '新密码',
  newPasswordTips: '请输入您的新密码',
  newPasswordNext: '重置',
  shortPasswordTips: '请输入8-20字母或数字组成的密码',
  //Please enter password with 6-20 characters
  invalidStr: '密码格式不正确，请输入8-20字母+数字组合',
  resetSuccTitle: '成功！',
  resetFailedTitle: '失败 !',
  resetSuccDesc: '密码修改成功, 现在你可以使用新密码登录！',
  resetFailedDesc: '重置密码失败, 验证码无效 !',
  accountNotExist: '此账号尚未注册!',
  login: '登录',
  smsCodeValidate: '身份验证',
  sendSucc: '验证码已发送成功',
  sendTips: '验证码已发送至你的手机{var}，有效期10分钟',
  countdownTick: '{var} 秒后重新发送',
  paramsError: '参数错误',
  resend: '重新发送',
  codeError: '验证码无效',
  retryLimit: '验证码错误次数达到上限',
  invalidAccount: '账号不正确',
  incorrectCode: '验证码不正确',
  invalidAccountOrPwd: '账号或密码不正确'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/datalist.js
/* harmony default export */ const datalist = ({
  title: '数据中心',
  desc: '项数据',
  total: '全部',
  run: '跑步',
  runOutdoor: '户外跑步',
  indoorRun: '跑步机',
  trailRun: '越野跑',
  runMountaineer: '登山',
  hike: '徒步',
  trackRun: '运动场跑步',
  bike: '骑行',
  indoorBike: '室内骑行',
  swim: '游泳',
  swimPool: '泳池游泳',
  swimOpen: '公开水域',
  triathlon: '铁人三项',
  cardio: '有氧',
  aerobicOutdoor: '户外有氧',
  aerobicIndoor: '室内有氧',
  ski: '滑雪',
  skiItem: '雪场双板',
  skiSnowboard: '雪场单板',
  skiMountaineering: '登山滑雪',
  skiCrosscountry: '越野滑雪',
  multisport: '组合运动',
  logOut: '退出登录',
  columnLabel: {
    title: '标题',
    distance: '距离',
    averagePace: '平均配速',
    device: '设备',
    date: '日期',
    workout: '运动'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/yourproduct.js
/* harmony default export */ const yourproduct = ({
  yourProducts: '绑定设备',
  product: '设备',
  productID: '6位设备ID',
  warrantyPeriod: '保修期',
  expiration: '保修截止日期',
  workoutHistory: '运动数据',
  accountDetail: '账户信息'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/progress.js
/* harmony default export */ const progress = ({
  title: 'Exclusive Tommy Caldwell Mug',
  desc: 'Take a sip of motivation with the Tommy Caldwell Pain is Progress isothermal mug by COROS.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/kilianEdition.js
/* harmony default export */ const kilianEdition = ({
  title: 'COROS APEX 2 Pro Kilian Jornet 限量联名套装',
  desc: '专为户外运动爱好者打造',
  sloganTitle: 'COROS 高驰 ✖️ K 天王',
  sloganDesc1: "Kilian Jornet\uFF0CCOROS \u9AD8\u9A70\u5168\u7403\u5F62\u8C61\u4EE3\u8A00\u4EBA\uFF0C4\u5C4A UTMB \u51A0\u519B\u53CA\u8D5B\u9053\u7EAA\u5F55\u4FDD\u6301\u8005\uFF0C5\u5C4A \u786C\u77F3 100 \u51A0\u519B\uFF0C26 \u5C0F\u65F6\u65E0\u6C27\u901F\u6500\u73E0\u5CF0\uFF0C\u4ED6\u662F\u8FD9\u4E2A\u661F\u7403\u4E0A\u6700\u5177\u4F20\u5947\u8272\u5F69\u7684\u8D8A\u91CE\u8DD1\u8005\u4E4B\u4E00\u3002",
  sloganDesc2: "COROS \u9AD8\u9A70\u643A\u624B K \u5929\u738B\uFF0C\u63A8\u51FA APEX 2 Pro Kilian Jornet \u9650\u91CF\u5957\u88C5\uFF0C\u4E0D\u4EC5\u53EF\u4EE5\u8BA9\u4F60\u4F53\u9A8C\u4E00\u6B3E\u771F\u6B63\u7684\u8F7B\u91CF\u5316\u6237\u5916\u8FD0\u52A8\u8868\uFF0C\u8FD8\u6709\u673A\u4F1A\u53C2\u52A0\u7531\u4ED6\u4EB2\u81EA\u6267\u6559\u7684\u7EBF\u4E0A\u8BAD\u7EC3\u8425\u3002",
  slogan2Title: '大自然的极致撞色',
  slogan2Desc: "\u8FD9\u6B3E\u9650\u91CF\u8054\u540D\u624B\u8868\u91C7\u7528\u4E86\u5168\u65B0\u914D\u8272\u7EC4\u5408\uFF0C\u4EE5\u9C9C\u660E\u800C\u9192\u76EE\u7684\u96EA\u5CF0\u767D\u548C\u5CA9\u77F3\u9ED1\u4E3A\u4E3B\uFF0C\u7075\u611F\u6765\u81EA K \u5929\u738B\u751F\u6D3B\u8BAD\u7EC3\u5730\u2014\u2014\u96EA\u5C71\u8D77\u4F0F\u7684\u632A\u5A01\u5C71\u8109\u3001\u7F57\u59C6\u65AF\u8FBE\u4F26\u5C71\u8C37\u3002",
  twoisbetter: '两款表带，随心更换',
  twoisbetterDesc: '与普通款 APEX 2 Pro 不同的是，限量联名套装将提供两条表带——多孔硅胶表带、轻盈织物表带，可随心更换，满足你的不同探险需求。',
  capItOff: '速干竞赛帽',
  capItOffDesc: "\u9650\u91CF\u8054\u540D\u6B3E\u9644\u8D60 K \u5929\u738B \u4E2A\u4EBA\u54C1\u724C NNormal \u901F\u5E72\u7ADE\u8D5B\u5E3D\uFF0C\u9632\u6652\u900F\u6C14\uFF0C\u8F7B\u4FBF\u6613\u6298\u53E0\u3002\n  \u65E0\u8BBA\u4F60\u662F\u60F3\u548C K \u5929\u738B \u4E00\u6837\u9A70\u9A8B\u5C71\u91CE\uFF0C\u8FD8\u662F\u5907\u6218\u4E0B\u4E00\u573A\u9A6C\u62C9\u677E\uFF0C\u90FD\u53EF\u4EE5\u5E26\u4E0A\u8FD9\u9876\u5E3D\u5B50\uFF0C\u8BA9\u81EA\u5DF1\u7684\u8FD0\u52A8\u66F4\u4E13\u6CE8\u3002",
  getcoached: 'K 天王的首次执教',
  getcoachedDesc: '如果得到世界顶级运动员的指导，你会进步得更快吗？如果你拥有了一台 APEX 2 Pro Kilian Jornet 限量联名款，你将有机会参加一次为期12周的线上训练营，得到 K 天王的亲自指导。这也是 K 天王本人第一次通过训练营的方式，和长距离耐力运动爱好者进行交流。25名跑者将会由 K 天王亲自挑选，最终入围训练营。',
  getcoachedDescMobile: '如果得到世界顶级运动员的指导，你会进步得更快吗？如果你拥有了一台 APEX 2 Pro Kilian Jornet 限量联名款，你将有机会参加一次为期12周的线上训练营，得到 K 天王的亲自指导。这也是 K 天王本人第一次通过训练营的方式，和长距离耐力运动爱好者进行交流。25名跑者将会由 K 天王亲自挑选，最终入围训练营。',
  getcoachedDeadline: '报名截止时间：北京时间2月18日。',
  reachEverySummit: '越野越强',
  reachEverySummitDesc: 'APEX 2 Pro 专为越野而生，满足你不同的运动需求。更耐用的材质，更优秀的天线性能，新一代光电心率传感器，更长的运动续航，带你越野越强。',
  nomatterwhat: '你的户外伴侣',
  nomatterwhatDesc: '暴风雨、高原反应、黑暗、脱水等，都是你在身处户外时，可能面临的挑战。APEX 2 Pro Kilian Jornet 限量联名款，可以在每一次户外运动时，都为你保驾护航，让你安全去往每一个地方。',
  nomatterwhatDescMobile: '暴风雨、高原反应、黑暗、脱水等，都是你在身处户外时，可能面临的挑战。APEX 2 Pro Kilian Jornet 限量联名款，可以在每一次户外运动时，都为你保驾护航，让你安全去往每一个地方。',
  findYourPath: '去想去的地方',
  findYourPathDesc: '作为一名传奇越野跑者，K 天王对 GPS 导航有着极致的需求，这也是他选择 APEX 2 Pro 的重要原因。手表搭载地图显示、离线地图导航、循迹返航等功能，带你去你想去的地方，也能安全回来。',
  findYourPathLearnMore: '了解更多 关于 COROS APEX 2 系列的信息',
  applyTitle: "Kilian Jornet \n  \u7EBF\u4E0A\u8BAD\u7EC3\u8425",
  applyTitleMobile: "Kilian Jornet \n  \u7EBF\u4E0A\u8BAD\u7EC3\u8425",
  applyDesc: "K \u5929\u738B \u4E0E COROS \u9AD8\u9A70\u8054\u5408\u63A8\u51FA\u4E86\u4E3A\u671F12\u5468\u7684\u7EBF\u4E0A\u8BAD\u7EC3\u8425\uFF0C\u4E13\u4E3A\u957F\u8DDD\u79BB\u8010\u529B\u8FD0\u52A8\u7231\u597D\u8005\u6253\u9020\u3002\u65E0\u8BBA\u4F60\u662F\u5728\u4E3A\u4F60\u7684\u9996\u9A6C\u4F5C\u51C6\u5907\uFF0C\u8FD8\u662F\u5907\u6218\u4E0B\u4E00\u573A\u957F\u8DDD\u79BB\u8D8A\u91CE\u8D5B\uFF0C\u4F60\u90FD\u6709\u673A\u4F1A\u5F97\u5230\u8FD9\u4F4D\u4E16\u754C\u9876\u7EA7\u8010\u529B\u8FD0\u52A8\u5458\u7684\u6307\u5BFC\u3002",
  applyDeadline: '报名截止时间：北京时间2月18日。',
  applyBtn2: '现在申请',
  applyFlow1Date: '北京时间2月18日15:59',
  applyFlow1Title: '报名截止时间',
  applyFlow1Desc: '找到手表的6位设备ID，在申请页面 coros.com/camp. 解锁报名资格',
  applyFlow2Date: '北京时间2月28日15:59',
  applyFlow2Title: '筛选完成',
  applyFlow2Desc: 'COROS 高驰和 K 天王一起，根据运动能力和训练目标筛选出 25 名最终入围的用户。所有 APEX 2 Pro Kilian Jornet 限量联名款拥有者均可免费报名参加本次训练营。',
  applyFlow3Date: '3月6日至5月28日',
  applyFlow3Title: '正式训练',
  applyFlow3Desc: '训练营开始前，K 天王将会和所有学员进行线上开营仪式。训练过程中，你将会定期通过 COROS Training Hub 获得 K 天王的训练指导。',
  limitedProduction: '全球限量',
  limitedProductionDesc: 'APEX 2 Pro Kilian Jornet 限量联名套装，全球限量 5000 套，趁现在，赶紧入手吧。'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/carabiner.js
/* harmony default export */ const carabiner = ({
  name: 'VERTIX 2 快挂扣',
  pageTitle: 'VERTIX 2 快挂扣',
  pageDesc: '专为户外攀岩场景打造的全新一代 VERTIX 2 快挂扣，可将手表挂在腰间，解放双手，不影响手腕动作，攀岩更灵活。',
  desc: "\u4E13\u4E3A\u6237\u5916\u6500\u5CA9\u573A\u666F\u6253\u9020\u7684\u5168\u65B0\u4E00\u4EE3 VERTIX 2 \u5FEB\u6302\u6263\uFF0C\u53EF\u5C06\u624B\u8868\u6302\u5728\u8170\u95F4\uFF0C\u89E3\u653E\u53CC\u624B\uFF0C\u4E0D\u5F71\u54CD\u624B\u8155\u52A8\u4F5C\uFF0C\u6500\u5CA9\u66F4\u7075\u6D3B\u3002\u8FD0\u52A8\u8FC7\u7A0B\u4E2D\uFF0C\u6302\u4E8E\u8170\u95F4\u7684\u624B\u8868\u4F9D\u7136\u53EF\u4EE5\u5168\u9762\u8BB0\u5F55\u6500\u5CA9\u8F68\u8FF9\u3001\u9AD8\u5EA6\u3001\u51B2\u5760\u7B49\u8FD0\u52A8\u6570\u636E\u3002\u642D\u914D\u989D\u5916\u7684\u5FC3\u7387\u76D1\u6D4B\u8BBE\u5907\uFF0C\u8FD8\u80FD\u8BB0\u5F55\u4E0B\u8FD0\u52A8\u8FC7\u7A0B\u4E2D\u7684\u5FC3\u7387\u8868\u73B0\u3002",
  keyFeatures: '产品亮点',
  features: [{
    title: '安全锁门',
    desc: "\u786E\u4FDD\u5FEB\u6302\u6263\u4E0D\u4F1A\u610F\u5916\u89E3\u9501\u3002"
  }, {
    title: '传感器保护',
    desc: "\u5168\u5305\u88F9\u5F0F\u4FDD\u62A4\u624B\u8868\u80CC\u9762\u4F20\u611F\u5668\uFF0C\u907F\u514D\u522E\u78B0\u3002"
  }, {
    title: '滑动开关',
    desc: "\u6ED1\u52A8\u56FA\u5B9A\u548C\u89E3\u9501\u624B\u8868\uFF0C\u64CD\u4F5C\u4FBF\u6377\uFF0C\u8DB3\u591F\u7262\u9760\u3002"
  }, {
    title: '旋转开关',
    desc: "\u64CD\u4F5C\u4E1D\u6ED1\uFF0C\u5E76\u901A\u8FC7\u4E1D\u6263\u9650\u4F4D\uFF0C\u907F\u514D\u65CB\u94AE\u65CB\u8F6C\u8FC7\u5EA6\u3002"
  }, {
    title: '安全锁扣',
    desc: "\u53CC\u91CD\u4FDD\u969C\uFF0C\u8FD0\u52A8\u8FC7\u7A0B\u4E2D\uFF0C\u4E0D\u7528\u62C5\u5FC3\u624B\u8868\u610F\u5916\u8131\u843D\u3002"
  }, {
    title: '轻量耐用',
    desc: "\u91C7\u7528\u8F7B\u91CF\u5316\u8010\u7528\u6750\u6599\uFF0C\u91CD\u91CF\u4F4E\u81F3\u7EA6 40 \u514B\u3002"
  }],
  keyFeaturesDesc: "\u975E\u56FD\u9645\u767B\u5C71\u8054\u5408\u4F1A\u8BA4\u8BC1\u7684\u6500\u767B\u5B89\u5168\u8BBE\u5907\u3002\n    \u4E0D\u9002\u7528\u4E8E\u76D1\u6D4B\u57FA\u4E8E\u52A8\u4F5C\u8BC6\u522B\u7684\u8FD0\u52A8\u6570\u636E\uFF0C\u5982\u6B65\u9891\u3001\u8DF3\u7EF3\u8BA1\u6570\u3001\u529B\u91CF\u8BAD\u7EC3\u8BA1\u6570\u7B49\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/hrm.js
/* harmony default export */ const hrm = ({
  share: 'COROS心率臂带',
  shareText: '准能舒服，颠覆想象',
  menu: 'COROS心率臂带',
  homeWatch: 'COROS心率臂带',
  homeWatchDesc: '准能舒服，颠覆想象',
  precise: '能准确，\n也能舒服。',
  intro: "\u9AD8\u9A70\u5FC3\u7387\u81C2\u5E26\u642D\u8F7D\u591A\u901A\u9053\u5F0F\u5FC3\u7387\u4F20\u611F\u5668\uFF0C\u5B9E\u65F6\u54CD\u5E94\uFF0C\u63D0\u4F9B\u7CBE\u51C6\u5FC3\u7387\u76D1\u6D4B\u3002\n  \u6750\u8D28\u8F7B\u8584\u3001\u67D4\u8F6F\u3001\u4FBF\u643A\uFF0C\u4F69\u6234\u8212\u9002\u65E0\u611F\u3002",
  intro_mobile: '高驰心率臂带搭载多通道式心率传感器，实时响应，提供精准心率监测。材质轻薄、柔软、便携，佩戴舒适无感。',
  easyToWear: '戴了就忘，\n够舒服。',
  sleek: '无感舒适',
  sleekText: '织带柔软透气，比胸带更自在。机身仅重9.7g，整机轻薄无感，够舒服。',
  flexible: '穿脱更轻松',
  flexibleText: '织带具备持久弹性，可自由调整大小，完美贴合手臂。穿脱更轻松，和尴尬说拜拜。',
  accuracy: '够准确，\n也够耐用。',
  sensor: '传感器',
  sensorText: '最新的多通道光电心率传感器，提供高质量的心率信号。传感器安装在坚固美观的机身内，并在防刮盖下受到保护，可以持续提供可靠准确的心率数据。',
  band: '出色的臂带',
  bandText: '光电心率传感器在紧贴皮肤时可以达到更好的监测效果。高驰心率臂带的弹性织带可以让传感器紧贴皮肤，防止外部光线进入，保持良好的心率信号。',
  noButtons: '无按键，\n更简单。',
  power: '持久续航',
  powerText: '心率臂带电量持久，充满电的情况下，可连续监测心率 38 小时，待机续航更可达 80 天。电量不足时，可用磁吸式USB充电线快速充电。',
  detection: '佩戴检测',
  detectionText: '高驰心率臂带支持佩戴智能识别，可实现自动开关机。每一次，臂带都会随你一起开启运动。',
  connections: '多设备连接',
  connectionsText: "\u9AD8\u9A70\u5FC3\u7387\u81C2\u5E26\u53EF\u4E0E\u4F60\u7684\u9AD8\u9A70\u624B\u8868\u53CAAPP\u5B9E\u73B0\u65E0\u7F1D\u8FDE\u63A5\uFF0C\u5E76\u53EF\u4EE5\u540C\u65F6\u4E0E\u4E09\u53F0\u84DD\u7259\u8BBE\u5907\u914D\u5BF9\uFF0C\u5305\u62EC\u975E\u9AD8\u9A70\u624B\u8868\uFF0C\u5176\u4ED6\u652F\u6301\u84DD\u7259\u8FDE\u63A5\u7684\u52A8\u611F\u5355\u8F66\u3001\n  \u5212\u8239\u673A\u3001\u7801\u8868\u7B49\u3002",
  connectionsText_mobile: '高驰心率臂带可与你的高驰手表及APP实现无缝连接，并可以同时与三台蓝牙设备配对，包括非高驰手表，其他支持蓝牙连接的动感单车、划船机、码表等。',
  why: '为什么选择臂带？',
  whyText: '光电心率传感器通过皮下毛细血管的血流情况来监测心率。心率臂带佩戴在毛细血管丰富的大臂上，为光电心率传感器提供了最佳的心率数据采集位置，使其准确性可以媲美传统的心率胸带。',
  box: '包装内含'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/chamonix.js
/* harmony default export */ const chamonix = ({});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/chamonix_edition.js
/* harmony default export */ const chamonix_edition = ({
  shareTitle: 'COROS APEX 2 Pro霞慕尼限量款',
  shareDesc: '专为长距离越野跑者量身打造',
  productName: 'COROS APEX 2 Pro霞慕尼',
  mobileProductName: 'COROS APEX 2 Pro',
  title: 'APEX 2 Pro\n霞慕尼限量款',
  intro: '霞慕尼小镇（Chamonix），是欧洲屋脊勃朗峰的出发点，也是无数户外运动爱好者的梦想地和精神家园，越野跑、滑雪、冰川徒步、高山攀岩……无数户外人在这里，挑战探险梦想。\nAPEX 2 Pro 霞慕尼限量款，向山而生，记录你的每一次勇气与挑战！',
  introMobile: '霞慕尼小镇（Chamonix），是欧洲屋脊勃朗峰的出发点，也是无数户外运动爱好者的梦想地和精神家园，越野跑、滑雪、冰川徒步、高山攀岩……无数户外人在这里，挑战探险梦想。APEX 2 Pro 霞慕尼限量款，向山而生，\n记录你的每一次勇气与挑战！',
  limited: '限量发布',
  limitedText: '全球限量 3000 台',
  alpine: '定制配色',
  alpineText: '站在勃朗峰顶，靛蓝色天空与云灰色的岩石冰川相遇，独特定制配色，这是一份来自霞慕尼的勇气专属符号。',
  alpineMobile: '定制配色',
  alpineMobileText: '站在勃朗峰顶，靛蓝色天空与云灰色的岩石冰川相遇，独特定制配色，这是一份来自\n霞慕尼的勇气专属符号。',
  mont: '向山而生',
  montText: '在霞慕尼，COROS 高驰用户累计了超过100万米的爬升。\nAPEX 2 Pro 将会给你带来更好的户外体验，帮助你\n在每一次挑战中，不断实现自我超越。',
  montMobile: '向山而生',
  montMobileText: '在霞慕尼，COROS 高驰用户累计了超过100万米的爬升。APEX 2 Pro 将会给你带来更好的户外体验，帮助你在每一次挑战中，不断实现自我超越。',
  reach: '越野越强',
  reachText: 'APEX 2 Pro 专为越野而生，满足不同的运动需求。更耐用的材质，更优秀的天线性能，新一代光电心率传感器，更长的电池寿命，\n带你越野越强。',
  reachMobile: '越野越强',
  reachMobileText: 'APEX 2 Pro 专为越野而生，满足不同的运动需求。更耐用的材质，更优秀的天线性能，新一代光电心率传感器，更长的电池寿命，\n带你越野越强。',
  noMatter: '你的户外伴侣',
  noMatterText: '暴风雨、高原反应、黑暗、脱水等，都是身处户外时，可能面临的挑战。\nAPEX 2 Pro 霞慕尼限量款 ，可以在每一次户外运动时，\n都为你保驾护航，让你安全去往每一个地方。',
  noMatterMobile: '你的户外伴侣',
  noMatterMobileText: '暴风雨、高原反应、黑暗、脱水等，都是身处户外时，可能面临的挑战。APEX 2 Pro 霞慕尼限量款 ，可以在每一次户外运动时，都为你保驾护航，让你安全去往每一个地方。',
  findYour: '去想去的地方',
  findYourText: 'APEX 2 Pro 霞慕尼限量款搭载全球离线地图、CP点、路线规划等功能，带你\n去你想去的地方，也能安全回来。光电旋钮，让你随心所欲放大缩小；\n触控屏幕，帮你看到更远的路。',
  findYourMobile: '去想去的地方',
  findYourMobileText: 'APEX 2 Pro 霞慕尼限量款搭载全球离线地图、CP点、路线规划等功能，带你去你想去的地方，也能安全回来。光电旋钮，让你随心所\n欲放大缩小；触控屏幕，帮你看到更远的路。',
  box: '包装内含',
  cable: '充电线',
  nylonWatchBand: '织物表带',
  shopAllColors: 'Shop All Colors'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/pace3.js
/* harmony default export */ const pace3 = ({
  productName: 'COROS PACE 3 竞技运动表',
  productNameShort: 'COROS PACE 3',
  valencia_productNameShort: 'COROS PACE 3 瓦伦西亚',
  trainingPlansAndWorkoutsLinks1WordPc: '训练计划',
  intro: '实力进阶，\n轻盈上场',
  introText: 'PACE 3 全面升级，每1克，都重磅。轻薄机身，带来舒适佩戴体验。\n双频全星座，全新多通道心率传感器，数据监测更精准。\n续航升级，电量加满，带来持久陪伴。',
  goTheDistance: '续航升级，\n电量加满',
  goTheDistanceText: 'PACE 3 的电池容量较上一代有所增加，续航时间也得到相应提升。',
  batteryAfter: '运动 10 小时后\n手表剩余电量',
  batteryAfterFootnote: '电量',
  t247Comfort: '全天佩戴\n无负担',
  t247ComfortText: 'PACE 3 轻薄机身，搭配织物腕带仅重约 30 g，\n戴上手腕，轻到没感觉，摆臂没负担。',
  followYourOwnPath: '去山里，野可以',
  followYourOwnPathText: 'PACE 3 支持路线导航，带你去想去的地方。',
  nextGenerationGps: 'GPS 定位，全新升级',
  nextGenerationGpsText: 'PACE 3 支持双频段接收五大卫星系统信号，天线接收信号效率提升，大幅提升定位精准度，记录真实运动轨迹，配速和距离都更准确。',
  lookGood: '好看又舒适',
  lookGoodText: 'PACE 3 提供多种颜色、多种材质的表带，选你喜欢的，更有范儿。',
  lookGoodFeatures1: ['硅胶腕带', '速干', '简单', '耐用'],
  lookGoodFeatures2: ['织物腕带', '柔软', '轻量', '舒适'],
  accurateActivityModes: '多种运动模式\n任你选择',
  accurateActivityModesText: 'PACE 3 支持跑步、越野跑、跳绳、徒步、骑行、游泳、雪场双板等多种运动模式，精准记录每一次运动。',
  routePlanningMadeEasy: '让探索更简单',
  routePlanningMadeEasyText: 'PACE 3 支持路线导航，可在 COROS APP 规划跑步、骑行、徒步路线，一键唤醒手表导航。',
  neverMissABeat: '掌控自己的心率',
  neverMissABeatText: 'PACE 3 搭载全新多通道心率传感器，捕捉运动心率更及时，帮你更好地控制训练\n强度；PACE 3 还可支持血氧检测（SpO2）功能。',
  neverMissABeatFeatures: [''],
  trainingDoesntEndAtBedtime: '休息得如何？\nPACE 3 告诉你',
  trainingDoesntEndAtBedtimeText: '佩戴舒适、续航持久，夜间睡眠佩戴也能为你提供精准数据。',
  trainingDoesntEndAtBedtimeFeatures: '监测清醒、快速眼动睡眠、浅睡眠、深睡眠等睡眠阶段。',
  trainingDoesntEndAtBedtimeFeatures2: '测量你的静息心率。',
  alwaysSeeTheBrightSide: '全天都清晰可见',
  alwaysSeeTheBrightSideFeatures: ['全时可视 MIP 显示屏，无惧户外强光，全天清晰可见', '1.2 英寸矿物玻璃屏幕', '全面触摸屏支持滑动、点触操作', '支持夜光模式，黑暗中也清晰可见'],
  sweatSwimShower: '暴汗\n游泳\n冲凉',
  sweatSwimShowerText: 'PACE 3 支持 50 米防水，游个泳，洒洒水。',
  moreThanAWatch: '不止是一块手表',
  moreThanAWatchText: 'COROS 还为你免费提供 EvoLab 体能管理系统和 Training Hub 训练管理平台。',
  trainingPlansAndWorkouts: '科学训练，有计划，\n更有分析',
  trainingPlansAndWorkoutsText: 'COROS 提供多种基础的马拉松训练计划，跟着计划练，\n进步没问题。',
  corosCoaches: '体能管理系统',
  corosCoachesText: 'COROS APP 搭载 EvoLab 全新体能管理系统，帮你更全面\n了解自身优劣势，也帮你更好地解决：本周/今天怎么练、\n练得怎么样等问题。',
  trainingHub: 'TRAINING HUB\n训练管理平台',
  trainingHubText: 'COROS的免费训练管理平台，一站整合数据看板和训练管理。参加线上训练营地，打造专属于你的训练课程。',
  beyondYourTraining: '更多妙技，都在手里',
  beyondYourTrainingText: '音乐播放、计步、卡路里、睡眠监测、消息提醒、闹钟、支付宝离线支付、\n蓝牙遥控相机……丰富日常功能，智能生活随手就来。除蓝牙连接外，\n还支持 Wi-Fi 连接，固件更新、数据同步，都更快速。',
  whatsInTheBox: '包装内含',
  chargingCable: '充电线',
  watchBand: '表带',
  shareTitle: 'COROS PACE 3 竞技运动表',
  shareDesc: '竞技运动表',
  homeProductPageDesc: '竞技运动表',
  watchInfoHeader: '竞技运动表',
  weight: '重（含织物表带）',
  width: '厚',
  inStandardGpsMode: '*标准GPS模式',
  trainingPlansAndWorkoutsLinks1Word: '训练计划',
  trainingPlansAndWorkoutsLinks2Word: '',
  corosCoachesLinksWord: '',
  trainingPlansAndWorkoutsLinks1Link: 'https://cn.coros.com/plans',
  trainingPlansAndWorkoutsLinks2Link: '',
  corosCoachesLinksLink: '',
  mobile_intro: '实力进阶，轻盈上场',
  mobile_introText: 'PACE 3 全面升级，每1克，都重磅。轻薄机身，带来舒适佩戴体验。双频全星座，全新多通道心率传感器，数据监测更精准。续航升级，电量加满，带来持久陪伴。',
  mobile_goTheDistance: '续航升级\n电量加满',
  mobile_goTheDistanceText: 'PACE 3 的电池容量较上一代有所增加，续航时间也得到相应提升。',
  mobile_batteryAfter: '运动 10 小时后\n手表剩余电量',
  mobile_batteryAfterFootnote: '电量',
  mobile_t247Comfort: '全天佩戴\n无负担',
  mobile_t247ComfortText: 'PACE 3 轻薄机身，搭配织物腕带仅重约 30 g，\n戴上手腕，轻到没感觉，摆臂没负担。',
  mobile_followYourOwnPath: '去山里，野可以',
  mobile_followYourOwnPathText: 'PACE 3 支持路线导航，带你去想去的地方。',
  mobile_nextGenerationGps: 'GPS 定位，全新升级',
  mobile_nextGenerationGpsText: 'PACE 3 支持双频段接收五大卫星系统信号，天线接收信号效率提升，大幅提升定位精准度，记录真实运动轨迹，配速和距离都更准确。',
  mobile_lookGood: '好看又舒适',
  mobile_lookGoodText: 'PACE 3 提供多种颜色、多种材质的表带，选你喜欢的，更有范儿。',
  mobile_lookGoodFeatures1: ['硅胶腕带', '速干', '简单', '耐用'],
  mobile_lookGoodFeatures2: ['织物腕带', '柔软', '轻量', '舒适'],
  mobile_accurateActivityModes: '丰富的运动模式\n任你选择',
  mobile_accurateActivityModesText: 'PACE 3 支持跑步、越野跑、跳绳、徒步、骑行、游泳、雪场双板等多种运动模式，精准记录每一次运动。',
  mobile_routePlanningMadeEasy: '让探索更简单',
  mobile_routePlanningMadeEasyText: 'PACE 3 支持路线导航，可在 COROS APP 规划跑步、骑行、徒步路线，一键唤醒手表导航。',
  mobile_neverMissABeat: '掌控自己的心率',
  mobile_neverMissABeatText: 'PACE 3 搭载全新多通道心率传感器，捕捉运动心率更及时，帮你更好地控制训练强度；PACE 3 还可支持血氧检测（SpO2）功能。',
  mobile_neverMissABeatFeatures: [''],
  mobile_trainingDoesntEndAtBedtime: '休息得如何？\nPACE 3 告诉你',
  mobile_trainingDoesntEndAtBedtimeText: '佩戴舒适、续航持久，夜间睡眠佩戴也能为你提供精准数据。',
  mobile_trainingDoesntEndAtBedtimeFeatures: '监测清醒、快速眼动睡眠、浅睡眠、深睡眠等睡眠阶段。',
  mobile_trainingDoesntEndAtBedtimeFeatures2: '测量你的静息心率。',
  mobile_alwaysSeeTheBrightSide: '全天都清晰可见',
  mobile_alwaysSeeTheBrightSideFeatures: ['全时可视 MIP 显示屏，无惧户外强光，全天清晰可见', '1.2 英寸矿物玻璃屏幕', '全面触摸屏支持滑动、点触操作', '支持夜光模式，黑暗中也清晰可见'],
  mobile_sweatSwimShower: '暴汗、游泳、冲凉',
  mobile_sweatSwimShowerText: 'PACE 3 支持 50 米防水，游个泳，洒洒水。',
  mobile_moreThanAWatch: '不止是一块手表',
  mobile_moreThanAWatchText: 'COROS 还为你免费提供 EvoLab 体能管理系统和 Training Hub 训练管理平台。',
  mobile_trainingPlansAndWorkouts: '科学训练\n有计划，更有分析',
  mobile_trainingPlansAndWorkoutsText: 'COROS 提供多种基础的马拉松训练计划，跟着计划练，进步没问题。',
  mobile_corosCoaches: '体能管理系统',
  mobile_corosCoachesText: 'COROS APP 搭载 EvoLab 全新体能管理系统，帮你更全面了解自身优劣势，也帮你更好地解决：本周/今天怎么练、练得怎么样等问题。',
  mobile_trainingHub: 'TRAINING HUB\n训练管理平台',
  mobile_trainingHubText: 'COROS的免费训练管理平台，一站整合数据看板和训练管理。参加线上训练营地，打造专属于你的训练课程。',
  mobile_beyondYourTraining: '更多妙技，都在手里',
  mobile_beyondYourTrainingText: '音乐播放、计步、卡路里、睡眠监测、消息提醒、闹钟、支付宝离线支付、蓝牙遥控相机……丰富日常功能，智能生活随手就来。除蓝牙连接外，还支持 Wi-Fi 连接，固件更新、数据同步，都更快速。',
  mobile_weight: '重',
  mobile_width: '厚',
  mobile_inStandardGpsMode: '*标准GPS模式'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/pace3_ek.js
/* harmony default export */ const pace3_ek = ({
  introText: '埃鲁德·基普乔格 Eliud Kipchoge，跑步史上最伟大的运动员之一，他怀揣着「跑者乐土」的梦想，\n携手 COROS 高驰共同推出了这款全新的 PACE 3 限量款手表。',
  dream: '基普乔格的\n「跑者乐土」梦想',
  dreamText: '基普乔格的伟大，有人说是在于他创造了人类\n 2 小时内完成马拉松的神话，也有人说是在于\n他数不清的奖牌和成就。但他的伟大，已无需\n用成绩衡量，更重要的是他始终在用自己的力\n量传递跑步文化。\n\n跑步，超越了运动的界限。它让人们在困境中\n寻找力量，彼此支持、鼓励，共同创造一个更\n加健康、积极、团结的「跑者乐土」\n——A RUNNING WORLD。',
  words: ['A running world is a healthy world. ', 'A running world is a wealthy world. ', 'A running world is a peaceful world. ', 'A running world is a joyful world.', 'My dream is to make this world a running world.', '', '（保持英文动态轮转，但需加一行静态的中文文字翻译）', '', '“我希望这个世界变成一个「跑者乐土」。这是一个人人都能感受到健康、富足、平和、愉悦的世界。”', '——Eliud Kipchoge'],
  inspiredByHome: '灵感来源',
  inspiredByHomeText: 'PACE 3 基普乔格限量款的设计灵感，源自基普乔格的故乡——肯尼亚。\n\n这款手表选择大地色系中的经典卡其色，融合红、绿、棕的非洲民族特色\n多边形元素，蕴含着自然、自由、热情和希望，表带标签上更承载了基普\n乔格共建「跑者乐土」的梦想和精神。',
  trainLikeAPro: '实力跑者之选',
  trainLikeAProText: '使用 PACE 3 手表，您可以免费获取\n完整的 COROS 训练解决方案，高驰\n如何帮助顶尖运动员训练，甚至打破\n世界纪录？有什么详细的功能？还有\n什么更多配色选择？\n请点击下方入口了解。',
  clickToLearnMore: '点击了解 PACE 3 更多信息',
  yourBestTrainingPartner: '你的最佳训练拍档',
  iconsText: ['极致轻量', '超长续航', '双频全星座定位', '丰富运动模式', '多通道\n心率传感器', '科学训练\n体能系统'],
  limitedRelease: '全球限量发售',
  limitedReleaseText: 'PACE 3 基普乔格限量款，全球限量发售，一起把这一份特别的「跑者乐土」精神，戴上手腕。\n\n开售时间：12 月 7 日 10:00\n开售平台：天猫、京东COROS官方旗舰店',
  mobile_introText: '埃鲁德·基普乔格 Eliud Kipchoge，跑步史上最伟大的\n运动员之一，他怀揣着「跑者乐土」的梦想，\n携手 COROS 高驰共同推出了这款\n全新的PACE 3 限量款手表。',
  mobile_dream: '基普乔格的\n「跑者乐土」梦想',
  mobile_dreamText: '基普乔格的伟大，有人说是在于他创造了人类 2 小时内完成马拉松的神话，也有人说是在于他数不清的奖牌和成就。但他的伟大，已无需用成绩衡量，更重要的是他始终在用自己的力量传递跑步文化。\n\n跑步，超越了运动的界限。它让人们在困境中寻找力量，彼此支持、鼓励，共同创造一个更加健康、积极、团结的「跑者乐土」——A RUNNING WORLD。',
  mobile_words: ['A running world is a healthy world. ', 'A running world is a wealthy world. ', 'A running world is a peaceful world. ', 'A running world is a joyful world.', 'My dream is to make this world a running world.', '', '（保持英文动态轮转，但需加一行静态的中文文字翻译）', '', '“我希望这个世界变成一个「跑者乐土」。这是一个人人都能感受到健康、富足、平和、愉悦的世界。”', '——Eliud Kipchoge'],
  mobile_inspiredByHome: '灵感来源',
  mobile_inspiredByHomeText: 'PACE 3 基普乔格限量款的设计灵感，源自基普乔格的故乡——肯尼亚。\n\n这款手表选择大地色系中的经典卡其色，融合红、绿、棕的非洲民族特色多边形元素，蕴含着自然、自由、热情和希望，表带标签上是更承载了基普乔格共建「跑者乐土」的梦想和精神。',
  mobile_trainLikeAPro: '实力跑者之选',
  mobile_trainLikeAProText: '使用 PACE 3 手表，您可以免费获取完整的 COROS 训练解决方案，高驰\n如何帮助顶尖运动员训练，甚至打破世界纪录？有什么详细的功能？还有什么更多配色选择？\n请点击下方入口了解。',
  mobile_clickToLearnMore: '点击了解 PACE 3 更多信息',
  mobile_yourBestTrainingPartner: '你的最佳\n训练拍档',
  mobile_iconsText: ['极致轻量', '超长续航', '双频全星座定位', '丰富运动模式', '多通道\n心率传感器', '科学训练\n体能系统'],
  mobile_limitedRelease: '全球限量发售',
  mobile_limitedReleaseText: 'PACE 3 基普乔格限量款，全球限量发售，一起把这一份特别的「跑者乐土」精神，戴上手腕。\n\n开售时间：12 月 7 日 10:00\n开售平台：天猫、京东COROS官方旗舰店',
  shareTitle: 'COROS PACE 3 限量联名竞技运动表',
  shareDesc: '竞技运动表',
  productNameShort: 'COROS PACE 3 EK',
  productMenuTitle: 'COROS PACE 3 限量联名竞技运动表'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/pod2_2024.js
/* harmony default export */ const pod2_2024 = ({
  intro: '突破 GPS 局限',
  introText: 'COROS POD 2 是一款轻量、防水的多功能运动传感器，将其\n连接 COROS 手表，通过检测脚步动作、身体晃动幅度，能够\n提供更精准的实时数据、更详细的跑姿数据及分析，让你拥有\n更好的运动体验。',
  allAboutAccuracy: '为精准数据而生',
  allAboutAccuracyText: 'COROS POD 2 解决了 GPS 手表常见的技术局限，比如配速响应延迟、GPS 信号弱、室内数据不准的情况。\n将 COROS POD 2 固定在鞋上，实时捕捉脚步动作，提升数据灵敏性，全面保证数据精准度。',
  sensitiveInstantPace: '配速实时响应。',
  sensitiveInstantPaceText: 'COROS POD 2 内置传感器，监测脚步动作，秒速级响应配速变化，COROS 手表的配速提醒功能，让你能准确保持在目标配速区间。间歇跑、节奏跑，真实配速\n更有掌控感。',
  accurateIndoorData: '室内运动。',
  accurateIndoorDataText: '室内跑步机运动，无法通过 GPS 技术来准确记录跑步速度、距离。而 COROS POD 2 的九轴传感器，搭配运动算法，可自动监测脚步动作、步幅、步频、前进方向等数据，让手表显示的距离更精准，你的\n每一步都算数。',
  preciseOnTheHills: '户外越野。',
  preciseOnTheHillsText: '等强配速是 COROS 特有的数据指标，能将你在不同坡度奔跑的配速实时转化为标准平路配速，减少外部因素影响，更好地衡量运动强度。佩戴 COROS POD 2，能让手表上显示的等强配速更准确灵敏。点击这里，了解等强配速更多信息。',
  preciseOnTheHillsTextLinkText: '点击这里',
  preciseOnTheHillsTextLink: 'https://faq.coros.com/help/article/63fda25558fc343aff6b0210',
  understandYourRunningForm: '了解你的跑姿',
  understandYourRunningFormText: '你是地面型跑者还是空中型跑者？固定 COROS POD 2 \n在腰部，可以帮助你进行跑姿测试，了解自身跑姿信息，\n并获取跑姿改善建议。\n\n点击了解更多跑姿测试信息',
  understandYourRunningFormTextLinkText: '点击了解更多跑姿测试信息',
  understandYourRunningFormTextLink: 'https://faq.coros.com/help/article/65b8e02f8aa4ae92772b682e',
  monitorOutsideTemperature: '监测环境温度',
  monitorOutsideTemperatureText: 'COROS POD 2 支持实时监测天气温度，了解跑步过程中\n的环境变化。在不同季节训练时，可以结合温度数据进行\n跑步情况分析。',
  simpleSecure: '你的训练好帮手',
  simpleSecureText: 'COROS POD 2 超长续航、轻量、防水等性能，能适应各种环境下的训练需求，帮助运动员更精准地记录运动情况。',
  longBatteryLife: '超长续航',
  longBatteryLifeText: 'COROS POD 2 运动记录续航可达 25 小时，充电盒能额外提供 5 次\n充电机会，最长可达 150 小时运动续航。出门训练好几天，\n回家还有电。',
  data1: '25',
  data1Unit: '小时',
  data1Text: '单次满电续航',
  data2: '150',
  data2Unit: '小时',
  data2Text: '搭配充电盒续航',
  lightweightWeatherproof: '轻量 & 防水',
  lightweightWeatherproofText: 'COROS POD 2 传感器仅重 5.6g，轻到没感觉，它可承受从 -10°C 到 60°C \n的温度，防水性能高达 30 米防水。',
  data3: '5.6',
  data3Unit: 'g',
  data3Text: '传感器仅重',
  data4: '30',
  data4Unit: '米',
  data4Text: '防水性能',
  setupMadeEasy: '设置简单',
  setupMadeEasyText: 'COROS POD 2 可固定在鞋上或夹在腰部，当不运动时，将自动进入休眠状态。',
  pair: '连接',
  pairText: '用 COROS APP 扫包装二维码，按提示连接设备，手表将自动连接 COROS POD 2。',
  clip: '佩戴',
  clipText: '将 COROS POD 2 固定在鞋面或后腰正中间。',
  go: '出发',
  goText: '现在，出发去跑步吧。',
  box: '包装内含',
  boxText: 'COROS POD 2 主机、充电盒、鞋夹、腰夹、充电线、说明书。',
  generalFaQs: 'POD 2 更多问题解答',
  generalFaQsLink: 'https://faq.coros.com/help/d/POD%202',
  runningFormTestFaQs: '跑姿测试更多信息',
  runningFormTestFaQsLink: 'https://faq.coros.com/help/article/65b8e02f8aa4ae92772b682e',
  frequentlyAskedQuestions: '',
  mobile_intro: '突破 GPS 局限',
  mobile_introText: 'COROS POD 2 是一款轻量、防水的多功能运动传感\n器，将其连接 COROS 手表，通过检测脚步动作、身体\n晃动幅度，能够提供更精准的实时数据、更详细的跑姿\n数据及分析，让你拥有更好的运动体验。',
  mobile_allAboutAccuracy: '为精准数据而生',
  mobile_allAboutAccuracyText: 'COROS POD 2 解决了 GPS 手表常见的技术局限，比如配速\n响应延迟、GPS 信号弱、室内数据不准的情况。将 COROS \nPOD 2 固定在鞋上，实时捕捉脚步动作，提升数据灵敏性，\n保证数据精准度。',
  mobile_sensitiveInstantPace: '配速实时响应。',
  mobile_sensitiveInstantPaceText: 'COROS POD 2 内置传感器，监测脚步动作，秒速级响应配速变化，COROS 手表的配速提醒功能，让你能准确保持在目标配速。间歇跑、节奏跑，\n真实配速更有掌控感。',
  mobile_accurateIndoorData: '室内运动。',
  mobile_accurateIndoorDataText: '室内跑步机运动，无法通过 GPS 技术来准确记录跑步速度、距离。而 COROS POD 2 的九轴传感器，搭配运动算法，可自动监测脚步动作、步幅、步频、前进方向等数据，让手表显示的距离更精准，你的每一步都算数。',
  mobile_preciseOnTheHills: '户外越野。',
  mobile_preciseOnTheHillsText: '等强配速是 COROS 特有的数据指标，能将你在不同坡度奔跑的配速实时转化为标准平路配速，减少外部因素影响，更好地衡量运动强度。佩戴 COROS POD 2，能让手表上显示的等强配速更准确灵敏。\n点击这里更多了解等强配速。',
  mobile_preciseOnTheHillsTextLinkText: '点击这里',
  mobile_preciseOnTheHillsTextLink: 'https://faq.coros.com/help/article/63fda25558fc343aff6b0210',
  mobile_understandYourRunningForm: '了解你的跑姿',
  mobile_understandYourRunningFormText: '你是地面型跑者还是空中型跑者？将 COROS POD2 固定\n在腰部，可以帮助你进行跑姿测试，了解自身跑姿信息，\n获取跑姿改善建议。\n\n点击了解更多跑姿测试信息',
  mobile_understandYourRunningFormTextLinkText: '点击了解更多跑姿测试信息',
  mobile_understandYourRunningFormTextLink: 'https://faq.coros.com/help/article/65b8e02f8aa4ae92772b682e',
  mobile_monitorOutsideTemperature: '监测环境温度',
  mobile_monitorOutsideTemperatureText: 'COROS POD 2 支持实时监测天气温度，了解跑步过程中的环境变化。在不同季节训练时，可以结合温度数据分析跑步情况。',
  mobile_simpleSecure: '你的训练好帮手',
  mobile_simpleSecureText: 'COROS POD 2 超长续航、轻量、防水等性能，能适应各种\n环境下的训练需求，帮助运动员更精准地记录运动情况。',
  mobile_longBatteryLife: '超长续航',
  mobile_longBatteryLifeText: 'COROS POD 2 运动记录续航可达 25 小时，充电盒能额外\n提供 5 次充电机会，最长可达 150 小时运动续航。\n出门训练好几天，回家还有电。',
  mobile_data1: '25',
  mobile_data1Unit: '小时',
  mobile_data1Text: '单次满电续航',
  mobile_data2: '150',
  mobile_data2Unit: '小时',
  mobile_data2Text: '搭配充电盒续航',
  mobile_lightweightWeatherproof: '轻量 & 防水',
  mobile_lightweightWeatherproofText: 'COROS POD 2 传感器仅重 5.6g，轻到没感觉，它可承受\n从 -10°C 到 60°C 的温度，防水性能高达 30 米防水。',
  mobile_data3: '5.6',
  mobile_data3Unit: 'g',
  mobile_data3Text: '传感器仅重',
  mobile_data4: '30',
  mobile_data4Unit: '米',
  mobile_data4Text: '防水性能',
  mobile_setupMadeEasy: '设置简单',
  mobile_setupMadeEasyText: 'COROS POD 2 可固定在鞋上或夹在腰部，当不运动时，\n将自动进入休眠状态。',
  mobile_pair: '连接',
  mobile_pairText: '用 COROS APP 扫包装二维\n码，按提示连接设备，手表将\n自动连接 COROS POD 2。',
  mobile_clip: '佩戴',
  mobile_clipText: '将 COROS POD 2 固定在鞋面\n或后腰正中间。',
  mobile_go: '出发',
  mobile_goText: '现在，出发去跑步吧。',
  mobile_box: '包装内含',
  mobile_boxText: 'COROS POD 2 主机、充电盒、鞋夹、腰夹、\n充电线、说明书',
  mobile_generalFaQs: '更多问题解答',
  mobile_generalFaQsLink: 'https://faq.coros.com/help/d/POD%202',
  mobile_runningFormTestFaQs: '跑姿测试更多信息',
  mobile_frequentlyAskedQuestions: '',
  shareTitle: 'COROS PACE 3 限量联名竞技运动表',
  shareDesc: '竞技运动表',
  productNameShort: 'COROS POD 2',
  productMenuTitle: 'COROS PACE 3 限量联名竞技运动表',
  faq: '帮助中心'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/vertix2s.js
/* harmony default export */ const vertix2s = ({
  intro: '伟大探险\n需要\n最好的装备',
  introText: '不论是攀登世界最高峰，还是跑最长的超级马拉松，VERTIX 系列始终为追求极致的运动者们而准备。最新一代 VERTIX 2S，陪你一起探索伟大。',
  easyToOperate: '操作简单',
  easyToOperateText: '大屏触摸屏、磁悬浮旋钮，让你在各种条件下，即使佩戴着手套，都能轻松开启 COROS VERTIX 2S 的所有功能。',
  madeToBeTough: '坚硬机身',
  madeToBeToughText: '蓝宝石镜面、钛合金面圈，坚硬机身设计更耐磨，陪你一起面对户外运动、探险和生活带来的挑战。',
  builtForTheExtreme: '为极限而生',
  builtForTheExtremeText: '无惧严苛环境，COROS VERTIX 2S 工作温度为 -30°C 至 50°C，防水性能为 10 ATM（100米）。',
  powerToEndure: '超长续航',
  powerToEndureText: 'VERTIX 系列手表以超长续航而闻名，只需充一次电，就能全程记录探险家们的攀登珠峰、超长越野赛之旅，见证一次又一次耐力的突破。',
  pinPointAccuracy: '精准定位',
  pinPointAccuracyText: 'VERTIX 2S 支持双频全星座定位系统，配备针对岩壁环境专门设计的独家 GPS 定位算法，无论你是在山中、峡谷还是岩面，都能提供精准定位。',
  effortlessNavigation: '户外导航',
  effortlessNavigationText: 'COROS APP 支持路线规划，将创建或保存的路线导入手表，可开启路线导航、循迹返航，带你抵达目的地或者安全回到起点。同时运动拓展屏功能，可将手表上的导航界面投屏至手机，拖动、放大复杂路线更简单。',
  fitForEverything: '全面训练分析',
  fitForEverythingText: '世界顶尖运动员都在用的 COROS 训练解决方案，帮你达到最佳体能水平。新一代多通道心率传感器，提供更精准的训练数据。COROS App 将持续记录你的进步，还能获取训练建议，帮你更科学、简单地规划训练。',
  preparedForAnything: '户外探险更有准备',
  preparedForAnythingText: '暴风雨天气、高原反应、夜间生存和脱水是在户外可能面临的情况。COROS VERTIX 2S 能帮你更好地准备应对状况，确保安全地进行户外活动。',
  readyForAdventure: '时刻准备\n去冒险',
  readyForAdventureText1: '多种运动模式，均能准确追踪运动数据，每项运动都有为了特殊需求而设计的特别功能。',
  readyForAdventureText2: 'COROS VERTIX 2S 强大的户外功能，能帮你更好地保证安全、抵达终点、发挥最好的运动表现。',
  ultraRunning: '超长跑\n高度曲线\nCP 点提醒\n路线偏航提醒\n补给提醒',
  climbing: '攀岩\n器械攀岩、攀冰、冰岩混合难度系统\n室内攀岩冲坠检测\n闪攀、红点、视攀记录\n创建攀岩训练课程与计划',
  snowSports: '雪上运动\n自动计圈\n距离、爬升/下降、速度\n雪场自动换项（可识别乘坐缆车）',
  mountaineering: '登山\n高原血氧检测\n暴风雨预警\n循迹返航\n日落/日出时间',
  trackMoreThanTraining: '了解你的身体状态',
  trackMoreThanTrainingText: '运动训练只是提升体能的一部分。通过详细的睡眠监测、HRV、健康快测等功能，可帮助了解身体恢复情况，降低受伤风险。',
  offWristConvenience: '解放双手',
  offWristConvenienceText: '为专业攀登者而设计，COROS VERTIX 2S 快挂扣，能帮你把手表固定在腰间，时刻查看训练数据，解放双手去攀岩。',
  performanceWithStyle: '运动有风尚',
  performanceWithStyleText: 'COROS VERTIX 2S 标配 1+1 硅胶、织物表带，满足你的多种需求。同时，我们任一款 26mm 的表带都可以适配 VERTIX 2S，展现你的独特运动风格。',
  nextLevelMetrics: '训练进阶之选',
  nextLevelMetricsText: '想要获取超越 GPS 运动手表准度的数据，可以选择 COROS 的进阶配件产品。',
  hrm: 'COROS 心率臂带',
  pod2: 'COROS POD 2',
  sync_ConnectAndControl: '同步、连接与遥控',
  sync_ConnectAndControlText: 'COROS 手表支持连接多种运动 APP 同步数据，如 Strava、Nike Run Club、Apple Health、Health Connect。支持在手表获取短信、电话提醒；保持蓝牙连接，可以通过查找设备寻找手机或手表。通过手表，还可控制使用 GoPro 和 Insta360 运动相机。',
  what_sInTheBox: '包装内含',
  what_sInTheBoxText: '手表包装盒采用纸浆模塑技术，再生原料可回收，质感与环保并存。取除内衬，可重复使用，收纳充电线、配件等物品。',
  gpsAdventureWatch: '户外旗舰探险表',
  viewAll: '了解所有',
  close: '关闭',
  temperatures: '-30°C\n50°C',
  power: '电量',
  viewMore: '了解更多',
  effortlessNavigationInfo1: '转弯提醒',
  effortlessNavigationInfo2: '高度曲线',
  effortlessNavigationInfo3: 'CP 点信息',
  effortlessNavigationInfo4: '保存位置',
  effortlessNavigationInfo5: '路线偏航提醒',
  preparedForAnythingInfo1: '补给提醒',
  preparedForAnythingInfo2: '日出日落时间',
  preparedForAnythingInfo3: '暴风雨预警',
  preparedForAnythingInfo4: '紧急援助',
  preparedForAnythingInfo5: '高原适应性',
  preparedForAnythingInfo6: '夜间模式',
  comingSoon: '紧急援助：该功能将在后续更新中发布上线。',
  hrmText: '心率臂带实时监测真实心率，跑步、骑行间歇训练，心率数据更准确及时。织带柔软透气，比胸带更自在。',
  pod2Text: 'POD 2 内置传感器监测脚步动作，能突破 GPS 局限，秒速级响应配速变化，记录真实跑步距离，获取更多跑步数据。佩戴在腰间还可进行跑姿测试。',
  fitFor1: '训练量评估',
  fitFor2: '训练体能',
  fitFor3: '训练负荷',
  sleepTracking: '睡眠监测',
  overnightHrv: 'HRV 评估',
  wellnessCheck: '健康快测',
  competitorGpsTrack: '（国内不用3D轨迹的部分，暂时没有这个功能）',
  corosGpsTrack: '（国内不用3D轨迹的部分，暂时没有这个功能）',
  seoTitle: '户外旗舰探险表 COROS VERTIX 2S',
  seoDesc: '你的户外探险理想之选。',
  tommyCaldwell: 'Tommy Caldwell',
  kilianJornet: 'Kilian Jornet',
  sallyMcRae: 'Sally McRae',
  readTheStory: '点击阅读'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/cn/index.js




































/* harmony default export */ const cn = ({
  vertix2s: vertix2s,
  pod2_2024: pod2_2024,
  pace3_ek: pace3_ek,
  pace3: pace3,
  chamonix_edition: chamonix_edition,
  chamonix: chamonix,
  hrm: hrm,
  carabiner: carabiner,
  kilianEdition: kilianEdition,
  aboutPage: about,
  contact: contact,
  athleteDetails: athleteDetails,
  plans: plans,
  pod: pod,
  pod2: pod2,
  trainingHub: trainingHub,
  terms: terms,
  evolab: evolab,
  products: products,
  pace2: pace2,
  specs: specs,
  apex: apex,
  apex2: apex2,
  common: common,
  map: map,
  vertix2: vertix2,
  progress: progress,
  vertix: vertix,
  apexPro: apexPro,
  home: home,
  convos: convos,
  athlete: athlete,
  login: login,
  datalist: datalist,
  careers: careers,
  yourproduct: yourproduct,
  coros_convos: '高驰会',
  coros_about: '品牌介绍',
  'Pro Athletes': '精英运动员',
  CommonHeaderMenu1name: '产品介绍',
  CommonHeaderMenu1nav1: 'VERTIX 2',
  CommonHeaderMenu1nav2: 'VERTIX',
  CommonHeaderMenu1nav3: 'APEX Pro',
  CommonHeaderMenu1nav4: 'APEX 2',
  CommonHeaderMenu1nav5: 'PACE 2',
  CommonHeaderMenu1nav6: 'PACE 2 EK',
  CommonHeaderMenu1nav7: 'POD',
  CommonHeaderMenu1nav8: 'Accessories',
  CommonHeaderMenu1nav9: 'Others',
  CommonHeaderMenu1nav10: 'COROS PACE',
  CommonHeaderMenu1nav11: 'SafeSound-MOUNTAIN',
  CommonHeaderMenu1nav12: 'SafeSound-ROAD',
  CommonHeaderMenu1nav13: 'SafeSound-URBAN',
  CommonHeaderMenu1nav14: 'OMNI',
  CommonHeaderMenu1nav15: 'LINX',
  CommonHeaderMenu1nav16: 'COROS PACE 2 Speed Series',
  CommonHeaderMenu1nav17: 'APEX 2 (Pro)',
  CommonHeaderMenu1nav18: 'COROS APEX 2 Pro',
  CommonHeaderMenu1nav19: 'COROS PACE 2 Molly',
  CommonHeaderMenu1nav20: 'COROS PACE 2 Molly Seidel Edition',
  CommonHeaderMenu2name: '社区故事',
  CommonHeaderMenu2nav1: '品牌故事',
  CommonHeaderMenu2nav2: '精英运动员',
  CommonHeaderMenu2nav3: 'TRADE IN PROGRAM',
  CommonHeaderMenu2nav4: 'VERIFIED WORKOUT',
  CommonHeaderMenu2nav5: 'TRAINING PLANS',
  CommonHeaderMenu3name: '服务支持',
  CommonHeaderMenu3nav1: '运动记录',
  CommonHeaderMenu3nav2: '常见问题',
  CommonHeaderMenu3nav3: '售后服务',
  CommonHeaderMenu3nav7: '购买产品',
  CommonHeaderMenu4name: 'ABOUT',
  CommonHeaderMenu4nav1: 'ABOUT US',
  CommonHeaderMenu4nav2: 'IN THE NEWS',
  CommonHeaderMenu4nav3: 'CONTACT',
  CommonHeaderMenu4nav4: 'EVENTS',
  CommonHeaderMenu4nav5: 'CAREERS',
  CommonHeaderMenu5name: 'STORE LOCATOR',
  CommonHeaderMenu6name: '语言',
  CommonFooterDealerLogin: 'Dealer Login',
  CommonFooterDealerReturnRefund: '售后服务',
  CommonFooterDealerWatchComparison: '产品对比',
  CommonFooterDealerTermsConditions: '服务条款',
  CommonFooterDealerReleaseNotes: 'Release Notes',
  CommonFooterDealerPrivacyPolicy: '隐私条款',
  CommonFooterDealerWheretoDownload: '如何下载',
  CommonFooterDealercopyright: '© 2021 | COROS Wearables, Inc.',
  CommonFootercontact: '加入我们',
  Commonshopnow: '立即购买',
  Commonspeecs: '规格',
  Commoncomparisonchart: 'COROS 手表对比表',
  SignupforNews: 'Sign up for News',
  compwaterresistance: '防水等级',
  compscreenmaterial: '外观材质',
  compphysicalsize: '产品尺寸',
  compquickreleasefitband: '表带尺寸',
  compdispsize: '屏幕尺寸',
  select: '请选择',
  "continue": '继续'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/vertix.js
/* harmony default export */ const en_vertix = ({
  name: 'COROS VERTIX',
  accessories: 'ACCESSORIES',
  readMore: 'READ MORE',
  'Rugged YET premium': {
    title: 'Rugged YET premium',
    desc: 'A featherlight, corrosion free titanium frame and bezel showcase our commitment to durability. The quality of the VERTIX allows you to attack the world’s harshest elements without sacrificing your style.'
  },
  'Virtually scratch proof screen': {
    title: 'Virtually scratch proof screen',
    desc: 'Sapphire glass screen with Diamond-Like Coating gives VERTIX the most resilient screen available.'
  },
  'The ONLY GPS watch with a 150-meter waterproof rating': {
    title: 'The ONLY GPS watch with a 150-meter waterproof rating',
    desc: '15 ATM rated: withstands pressures equivalent to a depth of 150 meters.'
  },
  'Ultra-light Durability': {
    title: 'Ultra-light Durability',
    desc: 'VERTIX body weighs just 54 grams, making it the lightest watch in its class.'
  },
  'VERTIX is your Sherpa': {
    title: 'VERTIX is your Sherpa',
    desc: '24/7 blood oxygen monitoring With Altitude Mode, VERTIX is the only watch to provide daily acclimatization evaluation and suggests when it is safe to climb higher.'
  },
  'Industry leading performance in extreme cold': {
    title: 'Industry leading performance in extreme cold',
    desc: 'Works down to -4°F/-20°C with less than a 30% depreciation in battery performance VERTIX lasts for 21 hours in GPS mode under -22°F/-30°C extreme testing.'
  },
  'EASY use in ANY condition': {
    title: 'EASY use in ANY condition',
    desc: 'Completely new engineered Digital Dial for one finger control, even with thick climbing gloves or under water.'
  },
  'Track your path': {
    title: 'Track your path',
    desc: 'Now supports offline mapping, and includes: Landscape, Topo and Hybrid modes. By using touch screen and the digital dial, users can explore our new mapping function. You can track your path over maps. This is a completely revamped navigation experience on your wrist.'
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: 'With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and onto your watch. With the new training mode, your best efforts are well within your reach.'
  },
  'Light up the Night’s Sky': {
    title: 'Light up the Night’s Sky',
    desc: 'Night Mode – a new always on mode for nighttime activities. While manual options still remain for quick bursts of the backlight, Night Mode, leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark, but dim enough to maintain superior battery performance throughout your run or ride even needed all night long. Don’t worry, it turns off automatically when you finish you workout, or at sunrise.'
  },
  'Stay on Track': {
    title: 'Stay on Track',
    desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run on it.'
  },
  'Ice Breaker': {
    title: 'Ice Breaker',
    desc: 'Break the Ice in any group setting with this one of a kind watch.'
  },
  'Stand out in a Crowd': {
    title: 'Stand out in a Crowd',
    desc: 'The exclusive azure titanium bezel is a showstopper while the transparent fibre case creates a watch that is as elegant on your wrist as it is powerful on your adventure.'
  },
  'Handled With Care': {
    title: 'Handled With Care',
    desc: 'While strong enough to handle the harshest elements mother nature throws at it, the translucent fibre frame is hand assembled to ensure the best possible quality.'
  },
  batteryLife: {
    title: 'Battery life beyond your imagination',
    desc: 'With battery life strong enough for a Himalayan expedition or a thru-hike on the John Muir Trail all without a charge.',
    reqular: {
      title: '45d',
      desc: '45 days of regular use'
    },
    gps: {
      title: '60h',
      desc: '60 hours full GPS mode'
    },
    ultraMax: {
      title: '150h',
      desc: '150 hours UltraMax mode'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/products.js
/* harmony default export */ const en_products = ({
  pageMeta: {
    title: 'Discover COROS Premium GPS Watches',
    keywords: 'Marathon ultra cross country race smart watch notifications mountaineering calories sleep tracking waterproof distance miles heart rate monitor GPS Running Swimming Triathlon Training Camping Hiking Exercise Fitness Tracker Compass',
    description: 'Premium GPS sport watches built for runners, adventurers and all athletes. COROS leads the revolution of athletic training through advanced technology.'
  },
  learnMore: 'LEARN MORE',
  compareEntrance: 'Watch Comparison Chart',
  pageTitle: 'coros gps watches',
  pageSubtitle: 'and workout sensors',
  pageDesc: "Every GPS watch in the COROS lineup has been designed, tested, and perfected for the athlete, by the athlete. Our watches combine high-grade hardware with innovative technology to provide endurance athletes with the gear they rely on in the world's most extreme environments.",
  pace2: {
    name: 'COROS PACE 2',
    header: 'gps sport watch',
    desc: 'For multi-sport athletes\nwho go fast and far'
  },
  pace2_ek: {
    name: 'COROS PACE 2 EK',
    header: 'eliud kipchoge edition',
    desc: "Eliud's watch inspires to train a little harder, and race a little faster"
  },
  apex2: {
    name: 'COROS APEX 2',
    header: 'gps outdoor watch',
    desc: 'For mountain athletes who\ntrain hard and go far'
  },
  apex2pro: {
    name: 'COROS APEX 2 Pro',
    header: 'gps outdoor watch',
    desc: 'For mountain athletes who\ntrain hard and go far'
  },
  apex_42: {
    name: 'COROS APEX',
    header: 'premium multisport gps watch',
    desc: 'For outdoor athletes\nwho travel light and fast'
  },
  apex_46: {
    name: 'COROS APEX',
    header: 'premium multisport gps watch',
    desc: 'For outdoor athletes\nwho travel light and fast'
  },
  apex_pro: {
    name: 'COROS APEX Pro',
    header: 'gps outdoor watch',
    desc: 'For endurance athletes\nin rugged environments'
  },
  vertix: {
    name: 'COROS VERTIX',
    header: 'gps adventure watch',
    desc: 'Our original watch\nfor extreme adventurers'
  },
  vertix2: {
    name: 'COROS VERTIX 2',
    header: 'gps adventure watch',
    desc: 'For athletes who\nwant it all'
  },
  pod: {
    name: 'COROS POD',
    header: 'performance optimization device',
    desc: 'Advanced running metrics to\noptimize your performance'
  },
  pod2: {
    name: 'COROS POD 2',
    header: 'performance optimization device',
    desc: 'Next level accuracy\nfor all runners'
  },
  hrm: {
    name: 'COROS HR Monitor',
    header: 'Optical Heart Rate Armband',
    desc: 'Precise data from the\ncomfort of your arm'
  },
  referral: {
    title: 'COROS Referral Program',
    pageDesc: 'Love your COROS watch? Share the joy and refer friends or family members to earn a free COROS watch band for both of you when they order any COROS watch.',
    welcomeTitle: 'congratulations',
    descs: ["You\u2019ve been referred by a friend to receive a free watch band with purchase of any COROS watch below. Simply add a watch and your band of choice to your cart to redeem it for free. Your friend will also receive a free band promo code 30 days after your purchase.", "Start training with COROS today!"],
    faq: [{
      title: "Does this offer work with other promotions?",
      desc: "Unfortunately not. This offer can't be combined with other promotions."
    }, {
      title: "Why is there no discount applied to the watch band?",
      desc: "Please click on the referral link your friend shared with you again and add a watch and a watch band to the cart. If the issue remains, please contact <a href=\"mailto:support@coros.com\" class=\"underline hover:underline\">support@coros.com</a> for further assistance."
    }, {
      title: "How do I share this awesome offer with my friends?",
      desc: "We are glad you love COROS! After joining the COROS family, you will receive your unique referral link via email to share with friends."
    }]
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/plans.js
/* harmony default export */ const en_plans = ({
  plan: 'PLAN',
  roadRunning: 'Running',
  getItNow: 'get it now',
  bannerTitle: 'athlete training plans',
  running: {
    '6-Week Beginner Base Plan': {
      title: '6-Week Beginner Base Plan',
      desc: "A 6-week plan designed for newer runners looking to build a base through run/walk intervals. The 6 weeks will be made up of walk/runs, running, and bodyweight strength training. This plan will take users through a gradual progression of training and help them to feel comfortable running farther and for longer periods of time. After the 6 weeks of following this plan, you will have the ability to follow a run specific plan if you prefer. "
    },
    '6-Week Beginner/Intermediate Base Plan': {
      title: '6-Week Beginner/Intermediate Base Plan',
      desc: "A 6-week designed to help guide runners who are looking to build a base or return to running. The plan is made up of time-based runs, power walks, and strength training. This plan will take users through a gradual progression of training and help them to feel comfortable running farther and for longer periods of time. Workouts can be moved around in your training calendar as needed. After the 6 weeks of following this plan, you will have the ability to follow a run specific plan if you prefer. Have fun with it and remember to take it one workout at a time! "
    },
    '12-Week Beginner Half-Marathon Training Plan': {
      title: '12-Week Beginner Half-Marathon Training Plan',
      desc: "This 12-week half-marathon plan focuses on building volume for a potential first half-marathon. Runners should be prepared to run 5x/week from 15-30 miles. You will find some short bursts of higher-intensity as an introduction, but most of the sessions should be focused on getting comfortable running for longer distances. All workouts are based on HR for an optimal perception of your own intensity. If you have any questions, please feel free to reach out to us via coach@coros.com and we will be happy to answer any training question you may have."
    },
    '12-Week Intermediate Half-Marathon Training Plan': {
      title: '12-Week Intermediate Half-Marathon Training Plan',
      desc: "This 12-week half-marathon plan focuses on building volume through aerobic and tempo runs. Runners should be prepared to run 5x/week from 15-30 miles. You will find some short bursts of higher-intensity, tempo intervals, and longer aerobic runs. All workouts are based on HR for an optimal perception of your own intensity. If you have any questions, please feel free to reach out to us via coach@coros.com and we will be happy to answer any training question you may have."
    },
    '12-Week Advanced Half-Marathon Training Plan': {
      title: '12-Week Advanced Half-Marathon Training Plan',
      desc: "This 12-week half-marathon plan focuses on improving your half-marathon pace and comfort at higher intensities. Runners should be prepared to run 6x/week from 20-45 miles. You will find some short bursts of higher-intensity, tempo/threshold intervals, and longer aerobic runs. All workouts are based on HR for an optimal perception of your own intensity. If you have any questions, please feel free to reach out to us via coach@coros.com and we will be happy to answer any training question you may have."
    },
    '20-Week Beginner Marathon Training Plan': {
      title: '20-Week Beginner Marathon Training Plan',
      desc: "This 20-week heart rate based plan focuses on building volume for a first marathon at the end of the plan. Runners should be prepared to run 5x/week from 15 to 45 miles. Thursday and Sunday workouts are the specific marathon sessions, but feel free to switch them around based on your schedule. Because the plan is based on your Threshold HR Zones, we encourage you to complete a Running Fitness Test at the beginning to ensure you are training in the right zones. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '20-Week Intermediate Marathon Training Plan': {
      title: '20-Week Intermediate Marathon Training Plan',
      desc: "This 20-week heart rate based plan focuses on building volume as well as improving threshold intensity before a marathon at the end of the plan. Runners should be prepared to run 5x/week from 15 to 45 miles. Thursday and Sunday workouts are the specific higher-intensity sessions, but feel free to switch them around based on your schedule. Because the plan is based on your Threshold HR Zones, we encourage you to complete a Running Fitness Test at the beginning to ensure you are training in the right zones. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '20-Week Advanced Marathon Training Plan': {
      title: '20-Week Advanced Marathon Training Plan',
      desc: "This 20-week heart rate based plan focuses on improving your threshold pace through high-intensity workouts and high volume. Runners should be prepared to run 6x/week from 20 to 60 miles. Tuesday and Friday workouts are the specific higher-intensity sessions, but feel free to switch them around based on your schedule. Because the plan is based on your Threshold HR Zones, we encourage you to complete a Running Fitness Test at the beginning to ensure you are training in the right zones. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '16-Week Beginner Marathon Training Plan': {
      title: '16-Week Beginner Marathon Training Plan',
      desc: "This 16-week heart rate based plan focuses on building volume for a first marathon at the end of the plan. Runners should be prepared to run 5x/week from 15 to 45 miles. Wednesday and Sunday workouts are the specific marathon sessions, but feel free to switch them around based on your schedule. Because the plan is based on your Threshold HR Zones, we encourage you to complete a Running Fitness Test at the beginning to ensure you are training in the right zones. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '16-Week Intermediate Marathon Training Plan': {
      title: '16-Week Intermediate Marathon Training Plan',
      desc: "This 16-week heart rate based plan focuses on building volume as well as improving threshold intensity before a marathon at the end of the plan. Runners should be prepared to run 5x/week from 15 to 45 miles. Wednesday and Sunday workouts are the specific higher-intensity sessions, but feel free to switch them around based on your schedule. Because the plan is based on your Threshold HR Zones, we encourage you to complete a Running Fitness Test at the beginning to ensure you are training in the right zones. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '16-Week Advanced Marathon Training Plan': {
      title: '16-Week Advanced Marathon Training Plan',
      desc: "This 16-week heart rate based plan focuses on improving your threshold pace through high-intensity workouts and high volume. Runners should be prepared to run 6x/week from 20 to 60 miles. Tuesday and Friday workouts are the specific higher-intensity sessions, but feel free to switch them around based on your schedule. Because the plan is based on your Threshold HR Zones, we encourage you to complete a Running Fitness Test at the beginning to ensure you are training in the right zones. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '10-Week Half-Marathon Mountain Training Plan': {
      title: '10-Week Half-Marathon Mountain Training Plan',
      desc: "This 10-week trail running plan focuses on improving your aerobic base as well as being able to recovery at higher intensity on trails. The key workouts of this plan occur on Wednesday and Sunday. Runners should have access to hilly terrain for an optimal progression and be able to run at least 5x/week for up to a total weekly training time of 8 hours. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '10-Week 50k Mountain Training Plan': {
      title: '10-Week 50k Mountain Training Plan',
      desc: "This 10-week trail running plan focuses on improving your effort pace threshold as well as increasing your time on feet prior to the 50k ultra. The key workouts of this plan occur on Thursday and Sunday. Runners should have access to hilly terrain for an optimal progression and be able to run at least 5x/week for up to a total weekly training time of 11 hours. Do not hesitate to reach out to us via coach@coros.com for feedback and insights on your training journey!"
    },
    '12-week Intermediate Mountain Training Plan': {
      title: '12-week Intermediate Mountain Training Plan',
      desc: "Kilian Jornet's 12-week Intermediate plan is designed to help athletes develop their stamina, and ability to perform over longer distanced. With a mix of intensity, long aerobic runs, and a focus on elevation, athletes targeting their trail events or rolling terrain courses will prepare accordingly for their goals. "
    },
    '12-Week Advanced Mountain Training Plan': {
      title: '12-Week Advanced Mountain Training Plan',
      desc: "Kilian Jornet's 12-week Advanced plan is designed to build athlete's stamina, and ability to perform over longer durations. With a mix of intensity, long aerobic runs, and a focus on elevation, athletes targeting their trail events or rolling terrain courses will prepare accordingly for their goals. There are multiple long days in this plan of 4+ hours, so it is best for those looking to target longer/ultra events. "
    },
    '5k Beginner Training Plan': {
      title: '5k Beginner Training Plan',
      desc: "This 6-week training plan is for users who wish to begin running with a safe and progressive training plan towards a first 5km. No previous experience is needed in order to begin this plan. This plan includes 3 sessions per week with a focus on cadence and breathing. For assistance, send us an email at coach@coros.com and we will be happy to assist you through the process!"
    },
    '10k Beginner Training Plan': {
      title: '10k Beginner Training Plan',
      desc: "This 6-week training plan is for users who wish to begin running with a safe and progressive training plan towards a first 10km. No previous experience is needed in order to begin this plan, but be aware that weekly volume varies from 15 to 30km. It includes 3 sessions per week with a focus on cadence, breathing, form, and an introduction to higher intensity. For assistance, send us an email at coach@coros.com and we will be happy to assist you through the process!"
    },
    '12-Week 100K Ultra Training Plan': {
      title: '12-Week 100K Ultra Training Plan',
      desc: "For athletes looking to start this training plan, we recommend they have at least 70 Base Fitness and average above 30 miles/week running. If you are not at this level yet, please follow one of our other training plans to reach this point. This plan is designed to build athletes fitness over the course of 12 weeks and have them ready to run a 100k ultra-marathon. This plan includes strength and run sessions to ensure athletes have the muscular endurance required. The first 4 weeks aim to build a good base around easy intensity runs. Weeks 5-8 get more specific to the race by introducing Effort Pace workouts. Find your ft/mile ratio of elevation gain for the race and aim to replicate this ratio in your runs. Weeks 9-10 are maximal volume before tapering on weeks 11-12."
    },
    '12-Week Molly Seidel Marathon Plan': {
      title: '12-Week Molly Seidel Marathon Plan',
      desc: "This plan is designed to showcase key workouts Molly Seidel uses to prepare for her marathon races. Along with key workouts provided by Molly's Coach, Jonathon Green, this plan will also ensure athletes build the proper volume necessary to run a marathon to their potential. If you're looking to train like the pro's, this is a great plan to guide you every step of the way. For a more individualized approach, please visit verdetrackclub.com and reach out to Coach Green for assistance!"
    },
    '2:45-3:00 12-Week Marathon Plan': {
      title: '2:45-3:00 12-Week Marathon Plan',
      desc: "This is an aggressive training plan that starts athletes in the 30-40 mile/week range and builds up towards 60 miles/week. Workouts consist of mid-week interval sessions, base volume, and marathon specific paced long runs. Athletes starting this program should have a base volume of 30-40 miles a week. Athletes will build awareness of 6:18-6:52/mile pace which will have them running a sub 3 hour marathon. "
    },
    '3:15-3:35 12-Week Marathon Plan': {
      title: '3:15-3:35 12-Week Marathon Plan',
      desc: "This training plan is designed to build athletes volume up towards 50 miles/week while preparing them to run a 3:15-3:35 marathon. Athletes will complete a mix of threshold intervals mid-week, aerobic endurance base miles for volume, and marathon specific workouts to dial in their pacing. Athletes should have a foundation of 30-40 miles/week before starting this plan. "
    },
    '4:00-4:30 12-Week Marathon Plan': {
      title: '4:00-4:30 12-Week Marathon Plan',
      desc: "This plan starts at 26 miles/week and builds up to 40/week before your taper into the marathon. The majority of this plan has athletes running at their aerobic endurance heart rate, or specific marathon pacing for a 4:00-4:30 marathon finish (9:09-10:17/mile pace). Athletes should be able to run 25-30 miles/week before starting this program. As athletes progress through the training plan, they should utilize the marathon specific workouts to gain a realistic expectation of race day. If you're able to perform all specific workouts below 9:09/mile pace, then perhaps a sub 4 marathon is in your future. If you're struggling to hold 10:17/mile pace, then perhaps above 4:30 is more realistic. Feel free to adjust the specific days as needed, while leaving the aerobic endurance days in place!"
    },
    'Beginner Marathon Plan': {
      title: 'Beginner Marathon Plan',
      desc: "This training plan is designed for the individual starting a new training block and looking to run their first marathon! Perhaps you ran a 10k, or 1/2 marathon in the past and want to jump up in distance. This plan starts at 13 miles/week and builds up to 50 miles/week by week 18. Designed to build in a safe and efficient manner, athletes can rest easy knowing they will be on track to run 26.2 miles after the 20 weeks. If you are currently above the training volume of the first few weeks, maintain your currently volume until you reach the point where the plan has more miles. Simply continue on from there and enjoy the results! Be sure to share your journey with us and let us know how your training is going! #exploreperfection"
    },
    '6-Week Mountain Running Training Plan': {
      title: '6-Week Mountain Running Training Plan',
      desc: "6-week mountain running training designed to increase your ability to sustain higher intensities on hilly and technical terrain. This plan focuses on longer days out at low/moderate intensities. It contains a 2-block buildup without taper time, but highly specific to a wide variety of mountain projects. Athletes should be prepared for 6 running days up to 80km (50miles) weekly. Access to hilly terrain is mandatory."
    },
    '12-Week 100 Mile Ultra Training Plan': {
      title: '12-Week 100 Mile Ultra Training Plan',
      desc: "For athletes looking to start this training plan, we recommend they have at least 80 Base Fitness and average above 40 miles/week running. If you are not at this level yet, please follow one of our other training plans to reach this point. This plan is designed to build athletes fitness over the course of 12 weeks and have them ready to run a 100 mile ultra-marathon. The plan consists of strength and running to ensure athletes have the muscular strength and endurance required. Key workouts each week are the long runs on the weekends. If you need to shift your schedule around that is fine, but focus on the long days and building your aerobic endurance!"
    },
    '10-Week Return to Running Training Plan': {
      title: '10-Week Return to Running Training Plan',
      desc: "The goal of this training plan is to help guide users to a return to running. This plan will be comprised of walks, walk/runs, and running. This plan will take users through a gradual progression of training and help them return to steady running after 10 weeks of training. Be sure to start at your own pace and comfort level. Training days can be shifted around in your calendar as needed. This plan is designed to help you fit training back into your lifestyle. After the 10 weeks of following this plan, you will have the ability to follow a run specific plan if you prefer. Be sure to keep this fun and within the parameters prescribed. The best way to reach the goal of 10 weeks is through consistency and manageable training. You got this! Enjoy the journey!"
    },
    '8-Week Off-Season Training Plan': {
      homeRecommendedTitle: '8 Week\nOff-Season Training Plan',
      title: '8-Week Off-Season Training Plan',
      desc: 'This plan is designed to keep athletes moving through the off-season. We will incorporate 15-25miles/week of running along with cross-training activities. Athletes can mix in any cross-training activity where "cycling" is labeled. The overall goal will be to have athletes healthy and motivated when they reach their next training season. Be sure to keep things relatively easy during this portion of the year. This is meant to help you recover while staying fit.'
    },
    '8 Week Threshold Development': {
      title: '8 Week Threshold Development',
      desc: 'The goal of this training plan is to increase time at threshold and VO2 throughout the weeks. Weekly volume will stay relatively consistent with only an increase in intensity serving to create change. Athletes should be prepared for 5-6 days/week running with 25-40 miles/week volume. Emphasis each week will be on key threshold or VO2 sets. Base runs are meant to maintain volume and help athletes recover. Do not over exceed easy run paces. At the end of these 8 weeks, please perform a 5k test. If your threshold pace changed, you should see new zones and be able to re-apply this training plan if more threshold work is desired.'
    },
    '12 Week Run Speed Development': {
      title: '12 Week Run Speed Development',
      desc: 'This plan is designed for runners with a weekly base mileage of 25-40 miles (40-65km). Throughout this plan, the weekly volume will stay around 25-30 miles each week. Runners are allowed to add more base volume as needed, but focus should remain on speed workouts. Due to the nature of training for run speed, it is recommended that athletes take extra recovery days if their legs are sore of fatigued from prior workouts. By the end of these 12 weeks, runners should see an increase in their threshold, v02, and running efficiency. Performing a 5k, 10k, or half marathon following this plan should result in faster times.'
    },
    '50k Trail Run Training Plan': {
      title: '50k Trail Run Training Plan',
      desc: 'This training plan starts at 25 miles/week and builds to 60+ miles by the end. The first 10 weeks of this plan are designed to build athletes aerobic endurance. The final 10 weeks are specific to trail running demands and meant to peak fitness before competition. Due to all trail events being different, it is recommended that athletes run trails or in conditions that will mimic race day. This plan will ensure your fitness is ready, but individuals should seek out vertical gain or elements to help maximize their readiness. As always, if a runner needs additional days off, please take them. Key days in this plan are Wednesdays and the weekends. You should make those your top priority. Enjoy!'
    },
    'Beginner Sprint Distance Triathlon Plan': {
      title: 'Beginner Sprint Distance Triathlon Plan',
      desc: 'A 12-week plan designed to help users complete a 800 meter swim, 12.4 mile bike, and 3.1 mile run. This plan will utilize heart rate training to ensure proper and efficient training. Athletes should understand basic swimming technique before beginning. Athletes should also be able to train 4-5 times a week for 30-45 minutes a day prior to starting this plan.'
    },
    '12 Week Half Marathon HR Plan': {
      homeRecommendedTitle: 'Half Marathon\n12 Week Training',
      title: '12 Week Half Marathon HR Plan',
      desc: 'This plan is designed for both beginners and intermediate runners. Runners should be comfortable running 4 times per week and have a weekly volume of 10-15 miles. The plan will utilize heart rate zones to ensure proper and efficient training. By the end of the plan, the user will be running 30 miles per week and will have increased their aerobic endurance and ability to sustain tempo efforts.'
    },
    'Beginner Runner Base Plan (Imperial)': {
      title: 'Beginner Runner Base Plan (Imperial)',
      desc: 'A 10-week plan designed for a beginner to intermediate runner, building up to 30 miles per week. Assuming pace is maintained throughout the week, the longer runs are intended to naturally feel harder than other days, which is expected. This plan is in imperial.'
    },
    '12 Week 5000m Training Plan (Metric)': {
      title: '12 Week 5000m Training Plan (Metric)',
      desc: 'A 12-week plan created by US Olympian Kim Conley. Runners should be prepared to run 6-7 times a week. Saturday is a rest day, but can run up to 60 minuts if needed. This plan is in metric.'
    },
    'Beginner Runner Base Plan (Metric)': {
      title: 'Beginner Runner Base Plan (Metric)',
      desc: 'A 10-week plan designed for a beginner to intermediate runner, building up to 30 miles per week. Assuming pace is maintained throughout the week, the longer runs are intended to naturally feel harder than other days, which is expected. This plan is in metric.'
    },
    'Sub-3:15 Marathon': {
      title: 'Sub-3:15 Marathon',
      desc: 'An 8-week plan designed for 3:30 marathon runners with high aerobic endurance to run a sub 3:15 marathon. Runners should be prepared to run 5-6 days a week.'
    },
    'Sub-25 5K': {
      title: 'Sub-25 5K',
      desc: 'A 14-week plan designed for runners who want to run a 5k in 25 minutes. Runners should be prepared to run 5 days a week.'
    },
    'Competitive 10K': {
      title: 'Competitive 10K',
      desc: 'A 12-week plan designed for competitive runners to train for 10K races. Runners should be prepared to run between 30-40 miles per week.'
    },
    'Half Marathon': {
      title: 'Half Marathon',
      desc: 'A 15-week plan designed for competitive runners to train for a half marathon. Runners should be prepared to run between 55-70 miles per week.'
    },
    Marathon: {
      title: 'Marathon',
      desc: 'A 12-week plan designed for runners who want to reach their peak form for marathon. If you have been running fewer than 30 miles per week, you should follow the base training plan for building up to 30 miles per week.The primary focus of this plan is to improve your lactate pace through tempo, lactate intervals, and long progression runs. Secondary priorities include increasing long runs and overall mileage.'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/contact.js
/* harmony default export */ const en_contact = ({
  pageTitle: 'CONTACT US',
  companyName: 'COROS Wearables, Inc.',
  mail: 'Mail',
  mailValue: "\n    3 Peters Canyon Rd\n    Suite 100\n    Irvine, CA 92606\n    USA",
  phone: 'Phone',
  phoneValue: '+1 (855) 934-4411',
  businessHours: 'Business Hours',
  businessHoursValue: 'Monday - Friday 9AM - 6PM Pacific Time',
  salesSupport: 'Sales and Partner Support',
  salesSupportValue: 'sales@coros.com',
  consumerSupport: 'Consumer Support',
  consumerSupportValue: 'support@coros.com',
  careerOpportunities: 'Career Opportunities',
  careerOpportunitiesValue: 'careers@coros.com',
  mediaRelations: 'Media Relations',
  mediaRelationsValue: 'press@coros.com',
  distributors: 'COROS Global Distributors',
  area: {
    hk: 'Hong Kong',
    au_nz: 'Australia & New Zealand',
    ar: 'Argentina',
    BeNeLux: 'BeNeLux',
    bg: 'Bulgaria',
    br: 'Brazil',
    ca: 'Canada',
    cl: 'Chile',
    co: 'Colombia',
    ec: 'Ecuador',
    ee_lv_lt: 'Estonia, Latvia, Lithuania',
    fr: 'France',
    de: 'Germany',
    gt: 'Guatemala',
    gr: 'Greece',
    id: 'Indonesia',
    il: 'Israel',
    it: 'Italy',
    in_np_bd: 'India',
    jp: 'Japan',
    my: 'Malaysia',
    mt: 'Malta',
    mu: 'Mauritius',
    mx: 'Mexico',
    me: 'Middle East',
    nordics: 'Nordics (Sweden, Norway, Finland, Denmark, Iceland)',
    pl: 'Poland, Hungary, Czech, Slovakia, Slovenia, Croatia, Serbia',
    ph: 'Philippines',
    qa: 'Qatar',
    ro: 'Romania',
    ru: 'Russia',
    sg: 'Singapore',
    za: 'South Africa',
    es: 'Spain, Portugal, Andorra',
    ch: 'Switzerland',
    th: 'Thailand',
    uk: 'United Kingdom',
    vn: 'Vietnam',
    ve: 'Venezuela'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/warranty.js
/* harmony default export */ const warranty = ({
  title: 'Limited Warranty',
  desc: 'A performance sports technology company that helps athletes train to be their best.',
  pageTitle: 'WARRANTY',
  'getting warranty service': {
    title: 'Getting Warranty Service',
    content: "COROS products are manufactured to the highest quality standards possible. However, on the rare occurrence should one suffer quality issues, we stand behind our products. COROS offers a 2-year warranty from the activation date for Watches and a 6-month warranty for PODs. Helmets are covered by a 1-year warranty. All Accessories are covered by a 90-day warranty.\n\n        Should you have an issue with your product resulting from a manufacturing defect, COROS will help replace your product or remedy your issue.\n\n        Simply reach out to us via phone or e-mail to assist in completing a warranty claim and we\u2019ll assist in getting the warranty completed in a timely fashion."
  },
  returns: {
    title: 'Returns',
    content: 'COROS offers a 30-day money back guarantee return policy for coros.com orders only. If for any reason you are unsatisfied, you may return your purchase within 30 days of the delivery date for a full refund of the purchase price. Products must be returned in their original physical condition with all accessories and packaging. COROS does not cover shipping costs for products that are returned for a refund. Please contact customer support for return procedures and approvals. Orders outside of the return window will not be accepted or approved. Approved refund takes up to 5 business days to show up on your bank account. Original shipping costs and customs are not refundable.'
  },
  'out-of-warranty service': {
    title: 'Out-Of-Warranty Service',
    content: 'COROS offers repair/replacement services for out-of-warranty watches at the below cost.',
    extraContent: 'The replacement unit has a 180-day warranty and will be new or equivalent to new in performance and reliability.\n\nClick here for Out-Of-Warranty Service & Policy details.'
  },
  warranty: {
    title: 'Warranty',
    content: "COROS Wearables Inc. (\"COROS\") warrants that the Product (defined below) delivered hereunder to the original purchaser (\"Original Purchaser\") from COROS.com or a COROS Authorized Reseller (each an \"Authorized Reseller\") will be free from material and workmanship defects that adversely affect the performance of the Product under normal use, pursuant to the terms outlined below. This Limited Warranty is only valid for the Original Purchaser, is non-transferable and does not extend to any used Products or Products not purchased from COROS.com or an Authorized Reseller.\n\n        Products Covered and Warranty Length\n\n        For purposes of this Limited Warranty, \"Products\" and \"Product\" mean the individual COROS product(s) as described below by the following prefix:"
  },
  'Limited Warranty Term': {
    title: 'Limited Warranty Term',
    content: "The length of the Limited Warranty is limited to two years from the original date of purchase for watches, one year for helmets and ninety days for accessories.\n\n        Nothing in the Product instructions or information shall be construed to create an express warranty of any kind with respect to the Products. No agent, employee, dealer, representative or reseller is authorized to modify or extend this Limited Warranty or to make binding representations or claims, whether in advertising, presentations or otherwise, on behalf of COROS regarding the Products or this Limited Warranty.\n\n        Nothing in this Limited Warranty affects any statutory rights of consumers that cannot be waived or limited by contract. This Limited Warranty gives you specific legal rights, and you may also have other rights which vary from State to State or Province to Province.\n\n        If any portion of this Limited Warranty is held to be illegal or unenforceable, such partial illegality or unenforceability shall not affect the enforceability of the remainder of the Limited Warranty.\n\n        These Limited Warranty terms shall be governed in all respects by the laws of the United States and of the State of California, without regard to the conflicts of laws principles thereof. The United Nations Convention on Contracts for International Sale of Goods is specifically disclaimed. The state and/or federal courts residing in Orange County, California shall have exclusive jurisdiction over any dispute or claim arising out of these Limited Warranty terms."
  },
  'not covered': {
    title: 'What is not covered by this Limited Warranty',
    content: "This Limited Warranty applies only to Products used in accordance with this Limited Warranty and COROS's published documentation, and does not cover:\n\n        Products that are modified outside of factory specifications and/or not in factory condition.\n\n        Products with modification to the serial number and/or factory identification labels whether removed, relocated, falsified, defaced, damaged, altered or made illegible.\n\n        Damages to the body of the product whether cut, scratched, warped, bent, cracked, dented or broken.\n\n        Any damages to the components, hardware and/or assembly of the Products including but not limited to damages caused as a result of neglect, abuse, accidents, misuse, or unusual physical, electrical or electromechanical stress.\n\n        Any missing hardware, components and/or assemblies of the Product.\n\n        Cosmetic damages deemed outside of reasonable usage caused by deep scratches, cuts, cracks, dents, discoloration, neglect, dropping or mishandling the Product.\n\n        Products that are exposed to liquid, liquid residue or excessive humid environments resulting in rust, moisture, dampness, stains, corrosion or liquid spills on components, hardware or electronics. Burns or component flare-ups as a result of a liquid accident or spill.\n\n        Direct usage of paint, submersion of the power supply in oil, use of adhesives or glues on any part of the Product, usage of solder to the Product, electronics and/or component modification.\n\n        Exposure to cigarette tar residue, dampness, sand, dirt or excessive debris.\n\n        Products that are rendered non-functional due to an accident, collision with an object or tool, use of excessive force, neglect for care, exposure to fire or abnormal heat, flooding, dirt, windstorms, lightning, earthquakes, excessive weather conditions, or other acts of God, theft, blown fuses, improper use of any electrical source, or overloaded electrical circuits.\n\n        Defects or damage resulting from the use of a 3rd party product in conjunction or connection with accessories, products, software or secondary peripheral equipment not furnished for the usage with or approved for the Product by COROS.\n\n        Defects or damages resulting from improper testing, operation, maintenance, installation, service, or adjustment not furnished or approved by COROS.\n\n        The use of inadequate shipment packaging or use of inadequate packing material resulting in damages to the Product while in transit with Original Purchaser's or Second-Hand Purchaser's shipping courier.\n\n        Products purchased from unauthorized resellers or dealers, which include, without limitation, online marketplaces such as eBay (except for COROS's official eBay store), Amazon (except for COROS's official Amazon Marketplace store), and other online auction and/or marketplace websites. If you are unsure of whether a reseller is an Authorized Reseller, please contact COROS for confirmation.\n\n        Exclusive Remedy and Limited Refunds\n\n        Except as specifically provided below, your sole remedy for a defective Product shall be the repair or replacement of such defective Product in accordance with the terms and conditions of this Limited Warranty.\n\n        COROS only offers refunds for products purchased directly from its official website COROS.com if such products are returned within 30 days of delivery.\n\n        For products not purchased at COROS.com, refund claims, if any, are subject to the Authorized Reseller's refund policy and must be processed through the original Authorized Reseller's return policy. COROS will not honor any refunds offered through Authorized Resellers.\n\n        COROS does not cover shipping costs for products that are returned for a refund."
  },
  'how to obtain': {
    title: 'How to obtain Warranty Service',
    content: 'To obtain warranty service under this Limited Warranty, you must contact COROS to receive a Return Merchandise Authorization ("RMA") number prior to returning the product to COROS in accordance with the COROS RMA Process. Please contact COROS Technical support at +1 (855) 934-4411 or contact us by email at support@coros.com.'
  },
  'product warranty replacement': {
    title: 'Product Warranty Replacement',
    content: "COROS reserves the right to verify the validity of your warranty and your request for warranty service.\n\n        COROS reserves the right to invoice you for shipping fees and service charges for any incomplete, damaged or modified Product that is returned to COROS and requires repair or replacement or that is not otherwise covered under this Limited Warranty. Service charges are variable based upon the actual material and labor cost reasonably necessary to replace missing or return modified parts to their original factory condition.\n\n        Products sent in for RMA will be repaired and returned or replaced with a thoroughly tested recertified product of equal or greater performance.\n\n        This COROS Limited Warranty begins from the date that the Product was originally purchased, as verified by a proof of purchase provided and/or confirmed by an Authorized Reseller.\n\n        All products returned to Original Purchasers or Second-Hand Purchasers from COROS's RMA department are thoroughly tested recertified products. Replacement parts and/or Products may include new or refurbished parts or Products and are warranted only until the expiration of the original warranty period. Replacement parts and/or Products will meet the standard of performance and reliability of a new Product or part of the same model, however, such Products and/or parts may have small scratches, small dents, other cosmetic defects, or noticeable use.\n\n        If an RMA is necessary within 30 days of the delivery date of a new in box Product, a new in box OEM replacement will be sent to the Original Purchaser in return, subject to availability."
  },
  'shipping to coros for warranty': {
    title: 'Shipping to COROS for Warranty'
  },
  'warranty replacement shipping': {
    title: 'Warranty Replacement Shipping',
    content: "COROS will ship to the confirmed address at the time your RMA is approved.\n\n        If your warranty replacement is unable to be delivered due to the address being invalid or delivery is not made due to lack of access, no known address, security obstacles or gated areas, you are responsible for a redirect or re-ship fee which will vary depending on your region. You must contact COROS prior to shipment for assistance in avoiding this charge. COROS is not responsible for packages delivered to an outdated address.\n\n        If the product is returned to COROS due to non-delivery you will be responsible to pay for any additional shipping charges for reshipment. COROS encourages you to review your shipping address prior to submitting any RMA request.\n\n        All RMA replacements will state \"Warranty Replacement\" on the package to assist in avoiding any taxes, duties and/or brokerage fees through customs or otherwise. COROS is not responsible for any fees charged by the destination country's government body, brokers or other third party. COROS is not responsible for any unclaimed package that is held by your governing body for clearance from customs or otherwise that becomes abandoned as a result of the refusal of clearance compliance.\n\n        Postal mail is not recommended for shipping any COROS product. If your package is received with physical damage, a claim cannot be processed due to the limitations of postal services, and the package will be returned to sender without alternative options.\n\n        We reserve the right to update this Limited Warranty\n\n        We have and will continue to make policy changes over time. Make sure you read this document carefully and check back for updates. COROS reserves the right to change this policy without notice. Last update March 18, 2020."
  },
  registration: ' WARRANTY REGISTRATION',
  contact: {
    us: {
      area: 'United States',
      phone: '+1 (855) 934-4411 (9am-6pm PST, M-F)',
      email: 'support@coros.com',
      desc: 'Should you need support outside the United States & Canada, please reach out to the information above and we’ll direct you to the best localised support.'
    },
    uk: {
      area: 'United Kingdom',
      address: '2pure Ltd, 4 Royston Road, Deans Industrial Estate, Livingston, West Lothian, EH54 8AH, United Kingdom',
      phone: '+0844 811 2001',
      email: 'support@coros.com',
      question: 'consumersupport@2pure.co.uk',
      desc: 'Should you need support outside the United States & United Kingdom, please reach out to support@coros.com and we’ll direct you to the best localised support.'
    },
    ca: {
      area: 'Canada',
      phone: '+1-438-794-8360 (9am-5pm ET)',
      email: 'contact@abritu-sport.com'
    }
  },
  checkWarranty: {
    title: 'Check Device Coverage - COROS Support',
    desc: 'Select your device type and enter 6-digit device ID to review your COROS warranty status. ',
    snGuide: {
      title: "Can't find the Serial Number?",
      desc: 'Each COROS product has a 6-digit device ID. Most products also have a 10-digit serial number. Below, you will find different ways to locate them.',
      tips: [{
        title: 'Device ID',
        tips: ['Once connected to the COROS app → Profile page → tap on the device icon', "On your COROS Watch \u2192 System \u2192 More Settings \u2192 Device's Info \u2192 Device ID"]
      }, {
        title: 'Serial Number',
        tips: ['Printed on the sticker of the packaging (if applicable)', "Printed on the device (if applicable)"]
      }]
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/about.js
/* harmony default export */ const en_about = ({
  pageTitle: 'ABOUT COROS',
  desc: 'COROS is a performance sports technology company that helps athletes train to be their best. For COROS it’s all about outdoors, mountains, and a passionate active lifestyle. We combine high-grade hardware with innovative technology to provide endurance athletes with the gear they rely on in the world’s most extreme environments. Advanced technology with an efficient and intuitive user experience is at our core – when you use a COROS product, you know you are getting a tool that has been designed, tested and perfected for the athlete, by the athlete. COROS users have set World Records and been to the highest point on earth, pushing our products to the extremes. At COROS, creation and innovation are never-ending. Our customers, the athletes make COROS – be a part of our community @COROSGlobal on Facebook and Instagram.',
  milestones: 'COROS MILESTONES',
  '202208': {
    time: 'August 2022',
    desc: 'Kilian Jornet claims his 4th victory at the Ultra Trail Mont Blanc, breaking 20 hours and setting a new course record. Mathieu Blanchard of France earned a second podium in a row finishing in 2nd just minutes behind Jornet, under 20 hours and breaking the previous course record. Both athletes used the COROS APEX Pro to track their record-setting runs.'
  },
  '20220516': {
    time: 'May 16, 2022',
    desc: 'COROS releases a significant firmware update, including rapid eye movement tracking, rate of perceived exertion for activities, Find My Phone/Watch, and multiple performance and algorithm enhancements.'
  },
  '20220307': {
    time: 'March 7, 2022',
    desc: 'COROS signs world-renowned mountain athletes Kílian Jornet and Emelie Forsberg to its Pro Athlete Team. Kilian and Emily have collectively won multiple major championships, including UTMB, Hardrock 100, Sky Running World Series, and Ski Mountaineering World Series. They also hold countless significant mountain ascent, descent and Fastest Known Time (FKT) records.'
  },
  '20220125': {
    time: 'January 25, 2022',
    desc: 'COROS introduces and starts shipping the VERTIX 2 Carabiner. Designed to meet the needs of extreme climbers, the Carabiner has become a must-have accessory for outdoor explorers on long hikes or climbs for quick access and viewing of key metrics on their VERTIX 2. '
  },
  '20220120': {
    time: 'January 20, 2022',
    desc: 'COROS releases another major firmware update including, Adjusted Pace, Virtual Run mode, temperature sensor support, temperature calibration, along with multiple performance and algorithm enhancements. '
  },
  '20211122': {
    time: 'November 22, 2021',
    desc: 'COROS releases a major firmware update that adds Topo/Landscape map support, Walk mode, Galileo support, LIGHT key shortcut, and Camera Control to VERTIX and APEX Pro.  '
  },
  '20211014': {
    time: 'October 14, 2021',
    desc: 'COROS introduces Multi-Pitch Climbing mode on VERTIX 2. This new workout mode is specifically designed for technical multi-pitch climbing activities, allowing users to record pitch counts and grades, while also tracking approach, climbing, and descends separately.'
  },
  '20210817': {
    time: 'August 17, 2021',
    desc: 'COROS successfully launches their all-new VERTIX 2 and Eliud Kipchoge PACE 2 watches to the global running and outdoor community. The VERTIX 2 is packed with groundbreaking technology including 140 hours of battery life in full GPS mode. The lim-ited edition EK PACE 2 is tastefully designed using red and green colors inspired by the national colors of Eliud’s native Kenya. This was the largest multi-product launch in COROS history.'
  },
  '20210808': {
    time: 'August 8, 2021',
    desc: 'On Saturday August 8th, Eliud Kipchoge was victorious winning the men’s marathon (2:08.38) and defended his title from the 2016 Olympic Games in Brazil. EK continues to inspire the global running community and prove that #NoHumanIsLimited.'
  },
  '20210802': {
    time: 'August 2, 2021',
    desc: 'COROS signs world-renowned climber, Tommy Caldwell to its Pro Athlete roster. Tommy has been dubbed the “King of El Cap” and is a living legend in the world of rock climbing. He’s climbed all over the world and established some of the hardest rock climb-ing routes in the USA.'
  },
  '20210722': {
    time: 'July 22, 2021',
    desc: 'COROS Pro Athlete Sally McRae Since wins the Badwater 135. Sally took the women’s field in 30:48:47 - finishing two hours and 49 minutes ahead of the second place finisher.'
  },
  '20210629': {
    time: 'June 29, 2021',
    desc: 'COROS launches EvoLab sports science platform. After countless hours of research, development, and engineering, with the joint effort of our thousands of public testers, COROS EvoLab, is now available to all COROS watch users.'
  },
  '20210520': {
    time: 'May 20, 2021',
    desc: 'COROS launches the PACE 2 Speed Series. Speed Series is designed alongside the world’s best and fastest athletes. Available in three season colors; Evergreen, Track Red and Medal Gold.'
  },
  '20210127': {
    time: 'January 27, 2021',
    desc: 'COROS deployes a second successful product launch during the first month of 2021, the APEX PRO WHITE. The APEX PRO WHITE draws inspiration from the contrasting ice and rock of Mammoth Lakes, a beloved playground of COROS athletes and employees.'
  },
  '20210118': {
    time: 'January 18, 2021',
    desc: 'Always evolving, COROS kicks off the new year with an exciting firmware update that includes navigation checkpoints, hundredths of a second to laps and custom workouts in track mode. The COROS app also receives updates including weather tracking and enhanced map layers.'
  },
  '20210112': {
    time: 'January 12, 2021',
    desc: 'COROS successfully launches the Desert Sol VERTIX, a seasonal, limited edition color-way of the Flagship model. This launch symbolizes a rebirth, a rising from the ashes of 2020, which is quite possibly the most challenging year of our generation.'
  },
  '20201124': {
    time: 'November 24, 2020',
    desc: 'COROS signs World Marathon Record Holder Eliud Kipchoge to its Pro Athlete Team. In addition to the individual sponsorship of Eliud, COROS has also announced that they will become the official GPS Watch partner of the NN Running Team which includes some of the top track and road runners in the world (including Eliud Kipchoge).'
  },
  '20201104': {
    time: 'November 4, 2020',
    desc: 'COROS introduces several new water sports activities, including a unique Speedsurfing mode co-developed with the leading authority in speedsurfing - GPS-Speedsurfing.com. The list of water sports modes is: Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing and Indoor Rower.'
  },
  '20200825': {
    time: 'August 25, 2020',
    desc: 'COROS launches the PACE 2, the lightest GPS watch ever made, along with several key software features including wrist-based running power data, the first native and complete Stryd integration by any wearables company and the expansion of the COROS training platform to include full daily/weekly/monthly training plans.'
  },
  '202007': {
    time: 'July 2020',
    desc: 'COROS launches the limited edition COROS VERTIX Mojito with only 200 units made world-wide. The watch features the brand new nylon watch band, which is 50% lighter than the standard silicone band. The nylon bands are released in 4 colors and will be available for all COROS watch styles.'
  },
  '202005': {
    time: 'May 2020',
    desc: 'COROS releases strength and training modes. A complex interval building program with the ability to share with training partners and download workouts from professional athletes. In addition the strength mode includes a library of over 200 workout types along with animated instructions for performing each exercise.'
  },
  '20200229': {
    time: 'February 29, 2020',
    desc: 'COROS has more than 10 professional athletes and ambassadors toe the line at the 2020 Olympic Marathon Trials in Atlanta, GA. Newly signed Desiree Linden led the team with a 4th place finish.'
  },
  '202002': {
    time: 'February 2020',
    desc: 'COROS signs its first professional road athletes, led by 2x Olympian Des Linden, along with US Record Holder Parker Stinson, 12x All American Emma Bates, Kellyn Taylor and Reed Fischer.'
  },
  '20200113': {
    time: 'January 13, 2020',
    desc: 'COROS Pro Athlete Hilaree Nelson and Jim Morisson take their VERTIX watch in a single day push to Antarctica’s highest peak Mt Vinson. The brand’s top of the line watch is tested in some of the world’s harshest conditions.'
  },
  '202001': {
    time: 'January 2020',
    desc: 'COROS expands its Pro Athlete team to include professional climbers and mountaineers led by the legendary Steve House.'
  },
  '201911_1': {
    time: 'November 2019',
    desc: 'COROS VERTIX is awarded as the Best Altimeter Watch by Outdoor Gear Lab.'
  },
  '201911_2': {
    time: 'November 2019',
    desc: 'COROS APEX wins 2019 Runner’s World Gear of the Year.'
  },
  '20191112_1': {
    time: 'November 12, 2019',
    desc: 'COROS launches the Performance Optimization Device (POD) providing advanced running metrics.'
  },
  '20191112_2': {
    time: 'November 12, 2019',
    desc: 'COROS launches the first of its kind Track Running mode to its watch lines. A proprietary algorithm allows the user to select their lane for accuracy never before experienced by a GPS watch on a standard 400m track.'
  },
  '201910': {
    time: 'October 2019',
    desc: 'COROS APEX Pro is awarded Best In Gear by BelieveInTheRun.'
  },
  '20190917': {
    time: 'September 17, 2019',
    desc: 'COROS launches APEX Pro Premium Multisport GPS Watch.'
  },
  '201908': {
    time: 'August 2019',
    desc: 'Team COROS sets out to UTMB 2019 - COROS Athletes Hillary Allen of USA finishes 2nd at TDS and Maite Maora of Spain finishes 3rd in the full UTMB.'
  },
  '20190523': {
    time: 'May 23, 2019',
    desc: 'VERTIX tracks Roxanne Vogel as her climbing watch as she sets the fastest door to door Mt Everest climbing record.'
  },
  '20190514': {
    time: 'May 14, 2019',
    desc: 'COROS launches VERTIX GPS Adventure Watch - the brand’s most powerful watch yet with 60 hours of GPS battery life, plus the first watch in the range to include a Pulse Oximeter.'
  },
  '201905': {
    time: 'March 2019',
    desc: 'COROS APEX awarded Best in Class by Triathlete 2019 Buyer’s Guide.'
  },
  '201902': {
    time: 'February 2019',
    desc: 'COROS APEX wins 2019 Runner’s World Editors’ Choice.'
  },
  '20190109': {
    time: 'January 9, 2019',
    desc: 'COROS launches APEX 24h World Record Limited Edition to celebrate Camille Herron’s record achievement covering 163 miles in 24 hours - a record she would later eclipse.'
  },
  '20181209': {
    time: 'December 9, 2018',
    desc: 'Ultrarunner Camille Herron wears COROS APEX 46mm during her World Record breaking 24 hour run. Her watch has 32% battery remaining.'
  },
  '20181025_1': {
    time: 'October 25, 2018',
    desc: 'COROS launches its third generation smart cycling helmets: SafeSound Road, Urban and Mountain.'
  },
  '20181025_2': {
    time: 'October 25, 2018',
    desc: 'COROS launches APEX Premium Multisport GPS Watch in two sizes - 46mm and 42mm allowing for greater user customization.'
  },
  '201808': {
    time: 'August 2018',
    desc: 'Ultrarunner Dominic Grossman and Sally McRae join COROS as the brand’s first two Pro Athletes.'
  },
  '20180515': {
    time: 'May 15, 2018',
    desc: 'COROS launches its first GPS watch: PACE Multisport GPS Watch.'
  },
  '201802': {
    time: 'February 2018',
    desc: 'COROS moves its US headquarters from Virginia to Southern California.'
  },
  '20171205': {
    time: 'December 5, 2017',
    desc: 'COROS launches its second product and raises $130,974 USD from 835 backers during the Indiegogo campaign for OMNI Smart Cycling Helmets.'
  },
  '20160907': {
    time: 'September 7, 2016',
    desc: 'COROS launches its first product: LINX Smart Cycling Helmet and 1,135 backers pledge $319,765 soon after the Kickstarter campaign was launched.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pace2.js
// 旧的不要删除
/* harmony default export */ const en_pace2 = ({
  title: 'COROS PACE 2 GPS Watch',
  desc: 'Our lightest watch for multi-sport athletes who go fast and far.',
  viewPlans: 'Verified Training Plan',
  viewWorkouts: 'Verified Workout Program',
  accessories: 'ACCESSORIES',
  section: {
    light: {
      title: 'So Light It Could Fly',
      desc: 'From just 29g with the COROS nylon band, COROS PACE 2 is the lightest GPS watch in the world at its launch. Don’t let yourself get weighed down by more than you need, with the COROS PACE 2 you will be ready for your new personal best – be it in a race or in the weight room.'
    },
    processor: {
      title: 'A Force to be Reckoned With',
      desc: 'COROS PACE 2 has a 1.5x more powerful processor, offers 5x more RAM and 4x more storage than the original COROS PACE, leaving plenty of room for expanded features. COROS PACE 2 will be your training partner for the long haul.',
      pace: 'COROS PACE PROCESSOR',
      pace2: 'COROS PACE 2 PROCESSOR',
      compareDesc: ['ADDITIONAL', 'MORE', 'STORAGE']
    },
    counts: {
      title: 'Every Second Counts',
      desc: 'We know that every second counts when you are racing for a new Personal Best, so COROS helps you spend less time struggling to get the important information you need. With a new design, featuring the COROS Digital Dial, COROS PACE 2 creates an even simpler user experience. Get your splits, check your HR or plan your next workout all using just one finger.'
    },
    packs: {
      title: 'Packs a Punch',
      desc: 'Thanks to the magic of COROS’ efficiency of COROS GPS battery technology, COROS PACE 2 offers 30 hours of full GPS battery life. That’s a 20% increase from the original COROS PACE. If you need your battery to last even longer, switch to UltraMax for nearly half the battery consumption.'
    },
    endurance: {
      title: 'Endurance on Your Wrist',
      desc: 'COROS PACE 2 offers 20 days of daily use. That’s 20 days of tracking heart rate and sleeping, triggering backlight, measuring steps, getting notifications and even alarms every day. So, leave your charger behind, and travel for your next race, game or family vacation with confidence.'
    },
    night: {
      title: 'Light up the Night’s Sky',
      desc: 'Night Mode is our always-on mode for nighttime activities. It leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark but dim enough to maintain superior battery performance throughout your run or ride, even when needed all night long. Don’t worry, it turns off automatically when you finish your workout, or one hour after the sunrise.'
    },
    laps: {
      title: 'Laps on Land or in the Sea',
      desc: 'Whether you are swimming in the pool, or training in the ocean, with a 50-meter water resistance rating, you can wear COROS PACE 2 to track your activities in the water as well as on land.'
    },
    possibilities: {
      title: 'New Possibilities',
      desc: 'With a roughly 50% weight reduction from the silicone band, the COROS Nylon Watch Band is more breathable and offers new color options, giving you endless opportunities to make your own personal statement. The Nylon bands will also allow for a more comfortable and snug fit which should improve the already strong heart rate accuracy, especially during long sweaty workouts on warm days.'
    },
    athlete: {
      title: 'Something for Every Athlete',
      desc: 'COROS PACE 2 is jam packed with the sport modes you’ve been looking for. Go beyond your standard Run, Bike or Swim, and test out the new Strength Mode, or explore the accuracy of Track Run mode or get wet and wild with the all new Flat Water mode.'
    },
    trainer: {
      title: 'Your New Personal Trainer',
      desc: 'The Strength Training program has over 200 exercises already built in for upper body, lower body, core work and more. COROS PACE 2 auto-detects your body movements and monitors your heart rate and calories burned.'
    },
    muscleHeatmap: {
      title: 'Muscle Heatmap',
      desc: 'Once you’re done, check out the all new muscle heatmap to see which muscle groups saw the most action in a daily, weekly, or monthly view, to help determine your next block of training.'
    },
    learn: {
      title: 'Learn from the Best and Share',
      desc: 'Have a workout you love? Don’t keep it to yourself, share it with your friends with the touch of your finger in the COROS app. We have pre-designed workouts and training plans from COROS athletes and their coaches available for free on COROS.com. Just download to start your next workout.'
    },
    follow: {
      title: 'Follow Your Heart',
      desc: 'Not every activity gets your blood flowing in the same way. Easy runs are more consistent while interval sessions and weightlifting see more peaks and valleys. COROS has developed unique HR algorithms for each activity mode to provide you with best in class wrist-based heart rate accuracy.'
    },
    track: {
      title: 'Every Second Counts',
      mobileTitle: 'Stay on Track',
      desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm as accurate as a stopwatch, is used to make sure your track runs, and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run.'
    },
    smart: {
      title: 'Powerful AND Smart',
      desc: 'COROS watches offer everything you have come to expect from a GPS Sports Watch, plus some of the most desirable aspects of a smart watch including phone notifications, caller ID, Sleep Tracking and Fitness Level analysis.'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/terms.js
/* harmony default export */ const en_terms = ({
  termsofservice: 'TERMS OF SERVICE',
  lastUpdate: 'Last update: Oct. 7, 2020',
  baseTOS: "These Terms of Service (\u201CTerms\u201D) govern your use of COROS products, our websites, including www.coros.com ,the software embedded in COROS devices, the COROS software, the COROS mobile applications, and other COROS services (collectively, the \u201CCOROS Service\u201D).\n  You must accept these Terms to create a COROS account and to use the COROS Service. If you do not have an account, you accept these Terms by visiting www.coros.com or using any part of the COROS Service. If you do not accept any of these terms, please don\u2019t create a COROS account, visit www.coros.com or use the COROS Service.",
  whoCanUse: {
    title: 'Who Can Use COROS',
    desc: "To use the COROS Service, you must be at least fifteen (15) years of age. If you are at least fifteen (15) years of age but a minor where you live, you must review the Terms and have your parent or legal guardian complete the registration on your behalf for you to use the COROS Service. The person completing the registration must be legally competent. If you have questions about whether a product or application qualifies as an Authorized Connection, please contact info@coros.com"
  },
  account: {
    title: 'Registration and Login Account',
    desc: "For you to fully use the COROS Service, you need to create an account by providing us with a valid email address and secure password. You can also create an account or log in using third-party accounts. According to the third-party accounts agreement, we will have access to your username, thumbnail, and gender. You are responsible for all activity that occurs in association with your account. COROS is not liable for any loss or damages caused by your failure to maintain the security of your account credentials.\n    We may need to contact you about your use of the COROS Service. These communications are part of the COROS Service and you may not opt-out from receiving them. You can manage and opt-out from receiving other communications and keep your email address up-to-date from your account settings."
  },
  equipment: {
    title: 'Necessary Equipment',
    desc: "Full use of the COROS Service is dependent upon your use of a computer with adequate software or a supported mobile device and Internet access. The maintenance and security of this equipment may influence the performance of the COROS Service and it is your responsibility to ensure the equipment\u2019s functionality. COROS is not liable for any loss or damages caused by your failure to maintain the security of your equipment."
  },
  disclaimers: {
    title: 'Disclaimers',
    desc: "We make no warranty that the COROS Service will meet your requirements or be available on an uninterrupted, secure, or error-free basis. We make no warranty regarding the quality, accuracy, timeliness, truthfulness, completeness or reliability of the COROS Service. We make no warranty that all of the errors in the COROS Service will be corrected and updated in a timely manner.\n    The COROS Service is not intended to diagnose, treat, cure, or prevent any disease. All the \u201CCOROS Content\u201D provided by the COROS Service including text, graphics, images, music, software, audio, video, works of authorship of any kind, and information or other materials cannot be used to replace your doctor or other professionals\u2019 information and advice. COROS Content is prohibited from being used for any medical reasons, or on any packaging or label.\n    If you have a medical or heart condition, consult your doctor before using the COROS Service, engaging in an exercise program or changing your diet. If you experience a medical emergency, stop using the COROS Service and consult with a medical professional. We are not responsible for any health problems that may result from training programs, consultations, products, or events you learn about through the COROS Service. If you engage in any exercise program you receive or learn about through the COROS Service you agree that you do so at your own risk and are voluntarily participating in these activities.\n    You agree that you are responsible for any personal or property risk involved with your activities including but not limited to cycling, running, swimming or training plans provided by COROS Service. COROS is not liable for any risk regarding personal injury and property damage.\n    You agree that COROS is not liable for any outcome caused by failing to send out SOS message. We make no warranty that SOS message will be sent out under any circumstance. You agree that while using the COROS products, SOS message depends on cellular network, server maintenance, and other unpredictable issues.\n    You agree that COROS Service uploads your information and activity data to Third-Party servers under Third-Party Policy. The COROS Service may provide the opportunity for you to link your COROS account, COROS data, or the COROS Service with Third-Party Services. Although we offer this opportunity, you acknowledge that any Third-Party Services that you use in connection with the COROS Service are not part of the COROS Service. You acknowledge that these Terms and the COROS Privacy Policy do not apply to any Third-Party Services. You are responsible for reading and understanding the terms and conditions and privacy policy that applies to your use of any Third-Party Services."
  },
  UOS: {
    title: 'Use of Service',
    desc: "The content contained on COROS Service, such as text, graphics, images, audio, video and other material, as well as the domain names, tagline and organization is protected by copyright, trademark and other such laws in the United States and foreign countries, and is owned or controlled by COROS. Unauthorized use of the COROS Service may violate copyright, trademark, and other laws.\n    You may not attempt to gain unauthorized access to any portion or feature of the COROS Service, or any other systems or networks connected to the Service or to any COROS server, or to any of the services offered on or through the Service by any illegitimate means.\n    You may not use the COROS Service for any purpose that is unlawful or prohibited by these Terms of Service or other activity which infringes the rights of COROS or others.\n    You agree not to use any device, software or routine to interfere or attempt to interfere with the proper working of the COROS Service, or with any other person\u2019s use of the Service."
  },
  feedbackPolicy: {
    title: 'Feedback Policy',
    desc: "If you submit comments, ideas, or feedback to COROS, you agree that COROS and its employees may use such without any restriction or compensation to you. We do not waive any rights to use similar or related ideas or feedback previously known to us, developed by COROS, or obtained from sources other than you. You can contact us via info@coros.com. Please do not send us any feedback without your authorization. Our Feedback Policy is also part of the Terms."
  },
  distribution: {
    title: 'Dispute Resolution',
    desc: "You agree that any dispute between you and COROS arising out of or relating to these Terms of Service, the COROS Service, or any other COROS products or services (collectively, \u201CDisputes\u201D) will be governed by the arbitration procedure outlined below.\n    Governing Law: The Terms of Service and the resolution of any Disputes shall be governed by and construed in accordance with the laws of the State of California without regard to its conflict of laws and principles.\n    Informal Dispute Resolution: We want to address your concerns without needing a formal legal case. Before filing a claim against COROS, you agree to try to resolve the Dispute informally by contacting info@coros.com. We'll try to resolve the Dispute informally by contacting you through email. If a dispute is not resolved within 15 days after submission, you or COROS may bring a formal proceeding.\n    No Class Actions: You may only resolve Disputes with COROS on an individual basis, and may not bring a claim as a plaintiff or a class member in a class, consolidated, or representative action. Class arbitrations, class actions, private attorney general actions, and consolidation with other arbitrations aren't allowed under this agreement.\n    Limitation on Claims: Regardless of any statute or law to the contrary, any claim or cause of action arising out of or related to your use of the COROS products or COROS Service must be filed within one (1) year after such claim or cause of action arose, or else that claim or cause of action will be barred permanently."
  },
  violation: {
    title: 'Violation of These Terms of Use',
    desc: "You acknowledge and agree that COROS may preserve any transmittal or communication by you with COROS through the COROS Service, and may also disclose such data if required to do so by law or COROS determines that such preservation or disclosure is reasonably necessary to (1) comply with a legal process, (2) enforce these Terms of Service, (3) respond to claims that any such data violates the rights of others, or (4) protect the rights, property or personal safety of COROS, its employees, users of the COROS Service, and the public.\n    You agree that COROS may, in its sole discretion and without prior notice, terminate your access to the COROS Service and/or block your future access to the COROS Service if we determine that you have violated these Terms of Service or other agreements or guidelines which may be associated with your use of the COROS Service. You also agree that any violation by you of these Terms of Service will constitute an unlawful and unfair business practice, and will cause irreparable harm to COROS, for which monetary damages would be inadequate, and you consent to COROS obtaining any injunctive or equitable relief that COROS deems necessary or appropriate in such circumstances. These remedies are in addition to any other remedies COROS may have at law or in equity.\n    You agree that COROS may, in its sole discretion and without prior notice, terminate your access to the COROS Service, for cause, which includes (but is not limited to) (1) requests by law enforcement, (2) a request by you (self-initiated account deletions), (3) discontinuance or material modification of the COROS Service or any service offered on or through the COROS Service, or (4) unexpected technical issues or problems.\n    If COROS does take any legal action against you as a result of your violation of these Terms of Service, COROS will be entitled to recover from you, and you agree to pay, all reasonable attorneys\u2019 fees and costs of such action, in addition to any other relief granted to COROS. You agree that COROS will not be liable to you or to any third party for termination of your access to the COROS Service as a result of any violation of these Terms of Service."
  },
  security: {
    title: 'Security; Lost or Disabled Devices',
    desc: "You are solely responsible for maintaining the security of your COROS Device. You agree that COROS does not have any responsibility if you lose or share access to your COROS Device. You agree that COROS does not have any responsibility if you make unauthorized modifications to your COROS Device.\n    If your COROS Device is lost or stolen, please contact the local police force. You can also contact COROS to lock the device to suspend the ability of data syncing and connecting with the COROS Service. Contact support@coros.com if you have found a lost COROS Device or your COROS Device is mistakenly locked due to an inaccurate report. COROS reserves the right to lock COROS Devices if (1) the user violates any agreements COROS has entered collectively or (2) the user is subject to fraudulent orders/activities. If you report or COROS suspects fraudulent or abusive activities, you agree to cooperate with COROS in any investigation."
  },
  orders: {
    title: 'Orders',
    desc: "Whilst COROS will make every effort to supply you with the Products and/or Services listed on the Order Confirmation, there may be occasions where COROS is unable to supply these Products and/or Services because, for example, (1) such Products or Services are no longer being manufactured or available, (2) COROS is unable to source relevant components, (3) there was a pricing error or (4) there was malicious intent/practices during the order process. In such circumstances COROS will contact you and may suggest alternative Products or Services that you might wish to purchase (at the same or different price). In the event of a pricing error, COROS will communicate the correct price to you. If you do not accept COROS\u2019s proposed substitution or the price modification, then COROS will cancel the Order and refund any money that you may have paid to COROS in respect of the Order. Repayment of such monies will be the extent of COROS\u2019s liability to you if COROS is unable to deliver the Products and/or Services ordered by you.\n    COROS reserves the right to cancel your order if any fraudulent-related activity is detected. COROS will inform you if COROS cancels your order on the above basis. Any payments you have made will be refunded to you."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/athlete.js
/* harmony default export */ const en_athlete = ({
  pageTitle: "coros pro athletes",
  mobilePageTitle: "explore your inner inspiration with the coros pro athletes",
  pageDesc: "The COROS Pro Team are our top-class power users and live for exploring the impossible. All of them have been using COROS products intensively in the toughest courses in the world. What\u2019s more important, they share the same passion of building the best products for athletes worldwide.\n\nCOROS is also proud to be the official GPS watch partner of the NN Running Team.",
  trailAthletes: 'Trail Athletes',
  roadAthletes: 'Road Athletes',
  alpineAthletes: 'Outdoor Athletes'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/athleteDetails.js
/* harmony default export */ const en_athleteDetails = ({
  more: 'More Athletes',
  athletes: 'Pro Athletes',
  dane_jackson: {
    name: 'Dane Jackson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: "First descent of Chile\u2019s 134ft Salto Maule waterfall\n    7 Descents of waterfalls 100ft+\n    4x North Fork Championships winner\n    3x Whitewater Grand Prix winner\n    4x Green Race winner\n    3x Freestyle World Champion\n    Dozens of competition wins all over the world\n    Course record holder at 3 races\n    Wears a COROS VERTIX 2",
    desc: "Dane Jackson has experienced some of the best kayaking the world has to offer. Kayaking is Dane\u2019s true calling, and he\u2019s been doing it for over 20 years. Tennessee is home base for Dane, but he spends 6+ months of the year traveling to the best locations for his sport. He frequently enjoys expeditions to Mexico, New Foundland, Kenya, and Canada. His favorite rivers are the Zambezi, Ottawa, and the Nile. He credits his dad Eric Jackson for getting him to where he is as an athlete.\n    Dane is considered the best all-around whitewater kayaker in the world, holding more than 80 first-place medals from competitions all around the world. His skill and determination have taken him to the top."
  },
  adrian_ballinger: {
    name: 'Adrian Ballinger',
    country: 'USA',
    countryIcon: 'usa',
    achievement: "Summited Everest and K2 without supplemental oxygen\n    First ski descent of Manaslu, the 8th tallest peak in the world\n    Founded Alpenglow Expeditions\n    Seventeen summits of 8000-meter peaks\n    Only American to complete three 8000-meter peak ski descents\n    Wears a COROS VERTIX 2",
    desc: "Adrian Ballinger is a big mountain climber and skier, and a certified mountain guide. Adrian has been professionally guiding groups on the world\u2019s tallest mountains for 25 years and is the founder of Alpenglow Expeditions which takes 6000+ people a year skiing, climbing, and mountaineering, in Tahoe and around the world. He has led over 150 international climbing expeditions on six continents and made 17 successful summits of 8,000m peaks, including 8 summits of Mt. Everest. He is known for pioneering the use of pre-acclimatization for commercial expeditions, which cuts the amount of time typically spent on an expedition in half, while also leading the industry\u2019s shift to ethical standards while guiding the world\u2019s tallest mountains.\n\n    As an athlete, Adrian is the only American to have made three successful ski descents of 8,000m peaks, including the first ski descent of Manaslu from its summit. He is also the fourth American to have summited both Mount Everest and K2 without the use of supplemental oxygen. Most recently, following a year of focused rock climbing amidst the Covid pandemic, Adrian climbed his first 8a/5.13b, Fall of Man in the Virgin River Gorge. Adrian aims to excel in all three of the traditional mountain guide disciplines - Mountaineering, Rock Climbing, and Skiing."
  },
  kilian_journet: {
    name: 'Kilian Jornet',
    country: 'SPAIN',
    countryIcon: 'spain',
    achievement: '4 x UTMB Champion\n5 x Hardrock Hundred Champion\n4 x Ski Mountaineering World Champion\n3 x Sky Running World Champion\nCountless Significant Mountain Ascent/Descent Records and FKTs',
    desc: 'There is arguably no greater all-around mountain athlete in the world than Kilian Jornet. Growing up in the Pyrenees Mountains, Kilian began summiting mountains at just 3 years old. He burst onto the mountain/trail running scene in his late teens and in 2007 won his first of 10 Sky Running World Series. The next year he would win the prestigious UTMB for the first of 3 times between 2008 and 2011. It is hard to find a major Mountain or Trail race that Kilian hasn’t won, having been crowned champion of Western States, Sierre-Zinal, Pikes Peak Marathon, Zegama, Hardrock, Marathon du Mont Blanc and many, many more.\n\nPerhaps what makes Kilian so special as an athlete, is that he is world-class not just in running but also in Ski Mountaineering, a discipline in which he has competed since 2002 winning European and World Championships in every age bracket along the way. Kilian now resides in Norway with his partner Emelie Forsberg and their two daughters.'
  },
  emelie_forsberg: {
    name: 'Emelie Forsberg',
    country: 'SWEDEN',
    countryIcon: 'sweden',
    achievement: '4 x SkyRunner World Series Champion\n6 x Ski Mountaineering World Championship Medalist\n2 x Transvulcania Champion\nFKT holder on Mont Blanc, Matterhorn, Grand Teton, and several other up and down routes',
    desc: 'Living in Norway and representing Sweden, Emelie is one of the most accomplished all-around mountain athletes in the world – with a focus on trail running and ski mountaineering. Emelie originally identified most as a climber, before starting to run in the mountains for pure enjoyment. She competed in her first serious trail race in 2009 and has since been amongst the world’s best at distances ranging from the Vertical Kilometer to 100 miles. Emelie’s Ski Mountaineering career began a few years later in 2012 when she jumped into a race using borrowed skis and finished 3rd. She has since finished on the podium in several European and World Championship races.\n\nEmelie gave birth to her and her partner Kilian Jornet’s first daughter in March of 2019, and to their second daughter in April of 2021. She now has her eyes set on a return to training and top-level competition in 2022 and beyond.'
  },
  emma_coburn: {
    name: 'Emma Coburn',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2017 World Champion – 3,000m Steeplechase\n2019 World Championship Silver Medalist – 3,000m Steeplechase\n2016 Olympic Bronze Medalist – 3,000m Steeplechase\n9 x USATF National Champion\n6 x NCAA All American\n',
    desc: 'A native of Crested Butte and Boulder, CO - Emma attended the University of Colorado where she was a 3 time National Champion and 6 time All American. A 9 time USATF National Champion in her signature event the 3,000m Steeplechase, Emma holds the full set of medals on the world stage, having earned Bronze at the Rio Olympics, Silver at the 2019 World Championships and in 2017 earned the Gold Medal and the title of World Champion. Emma trains with team Boss and is coached by her husband Joe Bosshard who is quickly becoming one of the top coaches in the country. Beyond the track, Emma is an inspiration and a role model to many, as she displays her entrepreneurial spirit with her own ventures including a recently released cook book and Emma Coburn’s Elk Run 5k, which has raised significant funds to support those fighting cancer in Gunnison County, Colorado.'
  },
  emily_infeld: {
    name: 'Emily Infeld',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2015 World Championships 10,000m– 3rd place\n2016 Olympian 10,000m\n2017 World Championship 10,000m - 6th place\n11x All American \nNCAA Champion',
    desc: 'Emily has quite the resume dating back to her high school days in Ohio where she was a National Champion and state record holder in the mile. She ran collegiately at Georgetown where she was 2012 NCAA 3k Champion, an 11 time All-American and led the cross-country team to the 2011 National Title. Her post collegiate career has had major highlights as well, perhaps none bigger than her Bronze Medal finish in the 10,000m at the 2015 World Championships in Beijing. Emily is a 2016 Olympian and once again represented the USA at the 2017 World Championships where she finished 6th place as the top American in the event. '
  },
  eliud_kipchoge: {
    name: 'Eliud Kipchoge',
    country: 'Kenya',
    countryIcon: 'kenya',
    achievement: 'World Record Holder – Marathon (2:01:09) – Berlin 2022\nFirst/Only Sub 2 Hour Marathoner – (1:59:40) – Vienna 2019\n10 x World Marathon Major Champion\n2 time World Championship Medalist\n3 time Olympic Medalist\nHusband, Father of Three',
    desc: 'Eliud Kipchoge trains with the mantra – “No Human is Limited” and he has shown that first hand in his racing career. At just the age of 18 Eliud won a World Championship medal in the 5,000m and would go on to win 3 other global medals at the distance. However it was in 2013, when Eliud first started to show signs of what was to come in the future, by winning and breaking the course record in his debut marathon. It is almost hard to believe what would follow – 11 official marathon victories including 8 Marathon Majors, and the Olympic Games, twice setting course records in the London Marathon, and of course his world record run at the Berlin Marathon in 2018 (where he also broke the world records for 30k, 35k and 40k en route). Despite all of these accomplishments, they do not even mention what is perhaps Eliud’s greatest achievement as a runner – becoming the first and only human to run the marathon distance in under 2 hours – setting the world best 1:59:40 at the INEOS Challenge on a closed course in Vienna Austria in October 2019. Eliud was the 2018 United Nations Kenyan Person of the Year, and the 2018 and 2019 IAAF (now WAF) Male Athlete of the Year. Last but certainly not least, Eliud is a husband and a father of three, living and training near Eldoret, Kenya.'
  },
  molly: {
    name: 'Molly Seidel',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Olympic Bronze Medalist (Tokyo 2020)\n4th at 2021 NYC Marathon, fastest American woman all-time(2:24:42)\n4x NCAA Champion\n6x NCAA All-American',
    desc: 'Molly Seidel is the definition of grit and perseverance. In her first-ever marathon, Molly placed second at the 2020 U.S. Olympic Trials to secure her spot on Team USA, where she earned a bronze medal in Tokyo. \n   Molly is no stranger to the spotlight; she was a Foot Locker Cross Country champion in high school and a 4-time NCAA champion at the University of Notre Dame. Despite her accolades, she’s known for her down-to-earth personality, witty sense of humor, and love for donuts and craft beer. Today, you can find her training in Flagstaff, AZ, with Verde Track Club.'
  },
  desiree_linden: {
    name: 'Desiree Linden',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2018 Boston Marathon Champion\nTwo-time Olympian\n9 top-5 finishes at World Marathon Majors\nTwo-time runner up at the US Marathon Trials\nCoffee aficionado & owner of Linden X Two\nWhiskey connoisseur. Music junkie. Book nerd. World Traveler.',
    desc: 'In April of 2018, Des Linden braved headwinds and torrential rain to become the first US women’s champion at the Boston Marathon since 1985. Her win was one for the record books as she bested the field and the worst conditions in race history. Des, is a two-time U.S. Olympic Marathoner, finishing 7th at the Rio Olympic Games. She got her start at Hilltop High in San Diego suburb Chula Vista, California where she earned All-State honors. Linden attended Arizona State University where she was an All-American in both cross country and track. After graduation, she moved to Rochester, Michigan to join the Hansons Brooks Distance Project. She currently trains in Northern Michigan and continues representing Brooks. In 2019, Des returned to the Boston Marathon finishing 5th, and later that fall led the NYC Marathon field through the half marathon in 1:11:40 and finished in 6th place as the top American in the 4th fastest American time in history on the historic five-borough course. A self-proclaimed bacon aficionado, her hobbies include reading and writing, collecting assorted whiskeys, drinking Linden X Two Coffee, throwing first pitches at Major League ballgames, relaxing with her dogs Atlas and Boston, listening to good music and outrunning her husband, fellow marathoner, and Kona veteran, Ryan Linden.'
  },
  grayson_murphy: {
    name: 'Grayson Murphy',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '5 x NCAA All-American at the University of Utah \n2nd American 2019 Boilermaker 15k \nUniversity of Utah School Record Holder – 3k Steeple, 5,000m (indoor and outdoor), 10,000m ',
    desc: "Training in her hometown of Salt Lake City, Utah and a member of the Idaho Distance Project, Grayson is focusing primarily on road and trail races. Grayson is a 2018 graduate of the University of Utah with a B.S. in Civil Engineering and a 5x All-American in Cross Country and Track. Her PR's on the track include 32:28 in the 10k, 15:44 in the 5k, and 9:44 in the steeplechase. Most recently, Grayson finished as the 2nd American at the Boilermaker 15k in Utica, NY - the nation’s largest 15k race. Looking forward Grayson hopes to improve upon all of her PR's as well as participating in a wide variety of trail, mountain, road, and cross country races."
  },
  emma_bates: {
    name: 'Emma Bates',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2019 Chicago Marathon - 1st American\n2019 USA Marathon Champion\n12 Time NCAA D1 All-American\n2014 NCAA DI 10,000m Champion',
    desc: 'Training in Boise, Idaho and a member of the Idaho Distance project, Emma is focusing primarily on middle and long-distance road races. Emma graduated from Boise State University where she was a 12-time NCAA Division 1 All-American and the 2014 NCAA Champion in the 10,000m. Since then, Emma has gone on to win the 2018 US Women’s Marathon championships, in addition to placing 4th in the 2019 Chicago Marathon with a personal best time of 2:25:27. Emma\'s "free spirited" mindset has allowed her to become one of America’s top runners with an incredibly bright future.'
  },
  parker_stinson: {
    name: 'Parker Stinson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2019 US 25k Record Holder\n2019 Chicago Marathon – (1st American)\n9 Time NCAA D1 All-American',
    desc: 'The US Record Holder at 25k, Parker resides in Boulder, Colorado. He is a nine time All-American from the University of Oregon where he also finished 3rd in the 5,000 meters at back to back NCAA championships. In his youth, Parker was a 3-time Junior (U19) Champion at 10,000m. Some of his latest achievements include winning the 2019 USATF 25k Championship and finishing as the top American at the 2019 Chicago Marathon with a personal best time of 2:10:53. With the help of COROS, Parker hopes to continue to push himself beyond his limits to become an even stronger athlete.'
  },
  reed_fischer: {
    name: 'Reed Fischer',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '20th Fastest Half Marathon in American History\nTop American at 2019 Aramco Houston Half Marathon\n4th Place in the USATF 10,000m\nChampionships Two-time member of Team USA',
    desc: 'Originally from Minnesota, Reed currently lives and trains with Tinman Elite in Boulder, Colorado. As a founding member of the exciting young team, Reed found a knack for longer distances on the roads. A self-proclaimed late bloomer, he finished his career at Drake University with a 9th place finish at the 2017 NCAA Championships. A zero-time first team All- American, Reed has blossomed into one of the nation’s most promising runners. At just 24- years-old, Reed set a half marathon personal best of 1:01:37 and is planning to carry that momentum into his marathon career.'
  },
  coree_woltering: {
    name: 'Coree Woltering',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '1st – Superior Spring 50k 2019\n2nd – American River 50m & Quick Silver 50k 2018\n4th - Superior 100 Mile 2018\nIce Age Trail (1147 miles) FKT - 2020\n',
    desc: 'Coree lives and trains in Ottowa, Illinois a rare midwestern elite Ultra Runner. Despite now favoring the longer events, he began his running career racing 400m and 800m distances on the track – making him ready for any distance on any surface. Coree’s longer run before registering for his first marathon in 2014 was just 16 miles, but he would go on to run a very respectable debut time of 2:37. A year later, he won every trail ultra he entered. Flash forward a few years, in 2018 he finished 25th at the infamous—Western States. In his most recent accomplishment, Coree set an FKT on the Ice Age Trail completing the 1147 mile route in just 21 days, 13 hours and 35 minutes. Beyond running, Coree is a father, skydiver and role model to anyone who champions diversity in the outdoor world'
  },
  john_kelly: {
    name: 'John Kelly',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '2017 Barkley Marathons Champion\n2018 ITU Long Course Age Group World Champion  \n2020 Spine Champion\n1st to complete “The Grand Round” in the UK\nGuinness World Record for “Fastest Marathon Dressed as a Videogame Character” (2016 Boston Marathon)',
    desc: "John specializes in mountainous, multi-day events such as The Barkley Marathons, The Spine Race, Tor Des Geants, and long FKTs such as his recent Grand Round project that connected all of the UK's big 3 fell running rounds. He grew up in east Tennessee where his love of the mountains began, and he's currently living in the UK with his wife and four kids where he's the CTO and co-founder of a tech startup. John will continue exploring the mountains and his own limits, challenging himself with goals that push his boundaries. He hopes to be able to pass these passions along to his kids and others - promoting an appreciation and preservation of wild places and the value they bring to our society."
  },
  camille_herron: {
    name: 'Camille Herron',
    country: 'United States',
    countryIcon: 'usa',
    achievement: "\n3-time Olympic Marathon Trials qualifier ('08, '12, '16)\n2-time World Champion (50K, 100K)\n2017 Comrades Marathon Champion\n100 Mile Trail Best, 12:42:40\n4 World Records (50 mi, 12Hr, 100 mi, 24Hr) & 8 American Records",
    desc: "Camille is establishing herself as the fastest female ultrarunner ever across many distances and surfaces. Her speed, versatility, toughness, and knack for winning are making her a legend in the sport. She is coached by her husband, Conor, and lives in Warr Acres, OK/Alamosa, CO with their German Shepherds, Hawi and Winny. She is a Coach, Research Assistant at OUHSC, public speaker and ambassador, and since 2012 has served as Secretary for the USATF Women's Long Distance Running Committee. "
  },
  hayden_hawks: {
    name: 'Hayden Hawks',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '2016 Speedgoat 50km- 1st Place\n2016/2017 TNF SF 50mile- 2nd/3rd Place\n2017 CCC 100km- 1st Place and CR\n2018 Lavaredo Ultra Trail 120km- 1st Place\nZion Traverse Fastest Known Time (FKT) 48 miles',
    desc: 'Professional Ultra/Mountain athlete from Cedar City, Utah. Hayden loves spending his days exploring the mountains, canyons, and deserts in the National Parks and public lands near his home in Southern Utah. He also loves to travel and see the world with the two people that mean the most to him, his wife and young son. He has had success in all avenues of running he has specialized in over the years including track and field, cross country, road running, mountain running, and now ultra marathon! He loves running and everything about it! '
  },
  tim_tollefson: {
    name: 'Tim Tollefson',
    country: 'United States',
    countryIcon: 'usa',
    achievement: 'Two time U.S. Olympic Marathon Trials qualifier \n2014 US 50k Trail National Champion\n2016 UTMB, 3rd place\n2017 UTMB, 3rd place\n2017 Ultra Trail Australia Champion',
    desc: 'Tim Tollefson is a mountain athlete that lives in Mammoth Lakes, Ca with his lovely wife, Lindsay. After a successful road running career as a two time U.S. Olympic Marathon Trials qualifier, Tim transitioned to trail running. In just 3 short years, he won the 2014 USATF 50k Trail National Title, represented Team USA at the IAU Ultra Trail World Championships, won Ultra Trail Australia, and twice finished 3rd at the world renowned Ultra Trail du Mont Blanc (UTMB), the deepest and most competitive 100 mile ultramarathon each year. Tim also works full time as a physical therapist serving the active local Eastern Sierra population and visiting athletes. Looking forward, Tim hopes to continue developing as a top athlete in trail running, ski mountaineering, and high alpine pursuits while also connecting with a greater number of global participants to promote a lifelong enjoyment of mountain activities through clean sport.'
  },
  magda_boulet: {
    name: 'Magda Boulet',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '2008 Olympic Trials Marathon Runner Up\nMarathon PB 2:26.22 (Rotterdam 2010)\n2015 Western States Champion \n2015 North American Ultra Runner of the Year\n2017 Western States Runner Up \n2017 Terewara 102k Runner Up ',
    desc: 'Magda grew up in Poland and immigrated to the United States in 2001, earning her citizenship the same year. She earned an undergraduate degree in human biodynamics from UC Berkeley and a Master’s in exercise physiology from Cal State Hayward. Coached by the legendary Jack Daniels – Magda has had tremendous success on both the roads and trails. Magda qualified for the 2008 Olympic Games in Beijing with her runner up finish at the Olympic Trials. A Marathon best of 2:26.22 set at the 2010 Rotterdam Marathon still ranks her 11th all time for US Women at the 26.2 Distance. In 2013 Magda transition to trail and ultra-running and just 2 years later won the prestigious Western States 100 in her first test at the distance. A number of other strong performances earned her  North American Ultra Runner of the Year in 2015. Magda lives in Oakland, CA with her husband Richie and their son Owen. When she is not competing you can find her leading innovation and product development for GU Energy Labs.'
  },
  sally_mcrae: {
    name: 'Sally McRae',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '10x Ultramarathon champion\n20x Podium finisher worldwide\n2x Western States 100 top 10 finisher',
    desc: "Sally McRae is a dream crushin', adventure chasing wife and mother of two. Professional trail runner racing up mountains worldwide; part time coach, writer, and speaker, encouraging others to live life to the fullest."
  },
  hillary_allen: {
    name: 'Hillary Allen',
    country: 'United States',
    countryIcon: 'usa',
    achievement: 'Cortina Trail race win 2018\nCourse record, TNF Endurance Challenge Chile 80km 2018\n2nd in the World Sky Running Ultra rankings 2017\nCourse record, Maderia Skyrace 2017\nTransvulcania 3rd place 2017\nUSA Mountain Running Team 2016\n3rd place, Ultra Skyrunning World Series 2016\nCourse record, TNF Cortina Trail 2016\nUS Sky Running Ultra Champion 2015\nCourse record, Speedgoat 50k 2015',
    desc: 'People don’t call Hillary Allen the “Hillygoat” for nothing: She has quickly proven her ability as a fast runner in the mountains, especially when the trail turns towards the sky. Originally a tennis player, Allen didn’t take up distance running until grad school, when she needed an outlet to clear her mind while on her degree in neuroscience. She linked up with a few local runners and never looked back, quickly achieving podium results in long distance trail races. Since then, her running has taken her to races around the world, where she continues to rack up podium finishes and set course records, while maintaining a humble attitude and great sense of humor while doing it.'
  },
  sage_canaday: {
    name: 'Sage Canaday',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '2-time US Olympic Trials Qualifier in the Marathon \n3-time Speedgoat 50km Champion \n3-time USATF National Champion (100km Trail, Mountain Running, and Trail Marathon) \n2-time Tarawera 100km Champion \n2-time Lake Sonoma 50-mile Champion \nWinner of The North Face 50-mile Endurance Challenge San Francisco \n2014 World Mountain Long Distance Champion (Pikes Peak Ascent in 2:10) ',
    desc: 'Sage has been a “mountain-ultra-trail” or “MUT” runner since 2012 when he moved to Boulder Colorado. Previously he raced mainly on the roads and track where he was the youngest qualifier at the 2007 US Olympic Marathon Trials at the age of 21. After transitioning to the trails and mountains in 2012 he became the US Mountain Running Champion and a few years later he also added the 100km Trail and Marathon Trail events to his list of US National titles. Internationally he won the Tarawera 100km in New Zealand twice and was the World Long Distance Mountain Running Champion at the Pikes Peak Ascent in 2014.  He also won the prestigious North Face Endurance Challenge 50-mile race in San Francisco and is a 3-time Winner of the Speedgoat 50km. Looking ahead to the future Sage looks to compete at the most competitive mountain-ultra-trail races in the world.'
  },
  cody_reed: {
    name: 'Cody Reed',
    country: 'United States',
    countryIcon: 'usa',
    achievement: '2014 NCAA Cross Country Nationals \n2014 Big Sky Indoor Conference Championships (in Flagstaff) 3k 2nd place \n2016 Tamalpa Headlands 50k 1st place \n2017 Way Too Cool 1st place \n2018 Western States 7th place ',
    desc: "Cody Reed lives and trains on the mountains and in the canyons around Flagstaff, Arizona with the Coconino Cowboys. He has been running competitively since middle school but it was only in 2016 that Cody decided to try a trail race and he has't looked back since. Cody has been able to travel the world doing what he loves and spread the word about how great trail running and racing is."
  },
  harry_jones: {
    name: 'Harry Jones',
    country: 'United Kingdom',
    countryIcon: 'kingdom',
    achievement: '',
    desc: 'Harry first started running as a junior on the track before eventually transitioning into the world of ultra trail running. He’s been focusing primarily on the 100km distance for the past 2 years and has podiumed in a number of international races, including 3rd place at Tarawera Ultramarathon, Cappadocia Ultra-Trail and Ultra-Trail Australia. In his spare time Harry works as a running coach and YouTuber, documenting his training and racing around the world. He’s currently training for his biggest challenge yet — his first 100 miler at UTMB in August 2019.'
  },
  zach_bitter: {
    name: 'Zach Bitter',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'World and American Record Holder\n2012 & 2015 National Champion (50 mile)\n2014 National Champion (100 mile)\nJFK 50 Mile Course – 9th Fastest Time',
    desc: 'Zach Bitter is an extreme endurance athlete and coach. Zach holds the World Record for 100 Miles (11 hours 19 minutes 13 seconds) and 12 Hours (104.88 Miles). Zach has raced around the globe; including representing Team USA at the World 100km Championships on three occasions. When not on the road or track, Zach likes to mix it up on the trails. He has wins at both the Javelina 100 mile and San Diego 100 mile. '
  },
  audrey_tanguy: {
    name: 'Audrey Tanguy',
    country: 'France',
    countryIcon: 'france',
    achievement: '2019 Lavaredo Ultra Trail (Italy) - 2nd\n2019 MIUT Ultra Trail de Madère - 3rd\n2019 TransJeju Corée (50 km) - 1st\n2018 & 2019 Trace des Ducs de Savoie (74) - 1st\n2018 90 kms du Mont Blanc (74) - 2nd',
    desc: 'Audrey Tanguy is based in the French Alps where she trains to be one of the best Trail Runners in Europe. Her accomplishments as a Trail and Mountain runner are impressive with podium finishes at Marathon Du Mont-Blanc, Lavaredo Ultra Trail and twice at Madeira Island Ultra Trail (MUIT). Perhaps most extraordinary, she is the two-time defending champion of UTMB-TDS. With her passion for trail-running, Audrey hopes to continue to defend her titles, while taking on new adventures.'
  },
  scotty_hawker: {
    name: 'Scotty Hawker',
    country: 'New Zealand',
    countryIcon: 'newzealand',
    achievement: '5th – 2019 Hong Kong 100km, Hong Kong\n1st – 2019 Mt Solitary Ultra 45km, Australia\n3rd – 2019 Retezat Skyrace 28km, Romania\n3rd – 2019 Lavaredo Ultra Dolomites, Italy \n2nd – 2019 Grossglockner Ultra Trail 50km, Austria \n3rd – 2019 UTMB, France\n1st – 2019 Maesalong 10km, Thailand',
    desc: "Scotty Hawker is a trail & ultramarathon runner from Christchurch, New Zealand. He currently spends 6 months of the year traveling throughout Europe with his wife and three-year-old daughter. They love exploring new countries and it provides Scotty with the opportunity to line up in some of the world's most competitive trail and ultramarathon events. In 2019 Scotty capped off a great season of racing with a 3rd place finish at the prestigious Ultra Trail du Mont Blanc. After an incredibly challenging year in 2018 and nearly giving the sport away, it was a result that was hard fought and has left Scotty with a newfound confidence as he gets ready for the 2020 season. Scotty is also a coach, helping athletes from all over the world prepare for trail and ultramarathon distance races. Scotty loves being able to share his knowledge and experience in the sport of trail running with others and finds that coaching gives him balance in life alongside being an athlete."
  },
  tommy_caldwell: {
    name: 'Tommy Caldwell',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'First Free Climb of the Dawn Wall of El Capitan Yosemite\nFirst Free Ascent of Dihedral Wall\nFree Climbed the Nose in 11 hours\nThe Nose speed record in 1 hour 58 mins\nFirst Ascent the Fitz Roy Traverse in Patagonia\n',
    desc: 'National Geographic called Caldwell "arguably the best all-around rock climber on the planet." Tommy has climbed all over the world and established some of the hardest rock climbing routes in the USA. Whether it’s the Dawn Wall, the Fitz Traverse or The Nose speed record, Tommy is unstoppable and continues to prove what is possible when you push the human body.'
  },
  john_price: {
    name: 'John Price',
    country: 'Canada',
    countryIcon: 'canada',
    achievement: '',
    desc: 'John Price is a photographer and climber who has spent the last six years travelling all over the world, while basing himself out of Canada.  Over the last four years, Price has been actively climbing and photographing rock, ice, and alpine ascents throughout North America, the remote corners of the Himalaya, rural Japan, Ice climbs in China and extensively throughout the Canadian Rockies.  He is currently based in Canmore, Alberta where he works as a freelance adventure, lifestyle, and landscape photographer.'
  },
  luke_smithwick: {
    name: 'Luke Smithwick',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'A journalist recently dubbed COROS pro ski mountaineer and alpinist Luke Smithwick, “one of the most prolific Himalayan climbers in recent times.” 73 Himalayan expeditions in the past 9 years, he is focused on exploratory skiing and alpinism in the range. Smithwick has skied more than 30 aesthetic foot-powered first descents in the Himalayas, developing a depth of knowledge and ski resume that few possess along the way.  His home is Victor, Idaho at the foot of the Tetons.  He comes to the COROS pro team with big plans for 2020 and beyond.'
  },
  hilaree_nelson: {
    name: 'Hilaree Nelson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Combining a passion for exploration, mountain adventures and skiing, Hilaree Nelson has travelled to some of the most exotic mountain ranges on earth. Her expedition career has led her to many “firsts” in the world of ski mountaineering including linking two 8000m peaks (Everest and Lhotse) in one push, first ski descents on Baffin Island, a first American ascent and ski descent of Papsura peak in India, and most recently a first ski descent of the 4th highest peak in the world, Lhotse. She is the Captain of the North Face Athlete Team, an active leader on climate with Protect Our Winters, and an avid proponent of wild places such as the Arctic National Wildlife Refuge. She holds to the philosophy that these remaining wild places have huge significance on the well-being of both the planet and the human psyche. Recently named by Men’s Journal as one of the most adventurous women of the last 25 years, as well as National Geographic’s 2018 Adventurer of the Year, Hilaree rounds out her athletic endeavors by sharing her many stories on stages across the country in hopes of inspiring imagination and passion in the people she encounters. Hilaree is also the mother of two wild boys and finds her sanity in the San Juan Mountains near her home in Telluride, Colorado. '
  },
  jim_morrison: {
    name: 'Jim Morrison',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Jim Morrison cemented his reputation as one of the greatest ski mountaineers of all time with a first descent of the Lhotse Couloir, in 2018, one of the last remaining premiere high-altitude ski lines in the world. Decades before that landmark achievement, Morrison was accumulating a lifetime of skiing experience around the globe. From Chamonix to Alaska and the Indian Himalaya, Morrison has climbed and skied the some of the world’s most demanding peaks, including a first descent of Papsura, a new ski line on Cho Oyu, as well as a summit and partial ski descent of Mt. Everest. In addition to his time in the mountains, Morrison is also a successful entrepreneur, owning and operating a luxury home construction business in Lake Tahoe. On top of that, he gives back to his community as a board member of his local airport district and is actively involved in the environmental non-profit, Protect Our Winters.'
  },
  jason_antin: {
    name: 'Jason Antin',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Jason Antin, a native of New England who now calls Colorado home, focuses all of his time striving to achieve the ultimate work-life balance. Beyond helping launch a handful of outdoor focused start-up companies, he also spends much of his time working as a technical climbing guide for Alpenglow Mountain guides and Denver Mountain Guiding. On top of that, he is a strength and conditioning coach at The Alpine Training Center in Boulder, CO where he prepares his athletes for the physical and mental rigors of the mountains. Off the clock, Jason shares his home in Golden, CO with his wife Jenny and 3-year old daughter Avery. He enjoys moving quickly in the mountains over all mediums that mother nature shares with us, whether that be trails rock, ice or snow'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/retail.js
/* harmony default export */ const retail = ({
  retailTitle: 'Store Locator',
  findADealer: 'FIND A DEALER',
  loading: 'Loading Store Locator Software'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/privacy.js
/* harmony default export */ const privacy = ({
  privacyTitle: 'Privacy Policy',
  title: 'PRIVACY POLICY',
  updateDate: 'Last updated：8/15/2020',
  updateDesc: 'This Privacy Policy explains how information about you is collected, used and disclosed by COROS Wearables Inc. ("COROS," "we," or "us"). This Privacy Policy applies to information we collect when you use our products and services, including our websites and mobile applications, (collectively, the "Services") or when you otherwise interact with us. For details regarding any choices we offer in connection with our information practices, please see "Your Choices" below. If you have any questions about this Privacy Policy, please contact us at info@coros.com.',
  infoTitle: 'Collection of Information',
  providedInfo: {
    title: 'Information You Provide to Us',
    desc: 'We collect information you provide directly to us through the Services or otherwise. For example, we collect information when you create an account, update your profile, sign up for our newsletter, use our device for a workout, sync your workout history to our server, make a purchase, request customer support or otherwise provide information to us. The types of information we may collect include your name, email address, shipping or billing address, payment method information, workout history and any other information you choose to provide.'
  },
  collectForService: {
    title: 'Information We Collect Automatically When You Use the Services',
    desc: "When you access or use our Services, we automatically collect information about you, including:\n    \u2022 Log Information: We collect log files in connection with your use of the Services, including the type of browser you use, access times, pages viewed, your IP address and the page you visited before navigating to our websites.\n    \u2022 Device Information: We collect information about the computer or mobile device you use to access our Services, including the hardware model, operating system and version, unique device identifiers and mobile network information.\n    \u2022 Location Information: We may collect information about your location through various technologies, including by deriving approximate location from IP address. With your consent, we may also collect more precise location via our mobile app.\n    \u2022 After you use the COROS app to upload your device's routine tracking data and motion, the data will be uploaded to the server store, and the uploaded data will include steps, calories, heart rate, activity time, activity data, and activity trajectory. You can turn off the GPS switch at the end of the watch, and you will no longer be able to record your trajectory and upload server storage when you move. If you are using the map rendering function, we will send your location information to the map rendering service provider who can draw and display your location on the map according to the agreement, these suppliers are not allowed to share or use this data for any other purpose.\n    \u2022 To use COROS Training Hub, please log in with the same account credentials used to sign in to the COROS app. If you have coaching access, you can create teams and invite other users to join your team via invitation links or QR codes. You will have the ability to set privacy permissions to hide or allow your team to view your personal information and workout data on the personal information page in COROS Training Hub. You also can set privacy permissions to allow coaches to edit your calendar, view your workout data and leave comments to monitor your training progress in COROS Training Hub. COROS is not responsible for the content of messages generated within the COROS Training Hub. COROS is not responsible for the conduct of any user of COROS (online or offline).\n    \u2022 App Crash Report and feature usage report: when your COROS app is not functioning properly, your app may send crash reports to our team for analysis. This report is anonymous and does not contain any personal information. The app also collects user behavior data anonymously to provide feedback to the developers about which features are most popular in order for our developers to make the best decision for future product development.\n    \u2022 Emergency Contact: When using the emergency contact function of the helmet, you will enter the phone contact and memo information for the emergency contact in advance, which is only used when you are wearing a helmet and connected to the app ride, the helmet recognizes this emergency and requests the app to request the server to send a message to the emergency contact. We will not expose this contact for other purposes. In the event of an accident that triggers the sending of a text message, we will include the location information in the message sent and the local time when the accident occurred to the previously set emergency contact. We will not be held responsible for the SOS SMS delivery failure due to interruption of SMS carrier service or no response. Information Collected by Cookies and Other Tracking Technologies: We and our service providers use various technologies to collect information, including cookies and web beacons. Cookies are small data files stored on your hard drive or in device memory that help us improve our Services and your experience, see which areas and features of our Services are popular and count visits. Web beacons are electronic images that may be used in our Services or emails and help deliver cookies, count visits and understand usage and campaign effectiveness."
  },
  collectFromOther: {
    title: 'Information We Collect from Other Sources',
    desc: "We may also obtain information from other sources. For example, if you create or log into your account through a social media service, we will receive certain information from that service, such as your name, account information or friends list, in accordance with the authorization procedures determined by that service. Use of Information We may combine the information we collect about you and use this information to:\n    \u2022 Provide, maintain and improve our Services and develop new products and services;\n    \u2022 Provide and deliver the products or services you request or purchase;\n    \u2022 Send you notices, updates, alerts, confirmations, customer service responses, and other support and administrative messages;\n    \u2022 Communicate with you about products, services, offers, promotions, or other information we think will be of interest to you;\n    \u2022 Monitor and analyze trends, usage and activities in connection with our Services;\n    \u2022 Detect, investigate and prevent fraudulent transactions and other illegal activities and protect the rights and property of COROS and others; and\n    \u2022 Personalize and improve the Services and provide content or features that match your profile or interests."
  },
  sharingInfo: {
    title: 'Sharing of Information',
    desc: "We may share information about you as follows or as otherwise described in this Privacy Policy:\n    \u2022 With service providers that carry out work on our behalf;\n    \u2022 If you choose to connect your COROS account to other 3rd party services, such as Strava, TrainingPeaks or other services not explicitly listed for auto-sync, your data will be automatically sent to them. You can disable the auto-sync settings on your COROS app at any time, but the data sent to the 3rd party platform will stay there unless deleted from their server.\n    \u2022 If you participate in interactive areas of our Services, certain information about you may be displayed publicly via the Services, such as your username and profile information;\n    \u2022 In response to a request for information if we believe disclosure is in accordance with, or required by, any applicable law, regulation or legal process;\n    \u2022 If we believe your actions are inconsistent with our user agreements or policies, or to protect the rights, property and safety of COROS or others;\n    \u2022 In connection with, or during negotiations of, any merger, sale of company assets, financing or acquisition of all or a portion of our business by another company;\n    \u2022 Between and among COROS and our current and future parents, affiliates, subsidiaries and other companies under common control and ownership;\n    \u2022 With your consent or at your direction, we may also share aggregated or de-identified information, which cannot reasonably be used to identify you."
  },
  advancedRawData: {
    title: 'Advanced Workout Raw Data',
    desc: "Advanced workout raw data, including the source data of your COROS device\u2019s GPS, heart rate, battery performance, etc. are stored on your COROS device. You may be requested to send the raw data via the COROS app to our team when you reaching out for customer support or troubleshooting. Additionally, our team requires raw data submission in order to determine hardware failure in response to warranty claims."
  },
  socialSharingFeat: {
    title: 'Social Sharing Features',
    desc: "The Services may offer social sharing features and other integrated tools (such as with other social networks), which let you share actions you take on our Services with other media, and vice versa. Your use of such features enables the sharing of information with your connections or the public, depending on the settings you establish with the entity that provides the social sharing feature. For more information about the purpose and scope of data collection and processing in connection with social sharing features, please visit the privacy policies of the entities that provide these features."
  },
  ad: {
    title: 'Analytics and Advertising Services Provided by Others',
    desc: "We may use third parties to provide analytics and advertising services for our websites and online services. These entities may use cookies, web beacons, device identifiers and other technologies to collect information about your use of the Services and other websites and online services, including your IP address, web browser, mobile network information, pages viewed, time spent on pages or in apps, links clicked and conversion information. This information may be used by COROS and others to analyze and track usage activity, determine the popularity of certain features, and deliver ads and content tailored to your interests. For more information about interest-based ads, including how to opt out of having your web-browsing information used for interest-based ads, please visit www.aboutads.info/choices. Your mobile device may also include a feature that allows you to restrict the use of certain information collected through apps for purposes of delivering interest-based ads."
  },
  deleteAccount: {
    title: 'Delete of Your Account',
    desc: "You can send an email to support@coros.com to request your COROS account be deleted, including all personal data. A copy of your workout history in a .fit file format may also be requested from this email."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/tradeIn.js
/* harmony default export */ const tradeIn = ({
  title: 'COROS Trade-In Program',
  desc: 'Trade in your old GPS watch for a $50+ credit towards a new COROS watch and recycle it for a more sustainable future.',
  pageTitle: 'COROS TRADE-IN PROGRAM',
  pageDesc: "Trade in a working GPS watch from any brand including COROS for up to a $100 credit towards your new COROS watch purchase. Each trade-in eligible watch applies to only one new watch purchase.\n\nOnce the trade-in unit has been shipped to us, it is unable to be returned or refunded if you change your mind.",
  residentsDescNotify: "The program is currently unavailable in the United States. Sign up for email notifications when the program is available again.",
  residentsDesc: "The program is currently available for US residents only. ",
  nextSteps: ['Our team will review your information and provide an estimate value by email.', 'If you choose to accept the offer, place your new watch order with the original price.', 'Ship the trade in unit with prepaid shipping label provided by COROS, along with your order email confirmation.', 'We will refund the value of your trade in to your order once we receive your shipment.', "This offer can't be combined with other price discounts.", 'Enjoy your newly upgraded COROS watch!'],
  howItWorks: ["Order your new\n  COROS watch", "Submit your\n  application", "Receive a free\n  shipping label", "Ship your old\n  watch to COROS", "Get a refund for\n    your new watch"],
  notifyButton: 'NOTIFY ME',
  notifyPlaceholder: 'NOTIFY WHEN AVAILABLE',
  newTradeIn: {
    descs: ["While embracing the newest in training and outdoor tech is exciting,\n      recycling your old GPS watch can often be a hassle. COROS is here to simplify the process.", "Trade in any functioning Garmin or Apple GPS watch and receive at least $50 credit toward your next COROS watch purchase made through the COROS website. We've partnered with reputable organizations within the industry to ensure your old watch finds a new home, not only extending its life cycle but also contributing to a more sustainable future by reducing electronic waste.", "This program is exclusive to US residents.\n      Credit applies only to orders placed on COROS.com."],
    faq: [{
      title: 'What will happen to my old watch?',
      desc: 'Your old Garmin or Apple watch is either refurbished and rehomed or recycled responsibly to contribute to a sustainable future.'
    }, {
      title: 'Can I trade in COROS or other watches?',
      desc: 'We aim to offer a trade-in option for COROS users in the future but currently lack the resources to support it. We are offering this for Garmin and Apple users because we have secured a partnership with a reputable service provider in the US that specializes in refurbishing these watches. In the meantime, we are working hard to expand our trade-in program to more regions and include additional models.'
    }, {
      title: 'Can I transfer all my previous Garmin activity data to COROS?',
      desc: "Absolutely! We've streamlined the transition to be as smooth as possible. First, export your Garmin data. Then, create your COROS account via the COROS app and import your data to COROS. <a href=\"https://support.coros.com/hc/en-us/articles/7708736140948-How-to-bulk-import-workout-data-from-Garmin-to-COROS\" target=\"_blank\" class=\"underline hover:underline\">Click here</a> for more details."
    }, {
      title: "What happens if my old watch isn't accepted for trade-in?",
      desc: "Unfortuantely, we are unable to process a return for the old watch. Rest assured, it will be recycled in an environmentally responsible manner. Our customer support team will contact you if your old watch is rejected."
    }, {
      title: 'What if I change my mind after shipping out my old watches?',
      desc: "Unfortunately, the trade-in can\u2019t be canceled once you ship out your old watch. We will not return your old watch even if you choose to return your COROS order."
    }, {
      title: 'How long does it take to get the refund?',
      desc: 'The refund is issued to your eligible COROS order within 2 weeks after your old Garmin or Apple watch is received and the condition is verified by us.'
    }, {
      title: 'When will this program be available in regions outside of the US?',
      desc: "While we currently limit the program to the US, we're always evaluating opportunities to expand it to more regions in the future, aiming to make the trade-in seamless and eco-friendly for everyone."
    }]
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/apex.js
/* harmony default export */ const en_apex = ({
  title: 'COROS APEX GPS Watch',
  desc: 'Our most versatile watch for outdoors athletes, who travel light and fast.',
  accessories: 'ACCESSORIES',
  battery_life: {
    title: 'Ultra-Durable\nBattery Life',
    desc: "Make constantly charging your watch a thing of the past. With APEX, you will have a watch that is built to last above and beyond your workout. In UltraMax setting, the battery is carefully\n        engineered to last up to 100 hours using GPS. While using normal mode will yield up to 35 hours, and regular usage up to 30 days."
  },
  'Built in Premium': {
    title: 'Built in Premium',
    desc: "Transitioning from the workplace to training is easy with the APEX's intelligent build and design. With finish options including titanium alloy and stainless steel bezel alongside a sapphire\n        glass face for extreme protection, you are prepared for any and every environment."
  },
  'Simplicity at its Finest': {
    title: 'Simplicity at its Finest',
    desc: "Changing screens and using devices can be overwhelming with traditional buttons, especially in the middle of a workout. With the digital dial, you can easily navigate through the APEX,\n        allowing you to focus on the important things like finishing your run or prepping your next set."
  },
  'Training Efficiency Without Injury': {
    title: 'Train Smarter With EvoLab',
    desc: "Unique metrics to track critical aspects of your training. Creating a comprehensive picture of your training to help you perform to the very best of your ability. Tired from a recent training session? View your Fatigue and Recovery metrics to see if recent workout stress is within our recommended ranges. Preparing for a race but unsure how to estimate the impact of training or fitness? Utilize our predictive tools within COROS Training Hub to estimate your Base Fitness and Training Load measurements, allowing you to peak at just the right time."
  },
  'Navigation Track': {
    title: 'Navigation Track',
    desc: "Equipped with track and navigation features, APEX can be your best tool when you need directions the most. Routes are uploaded and displayed on grid as a bread crumb trail with real time\n        information on heading and elevation and alerts to help you get back on course."
  },
  'Smart Learning Stride Length': {
    title: 'Smart Learning Stride Length',
    desc: "Introducing COROS' very own, Intelligent Stride Algorithm. This unique algorithm embodies machine learning at its core to record your personal range of motion while running. This will\n        build your very own stride model that will be used for indoor running or areas of weak GPS signal (such as tunnels)."
  },
  gpsAbilities: ['Learn Running Habits\nDuring Normal GPS', 'Estimate Running Distance And\nTrack When GPS Is Weak Or Lost'],
  'Your Complete Training Guide': {
    title: 'Your Complete Training Guide',
    desc: "Based on a unique algorithm with lactate threshold, VO2 Max and HR, the COROS Trainer dials-in your running training every day. Using your personal historical data along with metrics from\n      your latest activity, such as pace, distance and HR - COROS Trainer will calculate a perceived effort and recommend a time for full recovery."
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: "With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or\n      Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training\n      partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and\n      onto your watch. With the new training mode, your best efforts are well within your reach."
  },
  'Stay on Track': {
    title: 'Stay on Track',
    desc: "A standard track is 400m, so why can\u2019t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts\n      are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the\n      track \u2013 just like how you run on it."
  },
  pod: 'Working with COROS Performance Optimization Device (POD), APEX is able to provide advanced running metrics in real time, including power and form data to help turn you into a smarter and more efficient runner.',
  podLinkText: 'Check out COROS POD',
  battery: {
    size46: {
      normal: "35 Hours Normal\n            GPS Mode",
      ultra: "70 Hours\n            UltraMax GPS Mode",
      regular: "30 Days\n            Regular Use"
    },
    size42: {
      normal: "25 Hours Normal\n            GPS Mode",
      ultra: "60 Hours\n            UltraMax GPS Mode",
      regular: "24 Days\n            Regular Use"
    }
  },
  filterDifferentDialog: {
    intro: 'While the APEX 42mm and 46mm watches share many similar specs, the watches have a few important differences to highlight:'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/apex2.js
/* harmony default export */ const en_apex2 = ({
  apex2title: 'COROS APEX 2/2 Pro',
  title: 'COROS APEX 2/2 Pro GPS Outdoor Watch',
  desc: 'For outdoor athletes who train hard and move fast.',
  apex2Accessories: 'APEX 2 ACCESSORIES',
  apex2proAccessories: 'APEX 2 Pro ACCESSORIES',
  productTitle: 'for training and \n trailblazing',
  productDesc1: "Designed for performance over all types of terrain, the APEX 2 and APEX 2 Pro GPS \n Outdoor Watches are built with revolutionary technologies for your most ambitious goals. ",
  productDesc2: "With an even more durable exterior, redesigned GPS antenna for stronger performance,\n enhanced navigation experience, next-generation optical heart rate sensor, and longer \n GPS battery life, the APEX 2 and APEX 2 Pro watches are the most powerful wrist-worn \n tools to guide your training and track your movements across the wilderness. Get ready \n to train smarter and go longer.",
  productDescMobile1: "Designed for performance over all types of terrain, \n the APEX 2 and APEX 2 Pro GPS Outdoor Watches \n are built with revolutionary technologies for your \n most ambitious goals. ",
  productDescMobile2: "With an even more durable exterior, redesigned \n GPS antenna for stronger performance, enhanced \n navigation experience, next-generation optical heart \n rate sensor, and longer GPS battery life, the \n APEX 2 and APEX 2 Pro watches are the most \n powerful wrist-worn tools to guide your training and \n track your movements across the wilderness. Get \n ready to train smarter and go longer.",
  explorationTitle: 'push the boundaries of \n exploration',
  explorationDesc: "The ultimate outdoor sports watch balances durability and functionality, which is \n why we've carefully engineered every single detail with performance in mind. \n With the APEX 2 and APEX 2 Pro, you'll have a watch that lasts\njust as long as you. And more. ",
  designLabel1: "Grade 5 Titanium \n Bezel with PVD Coating",
  designLabel2: "Glove-Compatible \n Large Digital Dial",
  designLabel3: "Scratch-Resistant \n Sapphire Glass",
  explorationDescMobile: "The ultimate outdoor sports watch balances \n durability and functionality, which is why we've \n carefully engineered every single detail with \n performance in mind. With the APEX 2 and \n APEX 2 Pro, you'll have a watch that lasts\njust as long as you. And more. ",
  designTitle: 'Designed for Durability',
  designDesc: "A sapphire glass screen and grade 5 titanium alloy bezel protect the electronic \n components inside the APEX 2 and APEX 2 Pro. While the sapphire glass stays \n virtually scratch-free, a new PVD coating offers 2x scratch resistance on the \n bezel compared to its predecessor. ",
  designDescMobile: "A sapphire glass screen and grade 5 titanium alloy \n bezel protect the electronic components inside the \n APEX 2 and APEX 2 Pro. While the sapphire glass \n stays virtually scratch-free, a new PVD coating \n offers 2x scratch resistance on the bezel\ncompared to its predecessor. ",
  temperatureResistanTitle: 'Temperature Resistant',
  temperatureResistanDesc: 'Any climate, anywhere. The APEX 2 works in on-wrist operating \n temperatures ranging from -20℃ to 50℃, so you can\ntest the limits of exploration.',
  temperatureResistanDescMobile: 'Any climate, anywhere. The APEX 2 works in on- \n wrist operating temperatures ranging from -20℃ \nto 50℃, so you can test the limits \n of exploration.',
  temperatureResistanLower: -20,
  temperatureResistanUpper: 50,
  temperatureUnit: '℃',
  waterproofTitle: 'Water Resistant',
  waterproofDesc: "Rain, snow, puddles, mud, you name it. \n The APEX 2 stays dry in any condition. \n Built with 5 ATM water resistance, this \n watch also withstands pressures up to a \n depth of 50m.",
  waterproofDescMobile: "Rain, snow, puddles, \n mud, you name it. The \n APEX 2 stays dry in any \n condition. Built with 5 \n ATM water resistance, \n this watch also \n withstands pressures \n up to a depth of 50m.",
  dialTitle: 'Easy-To-Use Dial',
  dialDesc: "Our simple button design features a large digital dial, so you can easily change\nsettings on your watch using a few simple clicks - even with gloves.",
  dialDescMobile: "Our simple button design features a large digital \n dial, so you can easily change settings on your \n watch using a few simple clicks - even with gloves.",
  batteryTitle: 'even better battery life',
  batteryDesc: "Thanks to the low power consumption from the latest satellite signal system design, \n we get longer GPS battery life compared to the original APEX. The APEX 2 provides\n40 hours of full GPS battery life, while the APEX 2 Pro provides 66 hours.\nPlus, it takes less than  2 hours  for the watch to go from zero to full charge.",
  batteryDescKeyword: '66 hours',
  batteryDescMobile: "Thanks to the low power consumption from the \n latest satellite signal system design, we get longer \n GPS battery life compared to the original APEX. The \n APEX 2 provides 40 hours of full GPS battery life, \n while the APEX 2 Pro provides 66 hours. Plus, it \n takes less than 2 hours for the watch to go from \n zero to full charge.",
  batteryDescMobileKeyword: '66 hours',
  batteryCompareImprove: 'Up to',
  batteryCompareImproveTitle: 'Longer GPS battery life',
  navTitle: 'navigate the outdoors \n like never before',
  navDesc: "The APEX 2 doubles as a watch ready for your backyard trail adventures or \n scaling glaciated mountains. You'll be equipped with top-notch navigation \n features, so you know exactly where you are in the wilderness and\nhow to get back to your original destination. ",
  navDescMobile: "The APEX 2 doubles as a watch ready for your \n backyard trail adventures or scaling glaciated \n mountains. You'll be equipped with top-notch \n navigation features, so you know exactly where\nyou are in the wilderness and how to get back\nto your original destination. ",
  gpsTitle: 'next level gps accuracy',
  gpsTitleMobile: 'next level \n gps accuracy',
  gpsDesc: "Together with the 50% higher performance antenna \n and All-Satellite GNSS chipset, the APEX 2 receives \n signals from all five major satellite systems for the \n most precise data. Additionally, the APEX 2 Pro \n features the latest dual-frequency technology to track \n you through the most challenging locations.",
  gpsDescMobile: "Together with the 50% higher \n performance antenna and All-\nSatellite GNSS chipset, the \n APEX 2 receives signals from \n all five major satellite systems \n for the most precise data. \n Additionally, the APEX 2 Pro \n features the latest dual- \n frequency technology to track \n you through the most \n challenging locations.",
  outdoorNavTitle: 'Never Get Lost Again',
  outdoorNavDesc: "Our highly intuitive navigation system gives you the tools you need when exploring the outdoors. With \n free global offline Landscape and Topographical maps, you can access critical navigation information\nin the most remote locations. The digital dial on the COROS APEX 2 and APEX 2 Pro makes it easy to \n zoom in and out of your map, while the touchscreen allows you to drag the map with your finger. ",
  outdoorNavLabel1: "Sun Movements.",
  outdoorNavLabel2: "Elevation Profile.",
  outdoorNavLabel3: "Distance to Destination.",
  outdoorNavLabel4: "Deviate Alert.",
  outdoorNavLabel5: "Checkpoint.",
  outdoorNavLabel6: "Exact GPS coordinates.",
  outdoorNavScene1: "Stay one step ahead of the sun. Move quickly before it gets dark, or beat the early sunrise.",
  outdoorNavScene2: "Get to know your course elevation changes before or during the activity. ",
  outdoorNavScene3: "Get additional motivation by knowing your distance to the next checkpoint or final destination.",
  outdoorNavScene4: "Receive alerts when you are off-route with distance and heading info to get back on track.",
  outdoorNavScene5: "Mark important locations such as water sources, aid stations, or gear stash points for future navigation.",
  outdoorNavScene6: "Access your current GPS location, air pressure and estimated elevation.",
  plan: "Plan Your Next Adventure",
  planDesc1: "Simply open your app, start drawing your preferred route, and let Route \n  Planner choose your optimal path based on the closest trails \n  or streets available. Check distance and elevation, save it, \n  transfer it to your watch, or share it with your friends. ",
  planDesc2: "Currently, the COROS ecosystem is compatible with popular \n 3rd party route builders, such as Strava and Komoot.",
  planDescMobile: "Simply open your app, start drawing \n your preferred route, and let Route Planner choose \n your optimal path based on the closest trails or \n streets available. Check distance and elevation, save \n it, transfer it to your watch, or share it with your friends. \n Currently, the COROS ecosystem is compatible with \n popular 3rd party route builders, such as Strava and Komoot.",
  planDescMobile1: "Coming soon, the COROS App will add a new route-planning feature to our robust navigational ecosystem. Simply open your app, start drawing your preferred route, and let Route Planner choose your optimal path based on the closest trails or streets available. Check distance and elevation, save it, transfer it to your watch, or share it with your friends.",
  planDescMobile2: "Currently, the COROS ecosystem is compatible with popular 3rd party route builders, such as Strava and Komoot.",
  prepareTitle: "No Matter What, You'll Be Prepared",
  prepareTitleMobile: "No Matter What, \n You'll Be Prepared",
  prepareDesc: "With the beauty of the outdoors also comes risk. Stormy weather, altitude sickness, \n darkness, dehydration - these are all potential realities of trekking through the \n wilderness. The APEX 2 and APEX 2 Pro prepare you for any situation, so\nyou can stay safe and informed while you power to the summit.",
  prepareDescMobile: "With the beauty of the outdoors also comes risk. \n Stormy weather, altitude sickness, darkness, \n dehydration - these are all potential realities of \n trekking through the wilderness. The APEX 2 and \n APEX 2 Pro prepare you for any situation, so you \n can stay safe and informed while you power to the summit.",
  nutritionAlert: "nutrition\nalert",
  sunMovements: "sun\nmovements",
  stormAlert: "storm\nalert",
  cameraControl: "camera\ncontrol",
  altitudeMode: "altitude\nmode",
  nightMode: "night\nmode",
  fitnessTitle: "build fitness, \n unlock your best self",
  fitnessDesc: "Whatever your next adventure may be, the COROS APEX 2 and APEX 2 Pro paired \n with the COROS EvoLab sports science system can help you make progress, or \n set a new personal best. Backed by the best endurance athletes in the world,\nour training solution helps you build fitness at home or in the gym, so you'll\nbe ready for the great outdoors. ",
  fitnessDescMobile: "Whatever your next adventure may be, the COROS \n APEX 2 and APEX 2 Pro paired with the COROS \n EvoLab sports science system can help you make \n progress, or set a new personal best. Backed by the \n best endurance athletes in the world, our training \n solution helps you build fitness at home or in the \n gym, so you'll be ready for the great outdoors. ",
  sensorTitle: "Our Most Accurate \n Heart Rate Sensor To Date",
  sensorDesc: "The more accurate your heart rate data, the better \n training insights you'll have. Our brand new wrist optical \n heart rate sensor features a 5-LED system with 4 photodetectors in a \n customized layout, protected by a smooth, scratch- \n resistant cover. With advanced signal noise removal \n algorithms, your APEX 2 and APEX 2 Pro deliver a new \n level of heart rate accuracy. Whether you're moving fast \n through the canyons, or catching sleep in a tent for \n recovery, the new APEX 2 watches record your \n performance without missing a beat...literally.",
  sensorDescMobile: "The more accurate your heart rate data, the better \n training insights you'll have. Our brand new wrist \n optical heart rate sensor features a 5-LED system with 4 photodetectors \n in a customized layout, protected by a smooth, \n scratch-resistant cover. With advanced signal \n noise removal algorithms, your APEX 2 and APEX \n 2 Pro deliver a new level of heart rate accuracy. \n Whether you're moving fast through the canyons, \n or catching sleep in a tent for recovery, the new \n APEX 2 watches record your performance without \n missing a beat...literally.",
  trackRecoverTitle: "Track Your Recovery",
  trackRecoverDesc: "Proper recovery allows you to train harder. Monitor \n your sleep quality with the APEX 2 and APEX 2 Pro, \n which track deep, light, and REM sleep - all crucial \n stages of your sleep cycle. When you wake up, take a \n quick heart rate variability (HRV) measurement to \n determine how prepared your body is to take on the \n stressors of the day. If you're training at altitude, turn \n on Altitude Mode or manually check your blood oxygen \n level (SpO2) to monitor your body's adaptation.",
  trackRecoverDescMobile: "Proper recovery allows you to train harder. Monitor \n your sleep quality with the APEX 2 and APEX 2 Pro, \n which track deep, light, and REM sleep - all crucial \n stages of your sleep cycle. When you wake up, take \n a quick heart rate variability (HRV) measurement \n to determine how prepared your body is to take on \n the stressors of the day. If you're training at \n altitude, turn on Altitude Mode or manually check \n your blood oxygen level (SpO2) to monitor your \n body's adaptation.",
  trainingSolutionTitle: "An Unparalleled Training Solution",
  trainingSolutionTitleMobile: "An Unparalleled \n Training Solution",
  trainingSolutionDesc: "Ever since its launch, COROS EvoLab and COROS Training Hub have \n assisted numerous record-breaking athletic feats: Eliud Kipchoge's \n marathon world record, Kilian Jornet's new UTMB course record, \n and countless ultra running records, including 24 hours, 100 miles, \n and more. With COROS APEX 2 and APEX 2 Pro, you'll have access \n to world-class training insights, just like the pros.",
  trainingSolutionDescMobile: "Ever since its launch, COROS EvoLab and COROS \n Training Hub have assisted numerous record-\n breaking athletic feats: Eliud Kipchoge's marathon \n world record, Kilian Jornet's new UTMB course \n record, and countless ultra running records, \n including 24 hours, 100 miles, and more. With \n COROS APEX 2 and APEX 2 Pro, you'll have access \n to world-class training insights, just like the pros.",
  traninghubTitle: "Create Structured Workouts \n and Training Plans",
  traninghubDesc: "Having a plan in place makes training more efficient \n and lets you monitor fitness gains over time. Get \n access to athlete-approved workouts and training \n plans, or build your own via our mobile and desktop \n apps. Program workouts from your coach directly in \n the COROS Training Hub, which they can review \n immediately once your watch syncs. ",
  trainingLabel1: "General Training Status.",
  trainingLabel2: "Race Predictor.",
  trainingLabel3: "7-Day Total Load.",
  trainingLabel4: "Effort Pace.",
  trainingLabel5: "Training Focus.",
  trainingLabel6: "Recovery Timer.",
  trainingDesc1: "Understand how your body is reacting to recent training with fatigue and fitness insights.",
  trainingDesc2: "An estimate of how fast you're likely to run a 5k, 10k, half marathon and full marathon.",
  trainingDesc3: "Understand your past week's training loads and check if they are in the recommended zone.",
  trainingDesc4: "Manage your effort regardless of uphill or downhill slopes to better help your training and racing.",
  trainingDesc5: "Summarize the primary improvement of your run based on training load and intensity. ",
  trainingDesc6: "Receive feedback on the time needed to receive full recovery and to begin easy or hard training.",
  repsTrackTitle: "Strength Sessions Made Easier",
  repsTrackDesc: "Tired of keeping count? COROS tracks your reps and \n sets automatically, so you don't have to. Select from \n 200+ preloaded exercises to create your ideal strength \n training session. Share your workouts with friends \n and training partners via text, email, social media, or \n in-person using a QR code in the COROS app.",
  repsTrackDescMobile: "Tired of keeping count? COROS tracks your reps \n and sets automatically, so you don't have to. Select \n from 200+ preloaded exercises to create your ideal \n strength training session. Share your workouts \n with friends and training partners via text, email, \n social media, or in-person using a QR code in the \n COROS app.",
  packagelist: [{
    name: 'COROS APEX 2/2 Pro',
    num: 1
  }, {
    name: 'Charging Cable ',
    num: 1
  }, {
    name: 'Nylon Watch Band ',
    num: 1
  }],
  comingSoon: 'COMING SOON',
  filterDifferentDialog: {
    intro: 'While the APEX 2 and APEX 2 Pro watches share many similar specs, the watches have a few important differences to highlight:',
    list1: ['COROS APEX 2', 'has a 1.2-inch screen and lasts 45 hours in full GPS mode.'],
    list2: ['COROS APEX 2 Pro', 'has a bigger screen, longer battery life, and dual frequency for enhanced tracking accuracy.'],
    link: ['Visit the', 'comparison chart', 'for all the spec details.']
  },
  dustyPinkDesc: "At dawn or dusk across diverse landscapes of sand, dirt, and rock,\n  the APEX 2 Dusty Pink pays tribute to one of nature's most inspiring\n  colors that often only exists for a short magical moment. Enjoy the\n  sight of this stunning limited edition on your wrist while supplies last.",
  gobiDescs: ["Known for its arid landscape, unforgiving terrain, and extreme conditions, the vast Gobi \n    Desert lends its name to a limited edition watch that would happily call this place home.", "With advanced navigation features, class-leading battery life, rugged durability and more, \n    COROS APEX 2 Pro Gobi is designed to thrive where few dare to tread. So wherever your trail takes \n    you, be sure to grab one of the 1500 available units before they disappear like the shifting desert sands."],
  gobiDescsMobile: ["Known for its arid landscape, unforgiving\n    terrain, and extreme conditions, the vast Gobi\n     Desert lends its name to a limited edition\n     watch that would happily call this place home.", "With advanced navigation features,\n    class-leading battery life, rugged durability\n     and more, COROS APEX 2 Pro Gobi is\n    designed to thrive where few dare to tread.\n    So wherever your trail takes you, be sure to\n     grab one of the 1500 available units before\n    they disappear like the shifting desert sands."]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pod.js
/* harmony default export */ const en_pod = ({
  title: 'COROS POD',
  desc: 'Our companion device for advanced data capture and analysis.',
  performanceTitle: 'Performance Optimization Device',
  performanceDesc: 'Can you ever have enough data? We didn’t think so, which is why we created the COROS Performance Optimization Device aka the COROS POD. The COROS POD provides all of the advanced running analytics you crave complementing your COROS GPS Watch to help keep you healthy and fit.',
  useDemo: 'The COROS POD is easy to use, simply shake to activate, pair with your watch or the COROS app and clip on vertically to your waist in the center of your back.',
  features: [{
    title: 'Left/Right balance',
    desc: 'We would all love to have an even 50/50 split between our left and right legs, however for many reasons, this is less typical than you would think. Knowing which side of your body you tend to favor can help you identify potential injuries before they occur and can be useful in correcting your running form.'
  }, {
    title: 'Stride Ratio',
    desc: "Stride Ratio is your Stride Height divided by your Stride Length. Let’s find the ideal ratio to make sure you aren’t jumping up and down or trying to enter a long jump competition. An ideal Stride Ratio ensures that you are using your body's energy to propel yourself forward as efficiently as possible. "
  }, {
    title: 'Stride Height',
    desc: 'Also known as vertical oscillation, stride height measures how high your body lifts off the ground during your running stride. Why does this matter? While it is important to make sure you are pushing off the ground, you also want to make sure more of your energy is used to move your forward rather than up in the air. Too low or too high can indicate opportunities for improvement – let’s find your sweet spot.'
  }, {
    title: 'Ground Time',
    desc: 'The key difference between running and walking is that when running, there is a period of time that both feet are off the ground. The more time your feet are on the ground, the less time you are moving forward. An efficient stride spends enough time on the ground to power up for the next stride and not a millisecond more. '
  }, {
    title: 'Form Power',
    desc: 'What’s Form Power – this is essentially the amount of power wasted due to inefficiencies in your running form. Just like ground contact time above, the lower the number, the better and more efficient the runner. Be sure to see how your form power changes as your body fatigues during a run as breakdowns in form are likely to occur. So remember, better efficiency = less wasted energy = lower form power.  '
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pod2.js
/* harmony default export */ const en_pod2 = ({
  title: 'COROS POD 2 - Run Beyond GPS',
  desc: 'Next level accuracy for all runners.',
  shopify_product_extra_desc_1: '*Pre-order now. Shipping starts in 10-15 business days.',
  shopify_product_extra_desc_2: '*Check the specs sheet for watch compatibility info.',
  name: 'COROS POD 2',
  subtitle: 'run beyond the limits of gps',
  product_detail: "Meet the all-new COROS POD 2. A lightweight, water-resistant watch accessory that clips onto your shoe or waistband for next level running data accuracy. With optimized sensor hardware and intuitive software algorithms, the COROS POD 2 measures your run directly from your foot or body movements. It connects to your COROS watch to provide real-time data, so you can always train or race with the right information.",
  problem: 'the problem',
  problem_desc: 'GPS technology is amazing, but it’s not perfect.',
  problem_desc_mobile: 'GPS technology is amazing, \n but it’s not perfect.',
  problem_scene1: 'Tall buildings interfere with satellite data',
  problem_scene2: 'Pace changes can have up to 10 seconds delay',
  problem_scene2_mobile: 'Pace changes can have a delay',
  problem_scene3: "Indoor running is \n just guesswork",
  solution: 'our solution',
  solution_desc: "The COROS POD 2 solves GPS watch technology's most common problems during running, including data lag, weak signal & satellite disruption. By tracking movement directly from your foot, the COROS POD 2 improves accuracy and pace sensitivity to help you train smarter and more efficiently.",
  more: 'more',
  more1: 'more',
  more2: 'more',
  more3: 'more',
  more4: 'more',
  sensitive: 'sensitive instant pace',
  datalag: 'Say Goodbye To Data Lag',
  datalag_desc: "With the advanced accelerometer in the COROS POD 2, you'll receive data \n directly from your foot to create the most responsive pace displayed \n on your watch. The COROS POD 2 removes the up to 10-second delay caused \n by GPS watches wrist sensors. With the built-in pace alert, your COROS watch paired with the COROS POD 2 ensures you can stay within your \n targeted pace in nearly real-time, instead of waiting for your data to \n catch up, even when there is no GPS signal.",
  accurate: 'accurate indoors',
  accurate_subtitle: 'A Reliable Way To Measure Distance Indoors',
  accurate_desc: "With accurate pace detection, the COROS POD 2 measures the exact distance \n you've run, even when indoors. By plotting the motion of your foot \n through space on an XYZ plane, the COROS POD 2 automatically calibrates \n itself to calculate your stride and the distance you've run on \n a treadmill, or an indoor track. COROS POD 2 will be your perfect \n training partner for indoor running workouts in winter, or when \n the weather is bad.",
  consistent: 'consistent in the cities',
  gps: 'Improved Track Where GPS Signal Is Weak',
  gps_desc: "GPS technology can experience interference. Running through \n tunnels or the first few miles of the Chicago marathon between \n skyscrapers not only disrupts your watch's pace and distance data, \n but also creates messy GPS tracks. That's where the COROS POD 2 steps in. \n With data gathered from various internal sensors, the COROS POD 2 is able \n to auto-correct GPS disruptions such as pace spikes and drops.\n Your COROS watch works collaboratively with the COROS POD 2 to improve \n data consistency during your runs.",
  precise: 'precise on hilly terrain',
  comprehensive_metric: 'A Comprehensive Metric For All Of Your Training',
  comprehensive_metric_desc: "Not all running terrain is perfectly flat. Effort Pace is a unique \n COROS metric that tells you how hard you're actually working \n when on hilly terrain. With instantaneous data input from \n COROS POD 2, your Effort Pace becomes even more accurate.\n The COROS POD 2 makes your Effort Pace 5x more responsive than \n standard GPS, so you can make split-second decisions and \n better analyze your overall exertion once a workout has ended.",
  learn_effort_pace: 'Learn more about Effort Pace',
  beyond_gps: 'beyond gps',
  beyond_gps_desc: "The COROS POD 2 doesn\u2019t stop there. It delivers advanced running metrics in a \n lightweight, sleek design that\u2019s simple to use and will outlast your longest runs.",
  even: 'even',
  even1: 'even',
  running_insights: 'more running insights',
  beyound_gps_desc1: "Using smart detection of wearing position (shoe or waistband),\n the COROS POD 2 provides key metrics to help you better understand \n your running gait, form, and technique.",
  stride_height: 'Stride Height',
  balance: 'Left/Right Balance',
  ground_contact_time: 'Ground Contact Time',
  stride_ratio: 'Stride Ratio',
  monitor: 'monitor',
  temperature: 'outside temperature',
  monitor_desc: "The COROS POD 2 records ambient temperature readings throughout your run,\n so you know exactly how hot or cold it was during your activity. \n You can use these data points to further analyze your runs as you train \n in different climates, or during different seasons.",
  battery: 'battery life',
  battery_1: 'you can’t beat',
  battery_desc: "The COROS POD 2 is equipped with a powerful battery that stays charged for \n weeks. Coupled with the portable charging dock that supplies up to 5 \n full charges, you'll never have to worry about a low battery.",
  continuous_running: "Up to 25 hours of continuous running",
  total_running: "Up to 150 hours of total running \n (with charging dock)",
  lightweight: 'lightweight',
  and: 'and',
  weatherproof: 'weatherproof',
  light_waterproof_desc: "Weighing in at only 5.6g, you won't even notice you're  wearing the COROS POD 2 \n when training or racing. Whether you're on the roads or in the mountains,\n the COROS POD 2 can withstand the elements, from below-freezing \n temperatures to high heat (14\xB0F to 140\xB0F / -10\xB0C to 60\xB0C),\n and stays water resistant up to 3 ATM.",
  setup: 'setup made easy',
  setup_desc: "The COROS POD 2 can be worn on your shoe, or clipped to your waistband,\nand will sleep to preserve the battery when it's not moving.",
  pair: 'pair',
  pair_desc: "Add COROS POD 2 to your COROS \n app to pair with connected watches \n automatically.",
  clip: 'clip',
  clip_desc: "Attach to your shoe or waistband. \n Leave it on your shoe after your run \n if you want.",
  go: 'go',
  go_desc: "Once the initial setup is complete, \n you can just run as normal to get \n instant, real-time metrics.",
  in_the_box: 'what’s in the box',
  in_the_box_desc: "The COROS POD 2 comes with everything you need, including two shoe clips,\n silicone waistband clip, charging dock, USB-A to USB-C \n charging cable and compact case.",
  faq: 'FAQ',
  fullCorosPod2Faq: 'FULL COROS POD 2 FAQ',
  faq_list1: [{
    ask: 'Can I use the COROS POD 2 with non-COROS watches?',
    ans: 'The COROS POD 2 is only compatible with COROS watches.'
  }, {
    ask: 'Does the COROS POD 2 measure running power?',
    ans: 'No, the COROS POD 2 uses Effort Pace, a much easier and more personalized metric to understand, so you know exactly how hard your body is working.'
  }, {
    ask: 'How can the COROS POD 2 improve my training?',
    ans: "COROS POD 2 can help you in training by providing you with more accurate information to review after each workout. Go into your\n      <a class=\"color-danger\" href=\"https://coros.com/traininghub\">COROS Training Hub</a> account to see metrics and data to help identify your strengths and weaknesses. This tool is\n      designed to provide you with the best data possible so you can continue to further your training and performance."
  }, {
    ask: 'How can the COROS POD 2 help me when racing?',
    ans: "COROS POD 2 can help your racing in two ways. You can utilize the Effort Pace to gain a better understanding of your effort regardless of the elevation changes on the terrain. Meanwhile, a more accurate and\n      sensitive pace can help you better dial in your pacing. With the COROS POD 2, you can know your pace with no GPS delay to ensure you never go above or below your intended pace."
  }]
});
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/en/ek.js
var ek = __webpack_require__(54090);
var ek_default = /*#__PURE__*/__webpack_require__.n(ek);
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/en/vertix2.js
var en_vertix2 = __webpack_require__(43675);
var vertix2_default = /*#__PURE__*/__webpack_require__.n(en_vertix2);
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/en/map.js
var en_map = __webpack_require__(37070);
var map_default = /*#__PURE__*/__webpack_require__.n(en_map);
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/trainingHub.js
/* harmony default export */ const en_trainingHub = ({
  title: 'COROS Training Hub',
  keywords: 'training, analyze, athlete, coach, athletic, performance, communication, endurance, fitness, fatigue, marathon, triathlon',
  description: 'Our free analysis and coaching platform for COROS users.',
  desc: 'Building on the framework of COROS EvoLab, the COROS Training Hub now gives you or your coach the tools to train at the highest level – for free. Instant access to your data through the COROS Training Hub web portal gives you the ability to analyze past and present metrics, communicate and interact with your coach, build out a training plan and join or manage a team.',
  visualize: {
    title: "understand your past\n        analyze your present\n        create your future",
    desc: 'Visualize all of your data within the COROS\nTraining Hub so you or your coach can\nmaximize efficiency and ensure your\nfitness is ready to achieve your next goal.'
  },
  plans: {
    title: 'follow a plan',
    desc: 'Predictive analytics coupled with our drag\nand drop feature allows you or your coach\nto create individualized workouts and\ntraining plans with ease.'
  },
  interact: {
    title: 'seamless interaction',
    desc: 'Workout comments and push notifications\nthat sync with your COROS app allow for\nseamless two-way communication between\nathlete and coach.'
  },
  team: {
    title: 'train with a team',
    desc: 'Whether it be an established team or virtual\nrunning group, the COROS Training Hub gives\nyou an option to see your entire teams training\nto enhance motivation, accountability and a\nsense of community.'
  },
  knowMore: {
    title: "get to know\n        coros training hub",
    desc: 'Please visit COROS Help Center for an in-depth walk-through of the COROS Training Hub features.\n\nCOROS Training Hub is available to coaches through the sign up below. Coaches will have access to create teams, manage athletes, develop and assign training plans, along with utilizing other features of the platform. To gain access, coaches will need to submit their coaching credentials and go through a tutorial with our sports science team. '
  },
  coachSignup: 'coach signup',
  athleteSignup: 'ATHLETE SIGNUP',
  login: 'LOG IN',
  privacy: 'privacy policy',
  readPrivacy: 'I have read and agree to the',
  forgot: 'Forget Password',
  rememderMe: 'Remember Me',
  loginFailed: 'Invalid email or password.',
  notOpen: 'Service not yet open',
  email: 'Email',
  password: 'Password',
  welcomeBack: 'WELCOME BACK!',
  launch: 'LAUNCH APP',
  logOut: 'Log Out',
  agreeNotify: 'Please read and check the privacy policy and terms of service first'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/home.js
/* harmony default export */ const en_home = ({
  title: 'COROS | Performance Sports Technology',
  desc: 'Innovation for runners, adventurers and athletes of all sports.',
  localeswitchtips: 'Redirect to your location?',
  insName: 'COROSGLOBAL',
  ukInsName: 'COROS_UK',
  vertix2: {
    name: 'COROS VERTIX 2',
    desc: 'For athletes who\nwant it all'
  },
  pace2: {
    name: 'COROS PACE 2',
    desc: 'For multi-sport athletes\nwho go fast and far'
  },
  apexPro: {
    name: 'COROS APEX Pro',
    desc: 'For endurance athletes\nin rugged environments'
  },
  apex: {
    name: 'COROS APEX',
    desc: 'For outdoor athletes\nwho travel light and fast'
  },
  apex2: {
    name: 'COROS APEX 2/2 Pro',
    desc: 'For mountain athletes who\ntrain hard and go far'
  },
  vertix: {
    name: 'COROS VERTIX',
    desc: 'Our original watch\nfor extreme adventurers'
  },
  pod: {
    name: 'COROS POD',
    desc: 'Advanced running metrics to optimize your performance'
  },
  pod2: {
    name: 'COROS POD 2',
    desc: 'Next level accuracy\nfor all runners'
  },
  trainingHub: {
    title: 'COROS TRAINING HUB',
    desc: 'Understand your past, analyze your present, and create your future with our powerful training platform. Create training plans and work with your coach from anywhere, at any time.'
  },
  story: {
    title: 'FEATURED STORIES'
  },
  viewAllPlans: 'VIEW ALL PLANS',
  plans: {
    title: 'TRAINING PLANS',
    desc: 'Get the most from your watch, and your body with our coach designed, athlete approved training plans.'
  },
  banners: [{
    title: 'EXPLORE PERFECTION\nDISCOVER POTENTIAL',
    linkDesc: 'ALL GPS WATCHES'
  }],
  learnMore: 'LEARN MORE',
  buy: 'BUY',
  readMore: 'CONTINUE READING',
  watch: 'WATCH NOW',
  outOfStock: 'out of stock'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/common.js
/* harmony default export */ const en_common = ({
  header: {
    support: 'support',
    stories: 'Stories',
    products: 'products',
    training_science: 'training',
    technology: 'Technology',
    people: 'People',
    trainingHub: 'Training Hub',
    plans: 'Training Plans',
    workouts: 'Workouts',
    new_training_menu_title: 'Training Plans & Workouts',
    trainingBlog: 'Training Blog',
    retail: 'Store Locator',
    athlete: 'Pro Athletes',
    shopNow: 'SHOP NOW',
    overview: 'OVERVIEW',
    specs: 'SPECS',
    login: 'LOGIN',
    review: 'REVIEWS',
    login2trainingHub: 'TRAINING HUB',
    all_watches: 'All GPS Watches',
    pod2: 'COROS POD 2',
    checkWarranty: 'Warranty Status',
    menu1: {
      name: 'PRODUCT',
      subnav: {
        nav1: 'COROS VERTIX 2',
        nav2: 'COROS VERTIX',
        nav3: 'COROS APEX Pro',
        nav4: 'COROS APEX',
        nav5: 'COROS PACE 2',
        nav6: 'COROS PACE 2 EK',
        nav7: 'COROS POD',
        nav8: 'Accessories',
        nav9: 'Others',
        nav10: 'COROS PACE',
        nav11: 'SafeSound-MOUNTAIN',
        nav12: 'SafeSound-ROAD',
        nav13: 'SafeSound-URBAN',
        nav14: 'OMNI',
        nav15: 'LINX'
      }
    },
    menu2: {
      name: 'COMMUNITY',
      subnav: {
        nav1: 'COROS STORIES',
        nav2: 'COROS PRO ATHLETE',
        nav3: 'TRADE IN PROGRAM',
        nav4: 'VERIFIED WORKOUT',
        nav5: 'TRAINING PLANS'
      }
    },
    menu3: {
      name: 'SUPPORT',
      subnav: {
        nav1: 'USER LOGIN',
        nav2: 'HELP CENTER',
        nav3: 'WARRANTY',
        nav4: 'RELEASE NOTES',
        nav5: 'WATCH COMPARISON'
      }
    },
    menu4: {
      name: 'ABOUT',
      subnav: {
        nav1: 'ABOUT US',
        nav2: 'IN THE NEWS',
        nav3: 'CONTACT',
        nav4: 'EVENTS',
        nav5: 'CAREERS'
      }
    },
    menu5: {
      name: 'STORE LOCATOR'
    },
    menu6: {
      name: 'COUNTRY',
      subnav: {
        nav1: 'United States (English)',
        nav2: 'United Kingdom (English)',
        nav3: 'Canada (English)',
        nav4: 'France (Français)',
        nav5: 'Germany (Deutsch)',
        nav6: '中国(中文)',
        nav7: '日本(日本語)'
      }
    },
    storiesTesting: 'Product Testing Program'
  },
  footer: {
    subscribeEmailError: 'Please enter a valid Email address.',
    apex2credit: 'APEX 2 Credit Application',
    openBox: 'Open Box Products',
    DealerLogin: 'Dealer Login',
    ReturnRefund: 'Return & Refund',
    WatchComparison: 'Watch Comparison',
    TermsConditions: 'Terms & Conditions',
    ReleaseNotes: 'Release Notes',
    PrivacyPolicy: 'Privacy Policy',
    CookieSettings: 'Cookie Settings',
    WheretoDownload: 'Where to Download',
    copyright: '© 2020 | COROS Wearables Inc.',
    trainingHub: 'COROS Training Hub',
    evolab: 'COROS EvoLab',
    coach: 'Coaching Solutions',
    warranty: 'Warranty',
    helpCenter: 'Help Center',
    maps: 'Maps',
    software: 'Software',
    hardware: 'Hardware',
    support: 'Support',
    company: 'Company',
    news: 'Stories',
    inTheNews: 'In the News',
    countries: 'Locations',
    about: 'About Us',
    careers: 'Careers',
    contact: 'Contact',
    joinUs: 'JOIN US',
    subscripPlaceholder: 'ENTER YOUR EMAIL',
    pod2: 'COROS POD 2',
    selectYourLocation: 'Select your Location',
    retailerApplication: 'Retailer Application',
    subscribe: {
      success: {
        title: 'Thank You!',
        desc: 'Subscription Successful!'
      },
      error: {
        title: 'Oops!',
        desc: 'Oops! Something went wrong. Please try again.'
      },
      title: 'Get the latest news from COROS'
    }
  },
  country: {
    usa: 'usa',
    kingdom: 'kingdom',
    newzealand: 'newzealand'
  },
  home: 'Home',
  shopnow: 'shop now',
  loginNow: 'login now',
  speecs: 'SPECS',
  comparisonchart: 'COMPARISON CHART',
  video: {
    play: 'Play',
    pause: 'Pause',
    replay: 'Replay'
  },
  race: {
    courseDetails: 'Course Details'
  },
  subscribeBIS: {
    notifyMe: 'notify me',
    requireEmail: 'Enter your email address.',
    invalidEmail: 'Invalid email. Please try again.',
    emailMeWhenAvailable: 'email me when available',
    success: 'You have subscribed to this item.',
    tooManyReq: 'Please wait a few seconds and try again.',
    serverError: 'Server is down. Please try again later.'
  },
  faqElaboration: 'frequently asked questions',
  promotionTips: 'Free COROS Workout Bag with any watch purchase.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/declarationOfConformity.js
/* harmony default export */ const declarationOfConformity = ({
  apex46: 'COROS APEX 46mm',
  apex42: 'COROS APEX 42mm',
  safeSound: 'COROS SafeSound'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/getApp.js
/* harmony default export */ const getApp = ({
  title: 'GET APP',
  desc: 'Fitness App For Everyone',
  subDesc: "The COROS app is an essential part of your COROS experience. \n  Use it to manage your device, and sync your data to get in-depth performance analytics.",
  appExamples: [{
    title: 'track your progress',
    text: 'Receive daily insights on heart rate, energy expenditure, sleep, and more.'
  }, {
    title: 'create your routes',
    text: 'Begin new adventures with navigation tools and easily sync routes to your watch.'
  }, {
    title: 'set your goals',
    text: 'Train smarter with Running Fitness, Race Predictor, Fatigue Management, and more tools.'
  }, {
    title: 'plan your future',
    text: 'Create, modify and share structured workouts and training plans.'
  }, {
    title: 'know your path',
    text: 'Review advanced activity metrics, GPS routes, and workout trends.'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/apexPro.js
/* harmony default export */ const en_apexPro = ({
  title: 'COROS APEX Pro GPS Watch',
  desc: 'Our premium watch for endurance athletes in rugged environments.',
  name: 'COROS APEX Pro',
  accessories: 'ACCESSORIES',
  trailTested: {
    title: "Trail Tested\nAthlete Approved",
    desc: 'Titanium frame, Sapphire glass screen and 100m waterproof rating provide ultimate durability. At just 59g including the watch band, you can take the APEX Pro on just about any adventure you can dream of.'
  },
  battery: {
    desc: 'The APEX Pro offers 40 hours of full GPS battery life – a 14% increase over the original APEX. Now you can get through that Mountain 100 miler without having to debate about switching into Ultra Max Mode.'
  },
  mountainGuide: {
    title: 'A Mountain Guide on Your Wrist',
    desc: '24/7 blood oxygen monitoring with Altitude Mode, APEX Pro follows the VERTIX as the only watches to provide hourly acclimatization evaluations. Your watch will let you know when you should keep climbing, or when you should head back down to a lower altitude.'
  },
  touchFeat: {
    title: 'The Navigation Experience',
    desc: 'Now supports offline mapping, and includes: Landscape, Topo and Hybrid modes. By using touch screen and the digital dial, users can explore our new mapping function. You can track your path over maps. This is a completely revamped navigation experience on your wrist.',
    videos: ['How to use basic navigation features', 'How to use advanced navigation features', 'How to use checkpoint during navigation']
  },
  trainingMode: {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: 'With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and onto your watch. With the new training mode, your best efforts are well within your reach.'
  },
  nightMode: {
    title: 'Light up the Night’s Sky',
    desc: 'Night Mode – a new always on mode for nighttime activities. While manual options still remain for quick bursts of the backlight, Night Mode, leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark, but dim enough to maintain superior battery performance throughout your run or ride even needed all night long. Don’t worry, it turns off automatically when you finish you workout, or at sunrise.'
  },
  stayTrack: {
    title: 'Stay on Track',
    desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run on it.'
  },
  batteryDetails: {
    duration: ['Up to', '14% longer', 'battery life'],
    subDesc: "Built for\n    the Long\u2026er Run"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/accessories.js
/* harmony default export */ const accessories = ({
  title: 'Accessories',
  desc: 'A performance sports technology company that helps athletes train to be their best.',
  buy: 'BUY NOW',
  'vertix2-nylon-band': 'COROS VERTIX 2 Nylon Band',
  'vertix2-silicone-band': 'COROS VERTIX 2 Silicone Band',
  pod: 'COROS POD',
  'vertix-charging-cable': 'COROS APEX/VERTIX Charging Cable',
  'keychain-watch-charger': 'COROS Keychain Watch Charger',
  'vertix-nylon-band': 'COROS VERTIX Nylon Band',
  'vertix-silicone-band': 'COROS VERTIX Silicone Band',
  'charging-cable': 'COROS Charging Cable',
  'apex-pro-nylon-band': 'COROS APEX 46mm/APEX Pro Nylon Band',
  'apex-pro-silicone-band': 'COROS APEX 46mm/APEX Pro Silicone Band',
  'pace2-nylon-band': 'COROS APEX 42mm/PACE 2 Nylon Band',
  'pace2-silicone-band': 'COROS APEX 42mm/PACE 2 Silicone Band',
  hrm: 'COROS HR Monitor',
  detailPageDesc: 'Shop high-quality and stylish accessories for your COROS watches and sensors.',
  sortOptions: {
    priceLowToHigh: 'Price from low to high',
    priceHighToLow: 'Price from high to low',
    manual: 'Recommendation'
  },
  selectProductType: 'Compatibility',
  tips4noProductType: 'Please choose product type first.',
  selectAccessoryType: 'Accessory Types',
  resetFilter: 'Reset',
  sortBy: 'Sort by',
  filters: 'Filters',
  confirmFilter: 'Apply'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/specs.js
/* harmony default export */ const en_specs = ({
  model: 'Part Number',
  navigation: 'Navigation',
  sensors: 'Sensors',
  batteryLife: 'Battery Life',
  supportedWorkouts: 'Supported Workouts',
  yes: 'Yes',
  comparePageTitle: 'WATCH COMPARISON',
  comparePlaceholder: 'Please select a watch to compare',
  'FULL WATCH COMPARISON': 'full watch comparison',
  'Hide Duplicated Details': 'Hide Duplicated Details',
  compareLabel: {
    'Size and Weight': 'Size and Weight',
    Dimensions: 'Dimensions',
    'POD Dimensions': 'Dimensions',
    Weight: 'Weight',
    Display: 'Display',
    'Display Size': 'Display Size',
    'Display Resolution': 'Display Resolution',
    'Display Type': 'Display Type',
    Materials: 'Materials',
    'Screen Material': 'Screen Material',
    'Bezel Material': 'Bezel Material',
    'Cover Material': 'Cover Material',
    'Band Material': 'Band Material',
    'Watch Band': 'Watch Band',
    Width: 'Width',
    'Installation Type': 'Installation Type',
    Design: 'Design',
    Button: 'Buttons & Dials',
    Connectivity: 'Connectivity',
    Phone: 'Phone',
    Accessories: 'Accessories',
    'Data Sync': 'Data Sync',
    Durability: 'Durability',
    'Water Resistance': 'Water Resistance',
    'Working Temperature': 'Working Temperature',
    'Storage Temperature': 'Storage Temperature',
    Battery: 'Battery',
    'UltraMax GPS Mode': 'UltraMax GPS Mode',
    'Standard Full GPS': 'Standard Full GPS\n(GPS/QZSS)',
    'All Systems On': 'All Systems On\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'All Systems + Dual Frequency On': 'Dual Frequency\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Daily Use': 'Daily Use',
    'Charging Time': 'Charging Time',
    'Geo Location': 'Geo Location',
    'Satellite Systems': 'Satellite Systems',
    'GNSS Chipset': 'GNSS Chipset',
    Navigation: 'Navigation',
    'Map Layer': 'Map Layer',
    'Additional Features': 'Additional Features',
    'Data Tracking': 'Data Tracking',
    Sensors: 'Sensors',
    'Training Features': 'Training Features',
    'Daily Features': 'Daily Features',
    '3rd Party Integration': '3rd Party Integration',
    'System Languages': 'System Languages',
    'Supported Activity Modes': 'Supported Activity Modes',
    'Compatible Apps': 'Compatible Apps',
    'Display Language': 'Display Language',
    Run: 'Run',
    Mountain: 'Mountain',
    Bike: 'Bike',
    Water: 'Water',
    Winter: 'Winter',
    Cardio: 'Cardio',
    Special: 'Special',
    Compatibility: 'Compatibility',
    'Supported Devices': 'Supported Devices',
    'Features & Metrics': 'Features & Metrics',
    'Charging Dock Capacity': 'Charging Dock Capacity',
    'Charging Dock Cable': 'Charging Dock Cable',
    'Activity Mode': 'Activity Mode',
    'Standby Mode': 'Standby Mode',
    'COROS App': 'COROS App',
    'COROS Watch': 'COROS Watch',
    'Case Material': 'Case Material',
    'Foot Clip Material': 'Foot Clip Material',
    'Waist Clip Material': 'Waistband Clip Material',
    'Weight - COROS POD 2': 'Weight - COROS POD 2',
    'Weight - Charging Dock': 'Weight - Charging Dock',
    'Standard Full GPS With Music': 'Standard Full GPS With Music',
    'All Systems On With Music': 'All Systems On With Music',
    'Dual Frequency With Music': 'Dual Frequency With Music',
    Fit: 'Fit',
    'Hrm Dimensions': 'Dimensions',
    'Hrm Weight - Case Only': 'Weight - Sensor Only',
    'Hrm Weight - Case + Band': 'Weight - Sensor + Band',
    'Hrm Band Material': 'Band Material',
    'Hrm Optical Heart Rate Hardware': 'Optical Heart Rate Hardware',
    'Hrm Band Circumference': 'Arm Size',
    'Hrm Wearing Position': 'Wearing Position',
    'Hrm Wireless Connection': 'Wireless Connection',
    'Hrm Supported Devices': 'Supported Devices',
    'Hrm Data Sync': 'Data Sync',
    'Hrm Water Resistance': 'Water Resistance',
    'Hrm Working Temperature': 'Working Temperature',
    'Hrm Storage Temperature': 'Storage Temperature',
    'Hrm Charging Temperature': 'Charging Temperature',
    'Hrm Activity Mode': 'Activity Mode',
    'Hrm Standby Mode': 'Standby Mode',
    'Hrm Battery Capacity': 'Battery Capacity',
    'Hrm Charging Time': 'Charging Time',
    'Hrm Charging Cable': 'Charging Cable',
    'Internal Memory': 'Internal Memory',
    'Activity Memory': 'Activity Memory',
    Memory: 'Memory',
    Climb: 'Climb',
    batteryDesc: 'Last Updated: 2/5/2024',
    'Dura Display': 'Display',
    'Dura Materials': 'Materials',
    'Dura Out-Front Handlebar Mount': 'Out-Front Handlebar Mount',
    'Dura Design': 'Design',
    'Dura Connectivity': 'Connectivity',
    'Dura Durability': 'Durability',
    'Dura Memory': 'Memory',
    'Dura Geo Location': 'Geo Location',
    'Dura Navigation': 'Navigation',
    'Dura Data Tracking': 'Data Tracking',
    'Dura 3rd Party Integration': '3rd Party Integration',
    'Dura System Languages': 'System Languages',
    'Dura Supported Activity Modes': 'Supported Activity Modes',
    'Dura Dimensions': 'Dimensions',
    'Dura Weight - Device': 'Weight - Device',
    'Dura Weight - Mount': 'Weight - Mount',
    'Dura Display Size': 'Display Size',
    'Dura Display Resolution': 'Display Resolution',
    'Dura Display Type': 'Display Type',
    'Dura Screen': 'Screen',
    'Dura Body': 'Body',
    'Dura Mount': 'Mount',
    'Dura Length': 'Length',
    'Dura Compatible Handlebars': 'Compatible Handlebars',
    'Dura Button': 'Buttons & Dials',
    'Dura Phone': 'Phone',
    'Dura Accessories': 'Accessories',
    'Dura Accessory Types': 'Accessory Types',
    'Dura Data Sync': 'Data Sync',
    'Dura Water & Dust Resistance': 'Water & Dust Resistance',
    'Dura Working Temperature': 'Working Temperature',
    'Dura Storage Temperature': 'Storage Temperature',
    'Dura All Systems On': 'All Systems On\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Dura Dual Frequency': 'Dual Frequency\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Dura Solar Efficiency': 'Solar Efficiency',
    'Dura Charging Time': 'Charging Time',
    'Dura Internal Memory': 'Internal Memory',
    'Dura Activity Memory': 'Activity Memory',
    'Dura Satellite Systems': 'Satellite Systems',
    'Dura GNSS Chipset': 'GNSS Chipset',
    'Dura Map Layer': 'Map Layer',
    'Dura Additional Features': 'Additional Features',
    'Dura Sensors': 'Sensors',
    'Dura Training Features': 'Training Features',
    'Dura Safety Features': 'Safety Features',
    'Dura Compatible Apps': 'Compatible Apps',
    'Dura Display Language': 'Display Language',
    'Dura Outdoor': 'Outdoor',
    'Dura Electric': 'Electric',
    'Dura Indoor': 'Indoor',
    'Dura All Systems + Dual Frequency On': 'Dual Frequency\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Dura Battery': 'Battery',
    'Dura Size and Weight': 'Size and Weight',
    'Size - Nylon': 'Size - Nylon',
    'Size - Silicone': 'Size - Silicone'
  },
  pod: {
    weight: 'Weight',
    waterproof: 'Waterproof',
    podType: 'Pod Type',
    connection: 'Connection',
    battery: 'Battery',
    batteryLife: 'Battery Life',
    compatibility: 'Compatibility',
    formPower: 'Form Power',
    balance: 'L/R Balance',
    strideHeight: 'Stride Height',
    strideRatio: 'Stride Ratio',
    groundTime: 'Ground Time',
    strideLength: 'Stride Length',
    cadence: 'Cadence',
    podTypeVal: 'Waist',
    batteryLifeVal: '1 Year (2 Hours/Day)'
  },
  vertix: {
    displaySize: '1.2 in. 240 x 240 (64 colors)',
    displayMaterialVal: 'Sapphire Glass with Diamond-Like Coating',
    bezelVal: 'Titanium',
    coverVal: 'Titanium',
    strapVal: 'Silicone',
    sensorsVal: 'Optical Pulse Oximeter\nOptical Heart Rate Monitor\nBarometric Altimeter\nAccelerometer\nCompass\nGyroscope\nThermometer\n',
    waterResistanceTemp: '15ATM (150 Meters/492 Feet)',
    workingTemp: '-4°F to 140°F (-20°C to 60°C)',
    storageTempVal: '-22°F to 158°F (-30°C to 70°C)',
    chargingVal: 'Less than 2 Hours',
    batteryLifeVal: '45 days of regular use\n60 hours in Full GPS mode\n150 hours in UltraMax mode\n',
    workoutsVal: 'Run, Indoor Run, Trail Run, Track Run, Hike, Mountain Climb, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, Cross-country Ski, Ski Touring, Multisport, Strength, Training, Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing, Indoor Rower,Walk'
  },
  apex: {
    displaySizeVal1: '1.2 in. 240 x 240 (64 colors)',
    displaySizeVal2: '1.2 in. 240 x 240 (64 colors)',
    displayMaterialVal: 'Sapphire Glass',
    bezelVal1: '46mm: Titanium Alloy',
    bezelVal2: '42mm: Stainless Steel',
    strapVal: 'Silicone',
    sensorsVal1: 'Optical Heart Rate Monitor',
    sensorsVal2: 'Barometric Altimeter',
    sensorsVal3: 'Accelerometer',
    sensorsVal4: 'Gyroscope',
    sensorsVal5: 'Compass',
    waterResistanceVal: '10ATM (100 Meters/328 Feet)',
    workingTemp: '14°F to 140°F (-10°C to 60°C)',
    storageTempVal: '-4°F to 158°F (-20°C to 70°C)',
    chargingVal: 'Less than 2 Hours',
    batteryLifeVal1: 'Up to 100/80 Hours in UltraMax GPS Mode',
    batteryLifeVal2: 'Up to 35/25 Hours in Full GPS Mode',
    batteryLifeVal3: 'Up to 30/24 Days for Regular Use',
    workoutsVal: 'Run, Indoor Run, Trail Run, Track Run, Mountain Climb, Hike, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, XC Ski, Ski Touring, Multisport, Strength, Training'
  },
  apexPro: {
    displaySizeVal: '1.2 in. 240 x 240 (64 colors)',
    displayType: 'Touch Screen Memory LCD',
    displayMaterialVal: 'Sapphire Glass',
    bezelVal: 'Titanium Alloy',
    coverVal: 'Aluminum',
    strapVal: 'Silicone',
    sensorsVal: 'Optical Pulse Oximeter\nOptical Heart Rate Monitor\nBarometric Altimeter\nAccelerometer\nCompass\nGyroscope\nThermometer',
    waterResistanceVal: '10ATM (100 Meters/328 Feet)',
    workingTemp: '14°F to 140°F (-10°C to 60°C)',
    storageTempVal: '-4°F to 158°F (-20°C to 70°C)',
    chargingVal: 'Less than 2 Hours',
    batteryLifeVal: '30 days of regular use\n40 hours in Full GPS mode\n100 hours in UltraMax mode',
    workoutsVal: 'Run, Indoor Run, Trail Run, Track Run, Hike, Mountain Climb, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Ski, Snowboard, Cross-country Ski, Ski Touring, Multisport, Strength, Training, Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing, Indoor Rower'
  },
  pace2: {
    displaySizeVal: '1.2 in. 240 x 240 (64 colors)',
    displayType: 'Always-On Memory LCD',
    displayMaterialVal: 'Mineral Glass',
    bezelVal: 'Fiber Reinforced Polymer',
    coverVal: 'Fiber Reinforced Polymer',
    strapVal: 'Silicone/Nylon',
    sensorsVal: 'Optical Heart Rate Monitor\nBarometric Altimeter\nAccelerometer\nCompass\nGyroscope\nThermometer\n',
    waterResistanceVal: '5ATM (50 Meters/164 Feet)',
    workingTemp: '-4°F to 140°F (-20°C to 60°C)',
    storageTempVal: '-4°F to 149°F (-20°C to 65°C)',
    chargingVal: 'Less than 2 Hours',
    batteryLifeVal: '20 days of regular use\n30 hours in Full GPS mode\n60 hours in UltraMax mode\n',
    workoutsVal: 'Run, Indoor Run, Track Run, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Multisport, Strength, Training, Flatwater, Rowing, Indoor Rower,Walk'
  },
  comparsion: {
    pace3: {
      dimensionsVal: '41.9 x 41.9 x 11.7mm\nHeight does not include the optical heart rate sensor',
      weightVal: ['39g\nWith Silicone Band', '30g\nWith Nylon Band'],
      displaySizeVal: '1.2 Inch',
      displayResolutionVal: '240 x 240\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Mineral Glass',
      bezelMaterialVal: 'Fibre Reinforced Polymer',
      coverMaterialVal: 'Fibre Reinforced Polymer',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '135mm - 205mm (Standard)|||150mm - 235mm (Long)',
      sizeSiliconeVal: '130mm - 215mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-4°F to 122°F (-20°C to 50°C)',
      storageTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      standardFullGpsVal: ['38 Hours\nConnects to GPS and QZSS', '10 Hours (With Music)\nConnects to GPS and QZSS with offline music'],
      allSystemsOnVal: ['25 Hours\nConnects to 5 satellite systems at the same time', '9 Hours (With Music)\nConnects to 5 satellite systems at the same time with offline music'],
      allSystemsDualFrequencyOnVal: ['15 Hours\nConnects to 5 satellite systems at the same time in dual frequency', '7 Hours (With Music)\nConnects to 5 satellite systems at the same time in dual frequency with offline music'],
      dailyUseVal: ['17 Days\nWith daily and sleep tracking', '15 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '4GB',
      activityMemoryVal: '1200 Hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satellite Dual-Frequency',
      mapLayerVal: ['Breadcrumb', '—'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', '—'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith Wi-Fi and the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', 'Music\nPlays offline music when paired with supported Bluetooth headsets'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', '—'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    vertix2: {
      dimensionsVal: '50.3 x 50.3 x 15.7mm',
      weightVal: ['89g\nWith Silicone Band', '72g\nWith Nylon Band'],
      displaySizeVal: '1.4 Inch',
      displayResolutionVal: '280 x 280\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy With PVD Coating',
      coverMaterialVal: 'Titanium Alloy With PVD Coating',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Digital Dial\nIncreased Size & Enhanced Durability', 'Back Button', 'Dedicated Backlight Button'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '10 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-22°F to 122°F (-30°C to 50°C)',
      storageTemperatureVal: '-22°F to 140°F (-30°C to 60°C)',
      standardFullGpsVal: ['127 Hours\nConnects to GPS and QZSS', '32 Hours (With Music)\nConnects to GPS and QZSS with offline music'],
      allSystemsOnVal: ['89 Hours\nConnects to 5 satellite systems at the same time', '29 Hours (With Music)\nConnects to 5 satellite systems at the same time with offline music'],
      allSystemsDualFrequencyOnVal: ['49 Hours\nConnects to 5 satellite systems at the same time in dual frequency', '23 Hours (With Music)\nConnects to 5 satellite systems at the same time in dual frequency with offline music'],
      dailyUseVal: ['43 Days\nWith daily and sleep tracking', '39 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 Hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satellite Dual-Frequency',
      mapLayerVal: ['Landscape\nDownloadable Global Maps', 'Topo\nDownloadable Regional Maps'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', 'Electrocardiogram Sensor'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith Wi-Fi and the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', 'Music\nPlays offline music when paired with supported Bluetooth headsets'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['Outdoor Climb\nEnhanced data tracking for multi-pitch and big wall climbing', 'Indoor Climb\nSupports indoor lead, top rope, and bouldering with route/fall auto-count', 'Mountain Climb', 'Bouldering'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', 'Whitewater', 'Speedsurfing', 'Windsurfing'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    vertix: {
      dimensionsVal: '47 x 47 x 15.6mm',
      weightVal: ['76g\nWith Silicone Band', '63g\nWith Nylon Band'],
      displaySizeVal: '1.2 Inch',
      displayResolutionVal: '240 x 240\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy',
      coverMaterialVal: 'Titanium Alloy',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Digital Dial\nIncreased Size & Enhanced Durability', 'Back Button', 'Dedicated Backlight Button'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '15 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      storageTemperatureVal: '-22°F to 158°F (-30°C to 70°C)',
      standardFullGpsVal: ['58 Hours\nConnects to GPS and QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['27 Days\nWith daily and sleep tracking', '22 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '4GB',
      activityMemoryVal: '200 hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Single-Frequency',
      mapLayerVal: ['Landscape\nDownloadable Global Maps', 'Topo\nDownloadable Regional Maps'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', '—'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['—', 'Indoor Climb\nSupports indoor lead, top rope, and bouldering with route/fall auto-count', 'Mountain Climb', 'Bouldering'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', 'Whitewater', 'Speedsurfing', 'Windsurfing'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    apexPro: {
      dimensionsVal: '47 x 47 x 13.4mm',
      weightVal: ['59g\nWith Silicone Band', '49g\nWith Nylon Band'],
      displaySizeVal: '1.2 Inch',
      displayResolutionVal: '240 x 240\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy',
      coverMaterialVal: 'Aluminum',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Short)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', 'Dedicated Backlight Button'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '10 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '14°F to 140°F (-10°C to 60°C)',
      storageTemperatureVal: '-4°F to 158°F (-20°C to 70°C)',
      standardFullGpsVal: ['37 Hours\nConnects to GPS and QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['18 Days\nWith daily and sleep tracking', '14 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '4GB',
      activityMemoryVal: '200 hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Single-Frequency',
      mapLayerVal: ['Landscape\nDownloadable Global Maps', 'Topo\nDownloadable Regional Maps'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', '—'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['—', 'Indoor Climb\nSupports indoor lead, top rope, and bouldering with route/fall auto-count', 'Mountain Climb', 'Bouldering'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', 'Whitewater', 'Speedsurfing', 'Windsurfing'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    apex46: {
      dimensionsVal: '46 x 46 x 11.9mm',
      weightVal: ['55.3g\nWith Silicone Band', '45g\nWith Nylon Band'],
      displaySizeVal: '1.2 Inch',
      displayResolutionVal: '240 x 240\n64 colors',
      displayTypeVal: 'Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy',
      coverMaterialVal: 'Aluminum',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Short)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '10 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '14°F to 140°F (-10°C to 60°C)',
      storageTemperatureVal: '-4°F to 149°F (-20°C to 65°C)',
      standardFullGpsVal: ['35 Hours\nConnects to GPS and QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['30 Days', '—'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '—',
      activityMemoryVal: '200 hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Single-Frequency',
      mapLayerVal: ['Breadcrumb', '—'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', '—'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', '—', '—'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', '—', '—', 'Underwater Heart Rate', '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith the COROS app', '—', '—', '—', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Portuguese',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['—', '—', 'Mountain Climb', '—'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', '—', '—'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    apex42: {
      dimensionsVal: '42 x 42 x 11.75mm',
      weightVal: ['49g\nWith Silicone Band', '38g\nWith Nylon Band'],
      displaySizeVal: '1.1 Inch',
      displayResolutionVal: '218 x 218\n64 colors',
      displayTypeVal: 'Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy',
      coverMaterialVal: 'Aluminum',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '10 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '14°F to 140°F (-10°C to 60°C)',
      storageTemperatureVal: '-4°F to 149°F (-20°C to 65°C)',
      standardFullGpsVal: ['25 Hours\nConnects to GPS and QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['24 Days', '—'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '—',
      activityMemoryVal: '200 hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Single-Frequency',
      mapLayerVal: ['Breadcrumb', '—'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', '—'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', '—', '—'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', '—', '—', 'Underwater Heart Rate', '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith the COROS app', '—', '—', '—', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Portuguese',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['—', '—', 'Mountain Climb', '—'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', '—', '—'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    pace2: {
      dimensionsVal: '42 x 42 x 11.7mm',
      weightVal: ['35g-36g\nWith Silicone Band', '29g-30g\nWith Nylon Band'],
      displaySizeVal: '1.2 Inch',
      displayResolutionVal: '240 x 240\n64 colors',
      displayTypeVal: 'Always-On Memory LCD',
      screenMaterialVal: 'Mineral Glass',
      bezelMaterialVal: 'Fibre Reinforced Polymer',
      coverMaterialVal: 'Fibre Reinforced Polymer',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '5 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      storageTemperatureVal: '-4°F to 149°F (-20°C to 65°C)',
      standardFullGpsVal: ['27 Hours\nConnects to GPS and QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 Days\nWith daily and sleep tracking', '11 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '—',
      activityMemoryVal: '200 Hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Single-Frequency',
      mapLayerVal: ['Breadcrumb', '—'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', '—'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', '—', '—'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', '—', '—', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', '—'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', '—', '—', '—'],
      winterVal: ['—', '—', '—', '—'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    pod2: {
      podDimensionsVal: '27.1 x 33.9 x 8.6mm',
      weightCorosPod2Val: '5.6g\nWithout attaching any clips',
      weightChargingDockVal: '17.6g',
      caseMaterialVal: 'Fiber-reinforced polymer\nFor both COROS POD 2 and the charging dock',
      footClipMaterialVal: 'Fiber-reinforced polymer',
      waistClipMaterialVal: 'Silicone',
      corosAppVal: 'Bluetooth',
      corosWatchVal: 'Bluetooth',
      dataSyncVal: 'Real-time activity data to the COROS watch',
      waterResistanceVal: '3 ATM\nFor COROS POD 2 only and not applicable to the charging dock',
      workingTemperatureVal: '14°F to 140°F (-10°C to 60°C)',
      storageTemperatureVal: '-4°F to 158°F (-20°C to 70°C)',
      activityModeVal: '25 hours\nUp to 150 hours of total running with the charging dock',
      standbyModeVal: '40 days',
      chargingTimeVal: 'Less than 2 hours\nFor both COROS POD 2 and the charging dock',
      chargingDockCapacityVal: '5 charges',
      chargingDockCableVal: 'USB Type-C',
      sensorsVal: ['Barometric Altimeter', 'Thermometer', 'Geomagnetic', 'Accelerometer', 'Gyroscope'],
      supportedDevicesVal: ['COROS watches except COROS PACE 1', 'KIPRUN GPS 500/GPS 900'],
      featuresMetricsVal: ['GPS Track Optimization\nRun / Track Run', 'Distance\nRun / Track Run / Indoor Run', 'Pace\nRun / Track Run / Indoor Run', 'Effort Pace\nRun / Trail Run', 'Cadence\nRun / Track Run / Trail Run / Indoor Run', 'Stride Length\nRun / Track Run / Indoor Run', 'Temperature\nRun / Track Run / Trail Run / Indoor Run', 'Elevation Gain/Loss\nRun / Trail Run', 'Altitude\nRun / Trail Run', 'Grade\nRun / Trail Run', 'L/R Balance\nRun / Track Run / Trail Run / Indoor Run', 'Ground Contact Time\nRun / Track Run / Trail Run / Indoor Run', 'Stride Height\nRun / Track Run / Trail Run / Indoor Run', 'Stride Ratio\nRun / Track Run / Trail Run / Indoor Run']
    },
    apex2: {
      dimensionsVal: '43.0 x 42.8 x 12.8mm',
      weightVal: ['53g\nWith Silicone Band', '42g\nWith Nylon Band'],
      displaySizeVal: '1.2 Inch',
      displayResolutionVal: '240 x 240\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy With PVD Coating',
      coverMaterialVal: 'Titanium Alloy',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', 'Dedicated Backlight Button'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-4°F to 122°F (-20°C to 50°C)',
      storageTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      standardFullGpsVal: ['40 Hours\nConnects to GPS and QZSS', '10 Hours (With Music)\nConnects to GPS and QZSS with offline music'],
      allSystemsOnVal: ['25 Hours\nConnects to 5 satellite systems at the same time', '9 Hours (With Music)\nConnects to 5 satellite systems at the same time with offline music'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 Days\nWith daily and sleep tracking', '13 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '8GB',
      activityMemoryVal: '1200 Hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satellite Single-Frequency',
      mapLayerVal: ['Landscape\nDownloadable Global Maps', 'Topo\nDownloadable Regional Maps'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', 'Electrocardiogram Sensor'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith Wi-Fi and the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', 'Music\nPlays offline music when paired with supported Bluetooth headsets'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['—', 'Indoor Climb\nSupports indoor lead, top rope, and bouldering with route/fall auto-count', 'Mountain Climb', 'Bouldering'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', 'Whitewater', 'Speedsurfing', 'Windsurfing'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    apex2pro: {
      dimensionsVal: '46.1 x 46.5 x 14mm',
      weightVal: ['66g\nWith Silicone Band', '53g\nWith Nylon Band'],
      displaySizeVal: '1.3 Inch',
      displayResolutionVal: '260 x 260\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy With PVD Coating',
      coverMaterialVal: 'Titanium Alloy',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Short)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digital Dial', 'Back Button', 'Dedicated Backlight Button'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-4°F to 122°F (-20°C to 50°C)',
      storageTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      standardFullGpsVal: ['66 Hours\nConnects to GPS and QZSS', '18 Hours (With Music)\nConnects to GPS and QZSS with offline music'],
      allSystemsOnVal: ['41 Hours\nConnects to 5 satellite systems at the same time', '15 Hours (With Music)\nConnects to 5 satellite systems at the same time with offline music'],
      allSystemsDualFrequencyOnVal: ['24 Hours\nConnects to 5 satellite systems at the same time in dual frequency', '12 Hours (With Music)\nConnects to 5 satellite systems at the same time in dual frequency with offline music'],
      dailyUseVal: ['24 Days\nWith daily and sleep tracking', '21 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 Hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satellite Dual-Frequency',
      mapLayerVal: ['Landscape\nDownloadable Global Maps', 'Topo\nDownloadable Regional Maps'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', 'Electrocardiogram Sensor'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith Wi-Fi and the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', 'Music\nPlays offline music when paired with supported Bluetooth headsets'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['Outdoor Climb\nEnhanced data tracking for multi-pitch and big wall climbing', 'Indoor Climb\nSupports indoor lead, top rope, and bouldering with route/fall auto-count', 'Mountain Climb', 'Bouldering'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', 'Whitewater', 'Speedsurfing', 'Windsurfing'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    hrm: {
      hrmDimensionsVal: '42.5 x 28.4 x 9.1mm',
      hrmWeightCaseOnlyVal: '9.7g',
      hrmWeightCaseBandVal: '19g',
      hrmBandMaterialVal: 'Polyester fiber, nylon, spandex',
      hrmOpticalHeartRateHardwareVal: '5 LED lights with 4 photodetectors',
      hrmBandCircumferenceVal: '7.09-12.6 inches (18-32cm)',
      hrmWearingPositionVal: 'Bicep',
      hrmWirelessConnectionVal: 'Bluetooth',
      hrmSupportedDevicesVal: 'Bluetooth-compatible devices that receive heart rate data\nSupports simultaneous connection of 3 devices',
      hrmDataSyncVal: 'Real-time heart rate data',
      hrmWaterResistanceVal: '3 ATM',
      hrmWorkingTemperatureVal: '-4°F to 122°F (-20°C to 50°C)',
      hrmStorageTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      hrmChargingTemperatureVal: '32°F to 113°F (0°C to 45°C)',
      hrmActivityModeVal: '38 hours',
      hrmStandbyModeVal: '80 days',
      hrmBatteryCapacityVal: '55 mAh',
      hrmChargingTimeVal: 'Less than 2 hours',
      hrmChargingCableVal: 'USB Type-A\nConnects to the sensor using a magnetic interface'
    },
    vertix2s: {
      dimensionsVal: '50.3 x 50.3 x 16mm',
      weightVal: ['87g\nWith Silicone Band', '70g\nWith Nylon Band'],
      displaySizeVal: '1.4 Inch',
      displayResolutionVal: '280 x 280\n64 colors',
      displayTypeVal: 'Touch Screen Always-On Memory LCD',
      screenMaterialVal: 'Sapphire Glass',
      bezelMaterialVal: 'Grade 5 Titanium Alloy With PVD Coating',
      coverMaterialVal: 'Titanium Alloy With PVD Coating',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Digital Dial\nIncreased Size & Enhanced Durability', 'Back Button', 'Dedicated Backlight Button'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '10 ATM\nSuitable for surface water activities and not for diving',
      workingTemperatureVal: '-22°F to 122°F (-30°C to 50°C)',
      storageTemperatureVal: '-22°F to 140°F (-30°C to 60°C)',
      standardFullGpsVal: ['118 Hours\nConnects to GPS and QZSS', '32 Hours (With Music)\nConnects to GPS and QZSS with offline music'],
      allSystemsOnVal: ['73 Hours\nConnects to 5 satellite systems at the same time', '27 Hours (With Music)\nConnects to 5 satellite systems at the same time with offline music'],
      allSystemsDualFrequencyOnVal: ['43 Hours\nConnects to 5 satellite systems at the same time in dual frequency', '22 Hours (With Music)\nConnects to 5 satellite systems at the same time in dual frequency with offline music'],
      dailyUseVal: ['40 Days\nWith daily and sleep tracking', '36 Days (With Daily Stress)\nMonitors your stress level throughout the day'],
      chargingTimeVal: 'Less Than 2 Hours',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 Hours\nEstimates based on outdoor activities',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satellite Dual-Frequency',
      mapLayerVal: ['Landscape\nDownloadable Global Maps', 'Topo\nDownloadable Regional Maps'],
      additionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control'],
      sensorsVal: ['Optical Heart Rate Monitor\nMay not work over tattoos', 'Barometric Altimeter', 'Accelerometer', 'Gyroscope', '3D Compass', 'Thermometer\nSupports body temperature in training (with compatible accessory)', 'Optical Pulse Oximeter', 'Electrocardiogram Sensor'],
      trainingFeaturesVal: ['Effort Pace\nA personalized metric that represents true effort when running', 'EvoLab\nRecovery, fatigue, training load, race predictor, VO2 max, threshold zones and more metrics', 'Activity Alerts\nFor cadence, distance, pace, heart rate, power and more metrics', 'Basic/Advanced Interval Training', 'Pre-planned Workouts', 'Training Plans', 'Running Fitness', 'Resting Heart Rate', 'Underwater Heart Rate', 'Action Camera Control\nSupports select GoPro and Insta360 cameras', 'Virtual Pacer', 'Virtual Run', 'Running Form Test\nRequires COROS POD/POD 2', 'Altitude Mode\nRegular evaluation of SpO2 and fitness when at high altitudes', 'Touch Scroll\nSwipe to scroll data pages during training', 'Extender'],
      dailyFeaturesVal: ['Daily Stress', 'Wellness Check', 'Message/Call Alert\nSupports daily use and during training', 'Sleep\nWith REM tracking', 'Alarm', 'Timer', 'Stopwatch', 'Daily Alerts\nInclude active calories, exercise time, storm and more alerts', 'Updateable Firmware\nWith Wi-Fi and the COROS app', 'Find My Phone', 'Find My Watch', 'Backlight Always-On Mode', 'HRV', 'Music\nPlays offline music when paired with supported Bluetooth headsets'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClick here for a complete list',
      displayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      runVal: ['Run', 'Indoor Run', 'Track Run', 'Trail Run'],
      climbVal: ['Outdoor Climb\nEnhanced data tracking for multi-pitch and big wall climbing', 'Indoor Climb\nSupports indoor lead, top rope, and bouldering with route/fall auto-count', 'Mountain Climb', 'Bouldering'],
      bikeVal: ['Bike', 'Indoor Bike'],
      waterVal: ['Open Water', 'Pool Swim', 'Flatwater', 'Rowing', 'Whitewater', 'Speedsurfing', 'Windsurfing'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', 'Ski Touring'],
      cardioVal: ['GPS Cardio', 'Gym Cardio', 'Hike', 'Indoor Rower', 'Walk', 'Jump Rope'],
      specialVal: ['Triathlon', 'Multisport', 'Strength', 'Training', 'Training Plan']
    },
    dura: {
      duraDimensionsVal: '99.5 x 60.8 x 15.7mm\nDoes not include the out-front handlebar mount',
      duraWeightDeviceVal: '102g',
      duraWeightMountVal: '53g',
      duraDisplaySizeVal: '2.7 Inch',
      duraDisplayResolutionVal: '400 x 240\n64 colors',
      duraDisplayTypeVal: 'Touch Screen Always-On Memory LCD',
      duraScreenVal: 'Durable Composite Glass',
      duraBodyVal: 'Reinforced Polymer',
      duraMountVal: 'Reinforced Polymer',
      duraLengthVal: '70mm\nFrom center of handlebar to end of mount out-front',
      duraCompatibleHandlebarsVal: '25.4mm / 31.8mm',
      duraButtonVal: ['Digital Dial', 'Back Button'],
      duraPhoneVal: 'Bluetooth',
      duraAccessoriesVal: 'ANT+ / Bluetooth\nUp to 12 simultaneous connections with BLE',
      duraAccessoryTypesVal: 'Heart Rate Monitors, Power Meters, Indoor Trainers, Speed & Cadence Sensors, Garmin Varia Vehicle Radar, E-Bike Gears, Shimano/SRAM Electronic Drivetrain Systems\nClick here for a complete list',
      duraDataSyncVal: 'Wi-Fi / COROS App',
      duraWaterDustResistanceVal: 'IP67',
      duraWorkingTemperatureVal: '-4°F ~ 140°F (-20℃ ~ 60℃)',
      duraStorageTemperatureVal: '-22°F ~ 158°F (-30℃ ~ 70℃)',
      duraAllSystemsOnVal: '120 Hours\nWithout solar charging',
      duraAllSystemsDualFrequencyOnVal: '70 Hours\nWithout solar charging',
      duraSolarEfficiencyVal: '1 Hour In Direct Sun Generates Up To 2 Hours Of Extra Riding Time',
      duraChargingTimeVal: '2.5 Hours (15℃ ~ 45℃)|||4 Hours (0℃ ~ 15℃)\nCharging disabled in all other temperatures',
      duraInternalMemoryVal: '32GB',
      duraActivityMemoryVal: '1200 Hours\nEstimates based on outdoor activities',
      duraSatelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      duraGnssChipsetVal: 'All-Satellite Dual-Frequency (L1 + L5)',
      duraMapLayerVal: 'Landscape\nPre-loaded Global Maps',
      duraAdditionalFeaturesVal: ['Checkpoint', 'Back-To-Start', 'Deviation Alert', 'Touchscreen-Enabled Map Control', 'Turn By Turn', 'Smart Reroute Navigation\nCOROS app connection required', 'Climb Details'],
      duraSensorsVal: ['Barometric Altimeter', 'Accelerometer', 'Gyroscope', 'Compass', 'Temperature Sensor'],
      duraTrainingFeaturesVal: ['Training Management\nTraining Load, Base Fitness, Load Impact', 'Training Load Recommendation', 'FTP Test', 'Recovery Timer', 'Activity Alerts\nFor cadence, distance, heart rate, power and more metrics', 'Pre-planned Workouts', 'Training Plans', 'Touch Scroll\nSwipe to scroll data pages during training'],
      duraSafetyFeaturesVal: ['Group Tracking\nCOROS app connection required', 'Safety Alerts\nCOROS app connection required', 'Bike Alarm\nCOROS app connection required'],
      duraCompatibleAppsVal: 'Strava, Komoot, TrainingPeaks, Ride With GPS, Relive, Final Surge, Decathlon',
      duraDisplayLanguageVal: 'English, Simplified Chinese, Traditional Chinese, German, Spanish, French, Polish, Thai, Japanese, Korean, Portuguese, Italian, Russian',
      duraOutdoorVal: ['Road', 'Gravel', 'Mountain Bike (MTB)'],
      duraElectricVal: ['E-Bike', 'E-Mountain Bike (E-MTB)'],
      duraIndoorVal: 'Indoor'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/evolab.js
/* harmony default export */ const en_evolab = ({
  title: 'COROS EvoLab',
  desc: 'Our sports science platform to evaluate your fitness, fatigue, and performance.',
  pages: [{
    title: 'COROS EvoLab',
    desc: ['How does your training impact your fitness? EvoLab by COROS evaluates your workouts, your recovery, and more to provide you with best-in-class fitness analysis. The EvoLab platform is free to all COROS users. It focuses on your general fitness throughout the training season, with additional features specifically for the measurement of your flat road running performance.', 'EvoLab is the Evolution of Personal Fitness Evaluation packed into a wrist-based wearable.']
  }, {
    title: 'Training Load',
    desc: ['In real time, your GPS watch will show you the level of impact a particular training session or activity is having on your body. This number starts at 0 and increases based on the intensity and duration of your activity. Compare your training load in the history menu of your running watch to see how today’s training compares to similar activities in the past.']
  }, {
    title: 'Training Effect',
    desc: ['Training is often separated into two key categories: Aerobic – cardio building activities, or Anaerobic – speed work. What divides these two groupings is your Lactate Threshold. EvoLab will score your Aerobic and Anaerobic Training Effect individually on a scale of 0-5+ in real time on your GPS watch.']
  }, {
    title: 'Base Fitness and Load Impact',
    desc: ['A good workout today does not mean you are ready for a new personal best tomorrow. Likewise, one bad workout does not derail a great block of training. EvoLab evaluates your Load Impact (previous 7 days of training) and your Base Fitness (previous 6 weeks of training). Your GPS watch will also recommend a total 7-day training-load range based on your history for best results.']
  }, {
    title: 'Fatigue',
    desc: ['Different athletes respond to different training load differently. An 100k week might be an easy program for Eliud Kipchoge meanwhile it’s more than what a lot of people can run in a week. The amount of Base Fitness left in your body after Load Impact is called Fatigue. Fatigue makes your body tired but it also makes your body strong. This is the cycle of training, and EvoLab provides a 0-100 fatigue score and categorizes your score into 5 different zones. Getting ready to race soon? Make sure to go from the Optimized Zone to the Performance Zone or as you might call it – taper!']
  }, {
    title: 'Running Specific Features',
    desc: ['• EvoLab evaluates your current marathon readiness, providing you with a score to compare to your training partners.', '• EvoLab identifies if your most recent workout is improving your overall fitness.', '• EvoLab categorizes your workouts to indicate what part of your training is being prioritized.']
  }, {
    title: 'Marathon Level',
    desc: ['While races do not play out on paper or in apps, EvoLab provides you with a 0-100 score showing your level as a Marathoner. While this metric is based heavily off the 26.2 mile distance (100 equates to a 2 hour Marathon!) it can also serve as a great barometer for your overall running fitness.']
  }, {
    title: 'Running Performance',
    desc: ['For those of you who want to see a more dynamic metric, a running performance score of between 80% and 120% will show you how today’s run compares to your overall running fitness. Many factors can make a run great or less than stellar – sleep, recovery, nutrition, stress, weather and more. If you continue to see scores of 100% or better, it’s a good bet your overall fitness is improving.']
  }, {
    title: 'Race Predictor',
    desc: ['Whether you are training for the 5k, 10k, half marathon or marathon distance, EvoLab provides an overall race prediction and race pace directly on your GPS watch. Some runs will impact some race distance predictions but not others, just like your training targets specific distances.']
  }, {
    title: 'Training Focus',
    desc: ['Not all runs are created equal. Each run likely has its own focus, and while we hope a particular run serves it purpose, EvoLab uses heart rate, pace and various other training metrics from your running watch to tell you exactly what training type was most impacted on a particular run. Note, this is not the type of run you had but what training effort was likely to be improved.']
  }, {
    title: 'Advanced Data Analysis',
    desc: ['The EvoLab provides a simplified tool to review your fitness metrics and its trend. Go to your COROS app, visit your personal profile page, and you will see how you improve over time. There is also a clear view of your seasonal fitness trend, so you find your peak and perform at your best.']
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/convos.js
/* harmony default export */ const en_convos = ({
  shopTheirWatches: 'shop their watches',
  careerHighlights: 'career highlights',
  watches: {
    pace2: {
      name: 'COROS PACE 2 Blue Steel',
      desc: 'For multi-sport athletes\nwho go fast and far'
    },
    pace2molly: {
      name: 'COROS PACE 2 Molly',
      desc: 'For multi-sport athletes\nwho go fast and far'
    }
  },
  eps: [{
    title: 'emma bates – fastest american female marathoner, 2021',
    mobileTitle: "emma bates\nfastest american\nfemale marathoner, 2021",
    desc: 'This rising star set the fastest marathon time by an American woman (2:24:20) in 2021 with her second-place finish at the Chicago Marathon. Dan from COROS sat down with Emma for a COROS CONVO to discuss her record run, and peel back the layers to understand one of running’s most exciting athletes on a deeper level.',
    title4highlights: 'career highlights',
    highlights: ['2021 Fastest Marathon - American Woman', '2021 Chicago Marathon - 1st American', '2019 Chicago Marathon - 1st American', '2019 USA Marathon Champion', '2014 NCAA D1 10,000m Champion', '12-Time NCAA D1 All-American'],
    shopDesc: "SHOP EMMA'S GPS WATCH\nCOROS APEX 42mm"
  }, {
    title1: "HANS FLORINE,\nWORLD RECORD BIG WALL CLIMBER",
    title2: "CAMILLE HERRON, \n WORLD RECORD ULTRA RUNNER",
    titleMobile1: "hans florine,",
    titleMobile2: "world record big wall climber",
    titleMobile3: "camille herron, ",
    titleMobile4: "world record ultra runner",
    desc: "In Episode 2 of COROS Convos, legendary Big Wall Climber,\n      Hans Florine and Ultra Runner legend in the making,\n      Camille Herron exchange stories from their youth,\n      discuss competitive spirit, unpack our changing\n      world and explore the deeper purpose found\n      in overcoming injury and adversity.",
    highlights: 'CAREER HIGHLIGHTS',
    highlights1: 'camille herron',
    highlights1list: ['3-time World Champion (50K, 100K, 24hr)', '2-time Team World Champion (100K, 24hr)', 'Road 50K/50mi/100mi National Champion', 'Comrades ‘Uphill’ Marathon Champion', 'Current 11-time American record holder', 'Current World Best for 50 miles (5:38:41)', '100 miles Trail Best for women (12:42:40)'],
    highlights2: 'hans florine',
    highlights2list: ['8 speed records on ‘The Nose’', 'Author of "On the Nose"', '3-time X Games gold medal winner', '12-time Speed Climbing National titles', '2-time Difficulty Climbing National titles', '1991 Speed Climbing World Champs', '1990 US National Champs']
  }, {
    title1: "TOMMY CALDWELL\nLEGENDARY SPEED AND BIG WALL ROCK CLIMBER",
    title2: "KILIAN JORNET\nALL-TIME GREATEST MOUNTAIN ENDURANCE ATHLETE",
    titleMobile1: ["tommy caldwell", "legendary speed and big wall", "rock climber"],
    titleMobile2: ["kilian jornet", "all-time greatest mountain", "endurance athlete"],
    desc: "Episode 3 brings two of the greatest mountain athletes of\n      all-time together for the very first time. Filmed the day after\n      Kilian's course record smashing victory at Hardrock 100,\n      they cover a lot of ground as they compare experiences\n      and look to their futures. What can they learn from each\n      other? Where do they find inspiration? How do they achieve\n      success, and will they ever collaborate? Find answers to\n      these questions and more in this momentous COROS Convo.",
    highlights1: 'tommy',
    highlights1list: ['First Free Climb of the Dawn Wall', 'First Free Ascent of Dihedral Wall', 'Free Climbed the Nose in 11hrs', 'The Nose speed record in 1hr 58mins', 'First Ascent the Fitz Roy Traverse'],
    highlights2: 'kilian',
    highlights2list: ['4 x UTMB Champion', '5x Hardrock Hundred Champion', '4 × Ski Mountaineering World Champion', '3 × Sky Running World Champion', 'Speed climbed Mt. Everest twice in 1 week'],
    withoutSupplementalOxygen: 'without supplemental oxygen'
  }, {
    title1: "MOLLY SEIDEL\nCOLLEGIATE CHAMP TURNED OLYMPIC MEDALIST",
    title2: "DES LINDEN\nLEGENDARY U.S. MARATHONER AND 2X OLYMPIAN",
    titleMobile1: ["molly seidel", "collegiate champ turned", "olympic medalist"],
    titleMobile2: ["des linden", "legendary u.s. marathoner", "and 2x olympian"],
    desc: "Episode 4 brings a veteran Olympic marathoner together with an Olympic medalist who's just getting started for a candid conversation that delivers insight and inspiration to every\n      athlete aspiring to greatness. Where do they find competitive motivation? What does post-marathon recovery look like, and why do they keep coming back for more? Get answers to these\n      questions, and learn about their unique paths to success and beyond in this installment of COROS Convos.",
    highlights1: 'molly seidel',
    highlights1list: ['4x NCAA Champion', '2020 Olympic Marathon Bronze Medalist', 'Fastest time run by an American at NYC Marathon', 'Great Edinburgh International XC Bronze Medalist', 'First U.S. female Olympian in her debut'],
    highlights2: 'des linden',
    highlights2list: ["2018 Boston Marathon Champion", "Women's 50k World Record Holder", "2x Olympic Marathoner (2012, 2016)", "2015 Pan Am Games Silver Medalist, 10,000m", "9x top-5 finishes at World Marathon Majors"]
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/login.js
/* harmony default export */ const en_login = ({
  loginTitle: 'USER LOGIN',
  Email: 'E-mail',
  account: 'Mobile phone number or email account',
  password: 'Password',
  signIn: 'Sign in',
  createAccount: 'Create account',
  forgotYourPassword: 'Forgot your password?',
  DownloadPlugin: 'Download the Chrome plugin',
  sendEmai: 'We will send you an email to reset your password.',
  forgot: 'Forgot Your Password',
  submit: 'Submit',
  validateEmailSuccess: 'We will send you an email to reset your password.',
  newPassword: 'NEW PASSWORD',
  newPasswordTips: 'Please enter your new password',
  newPasswordNext: 'NEXT',
  shortPasswordTips: 'Please enter password with 8-20 characters',
  //Please enter password with 6-20 characters
  invalidStr: 'Password must contain both number and letter characters.',
  resetSuccTitle: 'DONE ！',
  resetFailedTitle: 'RESET FAILED !',
  resetSuccDesc: 'Conguatuations ! You have reset your new password ! <br> Now go and enjoy your CTH trip!',
  resetFailedDesc: 'Woops ! The check code is invalid !',
  accountNotExist: 'This email has not been registered.',
  login: 'LOG IN',
  smsCodeValidate: 'Authentication',
  sendSucc: 'The verification code has been sent',
  sendTips: 'The verification code has been sent to your phone {var}, valid for 10 minutes',
  countdownTick: 'Resend in {var} seconds',
  resend: 'Resend',
  paramsError: 'Parameter error',
  codeError: 'The verification code is invalid',
  retryLimit: 'Maximum number of errors reached',
  invalidAccount: 'Invalid account',
  incorrectCode: 'Incorrect code',
  invalidAccountOrPwd: 'Incorrect account or password'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/datalist.js
/* harmony default export */ const en_datalist = ({
  title: 'Workout History',
  desc: ' workouts in total',
  total: 'All',
  run: 'Run',
  runOutdoor: 'Run',
  indoorRun: 'Indoor Run',
  trailRun: 'Trail Run',
  runMountaineer: 'Mtn Climb',
  hike: 'Hike',
  trackRun: 'Track Run',
  bike: 'Bike',
  indoorBike: 'Indoor Bike',
  swim: 'Swim',
  swimPool: 'Pool Swim',
  swimOpen: 'Open Water',
  triathlon: 'Triathlon',
  cardio: 'Cardio',
  aerobicOutdoor: 'GPS Cardio',
  aerobicIndoor: 'Gym Cardio',
  ski: 'Skiing',
  skiItem: 'Ski',
  skiSnowboard: 'Snowboard',
  skiMountaineering: 'Ski Touring',
  skiCrosscountry: 'XC Ski',
  multisport: 'Multisport',
  logOut: 'Log out',
  columnLabel: {
    title: 'Title',
    distance: 'Distance',
    averagePace: 'Average Pace',
    device: 'Device',
    date: 'Date',
    workout: 'Workout'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/yourproduct.js
/* harmony default export */ const en_yourproduct = ({
  yourProducts: 'Your Products',
  product: 'Product',
  productID: '6-digit Product ID',
  warrantyPeriod: 'Warranty Period',
  expiration: 'Warranty Expiration Date',
  workoutHistory: 'Workout History',
  accountDetail: 'Account Details',
  serialNumber: 'Serial Number'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/events.js
/* harmony default export */ const events = ({
  title: 'COROS x Kilian Jornet Live Event',
  description: 'Join COROS and Kilian Jornet for this special live event at 10AM PST, Jan 31, 2023.',
  tittext1: 'COROS NEW PRODUCTS LAUNCH EVENT',
  titdate: 'Aug 17, 2021',
  aftertit: 'This is what we have announced',
  afterProtit: 'COROS APEX 2 Pro \n Kilian Jornet Edition',
  afterProsub: 'For outdoor athletes who\ntrain hard and move fast'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/shop.js
/* harmony default export */ const shop = ({
  chooseAdditionalBands: 'Additional Bands',
  chooseBandMaterial: 'Band Material',
  chooseSize: 'Choose Your Watch Size',
  chooseColor: 'Option/Color',
  choosePrefix: 'Choose Your {item}',
  chooseAccessories: 'Additional Accessories',
  add2Bag: 'ADD TO BAG',
  total: 'Total',
  overview: 'Overview',
  skipForNow: 'Skip For Now',
  pace2: {
    difference: 'What is the difference?',
    silicone1: 'Silicone Bands',
    silicone2: 'are durable, quick-drying, and easy to clean. They are the go-to option for those who wear their watch 24/7, are in and out of water, and want a watch\n band that will go the distance.',
    nylon1: 'Nylon Bands',
    nylon2: 'are ultra-lightweight, breathable, and can be adjusted to a high level of specificity. These bands are well suited for those who prioritize snug fit and\n heart rate accuracy, in addition to those who find the silicone\n watch band uncomfortable.'
  },
  whichModelIsRightForYou: 'Which model is right for you?',
  details: 'Details',
  price: 'Item Price',
  quantity: 'Quantity',
  subtotal: 'Price',
  remove: 'Delete',
  shipping: 'Shipping',
  taxes: 'Taxes',
  estimatedTotal: 'Estimated Total',
  checkOut: 'Check Out',
  frequentlyBoughtTogether: 'Frequently Bought Together',
  shoppingBag: 'Shopping Bag',
  bagPageTitle: 'Shopping Bag - COROS',
  moreGoodStuffIsComingSoon: 'More Good Stuff\nIs Coming Soon',
  added: 'Added',
  calAtCheckout: 'Calculated at checkout',
  bagEmpty: 'Your shopping bag is empty',
  chooseModel: 'Model',
  bandTypes: {
    nylon: 'Nylon Band',
    silicone: 'Silicone Band'
  },
  thanksgivingPrompt: {
    us: 'Add a free COROS workout bag to your order when you spend $300 or more.',
    uk: 'Add a free COROS workout bag to your order when you spend £280 or more.',
    ca: 'Add a free COROS workout bag to your order when you spend $430 or more.'
  },
  thanksgivingPromotionDetails: {
    us: {
      title: 'Add your free COROS Workout Bag',
      subTitles: ['Order $300 or more to redeem this gift.', 'Offer ends December 1st, or while supplies last. ', 'Not valid with other offers or promotions.']
    },
    uk: {
      title: 'Add your free COROS Workout Bag',
      subTitles: ['Order £280 or more to redeem this gift.', 'Offer ends December 1st, or while supplies last. ', 'Not valid with other offers or promotions.']
    },
    ca: {
      title: 'Add your free COROS Workout Bag',
      subTitles: ['Order $430 or more to redeem this gift.', 'Offer ends December 1st, or while supplies last. ', 'Not valid with other offers or promotions.']
    }
  },
  thanksgivingPromptBanner: {
    us: {
      title: "FREE COROS WORKOUT\n      BAG WITH PURCHASE",
      subTitles: ["Spend $300 or more and get this tough,\n      versatile, and stylish bag for your gear.", 'Offer ends December 1st, or while supplies last. '],
      shortDescs: ['Holiday Offer']
    },
    uk: {
      title: "FREE COROS WORKOUT\n      BAG WITH PURCHASE",
      subTitles: ["Spend \xA3280 or more and get this tough,\n      versatile, and stylish bag for your gear.", 'Offer ends December 1st, or while supplies last. '],
      shortDescs: ['Holiday Offer']
    },
    ca: {
      title: "FREE COROS WORKOUT\n      BAG WITH PURCHASE",
      subTitles: ["Spend $430 or more and get this tough,\n      versatile, and stylish bag for your gear.", 'Offer ends December 1st, or while supplies last. '],
      shortDescs: ['Holiday Offer']
    }
  },
  bagPromotion: {
    title: 'Add your free COROS Workout Bag',
    subTitles: "Order any watch to redeem this gift.\n    While supplies last.\n    Not valid with other offers or promotions."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/coaches
/* harmony default export */ const coaches = ({
  subTitle: ['powerful', 'free', 'easy'],
  intro: `COROS Training Hub is a free and comprehensive tool for coaches
working with individuals and teams using COROS watches.`,
  features: {
    title: 'key features',
    list: {
      'team-view': {
        title: 'Team and Athlete View',
        list: ['Sort by performance metrics', 'Provide instant feedback', 'Compare athletes'],
        desc: `“ The Training Hub put all my athletes in
    one place and allowed me to group them
    by running level and ability ”`,
        coach: 'Coach Vowell: Flacon Youth AAU',
        btn: 'Falcon Youth: Case-Study',
      },
      drag: {
        title: 'Drag and Drop Plans',
        list: ['Create/Save Workouts and Plans', 'Organize and access your plan library', 'Prescribe plans to individuals or groups'],
        desc: `“ Drag & dropping strength plans for athletes has given me more time to focus on what’s important ”`,
        coach: 'Coach Warrick: Drake University S&C',
        btn: 'Drake University: Case-Study',
      },
      optimize: {
        title: 'Optimize Athlete Fitness',
        list: ['Maximize performance peaks & recovery', 'Monitor year-over-year team performance', 'Dial in tapers before key events'],
        desc: `“ I am able to get a quick glimpse of athletes
  fitness overtime and possible overtraining ”`,
        coach: 'Tristan Hogue: Endurokin Coaching',
        btn: 'Endurokin: Case-Study',
      },

      workouts: {
        title: 'Workouts Directly to Watch',
        list: ['Drop workouts on calendar', 'Workouts sync to watch', 'Hit start, follow intervals'],
      },
      communicate: {
        title: 'Communicate with Athletes',
        list: ['In-app messaging', 'Message read notifications'],
      },
    },
  },
  clickArea: {
    coachSignup: {
      title: 'coach sign up',
      desc: `Coaches looking to build a team or bring
    their coaching company onto the Training Hub
    can sign up with the link below.`,
    },
    teamSales: {
      title: 'team sales',
      desc: `Team Sales are a great way to get an entire team
    or group onto the Training Hub quickly. If you have
    a large team or group looking for an order, fill out
    the form below.`,
    },
    loanerProgram: {
      title: 'loaner program',
      desc: `The loaner program is designed to help get teams,
    and groups onto the Training Hub. Sign up below for
    an 4-week trial for your team. Following the 4 weeks,
     athletes can purchase or return watches.`,
    },
  },

  form: {
    requiredMessage: 'This field is required.',
    emailMessage: 'Please provide a valid email!',
    placeholder: 'Your Answer',
    noWatch: `I don't have a COROS watch.`,
    labels: {
      fullname: 'What is your full name?',
      email: 'What is your email?',
      account: 'What is your COROS account email?',
      teamName: 'What is your team name?',
      teamSize: 'What is your team size?',
      role: 'What is your role in the team?',
      yearsCoaching: 'How long have you been coaching?',

      platform: 'What coaching platform do you currently use?',

      location: 'Which country and state/province are you from?',

      interestedProducts: 'Which COROS products are you interested in?',
      channel: 'How did you hear about this program?',
      additional: 'Additional comments you would like to share.',

      phone: 'What is your phone number?',

      watch: 'What COROS watch do you use?',

      athletesCount: 'How many athletes do you coach?',
      coachingWebsite: 'What is your coaching website?',

      credentials: 'Please list your coaching credentials.',

      watchRequestCount: 'How many watches would you like to request?',
    },
  },
});

;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/workouts.js
/* harmony default export */ const workouts = ({
  title: 'coros verified workouts',
  seo: {
    title: 'COROS Verified Workout Programs',
    desc: 'A performance sports technology company that helps athletes train to be their best.'
  },
  groupedWorkouts: [{
    type: 'running',
    name: 'Reed Fischer from Tinman Elite',
    desc: 'Tinman Elite is a professional running team based in Boulder, CO.',
    workouts: [{
      title: '3 Minute Fartlek Workout',
      desc: "Start with about 15 minutes of easy jogging to warm up, then begin. The workout is anywhere from 6-10x3:00 on/:90 off at threshold. After the fartlek, jog easy until you hit your day's volume goal."
    }]
  }, {
    type: 'multisport',
    name: 'Tristan Hogue',
    desc: 'Tristan is a kinesiologist from Montreal (CAN) and has worked with the Canadian Olympic Team as a strength & conditioning coach / research assistant. Outside of his professional career, he is a mountain athlete who uses endurance sports such as ultra running as training to best prepare for solo mountaineering expeditions around the globe like Matterhorn and Denali.For more inforamation, please visit www.endurokin.com.',
    workouts: [{
      title: '1:1 Hill Fartlek Workout',
      desc: '90-min exhaustive interval workout designed to increase threshold point as well as active recovery. Best done on hilly terrain (100-200ft/mile).'
    }, {
      title: 'Mountain Running Routine',
      desc: 'A 30-min bodyweight workout designed to increase lower-body and core strength, stability, and balance for uphill training.'
    }]
  }, {
    type: 'strength',
    name: 'Grayson Murphy',
    desc: 'Grayson is a COROS Pro athlete and has many years of experience as a professional trail and road runner. For more information on Grayson visit her Instagram: racin__grayson',
    workouts: [{
      title: 'Full Body Strength Workout',
      desc: 'A full body strength routine with a focus on core stabilization, posterior chain activation, and other trail running specific movements.'
    }]
  }, {
    type: 'strength',
    name: 'Hillary Allen',
    desc: 'Hillary represents COROS as a Pro Trail Runner. She hopes to inspire, educate and encourage other people to find balance in their lives.',
    workouts: [{
      title: '"Feel the Burn" Strength Workout',
      desc: 'This runner focused program combines getting your heart rate up and burning those legs. It is the perfect workout for strengthening and targeting your running specific muscles.'
    }]
  }, {
    type: 'strength',
    name: 'Steve House',
    desc: 'Steve represents COROS as a Pro Climber/Alpinist. He has over 25 years of climbing experience and became the 9th American to achieve AMGA-IFMGA certification. His coaching platform known as Uphill Athlete is designed to strengthen and improve your climbing performance. For more information on coaching visit https://www.uphillathlete.com/',
    workouts: [{
      title: 'Strength Routine',
      desc: 'This workout is designed to alternate between upper body and lower body. Start by completing this circuit 1-2 times through then continue to add weight and circuit reps every 2 weeks.'
    }, {
      title: 'Killer Core Routine',
      desc: 'This routine can be completed in multiple rounds. Do one round as a warm-up for a strength workout or two or three rounds as a stand-alone workout.'
    }]
  }, {
    type: 'strength',
    name: 'Andres Marin',
    desc: 'Andres is an all-around climber, who focuses on alpine expeditions. He is known for representing the US in the Ice Climbing World Cup. His workouts are perfect for improving your climbing skills as well as strengthen your climbing muscles.',
    workouts: [{
      title: 'Strength Routine',
      desc: 'This strength routine focuses on targeting your core and upper body strength to help improve your climbing skills.'
    }]
  }, {
    type: 'running',
    name: 'Ian Sharman',
    desc: 'Ian Sharman is Head Coach at www.sharmanultra.com working with athletes of all abilities around the world towards marathons and ultras.',
    workouts: [{
      title: '800m Speed Workout',
      desc: 'This 800m speed session, is ran as a marathon time predictor. The time it takes to do the 800m should equal close to your marathon time. - i.e. 3m30secs per set suggests a 3h30m marathon time.'
    }]
  }, {
    type: 'strength',
    name: 'Sage Canaday',
    desc: 'Sage is a mountain, ultra-trail athlete for COROS Global. He is also the founder and co-coach at sagerunning.com. His strength routine is meant to help strengthen your core muscles while also improving your running form and efficiency.',
    workouts: [{
      title: 'Core Strength Routine',
      desc: 'A targeted 10-15 min workout for your core from coach Sage. For Sage’s coaching services visit www.SageRunning.com'
    }]
  }, {
    type: 'cycling',
    name: 'Gerardo Goméz',
    desc: 'Gerardo Gómez is passionate about the Ironman, trail running and any sport. He is a Level 2 Triathlon coach certified by the Spanish Triathlon Federation and is also a cycling technician certified by the Cycling Federation. Contact/follow him on Facebook: @GPPreparacionFisica',
    workouts: [{
      title: 'Flat Road Training',
      desc: 'Series in a flat road to improve your strength on the bicycle, that is, the capacity to endure more in a situation of high intensity (strength-resistance) and maximum intensity (strength-speed).'
    }, {
      title: 'Uphill Training',
      desc: 'Series in uphill. With this series we seek to work our anaerobic threshold and our VO2max doing short and high or very high intensity jobs.'
    }]
  }, {
    type: 'multisport',
    name: 'Sally McRae',
    desc: '"Sally is a professional trail runner, part-time coach, writer and speaker. For more information follow Sally McRae on Instagram @yellowrunner for more training tips & coaching services."',
    workouts: [{
      title: "Sally McRae's Power 5 Workout",
      desc: 'This routine has 5 exercises targeting your hips and glutes and can be done as a pre or post workout. And like ALL strength routines, know that you can always modify or progress any exercise!'
    }, {
      title: 'Speed Play Workout',
      desc: 'This workout starts with 10 minutes of easy running to settle into your aerobic pace. You will then do 6x30 second intervals with 2 mins rest after each interval at 7-8 effort on a 1-10 scale.'
    }, {
      title: 'Pre-Run Strength Routine',
      desc: 'I believe that incorporating strength will allow you to stay injury-free and keep you running for your entire life. Commit to doing this 3-4 days a week and you will notice a difference!'
    }]
  }, {
    type: 'cycling',
    name: 'COROS Official',
    desc: 'Cycling workouts from Team COROS.',
    workouts: [{
      title: 'Long Ride for Marathon Training',
      desc: 'This workout is designed to help you prepare for Marathon efforts without creating the stress on your legs that running for 3 hours would. Add this to your run training to maximize aerobic development'
    }, {
      title: 'Anaerobic into Threshold Development',
      desc: 'This workout is designed to maximize your lactate threshold development. We do this by first stressing your anaerobic capacity and then going into dedicated threshold intervals.'
    }]
  }, {
    type: 'running',
    name: 'COROS Official',
    desc: 'Running workouts from Team COROS.',
    workouts: [{
      title: 'Elite Threshold Workout',
      desc: 'This workout is utilized by Team New Balance Manchester as their mid-distance athletes prepare for championship events. Consisting of intervals, this workout will help build your threshold. '
    }, {
      title: '5k Speed Improvement',
      desc: 'The purpose of todays workout is to build your speed above 5k pace and extend the efforts. Be sure to run faster than normal 5k pacing as we look to increase your speed.  '
    }, {
      title: '30 Minute Base with Pick Ups',
      desc: 'This workout is designed to be run at a base pace, but include strides/pick ups for running efficiency. Build the pace for 30 seconds and then relax back into your easy aerobic endurance pace!'
    }, {
      title: '45 Minute Base with Pick Ups',
      desc: 'This workout is designed to be run at a base pace, but include strides/pick ups for running efficiency. Build the pace for 30 seconds and then relax back into your easy aerobic endurance pace!'
    }, {
      title: '1 Hour Base with Pick Ups',
      desc: 'This workout is designed to be run at a base pace, but include strides/pick ups for running efficiency. Build the pace for 30 seconds and then relax back into your easy aerobic endurance pace!'
    }, {
      title: 'Tabata Running Workout',
      desc: 'Tabata is a popular form of HIIT exercise that can effectively boost your fitness and running capability. Maximum intensity is required for each 20 second interval to ensure the training benefit.'
    }, {
      title: 'Short Interval Fartlek',
      desc: 'This Fartlek workout requires medium to hard efforts to maintain your VO2 max and lactate threshold.'
    }, {
      title: '30 Minute Fartlek',
      desc: 'This 30 minute workout involves various length for each interval to improve your speed and endurance. Feel free to adjust the pace and duration based on your fitness level.'
    }, {
      title: 'Fartlek Training for Marathon',
      desc: 'Run with faster pace than your marathon pace for this workout to improve speed and endurance. Start off with easy jogging. Then kick up your pace for 1 min. Bring pace back to normal during each rest.'
    }, {
      title: 'Pyramid Interval Workout',
      desc: 'After warm up, complete 6 intervals of various distance and take 90 second rests in between. Adjust the intensity and target based on your fitness condition.'
    }, {
      title: 'Effort Pace: Beginner Threshold Development',
      desc: 'This workout is designed to introduce threshold development into short intervals of 5min based on Effort Pace.'
    }, {
      title: 'Effort Pace: Advanced Threshold Development',
      desc: 'This workout is designed to develop threshold through long intervals of 10-15min based on Effort Pace.'
    }, {
      title: 'Effort Pace: Beginner VO2max Development',
      desc: 'This workout is designed to introduce VO2max development into short 1:1 intervals of 3min based on Effort Pace.'
    }, {
      title: 'Effort Pace: Advanced VO2max Development',
      desc: 'This workout is designed to develop VO2max through short 4-min intervals based on Effort Pace.'
    }, {
      title: 'Track Pyramid - Short Distance',
      desc: 'This track workout focuses on short distances such as 200, 400, and 800m in the Track & Field world. You will find yourself running at supramaximal speed for various distances in a pyramid setup.'
    }, {
      title: 'Track Pyramid - Middle Distance',
      desc: 'This track workout focuses on middle distance such as 1200m and 1600m. You will find yourself running at 5k race pace for various distances in a pyramid setup.'
    }, {
      title: 'Hills and Threshold Combo (Intermediate/Advanced)',
      desc: 'This workout is designed to enhance uphill running strength through short intervals and develop threshold through longer intervals. This is an Effort Pace workout meant for trails'
    }, {
      title: 'Hills and Threshold Combo (Beginner)',
      desc: 'This workout is designed to enhance uphill running strength through short intervals and develop threshold through longer intervals. This is an Effort Pace workout meant for trails'
    }]
  }, {
    type: 'strength',
    name: 'COROS Official',
    desc: 'Strength workouts from Team COROS.',
    workouts: [{
      title: 'Bodyweight - Running Specific',
      desc: 'This 45-min bodyweight workout is designed to help runners build strength as part of their tranining journey in a home setting. No additional equipment required, but weights can be used for progression.'
    }, {
      title: 'Power Development - Running Specific',
      desc: '60-min lower-body workout designed to increase power for runners. This workout is most effective closer (1-2 months) before a race. Make sure you have had some recent experience in the gym before completing this workout.'
    }, {
      title: 'Strength Development - Running Specific',
      desc: '60-min lower-body workout designed to increase max strength around 4 compound exercises for runners. Make sure you are familiar with strength techniques before completing this workout.'
    }, {
      title: 'Back to Training - Full Body',
      desc: '60-min full-body workout designed to improve general fitness and safe return to training after off season.'
    }, {
      title: 'Beginner Plyometrics',
      desc: '30-min plyometric workout designed to increase your speed, power and endurance. Focus on your form instead of trying to complete a higher number of reps. '
    }, {
      title: 'Intermediate/Advanced Plyometrics',
      desc: '50-min plyometric workout designed to increase your speed, power and endurance. To make these exercises more challenging increase the tempo and/or add weights.'
    }, {
      title: 'Dynamic Warm-up',
      desc: 'This 5-10 minute warm-up should be done before every run. It is important not to rush through each exercise and gradually increase your heart rate, blood flow, and body temperature.'
    }, {
      title: 'Post Run Strength Routine',
      desc: 'This is a quick and simple post run strength routine that does not require any equipment. This workout takes less than 20 minutes and focuses on mobility, strength, and core. Single leg exercises are done half on each side (10 left, 10 right). Can add weights to the superset group if desired. '
    }, {
      title: 'Single Leg Strength',
      desc: 'This is a 30-minute strength workout focusing on single leg exercises. Can be bodyweight or add resistance bands/weights to increase intensity'
    }]
  }, {
    type: 'strength',
    name: 'Emelie Forsberg',
    desc: 'Emelie Forsberg is an elite ultra-runner from Norway. Emelie prides herself on pushing her limits and having structured workouts keep her on track. Emelie competes in events such as UTMB and believes focused training is what leads to great results. ',
    workouts: [{
      title: 'Core Strength Routine',
      desc: 'The basic core training I do 3-4 times/ week minimum 10 minutes, maximum 30 minutes! Sometimes all 8 exercises, 45 seconds on, 15 sec rest, 3 times each exercise. '
    }]
  }, {
    type: 'running',
    name: 'Kilian Jornet',
    desc: 'There is arguably no greater all-around mountain athlete in the world than Kilian Jornet. It is hard to find a major Mountain or Trail race that Kilian hasn’t won, having been crowned champion of UTMB, Western States, Sierre-Zinal, Pikes Peak Marathon, Zegama, Hardrock, Marathon du Mont Blanc and many, many more.',
    workouts: [{
      title: "Kilian's Favorite Uphill Workout",
      desc: "This workout is one of Kilian Jornet's favorites, intended to improve uphill racing capacity. During the rest periods, the goal is to run very easy (Z1) or rest entirely with no running."
    }]
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/progress.js
/* harmony default export */ const en_progress = ({
  productName: 'COROS Tommy Caldwell Mug',
  title: 'Exclusive Tommy Caldwell Mug',
  desc: 'Take a sip of motivation with the Tommy Caldwell Pain is Progress isothermal mug by COROS.',
  desc1: 'It’s tough to overcome the physical and mental challenges that come with training, competition, and pursuing your dreams. It’s natural to avoid discomfort, but every time you push your limits, you become stronger, faster, and more skilled. Every time you recover, you build the resilience and determination that will turn your \ndreams into reality.',
  desc2: 'No one knows this more than Tommy Caldwell. After losing his index finger in a 2001 table-saw accident, 23-year-old Tommy patiently worked through his excruciating pain to navigate himself back to the top of the professional climbing world - making the first-ever free climb of the Dawn Wall, and setting the current speed record on The Nose. ',
  desc3: "Discomfort is temporary, but the satisfaction of achieving your goals will last a lifetime. Take a sip of motivation every time you workout with this exclusive mug, limited to only 5000 units worldwide. Tommy's iconic handprint will always remind you that with the right mindset... ",
  productDetailTitle: 'Product Details',
  detailInfo1: 'Double-wall 18/8 (304) stainless steel',
  detailInfo2: 'Rust proof and dishwasher safe',
  detailInfo3: 'Isothermal anti-burn design',
  detailInfo4: 'Mouth opening lid & removable seal',
  detailInfo5: 'Capacity: 12.85 fl.oz / 0.38 L',
  detailInfo6: 'Solvent-free laser-etched branding',
  detailInfo7: 'Weight: 9 oz / Dimensions: Ø 3.3" x 4.4"',
  detailInfo8: 'Bisphenol A (BPA) Free',
  commit2ProgressTitle: 'Commit To Progress',
  commit2ProgressDesc1: "Progress happens when we commit to a goal - so what goals are you committing to in 2023? Give yourself some extra motivation by inspiring us and your friends with the goals you're prepared to suffer for this year. If entering a race is one of your goals, COROS will reimburse race entry fees after participation of up to $200 for 5 individuals. All you have to do is tell us your 2023 goals and why they're important. You can participate on Instagram, Facebook and Strava by tagging COROS, and using    ",
  commit2ProgressTag: '#painisprogress',
  commit2ProgressDesc2: "Purchase of the mug is not necessary for a chance to win, and all posts correctly tagged before February 28th will be considered for the prize drawing. Whatever your goals are and however you choose to commit, we wish you every success in achieving them."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/kilianEdition.js
/* harmony default export */ const en_kilianEdition = ({
  productName: 'COROS APEX 2 Pro',
  title: 'COROS APEX 2 Pro GPS Watch Kilian Jornet Edition',
  desc: 'For outdoor athletes who train hard and move fast.',
  sloganTitle: 'a world-class\n collaboration',
  sloganDesc1: "Undoubtedly the greatest mountain athlete of all time, Kilian Jornet is a living legend who balances athletic grit with patience and humility. From setting the UTMB course record to executing two mind-blowing speed climbs up Mt. Everest within a week, Kilian holds some of the most prestigious titles in ultrarunning.",
  sloganDesc2: "COROS is proud to partner with Kilian to present the COROS APEX 2 Pro Kilian Jornet limited edition. You'll get COROS' world-class training technology and navigation experience featuring Kilian's customized watch design and favorite accessories, for a unique collaboration like never before.",
  slogan2Title: 'mountain colors',
  slogan2Desc: "An homage to the snow-capped Norwegian mountains and majestic Romsdalen valley of Kilian's homeland, this limited edition watch features a crisp and striking white and black colorway. ",
  twoisbetter: 'two is better than one',
  twoisbetterDesc: "The APEX 2 Pro Kilian Jornet Edition comes \n    with two watch bands versus the standard \n    single band that comes with the original \n    APEX 2 Pro. With the classic soft silicone \n    band, or the lightweight nylon band to \n    choose from, you can decide what\u2019s \n    right for your next adventure.",
  capItOff: 'cap it off',
  capItOffDesc: "Each watch comes with a lightweight, ventilated race cap (40 USD value) by <a class=\"kilianEdition-common-link2\" href=\"https://www.nnormal.com/?utm_source=display&utm_medium=COROS&utm_content=COROS-Site&utm_term=us\">NNormal</a>, Kilian's athletic brand dedicated to simplicity and sustainability. United by a passion for exploring the outdoors and a commitment to quality, functionality, and durability, we are honored to work with NNormal to bring you products we fully believe in. Whether you're running through the fjords of Norway like Kilian, or hitting the roads for your next marathon, rock Kilian's look with a sleek new cap.",
  getcoached: 'get coached by kilian',
  getcoachedDesc: "Having a coach makes a huge difference in your training. But what if you were coached by the best mountain athlete in the world? As a proud owner of the COROS APEX 2 Pro Kilian Jornet Edition, you'll have the once in a lifetime opportunity to be coached by Kilian during a 12-week training program, exclusively through the COROS Training Hub. This is the first time Kilian has ever offered this opportunity to his fellow mountain and running enthusiasts. Only 25 spots are available for selection based on application criteria. ",
  getcoachedDescMobile: "Having a coach makes a huge difference in your training. But what if you were coached by the best mountain athlete in the world? As a proud owner of the COROS APEX 2 Pro Kilian Jornet Edition, you'll have the once in a lifetime opportunity to be coached by Kilian during a 12-week training program, exclusively through the COROS Training Hub. This is the first time Kilian has ever offered this opportunity to his fellow mountain and running enthusiasts. Only 25 spots are available for selection based on application criteria. ",
  getcoachedDeadline: 'Application deadline: Feb 17, 2023.',
  reachEverySummit: 'reach every summit',
  reachEverySummitDesc: 'Designed for performance over all types of terrain, the APEX 2 Pro is built with revolutionary technologies for Kilian and your most ambitious goals. With an even more durable exterior, redesigned antenna, next-generation optical sensor, and longer battery life, you can go fast and far. ',
  nomatterwhat: "no matter what,\n you'll be prepared",
  nomatterwhatDesc: "With the beauty of the outdoors also comes risk. Stormy weather, \n    altitude sickness, darkness, dehydration - these are all potential \n    realities of trekking through the wilderness. The APEX 2 Pro \n    Kilian Jornet Edition prepares you for any situation, so you \n    can stay safe and informed while you power to the summit.",
  nomatterwhatDescMobile: "With the beauty of the outdoors also comes risk. Stormy weather, altitude sickness, darkness, dehydration - these are all potential realities of trekking through the wilderness. The APEX 2 Pro Kilian Jornet Edition prepares you for any situation, so you can stay safe and informed while you power to the summit.",
  findYourPath: 'find your path',
  findYourPathDesc: 'A self-described 360° mountain athlete, Kilian demands the best in navigation technology, which is why he chose the all-new APEX 2 Pro as his watch. With COROS global offline mapping, checkpoints, custom route planning, and more, you can go anywhere outdoors with confidence.',
  findYourPathLearnMore: 'Learn more about new technologies and features',
  applyTitle: "Exclusive Access: \n  The Kilian Jornet \n  12-Week Virtual \n  Training Camp",
  applyTitleMobile: "Exclusive Access: \n  The Kilian Jornet \n  12-Week Virtual \n  Training Camp",
  applyDesc: "For the first time ever, Kilian has partnered with COROS to develop a free, 12-week virtual training camp designed for COROS APEX 2 Pro Kilian Jornet Edition owners who want to go longer and faster outdoors. As part of our collaboration with NNormal, selected participants will also receive a free NNormal training kit, up to \u20AC350 value. Only 25 spots are available for selection based on application criteria. ",
  applyDeadline: 'Application deadline: Feb 17, 2023.',
  applyBtn2: 'apply now',
  applyFlow1Date: 'Feb 17, 2023\n11:59 PM PST ',
  applyFlow1Title: 'Application Deadline',
  applyFlow1Desc: 'Locate the 6-digit product ID from your COROS APEX 2 Pro Kilian Jornet Edition watch and use it to submit the application on',
  applyFlow2Date: 'Feb 27, 2023\n11:59 PM PST',
  applyFlow2Title: 'Decision',
  applyFlow2Desc: 'COROS and Kilian will select 25 athletes based on their skill level and desired performance goals. The Camp is designed for athletes of all levels and is FREE to apply & attend.',
  applyFlow3Date: 'March 6 - May 28, 2023',
  applyFlow3Title: 'Training Camp',
  applyFlow3Desc: 'Group video sessions with Kilian before the camp starts. Receive regular training feedback and tips from Kilian via COROS Training Hub.',
  limitedProduction: 'Limited Production',
  limitedProductionDesc: "Only 5,000 APEX 2 Pro Kilian Jornet \n    Edition packages have been produced \n    globally. Get this exclusive bundle \n    before it sells out, so you can tap \n    into your inner mountaineer."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/careers.js
/* harmony default export */ const en_careers = ({
  pageTitle: '加入COROS',
  desc: "\u6211\u4EEC\u8BDA\u631A\u6B22\u8FCE\u4F18\u79C0\u7684\u4F60\u4EEC\u52A0\u5165\uFF0CCOROS \u79C9\u6301\u7740\u6210\u4E3A\u6700\u4F18\u79C0\u7684\u8FD0\u52A8\u79D1\u6280\u516C\u53F8\uFF0C\u901A\u8FC7\u6570\u636E \u6280\u672F\u63A8\u52A8\u8FD0\u52A8\u8BAD\u7EC3\u53D8\u9769\u7684\u613F\u666F\uFF0C\u5E0C\u671B\u4E0E\u5927\u5BB6\u4E00\u8D77\u575A\u6301\u957F\u671F\u3001\u7406\u6027\u3001\u5766\u8BDA\u3001\u8BDA\u4FE1\u3001\u521B\u65B0\u3001 \u6210\u957F\u7684\u4EF7\u503C\u89C2\uFF0C\u5EFA\u7ACB\u7B26\u5408 COROS\n  \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002\u5BF9\u4EC0\u4E48\u662F\u201CCOROS \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u201D\u611F\u5174\u8DA3?\u521A\u597D\uFF0C\u6211\u4EEC\u4E5F\u5BF9\u4F18\u79C0\u7684\u4F60\u611F\u5174\u8DA3\u3002",
  visionTitle: '使命与投递简历：',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/ek-giveaway.js
/* harmony default export */ const ek_giveaway = ({
  seo: {
    title: 'Win a COROS PACE 2 GPS Watch Eliud Kipchoge Edition!',
    desc: 'Enter for your chance to win the ultimate running package. The winner will be chosen on May 1st.'
  },
  intro: {
    title: 'AS USED BY THE G.O.A.T',
    desc: "Get ready to feel the exhilarating rush of running like a true champion! In honor of Eliud Kipchoge's inaugural Boston run on his quest to claim all six major marathons, we are giving away\n    the very last unsold COROS PACE 2 Eliud Kipchoge edition in existence. This special edition has been worn by Eliud through hundreds of training hours, crossed the finish line to set the world\n    record in Berlin, brought home gold in Tokyo, and reminds thousands of COROS users across the globe that \"no human is limited\". To truly honor giving away this piece of running history, we\n    teamed up with Eliud's inspirational partner, the legendary NN Running Team, to offer the ultimate running package:"
  },
  text2: 'COROS PACE 2 Eliud Kipchoge Edition | Signed Singlet | Signed Water Bottle | Signed Book',
  form: {
    title: "DON'T WAIT ANOTHER MOMENT",
    desc: 'Simply enter your email address below for a shot at winning this epic package!'
  },
  notice: "*By entering your email to participate in this giveaway, you agree to receive marketing communications from COROS and NN Running. Your email may be shared with these companies for the\n  purposes of marketing their products and services. If you wish to unsubscribe from these communications, you may do so at any time by following the instructions provided in the emails.",
  emailPlaceholder1: 'Your Answer',
  emailPlaceholder2: 'This event has ended',
  emailError1: 'Please provide a valid email.',
  emailError2: 'Email is required.',
  submittedError: 'Please refresh the page if you would like to submit a new form.',
  successMsg: 'Your response has been recorded.',
  submit: 'SUBMIT',
  oops: 'Oops!',
  confirm: 'Confirm',
  goodLuck: 'Good luck!',
  emailUsed: 'This email has already submitted a response.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/apex2credit.js
/* harmony default export */ const apex2credit = ({
  pageTitle: 'COROS APEX 2 and APEX 2 Pro Consumer Credit Application',
  pageDesc: 'Apply for your COROS.com credit if you bought an eligible APEX 2 or APEX 2 Pro watch before April 20th, 2023. This program ends on May 31, 2023.',
  errors: {
    430: "Unfortunately, the email you entered doesn't match our records. Please update the account email on your COROS app and refresh this page to restart the application. For more help, visit this <a href=\"https://support.coros.com/hc/en-us/articles/360046691111-How-to-update-your-COROS-account-email\" target=\"_blank\">support blog</a> or contact support@coros.com.",
    420: "Unfortunately, we are unable to verify this watch ID. Please contact support@coros.com for more help. ",
    410: "Unfortunately, the watch ID is either invalid for this program or doesn't match the watch model. Please try again. If you believe this is a mistake, please contact support@coros.com for more help.",
    440: "Unfortunately, the watch is not linked with a valid email. Please add account email to your COROS app and refresh this page to restart the application. For more help, visit this <a href=\"https://support.coros.com/hc/en-us/articles/360046691111-How-to-update-your-COROS-account-email\" target=\"_blank\">support blog</a> or contact support@coros.com.",
    450: "Unfortunately, your watch was activated after the price adjustment and did not qualify for credit. If you believe this is a mistake, please contact support@coros.com for more help.",
    510: "Unfortunately, your watch was activated outside the eligible locations and did not qualify for credit. If you believe this is a mistake, please contact support@coros.com for more help.",
    520: "Unfortunately, your watch seems to be in conditions such as disabled, sample, or loaner. If you believe this is a mistake, please contact support@coros.com for more help.",
    530: "Unfortunately, we have found an application for this watch ID. If you believe this is a mistake, please contact support@coros.com for more help.",
    540: "Oops! Something went wrong. Please contact support@coros.com for more help."
  },
  apply_successfully: 'Thank you for submitting the application. Your credit code will be emailed to you shortly. Thank you for choosing COROS, and happy shopping!',
  creditDescs: ["Starting Apr 20, 2023, COROS is adjusting the retail prices of its APEX 2 and APEX 2 Pro watches in the markets using the following currencies: USD, EUR, GBP, and CAD. Due to recent updates to the USD currency exchange rate, we feel it's right to adjust our pricing to make our products more competitive, and to pass those savings on to our consumers.", "To show our support and thanks to those who bought an APEX 2 or APEX 2 Pro before April 20th, 2023, we are offering a COROS.com credit to offset this price adjustment. To see if you're eligible and for instructions on how to apply, please review the guidelines below."],
  whatYouNeedToKnow: 'WHAT YOU NEED TO KNOW',
  whatYouNeedToKnowItems: [{
    title: 'Eligibility',
    desc: "\u2022 Program is valid for COROS APEX 2/2 Pro watches owners in USD, EUR, GBP, and CAD countries.\n    \u2022 Watches must have been bought from an authorized COROS retail partner before Apr 20th, 2023.\n    \u2022 The watch can not be in conditions such as defective, loaner, or others deemed ineligible by COROS."
  }, {
    title: 'Duration',
    desc: "The credit application will be open from Apr 20th, 2023, to May 31st, 2023."
  }, {
    title: 'Credit Details',
    desc: "<ul>\n      <li class=\"mb-15\">\n        Credits will be issued in the form of promotional codes applicable on the designated \n        <a class=\"underline hover:underline\" href=\"https://coros.com\">\n          COROS.com\n        </a> \n        sites. For example, if you select a code for the US region, it can only be used for orders on \n        <a class=\"underline hover:underline\" href=\"https://us.coros.com\">\n          us.COROS.com\n        </a>\n        . Once the code is generated, it can't be updated.\n      </li>\n      <li>Credit for APEX 2: 50 USD | 80 EUR | 70 GBP | 80 CAD</li>\n      <li>Credit for APEX 2 Pro: 50 USD | 80 EUR | 50 GBP | 100 CAD</li>\n      <li>Credit for APEX 2 Pro KJ: 50 USD | 50 EUR | 50 GBP | 100 CAD</li>\n      <li>\n        Websites: \n        <a class=\"underline hover:underline\" href=\"https://us.coros.com\">\n          US\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://es.coros.com\">\n          ES\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://fr.coros.com\">\n          FR\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://uk.coros.com\">\n          UK\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://CA.coros.com\">\n          CA\n        </a>\n      </li>\n    </ul>"
  }, {
    title: 'Claim and Use Your Credit',
    desc: "The code will be sent to your email linked to your COROS account. If you don't use email to log into your COROS app, please follow <a target=\"_blank\" class=\"underline hover:underline\" href=\"https://support.coros.com/hc/en-us/articles/360046691111-How-to-update-your-COROS-account-email\">these instructions</a> to link email to your account. Each watch is entitled to one code which expires after 11:59 PM Pacific Time, Dec 31, 2023. "
  }, {
    title: 'Receive Help',
    desc: "If you have trouble submitting the application or receiving credit, please contact support@coros.com for more help. "
  }],
  applyForCredit: 'APPLY FOR CREDIT',
  watchId: "Watch ID",
  watchIdTips: "Can't locate your Watch ID?",
  watchModel: "Watch Model",
  watchModelTIps: "Can't locate your Watch Model?",
  region: "Select Your Region",
  regionTips: "Region can\u2019t be updated after submission. ",
  email: "COROS Account Email",
  submit: 'SUBMIT',
  inputPlaceholder: 'Please enter',
  selectPlaceholder: 'Please select',
  emailTips: ['The email below is linked with your watch based on system records.', 'For security purposes, please enter your email again to proceed.'],
  watchIdGuide: {
    title: 'You can locate the 6-digit ID of your APEX 2/2 Pro watch in 2 ways.',
    descs: ["On the COROS app > Device page > tap on your watch > ID is located at the top of the page.", "On your watch > System > More Settings > Device's Info > Device ID."]
  },
  watchModelGuide: {
    descs: ["On the COROS app > Device page.", "For APEX 2 Pro users, check the bezel and body color to determine if it's the KJ edition. "]
  },
  'us': 'United States',
  'fr': 'France',
  'es': 'Spain',
  'uk': 'UK',
  'ca': 'Canada',
  'validOn': 'valid on',
  'shipToUs': ' - ships to most countries',
  'shipToFr': ' - ships to France',
  'shipToEs': ' - ships to Europe',
  'shipToUk': ' - ships to UK',
  'shipToCa': ' - ships to Canada',
  afs: {
    loading: 'Loading...',
    slide: 'Slide To Proceed',
    success: 'You may proceed to the next step.',
    error: 'Network error. Please try again.',
    fail: 'Verification failed. Please try again.'
  },
  confirmCredit: {
    title: 'Please verify the information below. The application can’t be updated after submission.',
    confirm: 'Proceed',
    region: 'Selected Region & Website'
  },
  refreshAfterApplied: 'Oops! Please refresh this page to start a new application. ',
  messageTitles: {
    failed: 'Application Failed',
    success: 'Application Complete'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/app3-langdingpage.js
/* harmony default export */ const app3_langdingpage = ({
  title: 'ALL-ROUND UPGRADE',
  seo: {
    title: 'COROS April 2023 Update',
    desc: 'Our latest update adds even more updates to improve how you train and explore with your COROS watch. '
  },
  intro: "Our April 2023 Update brings a redesigned app and significant upgrades to the entire COROS training solution with an all-new running fitness system, improved EvoLab, brand-new Explore page, location and map manager, and many more improvements. Whether you're training for a goal or exploring outdoors, the ultimate GPS watch just got even better.",
  progress: {
    title: "the all-new \n    progress page",
    desc: "Training is about making progress. From the moment you open the app, the all-new Progress page helps you prioritize achieving goals by giving you instant access to your recent activities, sleep tracking data, Training Status and much more. You can also customize your view to prioritize the information you need the most.",
    deepData: {
      title: 'Go Deeper Into Your Data',
      desc: "Simply tap any of the cards on your Progress page to access more details and historical data to review how you're progressing over time."
    }
  },
  optimize: {
    title: 'optimize your training',
    desc: 'From understanding your metrics to planning your next workout, our new app empowers you to take control of your training and fitness.',
    status: {
      title: 'Training Status',
      desc: "Using a combination of Base Fitness and Load Impact data, your Training Status provides a snapshot of your fitness so you can easily see if it's improving or declining, and how well you are managing fatigue.",
      list: [{
        title: 'Excessive',
        desc: 'High Training Load, at risk for overtraining and/or injury.'
      }, {
        title: 'Optimized',
        desc: 'Recommended Training Load range to improve Base Fitness and promote long-term gains.'
      }, {
        title: 'Maintaining',
        desc: 'Stable Training Load and small or zero changes to Base Fitness.'
      }, {
        title: 'Resuming',
        desc: 'Recent training is gradually increasing your adaptation to a higher training load'
      }, {
        title: 'Recovery',
        desc: 'Ready for high-performance efforts'
      }, {
        title: 'Decreasing',
        desc: 'Base Fitness is rapidly declining'
      }]
    },
    weekly: {
      title: 'Weekly Training Load',
      desc: 'As most athletes plan their workouts on a weekly basis, you can now get an instant look at how your Training Load is tracking to stay injury free, or peak when you need to. You can also view by month or year track against longer term goals.'
    },
    enhanced: {
      title: 'Enhanced Workout Planning',
      list: [{
        title: 'View your Training Calendar',
        desc: 'Quickly see the workouts you have planned for the week. '
      }, {
        title: 'Create new workouts',
        desc: 'Tap into your Training Calendar to add new workouts.'
      }, {
        title: 'Edit planned workouts',
        desc: 'Drag and drop planned workouts on the go.'
      }]
    },
    running: {
      title: 'Running Fitness',
      desc: "Every runner is different, and every runner has different strengths and weaknesses. The all-new Running Fitness system will help you understand how you're performing across four core running abilities: Base, Endurance, Speed, and Sprint"
    }
  },
  navigation: {
    title: 'navigation made easy',
    desc: "Whether you're making a new trail to blaze, or exploring streets of a new city, our all-new navigation tools will help you find and stay on the right path. ",
    subtitle: 'the all-new explore page',
    subdesc: "Whether you're running or biking, plot your path, see the distance, check the elevation profile and sync to your watch with our simple and intuitive Explore page.",
    list: [{
      title: 'Tap to snap',
      desc: "Simply tap on the map to build your route over known paths, or switch to manual if you're in uncharted territory."
    }, {
      title: 'Run or Ride',
      desc: 'The Explore page provides both options. Pick yours to make the perfect route.'
    }, {
      title: 'Edit your route',
      desc: 'An eraser allows you to remove and edit any part of your route.'
    }],
    locations: {
      title: 'Locations & Waypoints',
      list: [{
        title: 'Route generation',
        desc: 'Search locations, and auto-generate a route.'
      }, {
        title: 'Customized icons',
        desc: 'Save locations with customized icons.'
      }, {
        title: 'Waypoints',
        desc: 'Add waypoints to new or existing routes.'
      }]
    },
    manage: {
      title: 'Manage Route &\n Location Collection',
      desc: 'Access your Collection from the Explore page to quickly select saved routes or locations.',
      list: ['View and manage your saved routes with distance and elevation profile.', 'View and manage your saved locations with custom icons, addresses, and elevations.', 'Apply filters based on type, distance, region and source.']
    },
    onWirst: {
      title: 'On-Wrist Navigation',
      desc: 'Sync your routes to any compatible COROS device* for a seamless one-button navigation experience. Use the Digital Dial to zoom in and out on the map, and use the touchscreen** to move from one area to another.',
      note1: "*PACE 1 and KIPRUN 500 do not support on-watch navigation. Update your PACE 2 to the latest firmware to receive breadcrumb mapping capabilities.",
      note2: "**PACE 2 does not support touchscreen experiences."
    }
  },
  more: {
    title: 'even more updates',
    list: [{
      title: 'PACE 2 Navigation.',
      desc: 'You can now navigate with breadcrumb mapping on PACE 2.'
    }, {
      title: 'Sleep Tracking.',
      desc: 'A new and improved breakdown of your sleep data makes it easier to understand how well you are sleeping.'
    }, {
      title: 'Recovery.',
      desc: "We've added a long-term recovery trend view and recovery time recommendation."
    }, {
      title: 'Offline Maps Management.',
      desc: "Easily download or delete maps for your COROS watch* directly from the app.",
      note: '*Only available for WiFi-capable COROS watches'
    }, {
      title: 'Running Fitness Test.',
      desc: 'Our new Running Fitness Test is a quick way to obtain, or reassess, your current fitness levels.'
    }, {
      title: 'Get Support.',
      desc: 'You can now submit an inquiry for product support directly from the app.'
    }]
  },
  footer: {
    title: 'START TESTING',
    // desc: 'Click below to get early access to all of our newest features through the April 2023 Public Beta Testing.',
    btn: 'update now'
  },
  header: {
    desc: 'Click below to get early access to \nthe Public Beta Release on April 24th.',
    note: 'Official release in a few weeks pending Beta Test.'
  },
  imgAlts: {
    deepImg: ['A screenshot of the Progress page of the COROS app.', 'A screenshot of the daily view of the sleep tracking feature on the COROS app.', 'A screenshot of the monthly view of the sleep tracking feature on the COROS app.'],
    more: ['A close-up view of the screen on a COROS PACE 2 White Silicone watch during route navigation. ', 'A sleep tracking pie-chart showing the duration of each sleep stage on the COROS app.', 'A dot graph showing the daily recovery percentage for a month on the COROS app.', 'A screenshot of the map download image on the COROS app.', 'A close-up view of the notification on a COROS APEX 2 Coral watch as the running fitness test is completed. ', 'A screenshot of the feedback section on the COROS app.'],
    manage: ['A screenshot of the My Routes section of the Explore page on the COROS app.', 'A screenshot of the Saved Locations section of the Explore page on the COROS app.', 'A screenshot of the filter settings for My Routes of the Explore page on the COROS app.']
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/carabiner.js
/* harmony default export */ const en_carabiner = ({
  name: 'COROS VERTIX 2 Carabiner',
  pageTitle: 'THE ALL-NEW VERTIX 2 CARABINER',
  pageDesc: 'Built for the demands of expert climbers and ready for anyone who wants to wear their VERTIX 2 off-wrist, our 2nd generation carabiner will securely keep your watch in easy reach when you need it.',
  desc: "Built for the demands of expert climbers and ready for anyone who wants to wear their VERTIX 2 off-wrist, our 2nd generation carabiner will securely keep your watch in easy reach when you need it. Whether you\u2019re ascending a technical crack-climbing route or out hiking in the wilderness, full GPS tracking operation will continue to work flawlessly in the all-new carabiner. If you want to keep tracking your heart rate data, pairing with any external Heart Rate Monitor will make sure you never miss a beat.",
  keyFeatures: 'KEY FEATURES',
  features: [{
    title: 'Locking Gate',
    desc: "Ensures the carabiner cannot accidentally open."
  }, {
    title: 'Sensor Protection',
    desc: "Body shields watch sensors from scratches."
  }, {
    title: 'Release Trigger',
    desc: "Easy to operate, yet hard to activate by mistake."
  }, {
    title: 'Screw Stopper',
    desc: "Prevents the locking screw from being over-tightened."
  }, {
    title: 'Trigger Lock',
    desc: "Added security to stop accidental watch release."
  }, {
    title: 'Lightweight & Durable',
    desc: "High-grade materials weigh in at just 40 grams."
  }],
  keyFeaturesDesc: "Not built as UIAA-certified climbing safety equipment.\n  Not appropriate for motion sensing data, such as cadence, jump rope counts or strength training reps."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pace2-2023.js
/* harmony default export */ const pace2_2023 = ({
  intro: {
    title: 'LIGHT IN WEIGHT. \nHEAVY WITH FEATURES.',
    desc: ['COROS PACE 2 is the ultimate training partner for athletes of all kinds and at every level. This super lightweight watch packs heavyweight training features and a massive battery life of up to 30 hours of GPS operation. ', 'But when you get a PACE 2, you also get the entire COROS Training Solution. EvoLab will turn your data into valuable metrics and actionable insights. The COROS Training Hub desktop portal provides in-depth analysis and management features. Our powerful companion app gives you daily control of your training and devices, and when you need some 1-on-1 advice, our team of COROS Coaches is standing by to help. Keep reading to see how PACE 2 can help you go fast, and far.']
  },
  theLightestGpsWatch: {
    title: 'The Lightest GPS Watch Ever',
    desc: "From just under 30 grams with the COROS \n    nylon band, you can put focus on your \n    training, not the bulky feeling \n    on your wrist.",
    descMobile: "From just under 30 grams \n    with the COROS nylon \n    band, you can put focus \n    on your training, not \n    the bulky feeling \n    on your wrist."
  },
  fingertipSimplicity: {
    title: 'Fingertip Simplicity',
    desc: 'Designed to be easy and intuitive to operate, the COROS Dial allows you to navigate your watch with just one finger.'
  },
  builtForTheLongHaul: {
    title: 'Built for the Long-Haul',
    desc: 'Use your watch a lot and your charger a little.',
    left: {
      upto: 'Up to',
      num: 30,
      unit: 'Hours',
      words: "activity tracking with full GPS, \n      barometer, and heart rate."
    },
    right: {
      upto: 'Up to',
      num: 20,
      unit: 'Days',
      words: "regular use with weekly training and \n      daily sleep & recovery tracking."
    }
  },
  perfectForRunners: {
    title: 'Perfect for Runners',
    desc: ['Understand your running ability and focus on your training needs with the built-in Running Fitness Test Mode.', 'Avoid impaired data caused by GPS drifts during track runs. Let COROS PACE 2 automatically detects that you are on a track to ensure GPS and data accuracy with Track Mode. ', 'Pair with COROS POD 2 to get even more advanced running metrics, such as Ground Time, L/R Balance, Stride Height, and Ratio. Perfect for non-GPS situations, get next-level accuracy for your hard-earned data on treadmills and indoor tracks.'],
    title2: 'TRACK RUN MODE',
    title3: 'COROS POD 2'
  },
  navigationMadeEasy: {
    title: 'Navigation Made Easy',
    desc: 'Whether you are exploring the streets of a new city or finding your way back to the parking lot, our navigation tools will help you create new routes and stay on the right path.'
  },
  nightMode: {
    title: 'Night Mode',
    desc: 'Make it easy for your eyes when training in low-light situations without taking a toll on battery life.'
  },
  customizableActivityScreens: {
    title: 'Customizable Activity Screens',
    desc: 'Easily personalize the layout for each activity and receive custom activity alerts to keep you on track with your goals.'
  },
  multisportActivityTracking: {
    title: 'Multisport Activity Tracking',
    desc: 'From open water swimming to jumping rope, our activity modes are specifically built to provide the most accurate metrics for your sport.'
  },
  evoLabInsights: {
    title: 'EvoLab INSIGHTS',
    desc: 'COROS EvoLab is our proprietary sports science platform. It transforms the data collected by your COROS PACE 2 into actionable insights so you can optimize training and achieve athletic goals.'
  },
  runningFitness: {
    title: 'Running fitness',
    desc: "Every runner is different. Your strengths and weaknesses can also change during training. Understand how you're performing across core running abilities with clear directions to improve."
  },
  trainingStatus: {
    title: 'Training Status',
    desc: "A snapshot of your fitness so you can easily see if it's improving or declining, and how well you are managing fatigue."
  },
  trainingLoad: {
    title: 'Training Load',
    desc: 'Monitor your activity volume and intensity to ensure you are not over or under-training.'
  },
  recoveryTimer: {
    title: 'Recovery Timer',
    desc: 'Avoid injury and take care of your body with a long-term recovery trend and recovery time recommendation.'
  },
  racePredictor: {
    title: 'Race Predictor',
    desc: 'Understand how fast you can run in current environmental conditions, from 5K to a marathon.'
  },
  advancedTrainingTools: 'ADVANCED TRAINING TOOLS',
  trainingHub: {
    title: 'Training Hub',
    desc: 'A desktop portal designed to help athletes track performance data, conduct in-depth analysis, manage and schedule training, and facilitate coach communications.'
  },
  corosCoaches: {
    title: 'COROS Coaches',
    desc: 'Need training help or advice? Get free 1-on-1 support from our team of qualified coaches based on your training data.'
  },
  evenMoreFeatures: 'Even more features',
  enhancedSleepMonitoring: {
    title: 'Enhanced Sleep Monitoring',
    desc: 'Having enough high-quality sleep is essential for optimal training. A detailed breakdown of your sleep stages makes it easy to understand if you are getting a good night of rest.'
  },
  flexibleTrainingCalendar: {
    title: 'Flexible Training Calendar',
    desc: 'Take control of your training schedule to stay on track with your goals by syncing and following your calendar on the go, directly from your wrist.'
  },
  personalizedWorkoutBuilder: {
    title: 'Personalized Workout Builder',
    desc: 'Choose from running, biking, swimming, or strength training, and create your workout with custom intensity and intervals.'
  },
  preDesignedWorkoutsPlans: {
    title: 'Pre-designed Plans',
    desc: 'Download free training plans and workouts created by elite athletes and their coaches. Easily import them to your watch and learn from the pros.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/stories.js
/* harmony default export */ const stories = ({
  homeTitle: 'COROS Stories',
  homeDesc: 'Discover training insights, tips, stories, and metrics from elite athletes and coaches to help you optimize training and achieve athletic goals with COROS.',
  viewAllStories: 'VIEW ALL STORIES',
  learnMore: 'LEARN MORE',
  searchCorosStories: 'SEARCH COROS STORIES',
  search: 'SEARCH',
  viewMoreStories: 'VIEW MORE STORIES',
  shareThisStory: 'Share this story',
  by: 'By',
  minRead: '{0} min read',
  resultsFound: '{0} results found'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/hrm.js
/* harmony default export */ const en_hrm = ({
  share: 'COROS Heart Rate Monitor',
  shareText: 'Precise data from the comfort of your arm.',
  menu: 'COROS HR Monitor',
  homeWatch: 'COROS HR Monitor',
  homeWatchDesc: "Precise data from the\ncomfort of your arm",
  precise: 'PRECISE DATA.\nTOTAL COMFORT.',
  intro: "Compatible with any Bluetooth heart rate-enabled device, the COROS Heart Rate Monitor delivers \n    over 38 hours of continuous accurate heart rate monitoring to track \n    your workouts in distraction-free comfort.",
  intro_mobile: 'Compatible with any Bluetooth heart rate-enabled device, the COROS Heart Rate Monitor delivers over 38 hours of continuous accurate heart rate monitoring to track your workouts in distraction-free comfort.',
  easyToWear: 'EASY TO WEAR.\nNOTHING TO DISTRACT.',
  sleek: 'Sleek & Snug',
  sleekText: "Simpler to wear than a chest strap, our soft fabric band lays flat around your arm and locks in place with its textured surface. The low-profile design prevents snagging on clothes or gym equipment, allowing you to forget you're even wearing it.",
  flexible: 'Flexible Fit',
  flexibleText: 'Set the perfect placement and tension on the durable elasticated band by simply sliding the buckle until it feels snug. The secure velcro enclosure enables you to quickly remove the sensor to easily wash the band.',
  accuracy: 'DESIGNED FOR ACCURACY. \nBUILT TO LAST.',
  sensor: 'Advanced Sensor',
  sensorText: 'Our latest generation multi-channel optical sensor provides high signal quality. Housed in a tough yet sleek body and protected under a scratch-resistant cover, our advanced sensor will deliver reliable and accurate heart rate data for years.',
  band: 'Superior Band',
  bandText: "Optical heart rate sensors work best when they're held securely against the skin. Our band is designed to cradle the sensor flush against your arm to prevent external light from getting in to keep the signal quality strong, no matter your activity.",
  noButtons: 'NO BUTTONS.\nNO FUSS.',
  power: 'Lasting Power',
  powerText: 'With 38 hours of full operation or 80 days of standby on a single charge, the COROS Heart Rate Monitor is built to endure. View the battery level on your COROS watch or app and use the magnetic cable to quickly recharge.',
  detection: 'Wear Detection',
  detectionText: 'With built-in wear detection, the COROS Heart Rate monitor automatically powers on and off based on when it is worn. Allowing you to automatically connect to your paired devices every time you start a workout.',
  connections: 'Multiple Connections',
  connectionsText: 'Designed to work seamlessly with your favorite COROS watches and app, it can also simultaneously pair with up to three devices, including non-COROS watches and other Bluetooth-compatible indoor trainers, bike computers, and more.',
  why: 'Why The Arm?',
  whyText: 'Optical heart rate sensors work by using light to measure blood flow in capillaries beneath the skin. The top of your wrist is a convenient place for a watch, but is a challenging location for even the best sensors. Wearing on the  arm offers our optical sensor an optimal amount of blood flow to gather heart rate data with accuracy equivalent to that of a traditional chest strap.',
  box: "WHAT'S IN THE BOX"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/chamonix.js
/* harmony default export */ const en_chamonix = ({
  menuTitle: 'COROS in Chamonix',
  shareTitle: 'COROS in Chamonix | August 28 - September 3',
  shareDesc: 'Join COROS in Chamonix for a packed week of exclusive events with our top pro athletes, or visit our booth at the Ultra-Trail Village Expo to check out our latest products.',
  bannerTitle: 'COROS IN CHAMONIX',
  bannerTitleText: 'August 28th - September 3rd',
  intro: "If you're traveling to Chamonix to race or spectate the greatest trail event of the year, COROS invites you to join a packed week of exclusive events where you can rub shoulders with some of our top pro athletes. Register below to secure your spot, or visit our booth at the Ultra-Trail Village Expo to sign up in person and check out our latest limited edition APEX 2 Pro.",
  scheduleTitle: 'EVENT SCHEDULE',
  scheduleDesc: 'The majority of our events will be hosted at La Folie Douce Hotel, a chic hotel within easy reach from the finish line. Capacity is limited, so reserve your spot today!',
  scheduleDescLink: 'La Folie Douce Hotel',
  courseTitle: 'COURSE GPX FILES',
  courseDesc: 'Racing in Chamonix? Download a GPX file to your COROS watch so that you can navigate with ease.',
  openWithCorosApp: 'Open with COROS app',
  downloadGpxFile: 'Download GPX File',
  boothTitle: 'VISIT THE COROS BOOTH',
  boothDesc: 'Meet a COROS team member who can get your most technical questions answered, and check out or purchase any of our mountain-ready watches, including our new limited edition APEX 2 Pro.',
  whoTitle: "WHO'S RACING?",
  whoDesc: 'COROS is proud to sponsor athletes across the globe who are racing in Chamonix.',
  register: 'REGISTER'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/chamonix_edition.js
/* harmony default export */ const en_chamonix_edition = ({
  shareTitle: 'COROS APEX 2 Pro GPS Outdoor Watch Chamonix Edition',
  shareDesc: 'For outdoor athletes who train hard and move fast.',
  productName: 'COROS APEX 2 Pro Chamonix',
  mobileProductName: 'COROS APEX 2 Pro Chamonix',
  title: 'APEX 2 Pro\nCHAMONIX EDITION',
  intro: "If you aspire to train hard and move fast outdoors, there's no more iconic base than Chamonix. The spiritual home of trail running and gateway to the epic terrain of Mont Blanc, this special edition APEX 2 Pro celebrates one of the greatest places on earth to train and trail-blaze.",
  introMobile: "If you aspire to train hard and move fast outdoors, there's no more iconic base than Chamonix. The spiritual home of trail running and gateway to the epic terrain of Mont Blanc, this special edition APEX 2 Pro celebrates one of the greatest places on earth to train and trail-blaze.",
  limited: 'LIMITED RELEASE',
  limitedText: '3000 units worldwide',
  alpine: 'ALPINE INSPIRED COLORS',
  alpineText: "Far from the green that dominates the lower slopes, the blue and grey colors echo Mont Blanc's high elevations where rock and glacier meet the piercing sky.",
  alpineMobile: 'ALPINE INSPIRED \nCOLORS',
  alpineMobileText: "Far from the green that dominates the lower slopes, the blue and grey colors echo Mont Blanc's high elevations where rock and\nglacier meet the piercing sky.",
  mont: 'MONT BLANC \nPROVEN',
  montText: "COROS users have clocked over 1 million meters of vertical ascent in Chamonix. Packed full of our latest generation technology, innovative features, and legendary battery life, you can be confident the APEX 2 Pro won't let you down.",
  montMobile: 'MONT BLANC \nPROVEN',
  montMobileText: "COROS users have clocked over 1 million meters of vertical ascent in Chamonix. Packed full of our latest generation technology, innovative features, and legendary battery life, you can be confident the APEX 2 Pro won't let you down.",
  reach: 'REACH EVERY SUMMIT',
  reachText: 'Designed for performance over all types of terrain, the APEX 2 Pro is built with revolutionary technologies for your most ambitious goals. With a durable exterior, redesigned antenna, next-generation optical sensor, and longer battery life, \nyou can go fast and far.',
  reachMobile: 'REACH EVERY SUMMIT',
  reachMobileText: 'Designed for performance over all types of terrain, the APEX 2 Pro is built with revolutionary technologies for your most ambitious goals. With a durable exterior, redesigned antenna, next-generation optical sensor, and longer \nbattery life, you can go fast and far.',
  noMatter: "NO MATTER WHAT,\nYOU'LL BE PREPARED",
  noMatterText: 'With the beauty of the outdoors also comes risk. Stormy weather, altitude sickness, darkness, dehydration - these are all potential realities of trekking through the mountains. The APEX 2 Pro Chamonix Edition prepares you for any situation \nso you can stay safe and informed while you power to the summit.',
  noMatterMobile: "NO MATTER WHAT,\nYOU'LL BE PREPARED",
  noMatterMobileText: 'With the beauty of the outdoors also comes risk. Stormy weather, altitude sickness, darkness, dehydration - these are all potential realities of trekking through the mountains. The APEX 2 Pro Chamonix Edition prepares you for any situation \nso you can stay safe and informed while you power to the summit.',
  findYour: 'FIND YOUR PATH',
  findYourText: 'With COROS global offline mapping, checkpoints, custom route planning,  you can access critical navigation information in the most remote locations with confidence. The digital dial on the APEX 2 Pro Chamonix Edition makes it easy to zoom in and out of your map, while the touchscreen allows you to drag the map with your finger.',
  findYourMobile: 'FIND YOUR PATH',
  findYourMobileText: 'With COROS global offline mapping, checkpoints, custom route planning,  you can access critical navigation information in the most remote locations with confidence. The digital dial on the APEX 2 Pro Chamonix Edition makes it easy to zoom in and out of your map, while the touchscreen allows you to drag \nthe map with your finger.',
  box: 'WHAT’S IN THE BOX',
  cable: 'Charging Cable',
  nylonWatchBand: 'Nylon Watch Band',
  shopAllColors: 'Shop All Colors',
  recommandedProduct: 'Choose Chamonix Accessories'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pace3.js
/* harmony default export */ const en_pace3 = ({
  productName: 'COROS PACE 3 GPS Sport Watch',
  productNameShort: 'COROS PACE 3',
  valencia_productNameShort: 'COROS PACE 3 Valencia',
  trainingPlansAndWorkoutsLinks1WordPc: 'Training Plans',
  intro: 'THE UNDISPUTED\nLIGHTWEIGHT CHAMP',
  introText: "Improving on its legendary predecessor in every way, PACE 3 packs an even more powerful punch. Track your training and recovery with a watch that's lightweight and comfortable, with advanced technology, outstanding data accuracy, and backed by the industry-leading COROS training software system. The COROS PACE 3 paves the way to discover your potential.",
  goTheDistance: 'GO THE DISTANCE,\nAND BEYOND',
  goTheDistanceText: 'Designed to increase battery capacity, PACE 3 maximizes time on your wrist, and minimizes time spent charging.',
  batteryAfter: 'BATTERY AFTER\n10 HOURS OF GPS USE',
  batteryAfterFootnote: 'USE',
  t247Comfort: '24/7\nCOMFORT',
  t247ComfortText: 'Super-light with a sleek body, PACE 3 is made to be worn all day and night in completely distraction-free comfort.',
  followYourOwnPath: 'FOLLOW YOUR OWN PATH',
  followYourOwnPathText: 'Go beyond your neighborhood run in confidence with a suite of powerful tools including Turn-by-Turn navigation.',
  nextGenerationGps: 'NEXT\nGENERATION\nGPS',
  nextGenerationGpsText: 'A redesigned satellite chipset with optional Dual-Frequency\nwill keep your GPS data accurate, even in high-rise cities\nlike New York and Chicago.',
  lookGood: 'LOOK GOOD & FEEL GREAT,\nWHATEVER YOU DO',
  lookGoodText: 'Every wrist is unique, and everyone has different needs, which is why PACE 3 has the choice of high-quality and stylish silicone and nylon bands. Choose which is right for you, or buy more to switch up your look.',
  lookGoodFeatures1: ['SILICONE', 'QUICK DRYING', 'EASY MAINTENANCE', 'DURABLE'],
  lookGoodFeatures2: ['NYLON', 'BREATHABLE', 'LIGHTWEIGHT', 'COMFORT'],
  accurateActivityModes: 'EXTENSIVE\nACTIVITY\nMODES',
  accurateActivityModesText: 'Run, bike, swim, strength, and snow. PACE 3 provides an extensive range of activity modes that are optimized for accurate measurement.',
  routePlanningMadeEasy: 'ROUTE PLANNING\nMADE EASY',
  routePlanningMadeEasyText: 'Easily build custom routes or search for a destination and sync to\nPACE 3 on the Explore page in the COROS app.',
  neverMissABeat: 'NEVER MISS A BEAT',
  neverMissABeatText: 'From tracking your sleep, SpO2, and workout intensity, our next-gen optical heart rate\nsensor will give you the most accurate wrist-based measurements possible.',
  neverMissABeatFeatures: ['5 LEDs', '4 PHOTODETECTORS', 'PROTECTIVE GLASS', 'OPTICAL PULSE OXIMETER'],
  trainingDoesntEndAtBedtime: "TRAINING DOESN'T\nEND AT BEDTIME",
  trainingDoesntEndAtBedtimeText: 'With 24/7 comfort, accurate sensors and epic battery life, PACE 3\nprovides detailed data on your sleep recovery night after night.',
  trainingDoesntEndAtBedtimeFeatures: 'TRACKS AWAKE, REM, LIGHT & DEEP SLEEP',
  trainingDoesntEndAtBedtimeFeatures2: 'CALCULATES YOUR RESTING HEART RATE',
  alwaysSeeTheBrightSide: 'ALWAYS SEE THE\nBRIGHT SIDE',
  alwaysSeeTheBrightSideFeatures: ['TRANSFLECTIVE DISPLAY FOR ENHANCED\nVISIBILITY IN BRIGHT SUNLIGHT', 'ALWAYS-ON 1.2" MINERAL GLASS DISPLAY', 'TOUCH SCREEN FOR EASY OPERATION', 'NIGHT MODE FOR EASY-READABILITY,\nEVEN IN THE DARK'],
  sweatSwimShower: 'SWEAT\nSWIM\nSHOWER',
  sweatSwimShowerText: 'Getting wet is no problem for PACE 3 with water\nresistance to 5 ATM.',
  moreThanAWatch: 'MORE THAN A WATCH',
  moreThanAWatchText: 'With the PACE 3, you also get the entire COROS Training Solutions at no extra cost.',
  trainingPlansAndWorkouts: 'TRAINING PLANS AND WORKOUTS',
  trainingPlansAndWorkoutsText: 'From 5k to Ultra. Download free Training Plans and Workouts to help you reach your goals.',
  corosCoaches: 'COROS COACHES',
  corosCoachesText: 'Real coaches. Real advice. Get personalized guidance\nfrom our team of experts.',
  trainingHub: 'TRAINING HUB',
  trainingHubText: 'Advanced training analysis tool and direct communication with your coach. Trusted by NN Running and other world-class elite teams.',
  beyondYourTraining: 'BEYOND YOUR TRAINING',
  beyondYourTrainingText: 'Sync directly to your favorite health and fitness apps like Strava, Nike Run Club, Apple Health, and Health Connect. Stay connected by viewing incoming texts and phone calls, or use Find my Phone to locate your misplaced device, and control your GoPro and Insta360 cameras straight from your wrist.',
  whatsInTheBox: 'WHAT’S IN THE BOX',
  chargingCable: 'Charging Cable',
  watchBand: 'Watch Band',
  shareTitle: 'COROS PACE 3 GPS Sport Watch',
  shareDesc: 'For multi-sport athletes who train hard and move fast.',
  homeProductPageDesc: 'For multi-sport athletes who \ntrain hard and move fast',
  watchInfoHeader: 'GPS SPORT WATCH',
  weight: 'Weight (with nylon band)',
  width: 'Thickness',
  inStandardGpsMode: '*In standard GPS mode',
  trainingPlansAndWorkoutsLinks1Word: 'Training Plans',
  trainingPlansAndWorkoutsLinks2Word: 'Workouts',
  corosCoachesLinksWord: 'our team of experts',
  trainingPlansAndWorkoutsLinks1Link: 'https://us.coros.com/plans',
  trainingPlansAndWorkoutsLinks2Link: 'https://us.coros.com/workouts',
  corosCoachesLinksLink: 'https://us.coros.com/stories/coros-coaches/c/coros-coaches-your-personal-training-support',
  mobile_intro: 'THE UNDISPUTED\nLIGHTWEIGHT CHAMP',
  mobile_introText: "Improving on its legendary predecessor in every way, PACE 3 packs an even more powerful punch. Track your training and recovery with a watch that's lightweight and comfortable, with advanced technology, outstanding data accuracy, and backed by the industry-leading COROS training software system. The COROS PACE 3 paves the way to discover your potential.",
  mobile_goTheDistance: 'GO THE DISTANCE,\nAND BEYOND',
  mobile_goTheDistanceText: 'Designed to increase battery capacity, PACE 3 maximizes time on your wrist, and minimizes time spent charging.',
  mobile_batteryAfter: 'BATTERY AFTER\n10 HOURS OF GPS USE',
  mobile_batteryAfterFootnote: 'USE',
  mobile_t247Comfort: '24/7\nCOMFORT',
  mobile_t247ComfortText: 'Super-light with a sleek body, PACE 3 is made to be worn all day and night in distraction-free comfort.',
  mobile_followYourOwnPath: 'FOLLOW YOUR OWN PATH',
  mobile_followYourOwnPathText: 'Go beyond your neighborhood run in confidence with a suite of powerful tools including Turn-by-Turn navigation.',
  mobile_nextGenerationGps: 'NEXT GENERATION GPS',
  mobile_nextGenerationGpsText: 'A redesigned satellite chipset with optional Dual-\nFrequency will keep your GPS data accurate, even\nin high-rise cities like New York and Chicago.',
  mobile_lookGood: 'LOOK GOOD & FEEL GREAT,\nWHATEVER YOU DO',
  mobile_lookGoodText: 'Every wrist is unique, and everyone has different\nneeds, which is why PACE 3 has the choice of\nhigh-quality and stylish silicone and nylon bands.\nChoose which is right for you, or buy more to\nswitch up your look.',
  mobile_lookGoodFeatures1: ['SILICONE', 'QUICK DRYING', 'EASY MAINTENANCE', 'DURABLE'],
  mobile_lookGoodFeatures2: ['NYLON', 'BREATHABLE', 'LIGHTWEIGHT', 'COMFORT'],
  mobile_accurateActivityModes: 'EXTENSIVE ACTIVITY MODES',
  mobile_accurateActivityModesText: 'Run, bike, swim, strength, and snow. PACE 3 provides an extensive range of activity modes that are optimized for accurate measurement.',
  mobile_routePlanningMadeEasy: 'ROUTE PLANNING MADE EASY',
  mobile_routePlanningMadeEasyText: 'Easily build custom routes or search for a place and sync to PACE 3 on the Explore page in the app.',
  mobile_neverMissABeat: 'NEVER MISS A BEAT',
  mobile_neverMissABeatText: 'From tracking your sleep, workout intensity, and SpO2, our next-gen optical heart rate sensor will give you the most accurate wrist-based measurements possible.',
  mobile_neverMissABeatFeatures: ['5 LEDs', '4 PHOTODETECTORS', 'PROTECTIVE GLASS', 'OPTICAL PULSE OXIMETER'],
  mobile_trainingDoesntEndAtBedtime: "TRAINING DOESN'T END\nAT BEDTIME",
  mobile_trainingDoesntEndAtBedtimeText: 'With 24/7 comfort, accurate sensors and epic\nbattery life, PACE 3 provides detailed data on\nyour sleep recovery night after night.',
  mobile_trainingDoesntEndAtBedtimeFeatures: 'MEASURES AWAKE, REM, LIGHT & DEEP SLEEP',
  mobile_trainingDoesntEndAtBedtimeFeatures2: 'CALCULATES YOUR RESTING HEART RATE',
  mobile_alwaysSeeTheBrightSide: 'ALWAYS SEE THE\nBRIGHT SIDE',
  mobile_alwaysSeeTheBrightSideFeatures: ['TRANSFLECTIVE DISPLAY FOR ENHANCED\nVISIBILITY IN BRIGHT SUNLIGHT', 'ALWAYS-ON 1.2" MINERAL GLASS DISPLAY', 'TOUCH SCREEN FOR EASY OPERATION', 'NIGHT MODE FOR EASY-READABILITY,\nEVEN IN THE DARK'],
  mobile_sweatSwimShower: 'SWEAT, SWIM, SHOWER',
  mobile_sweatSwimShowerText: 'Getting wet is no problem for PACE 3 with water resistance to 5 ATM.',
  mobile_moreThanAWatch: 'MORE THAN A WATCH',
  mobile_moreThanAWatchText: 'With the PACE 3, you also get the entire COROS Training Solutions at no extra cost.',
  mobile_trainingPlansAndWorkouts: 'TRAINING PLANS AND WORKOUTS',
  mobile_trainingPlansAndWorkoutsText: 'From 5k to Ultra. Download free Training Plans and Workouts to help you reach your goals.',
  mobile_corosCoaches: 'COROS COACHES',
  mobile_corosCoachesText: 'Real coaches. Real advice. Get personalized guidance from our team of experts.',
  mobile_trainingHub: 'TRAINING HUB',
  mobile_trainingHubText: 'Advanced training analysis system and direct communication with your coach. Trusted by NN Running and other world-class elite teams.',
  mobile_beyondYourTraining: 'BEYOND YOUR TRAINING',
  mobile_beyondYourTrainingText: 'Sync directly to your favorite health and fitness apps like Strava, Nike Run Club, Apple Health and Health Connect. Stay connected by viewing incoming texts and phone calls, or use Find my Phone to locate your misplaced device, and control your GoPro and Insta360 cameras straight from your wrist.',
  mobile_weight: 'Weight',
  mobile_width: 'Thickness',
  mobile_inStandardGpsMode: '*In standard GPS mode'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pace3_ek.js
/* harmony default export */ const en_pace3_ek = ({
  introText: 'There is no greater runner and no greater ambassador for the sport of running than Eliud Kipchoge. \nHis record of achievements is second to none, and set the bar for all who follow. With this limited \nedition of our award-winning COROS PACE 3, we celebrate his legend, his legacy, and his dream.',
  dream: "ELIUD'S DREAM",
  dreamText: 'No matter how fast you are, Eliud believes that \nrunning is a force for good. Beyond the obvious \nbenefits of improving our health and well-being, \nrunning has the power to enrich our lives and \nbring us closer together. So wherever you are, \nchoosing to live A RUNNING WORLD is choosing \nto make a better world.',
  words: ['A running world is a healthy world. ', 'A running world is a wealthy world. ', 'A running world is a peaceful world. ', 'A running world is a joyful world.', 'My dream is to make this world a running world.'],
  inspiredByHome: 'INSPIRED BY HOME',
  inspiredByHomeText: 'With colors that reflect his national flag and a design that echoes \ntraditional Kenyan geometric prints, we pay tribute to the place \nwhere Eliud trains and will always call home.',
  trainLikeAPro: 'TRAIN LIKE A \nPRO',
  trainLikeAProText: 'With COROS PACE 3 Eliud Kipchoge \nEdition, you also get the entire COROS \nTraining Solution at no extra cost. Find \nout how COROS assists elite athletes \nlike Eliud in breaking world records with \ndetailed features, hardware specs, and \nshop more COROS PACE 3 colors below.',
  clickToLearnMore: 'Click to learn more about COROS PACE 3',
  yourBestTrainingPartner: 'YOUR BEST TRAINING PARTNER',
  iconsText: ['Ultra lightweight', 'Long battery life', 'Accurate GPS', 'Extensive activity modes', 'Advanced sensors', 'Full training support'],
  limitedRelease: 'LIMITED RELEASE',
  limitedReleaseText: "Production of COROS PACE 3 Eliud Kipchoge Edition will be limited worldwide. So like the man himself, \nyou'd better be fast if you want this piece of history on your wrist.",
  mobile_introText: 'There is no greater runner and no greater \nambassador for the sport of running than \nEliud Kipchoge. His record of achievements \nis second to none, and set the bar for all \nwho follow. With this limited edition of our \naward-winning COROS PACE 3, we celebrate \nhis legend, his legacy, and his dream.',
  mobile_dream: "ELIUD'S DREAM",
  mobile_dreamText: 'No matter how fast you are, Eliud believes that \nrunning is a force for good. Beyond the obvious \nbenefits of improving our health and well-being, \nrunning has the power to enrich our lives and \nbring us closer together. So wherever you are, \nchoosing to live A RUNNING WORLD is choosing \nto make a better world.',
  mobile_words: ['A running world is a healthy world. ', 'A running world is a wealthy world. ', 'A running world is a peaceful world. ', 'A running world is a joyful world.', 'My dream is to make this world a running world.'],
  mobile_inspiredByHome: 'INSPIRED BY HOME',
  mobile_inspiredByHomeText: 'With colors that reflect his national flag and a design that echoes traditional Kenyan geometric prints, we pay tribute to the place where Eliud trains and will always call home.',
  mobile_trainLikeAPro: 'TRAIN LIKE A PRO',
  mobile_trainLikeAProText: 'With COROS PACE 3 Eliud Kipchoge Edition, you \nalso get the entire COROS Training Solution at \nno extra cost. Find out how COROS assists elite \nathletes like Eliud in breaking world records with \ndetailed features, hardware specs, and shop \nmore COROS PACE 3 colors below.',
  mobile_clickToLearnMore: 'Click to learn more about COROS PACE 3',
  mobile_yourBestTrainingPartner: 'YOUR BEST TRAINING PARTNER',
  mobile_iconsText: ['Ultra lightweight', 'Long battery life', 'Accurate GPS', 'Extensive activity modes', 'Advanced sensors', 'Full training support'],
  mobile_limitedRelease: 'LIMITED RELEASE',
  mobile_limitedReleaseText: "Production of COROS PACE 3 Eliud Kipchoge \nEdition will be limited worldwide. So like the \nman himself, you'd better be fast if you want \nthis piece of history on your wrist.",
  shareTitle: 'COROS PACE 3 GPS Sport Watch Eliud Kipchoge Edition',
  shareDesc: 'For multi-sport athletes who train hard and move fast.',
  productNameShort: 'COROS PACE 3 EK',
  productMenuTitle: 'COROS PACE 3 Eliud Kipchoge Edition'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/pod2_2024.js
/* harmony default export */ const en_pod2_2024 = ({
  intro: 'RUN BEYOND THE LIMITS OF GPS',
  introText: 'COROS POD 2 is a lightweight, water-resistant sensor that delivers next-level running data directly from your foot or body movement. It connects to your COROS watch to provide real-time metrics, post-run insights and running form analysis, so you have the best information during and after your run.',
  allAboutAccuracy: 'ALL ABOUT ACCURACY',
  allAboutAccuracyText: "COROS POD 2 solves GPS watch technology's most common problems, including data lag, weak signal, and indoor inaccuracy. \nBy tracking movement directly from your foot, COROS POD 2 improves accuracy and pace sensitivity \nto accurately track your performance in any situation.",
  sensitiveInstantPace: 'Sensitive Instant Pace.',
  sensitiveInstantPaceText: 'Interval workouts are more effective with instant pace data, but GPS signals can suffer up to a 10-second delay. COROS POD 2 transmits accurate pace data directly from your foot, so the Pace Alert feature on your COROS watch can help you stay precisely in your target pace zone.',
  accurateIndoorData: 'Accurate Indoor Data.',
  accurateIndoorDataText: 'GPS technology doesn’t work for treadmill workouts, and no watch can precisely record treadmill pace and distance alone. COROS POD 2 solves this by automatically calibrating itself to measure your stride and transmits accurate treadmill running data directly to your COROS watch.',
  preciseOnTheHills: 'Precise on the Hills.',
  preciseOnTheHillsText: 'Efforts Pace is a proprietary COROS metric to quantify how hard you’re working while running on hilly terrain. COROS POD 2 makes Effort Pace even more precise and responsive than GPS by delivering instantaneous data to your COROS watch. To learn more about Effort Pace, click here.',
  preciseOnTheHillsTextLinkText: 'click here',
  preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  understandYourRunningForm: 'UNDERSTAND YOUR RUNNING FORM',
  understandYourRunningFormText: 'Are you a Ground or Aerial runner? When clipped to your waistband, COROS POD 2 will help you find out by completing a quick and simple running form test. Insights from the test are designed to help you improve your technique, and enable you to run more efficiently. To learn more about the Running Form Test, click here.',
  understandYourRunningFormTextLinkText: 'click here',
  understandYourRunningFormTextLink: 'https://support.coros.com/hc/en-us/articles/22933404044564-Running-Form-Test',
  monitorOutsideTemperature: 'MONITOR OUTSIDE TEMPERATURE',
  monitorOutsideTemperatureText: 'COROS POD 2 records real-time weather temperature readings, so you have a detailed understanding of the changing environment throughout your run. You can use these data points to further analyze your runs as you train in different climates or seasons.',
  simpleSecure: 'SIMPLE & SECURE',
  simpleSecureText: 'With buttonless automatic operation and secure lace or waistband mounting options, you can be sure your COROS POD 2 will \nperform to the end of even the most extreme run.',
  longBatteryLife: 'LONG BATTERY LIFE',
  longBatteryLifeText: 'COROS POD 2 is equipped with a powerful battery that’s built to endure. It tracks 25 hours of continuous running or 150 hours of total running with the portable recharging battery dock.',
  data1: '25',
  data1Unit: 'HRS',
  data1Text: 'SINGLE CHARGE',
  data2: '150',
  data2Unit: 'HRS',
  data2Text: 'WITH CHARGING DOCK',
  lightweightWeatherproof: 'LIGHTWEIGHT & WEATHERPROOF',
  lightweightWeatherproofText: "At just 5.6g, you won't even notice COROS POD 2 when training or racing, and it will withstand temperatures from (14°F to 140°F / -10°C to 60°C), with water resistance up to 3 ATM.",
  data3: '5.6',
  data3Unit: 'g',
  data3Text: 'SENSOR WEIGHT',
  data4: '3',
  data4Unit: 'ATM',
  data4Text: 'WATER RATING',
  setupMadeEasy: 'SETUP MADE EASY',
  setupMadeEasyText: 'COROS POD 2 can be worn on your shoe or clipped to your waistband, and will sleep to preserve \nthe battery when not in motion.',
  pair: 'PAIR',
  pairText: 'Add COROS POD 2 to your COROS app to pair with connected watches automatically.',
  clip: 'CLIP',
  clipText: 'Attach to your shoe or waistband, and automatic wear-detection will adjust features.',
  go: 'GO',
  goText: 'Start your running activity as normal and receive accurate, real-time metrics.',
  box: "WHAT'S IN THE BOX",
  boxText: 'COROS POD 2 comes with everything you need, including two shoe clips, silicone waistband clip, charging dock, \nUSB-A to USB-C charging cable and compact case.',
  generalFaQs: 'GENERAL',
  generalFaQsLink: 'https://support.coros.com/hc/en-us/articles/10351744085012-COROS-POD-2-FAQ-s',
  runningFormTestFaQs: 'RUNNING FORM TEST',
  runningFormTestFaQsLink: 'https://support.coros.com/hc/en-us/articles/22933404044564-Running-Form-Test',
  frequentlyAskedQuestions: 'FREQUENTLY\nASKED\nQUESTIONS',
  mobile_intro: 'RUN BEYOND THE LIMITS \nOF GPS',
  mobile_introText: 'COROS POD 2 is a lightweight, water-resistant sensor that delivers next-level running data directly from your foot or body movement. It connects to your COROS watch to provide real-time metrics, post-run insights and running form analysis, so you have the best information during and after your run.',
  mobile_allAboutAccuracy: 'ALL ABOUT ACCURACY',
  mobile_allAboutAccuracyText: "COROS POD 2 solves GPS watch technology's most common problems, including data lag, weak signal, and indoor inaccuracy. By tracking movement directly from your foot, COROS POD 2 improves accuracy and pace sensitivity to accurately track your performance in any situation.",
  mobile_sensitiveInstantPace: 'Sensitive Instant Pace.',
  mobile_sensitiveInstantPaceText: 'Interval workouts are more effective with instant pace data, but GPS signals can suffer up to a 10-second delay. COROS POD 2 transmits accurate pace data directly from your foot, so the Pace Alert feature on your COROS watch can help you stay precisely in your target pace zone.',
  mobile_accurateIndoorData: 'Accurate Indoor Data.',
  mobile_accurateIndoorDataText: 'GPS technology doesn’t work for treadmill workouts, and no watch can precisely record treadmill pace and distance alone. COROS POD 2 solves this by automatically calibrating itself to measure your stride and transmits accurate treadmill running data directly to your COROS watch.',
  mobile_preciseOnTheHills: 'Precise on the Hills.',
  mobile_preciseOnTheHillsText: 'Efforts Pace is a proprietary COROS metric to quantify how hard you’re working while running on hilly terrain. COROS POD 2 makes Effort Pace even more precise and responsive than GPS by delivering instantaneous data to your COROS watch. To learn more about Effort Pace, click here.',
  mobile_preciseOnTheHillsTextLinkText: 'click here',
  mobile_preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  mobile_understandYourRunningForm: 'UNDERSTAND YOUR \nRUNNING FORM',
  mobile_understandYourRunningFormText: 'Are you a Ground or Aerial runner? When clipped to your waistband, COROS POD 2 will help you find out by completing a quick and simple running form test. Insights from the test are designed to help you improve your technique, and enable you to run more efficiently. To learn more about the Running Form Test, click here.',
  mobile_understandYourRunningFormTextLinkText: 'click here',
  mobile_understandYourRunningFormTextLink: 'https://support.coros.com/hc/en-us/articles/22933404044564-Running-Form-Test',
  mobile_monitorOutsideTemperature: 'MONITOR OUTSIDE TEMPERATURE',
  mobile_monitorOutsideTemperatureText: 'COROS POD 2 records real-time weather temperature readings, so you have a detailed understanding of the changing environment throughout your run. You can use these data points to further analyze your runs as you train in different climates or seasons.',
  mobile_simpleSecure: 'SIMPLE & SECURE',
  mobile_simpleSecureText: 'With buttonless automatic operation and secure lace or waistband mounting options, you can be sure your COROS POD 2 will perform to the end of even the most extreme run.',
  mobile_longBatteryLife: 'LONG BATTERY LIFE',
  mobile_longBatteryLifeText: 'COROS POD 2 is equipped with a powerful battery that’s built to endure. It tracks 25 hours of continuous running or 150 hours of total running with the portable recharging battery dock.',
  mobile_data1: '25',
  mobile_data1Unit: 'HRS',
  mobile_data1Text: 'SINGLE CHARGE',
  mobile_data2: '150',
  mobile_data2Unit: 'HRS',
  mobile_data2Text: 'WITH CHARGING DOCK',
  mobile_lightweightWeatherproof: 'LIGHTWEIGHT & WEATHERPROOF',
  mobile_lightweightWeatherproofText: "At just 5.6g, you won't even notice COROS POD 2 when training or racing, and it will withstand temperatures from (14°F to 140°F / -10°C to 60°C), with water resistance up to 3 ATM.",
  mobile_data3: '5.6',
  mobile_data3Unit: 'g',
  mobile_data3Text: 'SENSOR WEIGHT',
  mobile_data4: '3',
  mobile_data4Unit: 'ATM',
  mobile_data4Text: 'WATER RATING',
  mobile_setupMadeEasy: 'SETUP MADE EASY',
  mobile_setupMadeEasyText: 'COROS POD 2 can be worn on your shoe or clipped to your waistband, and will sleep to preserve the battery when not in motion.',
  mobile_pair: 'PAIR',
  mobile_pairText: 'Add COROS POD 2 to your COROS app to pair with connected watches automatically.',
  mobile_clip: 'CLIP',
  mobile_clipText: 'Attach to your shoe or waistband, and automatic wear-detection will adjust features.',
  mobile_go: 'GO',
  mobile_goText: 'Start your running activity as normal and receive accurate, real-time metrics.',
  mobile_box: "WHAT'S IN THE BOX",
  mobile_boxText: 'COROS POD 2 comes with everything you need, \nincluding two shoe clips, silicone waistband clip, \ncharging dock, USB-A to USB-C charging cable \nand compact case.',
  mobile_generalFaQs: 'GENERAL',
  mobile_generalFaQsLink: 'https://support.coros.com/hc/en-us/articles/10351744085012-COROS-POD-2-FAQ-s',
  mobile_runningFormTestFaQs: 'RUNNING FORM TEST',
  mobile_frequentlyAskedQuestions: 'FREQUENTLY\nASKED\nQUESTIONS',
  shareTitle: 'COROS PACE 3 GPS Sport Watch Eliud Kipchoge Edition',
  shareDesc: 'For multi-sport athletes who train hard and move fast.',
  productNameShort: 'COROS POD 2',
  productMenuTitle: 'COROS PACE 3 Eliud Kipchoge Edition',
  faq: 'FAQ'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/sasha.js
/* harmony default export */ const sasha = ({
  bannerTitle: 'For COROS APEX 2 & PACE 2',
  section: {
    brief: {
      title: "take the lead &\n      conquer your fears",
      desc: 'Even as a young girl, professional climber Sasha Digiulian knew she was destined for greatness. She stepped into the athletic arena for the first time at 6 years old, and with limited female role models in the sport she had to take the lead and create her own path. At just 17 years old, she won her first national championship, and became a World Champion a year later.'
    },
    "abstract": {
      desc: 'Today, Sasha is a leader for young women who seek to achieve greatness both in sport and beyond. Her accomplishments continue to inspire young women by demonstrating that with dedication, perseverance and taking the lead, you can achieve anything you set your mind to - a world-class athlete, entrepreneur, author, environmentalist, and so much more.',
      mobileDesc: "Today, Sasha is a leader for young women who \n      seek to achieve greatness both in sport and \n      beyond. Her accomplishments continue to \n      inspire young women by demonstrating that \n      with dedication, perseverance and taking the \n      lead, you can achieve anything you set your \n      mind to - a world-class athlete, entrepreneur, \n      author, environmentalist, and so much more."
    },
    inspire: {
      title: 'STAND OUT WITH CONFIDENCE',
      desc: "With confidence, anything can be achieved. The COROS x Sasha nylon band for APEX 2 and PACE 2 watches is intended \n      to stand out from the crowd and inspire action. Dominated by her favorite shade of pink, it perfectly reflects \n      her bright personality and her drive to stand up for herself, others, and what she believes.",
      mobileDesc: "With confidence, anything can be achieved. \n      The COROS x Sasha nylon band for APEX 2 and \n      PACE 2 watches is intended to stand out from \n      the crowd and inspire action. Dominated by her \n      favorite shade of pink, it perfectly reflects her \n      bright personality and her drive to stand up for \n      herself, others, and what she believes. ",
      subDesc: "The outside features a climbing rope-inspired pattern that connects to her personal mantra of TAKE THE LEAD. \n      The inside displays a graphic of her beloved Flatiron mountain range in Boulder, CO where Sasha lives and trains. \n      No matter what sport you do, Sasha's band can be a constant reminder to move forward with pride, dedication, and joy.",
      mobileSubDesc: "The outside features a climbing rope-inspired \n      pattern that connects to her personal mantra of \n      TAKE THE LEAD. The inside displays a graphic of \n      her beloved Flatiron mountain range in Boulder, \n      CO where Sasha lives and trains. No matter what \n      sport you do, Sasha's band can be a constant \n      reminder to move forward with pride, \n      dedication, and joy."
    },
    shop: {
      title: "free band + book bundle with any apex 2 purchase",
      desc: "Sasha\u2019s TAKE THE LEAD mantra is also \n      the title of her recently released \n      memoir, which documents her rise in \n      her sport, the challenges and self-\n      doubt she overcome, and encourages \n      young women to do the same. For a \n      limited time while supplies last, you \n      can get a copy of Sasha's book and \n      the COROS x Sasha band free by \n      purchasing any APEX 2 watch. "
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/privacyRights.js
/* harmony default export */ const privacyRights = ({
  page: {
    title: 'COROS Privacy Rights Center',
    desc: 'Manage your privacy rights and understand how COROS collects and shares personal information.'
  },
  main: {
    title: 'COROS Privacy Rights Center',
    descs: ["Welcome to COROS Privacy Rights Center. Please use the form* at the bottom to exercise your privacy rights at any time.\nWe will process and honor requests in compliance with applicable laws and within the legally specified timeframe.\nIf you have multiple requests, please submit a separate form for each one.", '*The form is intended for individuals in the United States only.']
  },
  howWeUseYourData: {
    title: 'How We Use Your Data',
    descs: ["We do not sell your personal information for monetary gain; however, we may share customer personal information with\nonline advertising networks and analytics companies for targeted advertising purposes. Certain US State regulations\nconsider the sharing of personal information with third parties as a \"sale.\" For more details on\nhow we use your information, please visit our <a class=\"underline hover:underline\" href=\"privacy\">Privacy Policy</a>.", "Please note that you can also manage your website cookies by visiting <a class=\"underline hover:underline\" href=\"https://us.coros.com\">https://us.coros.com</a> and selecting\n\"Cookie Settings\" in the footer."]
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en/index.js






















































/* harmony default export */ const en = ({
  pod2_2024: en_pod2_2024,
  sasha: sasha,
  pace3_ek: en_pace3_ek,
  pace3: en_pace3,
  chamonix_edition: en_chamonix_edition,
  chamonix: en_chamonix,
  hrm: en_hrm,
  stories: stories,
  pace2_2023: pace2_2023,
  carabiner: en_carabiner,
  apex2credit: apex2credit,
  app3Langdingpage: app3_langdingpage,
  ekGiveaway: ek_giveaway,
  kilianEdition: en_kilianEdition,
  convos: en_convos,
  evolab: en_evolab,
  specs: en_specs,
  accessories: accessories,
  apexPro: en_apexPro,
  getApp: getApp,
  declarationOfConformity: declarationOfConformity,
  home: en_home,
  pod: en_pod,
  pod2: en_pod2,
  apex: en_apex,
  apex2: en_apex2,
  tradeIn: tradeIn,
  athleteDetails: en_athleteDetails,
  athlete: en_athlete,
  warranty: warranty,
  contact: en_contact,
  vertix: en_vertix,
  products: en_products,
  pace2: en_pace2,
  plans: en_plans,
  progress: en_progress,
  retail: retail,
  privacy: privacy,
  terms: en_terms,
  careers: en_careers,
  ek: (ek_default()),
  vertix2: (vertix2_default()),
  map: (map_default()),
  trainingHub: en_trainingHub,
  common: en_common,
  login: en_login,
  datalist: en_datalist,
  yourproduct: en_yourproduct,
  aboutPage: en_about,
  events: events,
  shop: shop,
  coaches: coaches,
  workouts: workouts,
  privacyRights: privacyRights,
  //公共部分
  CommonHeaderMenu1name: 'PRODUCTS',
  // 以下不需要翻译
  CommonHeaderMenu1nav1: 'COROS VERTIX 2',
  CommonHeaderMenu1nav2: 'COROS VERTIX',
  CommonHeaderMenu1nav3: 'COROS APEX Pro',
  CommonHeaderMenu1nav4: 'COROS APEX',
  CommonHeaderMenu1nav5: 'COROS PACE 2',
  CommonHeaderMenu1nav6: 'COROS PACE 2 EK',
  CommonHeaderMenu1nav7: 'COROS POD',
  CommonHeaderMenu1nav8: 'Accessories',
  CommonHeaderMenu1nav9: 'Others',
  CommonHeaderMenu1nav10: 'COROS PACE',
  CommonHeaderMenu1nav11: 'SafeSound-MOUNTAIN',
  CommonHeaderMenu1nav12: 'SafeSound-ROAD',
  CommonHeaderMenu1nav13: 'SafeSound-URBAN',
  CommonHeaderMenu1nav14: 'OMNI',
  CommonHeaderMenu1nav15: 'LINX',
  CommonHeaderMenu1nav16: 'COROS PACE 2 Speed Series',
  CommonHeaderMenu1nav17: 'COROS APEX 2/2 Pro',
  CommonHeaderMenu1nav18: 'COROS APEX 2 Pro',
  CommonHeaderMenu1nav19: 'COROS PACE 2 Molly',
  CommonHeaderMenu1nav20: 'COROS PACE 2 Molly Seidel Edition',
  CommonHeaderMenu2name: 'COMMUNITY',
  coros_convos: 'COROS Convos',
  CommonHeaderMenu2nav1: 'COROS STORIES',
  CommonHeaderMenu2nav2: 'COROS PRO ATHLETE',
  CommonHeaderMenu2nav3: 'TRADE IN PROGRAM',
  CommonHeaderMenu2nav4: 'VERIFIED WORKOUT',
  CommonHeaderMenu2nav5: 'TRAINING PLANS',
  CommonHeaderMenu2nav6: 'COROS TRAINING HUB',
  menu_convos: 'CONVOS',
  CommonHeaderMenu3name: 'SUPPORT',
  CommonHeaderMenu3nav1: 'USER LOGIN',
  CommonHeaderMenu3nav2: 'HELP CENTER',
  CommonHeaderMenu3nav3: 'WARRANTY',
  CommonHeaderMenu3nav4: 'RELEASE NOTES',
  CommonHeaderMenu3nav5: 'WATCH COMPARISON',
  CommonHeaderMenu3nav6: 'MAPS',
  CommonHeaderMenu4name: 'ABOUT',
  CommonHeaderMenu4nav1: 'ABOUT US',
  CommonHeaderMenu4nav2: 'IN THE NEWS',
  CommonHeaderMenu4nav3: 'CONTACT',
  CommonHeaderMenu4nav4: 'EVENTS',
  CommonHeaderMenu4nav5: 'CAREERS',
  CommonHeaderMenu5name: 'STORE LOCATOR',
  CommonHeaderMenu6name: 'COUNTRY',
  // no need translate CommonHeaderMenu6nav1 to CommonHeaderMenu6nav8
  CommonHeaderMenu6nav1: 'United States (English)',
  CommonHeaderMenu6nav2: 'United Kingdom (English)',
  CommonHeaderMenu6nav3: 'Canada (English)',
  CommonHeaderMenu6nav4: 'France (Français)',
  CommonHeaderMenu6nav5: 'Germany (Deutsch)',
  CommonHeaderMenu6nav6: '中国(中文)',
  CommonHeaderMenu6nav7: '日本(日本語)',
  CommonHeaderMenu6nav8: 'España (Español)',
  CommonHeaderMenu6nav9: 'Europe (English)',
  CommonHeaderMenu6nav10: 'Australia/New Zealand (English)',
  CommonFooterDealerLogin: 'Retailer Login',
  CommonFooterDealerReturnRefund: 'Return & Refund',
  CommonFooterDealerWatchComparison: 'Watch Comparison',
  CommonFooterDealerTermsConditions: 'Terms & Conditions',
  CommonFooterDealerReleaseNotes: 'Release Notes',
  CommonFooterDealerPrivacyPolicy: 'Privacy Policy',
  CommonFooterDealerWheretoDownload: 'Where to Download',
  CommonFooterDealercopyright: '© 2022 | COROS Wearables, Inc.',
  Commonshopnow: 'SHOP NOW',
  Commonspeecs: 'SPECS',
  Commoncomparisonchart: 'COMPARISON',
  SignupforNews: 'Sign up for News',
  price: 'Price',
  //stories
  STORIEStitle: 'COROS Stories | The Path to Explore Perfection',
  STORIESkeywords: 'COROS Stories | The Path to Explore Perfection',
  STORIESdescription: "Brings the world's most intriguing and inspiring stories to you plus the tips you need for peak performance.",
  //comparetable
  compproduct: 'Product',
  compproductvertix2: 'VERTIX 2 GPS Adventure Watch',
  compproductvertix: 'VERTIX GPS Adventure Watch',
  compproductapexpro: 'APEX Pro Premium Multisport GPS Watch',
  compproductapex46: 'APEX 46mm Premium Multisport GPS Watch',
  compproductapex42: 'APEX 42mm Premium Multisport GPS Watch',
  compproductpace2: 'COROS PACE 2 Premium GPS Sport Watch',
  compvertix2name: 'VERTIX 2 GPS Adventure Watch',
  compvertixname: 'VERTIX GPS Adventure Watch',
  compapexproname: 'APEX Pro Premium Multisport GPS Watch',
  compapex46name: 'APEX 46mm Premium Multisport GPS Watch',
  compapex42name: 'APEX 42mm Premium Multisport GPS Watch',
  comppace2name: 'COROS PACE 2 Premium GPS Sport Watch',
  compdispsize: 'Display Size',
  compdispsizevertix2: '1.4 in. 280 x 280 (64 colors)',
  compdispsizevertix: '1.2 in. 240 x 240 (64 colors)',
  compdispsizeapexpro: '1.2 in. 240 x 240 (64 colors)',
  compdispsizeapex46: '1.2 in. 240 x 240 (64 colors)',
  compdispsizeapex42: '1.1 in. 218 x 218 (64 colors)',
  compdispsizepace2: '1.2 in. 240 x 240 (64 colors)',
  compdisptype: 'Display Type',
  compdisptypevertix2: 'Touch Screen Always-On Memory LCD',
  compdisptypevertix: 'Touch Screen Always-On Memory LCD',
  compdisptypeapexpro: 'Touch Screen Always-On Memory LCD',
  compdisptypeapex46: 'Always-On Memory LCD',
  compdisptypeapex42: 'Always-On Memory LCD',
  compdisptypepace2: 'Always-On Memory LCD',
  compscreenmaterial: 'Screen Material',
  compscreenmaterialvertix2: 'Diamond-like Coating Sapphire Glass',
  compscreenmaterialvertix: 'Diamond-like Coating Sapphire Glass',
  compscreenmaterialapexpro: 'Sapphire Glass',
  compscreenmaterialapex46: 'Sapphire Glass',
  compscreenmaterialapex42: 'Sapphire Glass',
  compscreenmaterialpace2: 'Corning® Glass',
  compbezelmaterial: 'Bezel Material',
  compbezelmaterialvertix2: 'Grade 5 Titanium Alloy with PVD Coating',
  compbezelmaterialvertix: 'Grade 5 Titanium Alloy',
  compbezelmaterialapexpro: 'Grade 5 Titanium Alloy',
  compbezelmaterialapex46: 'Grade 5 Titanium Alloy',
  compbezelmaterialapex42: 'Stainless Steel',
  compbezelmaterialpace2: 'Fibre Reinforced Polymer',
  compcovermaterial: 'Cover Material',
  compcovermaterialvertix2: 'Titanium Alloy with PVD Coating',
  compcovermaterialvertix: 'Titanium Alloy',
  compcovermaterialapexpro: 'Aluminum',
  compcovermaterialapex46: 'Aluminum',
  compcovermaterialapex42: 'Aluminum',
  compcovermaterialpace2: 'Fibre Reinforced Polymer',
  compstrapmaterial: 'Strap Material',
  compstrapmaterialvertix2: 'Silicone/Nylon',
  compstrapmaterialvertix: 'Silicone/Nylon',
  compstrapmaterialapexpro: 'Silicone/Nylon',
  compstrapmaterialapex46: 'Silicone/Nylon',
  compstrapmaterialapex42: 'Silicone/Nylon',
  compstrapmaterialpace2: 'Silicone/Nylon',
  compquickreleasefitband: 'Quick Release/Fit Band',
  compquickreleasefitbandvertix2: '26mm',
  compquickreleasefitbandvertix: '22mm',
  compquickreleasefitbandapexpro: '22mm',
  compquickreleasefitbandapex46: '22mm',
  compquickreleasefitbandapex42: '20mm',
  compquickreleasefitbandpace2: '20mm',
  compphysicalsize: 'Physical Size',
  compphysicalsizevertix2: '50.3 x 50.3 x 15.7mm',
  compphysicalsizevertix: '47 x 47 x 15.6mm',
  compphysicalsizeapexpro: '47 x 47 x 13.4mm',
  compphysicalsizeapex46: '46 x 46 x 11.9mm',
  compphysicalsizeapex42: '42 x 42 x 11.75mm',
  compphysicalsizepace2: '42 x 42 x 11.7mm',
  compweightwithsiliconeband: 'Weight With Silicone Band',
  compweightwithsiliconebandvertix2: '89g',
  compweightwithsiliconebandvertix: '76g',
  compweightwithsiliconebandapexpro: '59g',
  compweightwithsiliconebandapex46: '55.3g',
  compweightwithsiliconebandapex42: '49g',
  compweightwithsiliconebandpace2: '35g-36g',
  compweightwithnylonband: 'Weight With Nylon Band',
  compweightwithnylonbandvertix2: 'N/A',
  compweightwithnylonbandvertix: '63g',
  compweightwithnylonbandapexpro: '49g',
  compweightwithnylonbandapex46: '45g',
  compweightwithnylonbandapex42: '38g',
  compweightwithnylonbandpace2: '29g-30g',
  compphoneconnection: 'Phone Connection',
  compphoneconnectionvertix2: 'Bluetooth',
  compphoneconnectionvertix: 'Bluetooth',
  compphoneconnectionapexpro: 'Bluetooth',
  compphoneconnectionapex46: 'Bluetooth',
  compphoneconnectionapex42: 'Bluetooth',
  compphoneconnectionpace2: 'Bluetooth',
  compaccessoryconnection: 'Accessory Connection',
  compaccessoryconnectionvertix2: 'Bluetooth',
  compaccessoryconnectionvertix: 'ANT+/Bluetooth',
  compaccessoryconnectionapexpro: 'ANT+/Bluetooth',
  compaccessoryconnectionapex46: 'ANT+/Bluetooth',
  compaccessoryconnectionapex42: 'ANT+/Bluetooth',
  compaccessoryconnectionpace2: 'ANT+/Bluetooth',
  compwaterresistance: 'Water Resistance',
  compwaterresistancevertix2: '10ATM (100 Meters/328 Feet)',
  compwaterresistancevertix: '15ATM (150 Meters/492 Feet)',
  compwaterresistanceapexpro: '10ATM (100 Meters/328 Feet)',
  compwaterresistanceapex46: '10ATM (100 Meters/328 Feet)',
  compwaterresistanceapex42: '10ATM (100 Meters/328 Feet)',
  compwaterresistancepace2: '5ATM (50 Meters/164 Feet)',
  compworkingtemperature: 'Working Temperature',
  compworkingtemperaturevertix2: '-22°F to 122°F (-30°C to 50°C)',
  compworkingtemperaturevertix: '-4°F to 140°F (-20°C to 60°C)',
  compworkingtemperatureapexpro: '14°F to 140°F (-10°C to 60°C)',
  compworkingtemperatureapex46: '14°F to 140°F (-10°C to 60°C)',
  compworkingtemperatureapex42: '14°F to 140°F (-10°C to 60°C)',
  compworkingtemperaturepace2: '-4°F to 140°F (-20°C to 60°C)',
  compstoragetemperature: 'Storage Temperature',
  compstoragetemperaturevertix2: '-22°F to 140°F (-30°C to 60°C)',
  compstoragetemperaturevertix: '-22°F to 158°F (-30°C to 70°C)',
  compstoragetemperatureapexpro: '-4°F to 158°F (-20°C to 70°C)',
  compstoragetemperatureapex46: '-4°F to 149°F (-20°C to 65°C)',
  compstoragetemperatureapex42: '-4°F to 149°F (-20°C to 65°C)',
  compstoragetemperaturepace2: '-4°F to 149°F (-20°C to 65°C)',
  compchargingtime: 'Charging Time',
  compchargingtimevertix2: 'Less than 2 Hours',
  compchargingtimevertix: 'Less than 2 Hours',
  compchargingtimeapexpro: 'Less than 2 Hours',
  compchargingtimeapex46: 'Less than 2 Hours',
  compchargingtimeapex42: 'Less than 2 Hours',
  compchargingtimepace2: 'Less than 2 Hours',
  compultramaxGPSmode: 'UltraMax GPS Mode',
  compultramaxGPSmodevertix2: '240 Hours',
  compultramaxGPSmodevertix: '150 Hours',
  compultramaxGPSmodeapexpro: '100 Hours',
  compultramaxGPSmodeapex46: '100 Hours',
  compultramaxGPSmodeapex42: '80 Hours',
  compultramaxGPSmodepace2: '60 Hours',
  compstandardfull: 'Standard Full GPS (GPS/QZSS)',
  compstandardfullvertix2: '140 Hours',
  compstandardfullvertix: '60 Hours',
  compstandardfullapexpro: '40 Hours',
  compstandardfullapex46: '35 Hours',
  compstandardfullapex42: '25 Hours',
  compstandardfullpace2: '30 Hours',
  compallsystemson: 'All Systems On (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsonvertix2: '90 Hours',
  compallsystemsonvertix: 'N/A',
  compallsystemsonapexpro: 'N/A',
  compallsystemsonapex46: 'N/A',
  compallsystemsonapex42: 'N/A',
  compallsystemsonpace2: 'N/A',
  compallsystemsdualfrequencyon: 'All Systems + Dual Frequency On (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsdualfrequencyonvertix2: '50 Hours',
  compallsystemsdualfrequencyonvertix: 'N/A',
  compallsystemsdualfrequencyonapexpro: 'N/A',
  compallsystemsdualfrequencyonapex46: 'N/A',
  compallsystemsdualfrequencyonapex42: 'N/A',
  compallsystemsdualfrequencyonpace2: 'N/A',
  compdailyuse: 'Daily Use',
  compdailyusevertix2: '60 Days',
  compdailyusevertix: '45 Days',
  compdailyuseapexpro: '30 Days',
  compdailyuseapex46: '30 Days',
  compdailyuseapex42: '24 Days',
  compdailyusepace2: '20 Days',
  comphrmonitoring: '24/7 HR Monitoring',
  compopticalheartratemonitor: 'Optical Heart Rate Monitor',
  compbarometricaltimeter: 'Barometric Altimeter',
  compaccelerometer: 'Accelerometer',
  compgyroscope: 'Gyroscope',
  compcompass: 'Compass',
  compcorosevoLab: 'COROS EvoLab (VO2 Max, Fatigue, Training Load, Threshold Pace, etc)',
  comprecoverytime: 'Recovery Time',
  compinterval: 'Interval, Triathlon, Multisport Training',
  compswimmingheartrate: 'Swimming Heart Rate',
  compsleepmonitoring: 'Sleep Monitoring',
  compphonenotifications: 'Phone Notifications',
  comp3rdpartyintegration: '3rd Party Integration (Strava, TrainingPeaks, etc)',
  compthickglovescompatible: 'Thick Gloves Compatible',
  compstructuredworkouts: 'Structured Workouts & Training Programs',
  comprunningpowerfromthewrist: 'Running Power From The Wrist',
  compstrydcompatible: 'Stryd Compatible',
  compphonenotificationsduringworkouts: 'Phone Notifications During Workouts',
  compbodytemperaturemonitorsupport: 'Body Temperature Monitor Support (CORE)',
  compbacklightalwaysnnnode: 'Backlight Always-On Mode',
  compsapphireglass: 'Sapphire Glass',
  compbreadcrumbnavigation: 'Breadcrumb Navigation',
  compbacktostartnavigation: 'Back-To-Start Navigation',
  comp247blood: '24/7 Blood Oxygen Monitoring at High Altitudes',
  compopticalpulseoxmonitor: 'Optical Pulse Ox Monitor',
  compdedicatedbacklightbutton: 'Dedicated Backlight Button',
  comptouchscreenmode: 'Touch Screen Mode',
  compaltitudemode: 'Altitude Mode',
  compextremedurability: 'Extreme Durability',
  compallsatellitedualfrequency: 'All-satellite Dual-frequency GNSS Chipset',
  compgloballandscapemaplayer: 'Global Landscape Map Layer',
  compregionaltopomaplayer: 'Regional Topo Map Layer',
  compregionaltopomaplayervertix: 'May be supported before 2022',
  compregionaltopomaplayerapexpro: 'May be supported before 2022',
  comphybridmaplayer: 'Hybrid Map Layer',
  compelectrocardiogramsensor: 'Electrocardiogram Sensor',
  comphrvindex: 'HRV Index',
  compWiFi: 'Wi-Fi',
  compmusic: 'Music',
  compinsta360cameracontrol: 'Camera Control',
  compvirtualrun: 'Virtual Run',
  comppowermetercalibration: 'ANT+ Power Meter Calibration',
  compsupportedworkoutmodes: 'Supported Workout Modes',
  comprun: 'Run',
  compindoorrun: 'Indoor Run',
  comptrackrun: 'Track Run',
  compbike: 'Bike',
  compindoorbike: 'Indoor Bike',
  compopenwater: 'Open Water',
  comppoolswim: 'Pool Swim',
  compflatwater: 'Flatwater',
  comprowing: 'Rowing',
  compGPScardio: 'GPS Cardio',
  compgymcardio: 'Gym Cardio',
  comptriathlon: 'Triathlon',
  compindoorrower: 'Indoor Rower',
  compstrength: 'Strength',
  comptraining: 'Training (Structured Programs)',
  comptrainingplan: 'Training Plan',
  compmultisport: 'Multisport',
  compsupportedgnss: 'Supported GNSS (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compwalk: 'Walk',
  comptrailrun: 'Trail Run',
  comphike: 'Hike',
  compmountainclimb: 'Mountain Climb',
  compski: 'Ski',
  compsnowboard: 'Snowboard',
  compxcski: 'XC Ski',
  compskitouring: 'Ski Touring',
  compspeedsurfing: 'Speedsurfing',
  compwindsurfing: 'Windsurfing',
  compwhitewater: 'Whitewater',
  compyes: '√',
  compbacklightbuttonshortcut: 'Backlight Button Shortcut',
  compmultipitchclimb: 'Multi-Pitch Climb',
  ////展会
  Emailtittext1: 'EMAIL ADDRESS',
  Emailsubmit: 'SIGN UP',
  Emailtitle: 'OC Half Marathon',
  Emailkeywords: 'OC Half Marathon',
  Emaildescription: 'OC Half Marathon',
  ////////////////////////////////////////////////////////
  //首页
  index: {
    title: 'COROS-Home',
    keywords: 'keywords',
    description: '中文-desc-VERTIX',
    helloworld: 'hellow word',
    herder: 'header',
    footer: 'footer'
  },
  //关于我们
  about: {
    title: 'test about us ',
    keywords: 'keywords',
    description: 'description about us'
  },
  // vertix2

  select: 'Please select',
  "continue": 'Continue'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/vertix.js
/* harmony default export */ const de_vertix = ({
  name: 'COROS VERTIX',
  accessories: 'VERTIX-ZUBEHÖR KAUFEN',
  readMore: 'Erfahre mehr',
  'Rugged YET premium': {
    title: 'Robust und trotzdem hochwertig',
    desc: 'Der Rahmen und die Fassung aus federleichtem und korrosionsfreiem Titan demonstrieren unsere Hingabe für Langlebigkeit. Dank der hohen Qualität der VERTIX kannst du dich auch den rausten Witterungen stellen ohne dabei deinen Stil aufzugeben.'
  },
  'Virtually scratch proof screen': {
    title: 'Nahezu kratzfestes Display',
    desc: 'Saphirglas mit einer diamantartigen Beschichtung macht das Display der VERTIX ultra widerstandsfähig.'
  },
  'The ONLY GPS watch with a 150-meter waterproof rating': {
    title: 'Wasserdicht bis 150 Meter',
    desc: 'Die Uhr hält einem Druck von 15 bar stand. Das entspricht einer Tiefe von 150 Metern.'
  },
  'Ultra-light Durability': {
    title: 'Ultraleicht',
    desc: 'Das Gehäuse der VERTIX wiegt gerade einmal 54 Gramm - ein echtes Leichtgewicht!'
  },
  'VERTIX is your Sherpa': {
    title: 'Dein persönlicher Guide',
    desc: 'Mit der durchgehenden Blutsauerstoff-Messung und dem Höhenmodus liefert dir die VERTIX eine tägliche Bewertung deiner Akklimatisierung und sagt dir, wann es sicher ist höher zu klettern.'
  },
  'Industry leading performance in extreme cold': {
    title: 'Funktioniert selbst bei extremer Kälte',
    desc: 'Auch bei -20°C wird die Akkuleistung der VERTIX nur um weniger als 30 % reduziert. Selbst bei -30°C hält sie im GPS-Modus ganze 21 Stunden durch!'
  },
  'EASY use in ANY condition': {
    title: 'Jederzeit einfach bedienbar',
    desc: 'Dank der komplett neu entwickelten Krone kannst du die VERTIX mit nur einem Finger bedienen - und das auch mit dicken Winterhandschuhen oder unter Wasser!'
  },
  'Track your path': {
    title: 'Tracke deine Strecke',
    desc: 'Schluss mit der traditionellen Tasten-Bedienung! Per Touchscreen und Krone kannst du deine Strecke auf dem Display hin und her bewegen und heran- bzw. rauszoomen.'
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ALLE WORKOUTS - IMMER UND ÜBERALL',
    desc: 'Im Trainingsmodus kannst du aus mehr als 200 Übungen auswählen, um dein ideales Lauf-, Fahrrad-, Schwimm- oder Krafttraining zu kreieren. Beim Erstellen deines Workouts sind dir quasi keine Grenzen gesetzt! Über coros.com kannst du sogar Workouts von professionellen Athletinnen und Athleten und Trainerinnen und Trainern auf deine Uhr herunterladen. Anschließend kannst du deine Erfolge z. B. per WhatsApp, E-Mail oder Facebook mit deinen Freundinnen und Freunden und Trainingspartnerinnen und -partnern teilen. Mit dem neuen Trainingsmodus sind deine besten Leistungen immer in Reichweite!'
  },
  'Light up the Night’s Sky': {
    title: 'Klare Sicht für Nachtaktive',
    desc: 'Im Nachtmodus bleibt die Hintergrundbeleuchtung während des gesamten Workouts aktiv. Das Licht ist hell genug, um das Display nachts angenehm lesen zu können und gleichzeitig so gedimmt, dass die Akkulaufzeit kaum beeinflusst wird. Wenn du dein Workout beendest oder die Sonne aufgeht, wird der Nachtmodus automatisch deaktiviert.'
  },
  'Stay on Track': {
    title: 'Bleib auf Kurs',
    desc: 'Eine Standard-Laufbahn ist 400 Meter lang. Trotzdem können viele GPS-Geräte diese Strecke nicht richtig tracken. Beim neuen Bahntraining-Modus von COROS wird ein spezieller Algorithmus verwendet, um sicherzugehen, dass dein Bahntraining korrekt gemessen wird - egal welche Bahn du wählst. Vorbei sind die willkürlichen Zickzacklinien oder scharfen Richtungswechsel über den Platz! Ab sofort wird dein Training so dargestellt, wie du läufst.'
  },
  'Ice Breaker': {
    title: 'Ice Breaker',
    desc: 'Brich das Eis mit dieser einzigartigen Uhr.'
  },
  'Stand out in a Crowd': {
    title: 'Heb dich von der Masse ab',
    desc: 'Die exklusive azurblaue Titan-Fassung und das transparente Gehäuse machen die Uhr zu einem absoluten Hingucker, der sowohl elegant als auch kraftvoll ist.'
  },
  'Handled With Care': {
    title: 'Mit Sorgfalt behandelt',
    desc: 'Das Gehäuse wird von Hand zusammengebaut, um die bestmögliche Qualität zu gewährleisten. So ist die Uhr stark genug, um auch den rausten Witterungen standzuhalten.'
  },
  batteryLife: {
    title: 'Extrem lange Akkulaufzeit',
    desc: 'Dank der extrem langen Akkulaufzeit kannst du den Himalaya besteigen oder den John Muir Trail entlang wandern ohne einmal zu laden.',
    reqular: {
      title: '45d',
      desc: '45 Tage bei normalem Gebrauch'
    },
    gps: {
      title: '60h',
      desc: '60 Stunden im GPS-Modus'
    },
    ultraMax: {
      title: '150h',
      desc: '150 Stunden im Ultra-Max-Modus'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/products.js
/* harmony default export */ const de_products = ({
  pageMeta: {
    title: 'Discover COROS Premium GPS Watches',
    keywords: 'Marathon Ultra Cross Country Race Smart Watch Benachrichtigungen Bergsteigen Kalorien Schlaf Tracking wasserdicht Distanz Meilen Herzfrequenzmesser GPS Laufen Schwimmen Triathlon Training Camping Wandern Übung Fitness Tracker Kompass',
    description: 'Premium GPS-Sportuhren für Läufer, Abenteurer und alle Sportler. COROS ist mit seiner fortschrittlichen Technologie Vorreiter bei der Revolutionierung des Athletiktrainings.'
  },
  learMore: 'LERNEN SIE MEHR',
  compareEntrance: 'Uhren-Vergleichstabelle',
  pageTitle: 'erhalte eine kostenlose',
  pageSubtitle: 'coros trainingstasche',
  pageDesc: 'Jede GPS-Uhr von COROS wurde von Athleten für Athleten entwickelt, getestet und perfektioniert. Unsere Uhren kombinieren hochwertige Hardware mit innovativer Technologie, um Ausdauersportlern die Ausrüstung zur Verfügung zu stellen, auf die sie sich in den extremsten Umgebungen der Welt verlassen.',
  pace2: {
    name: 'COROS PACE 2',
    header: 'GPS-SPORTUHR',
    desc: 'Für Multisportler, die schnell \n    und weit laufen'
  },
  pace2_ek: {
    name: 'COROS PACE 2 EK',
    header: 'ELIUD KIPCHOGE EDITION',
    desc: 'Eliuds Uhr spornt an, noch härter zu trainieren und noch schneller zu laufen'
  },
  apex2: {
    name: 'COROS APEX 2',
    header: 'GPS-OUTDOOR-UHR',
    desc: 'Für intensive Bergsportler auf langen Strecken.'
  },
  apex2pro: {
    name: 'COROS APEX 2 Pro',
    header: 'GPS-OUTDOOR-UHR',
    desc: 'Für intensive Bergsportler auf langen Strecken.'
  },
  apex_42: {
    name: 'COROS APEX',
    header: 'PREMIUM MULTISPORT GPS WATCH',
    desc: 'Für Outdoor-Sportler, die hart trainieren und sich schnell bewegen'
  },
  apex_46: {
    name: 'COROS APEX',
    header: 'PREMIUM-MULTISPORT-GPS-UHR',
    desc: 'Für Outdoor-Sportler, die leicht und schnell unterwegs sind'
  },
  apex_pro: {
    name: 'COROS APEX Pro',
    header: 'GPS OUTDOOR-UHR',
    desc: 'Für Ausdauersportler in rauen Umgebungen'
  },
  vertix: {
    name: 'COROS VERTIX',
    header: 'NEXT GENERATION GPS ADVENTURE WATCH',
    desc: 'Unsere Uhr für extreme Abenteuer'
  },
  vertix2: {
    name: 'COROS VERTIX 2',
    header: 'GPS ADVENTURE WATCH',
    desc: 'Für Sportler,\ndie alles wollen'
  },
  pod: {
    name: 'COROS POD',
    header: 'GERÄT ZUR LEISTUNGSOPTIMIERUNG',
    desc: 'Erweiterte Laufmetriken zur Optimierung deiner Leistung'
  },
  pod2: {
    name: 'COROS POD 2',
    header: 'GERÄT ZUR LEISTUNGSOPTIMIERUNG',
    desc: 'Die nächste Stufe der \n    Genauigkeit für alle Läufer'
  },
  hrm: {
    name: 'COROS HFM',
    header: 'OPTISCHER HERZFREQUENZSENSOR',
    desc: 'Präzise Daten aus dem\nKomfort Ihres Arms'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/plans.js
/* harmony default export */ const de_plans = ({
  plan: 'PLAN',
  roadRunning: 'Laufen',
  getItNow: 'hol sie dir jetzt',
  bannerTitle: 'athleten-trainingspläne',
  running: {
    '12-Week Molly Seidel Marathon Plan': {
      title: '12-Wochen-Plan für den Molly-Seidel-Marathon',
      desc: 'Dieser Plan zeigt die wichtigsten Workouts, mit denen sich Molly Seidel auf ihre Marathonläufe vorbereitet. Zusammen mit den wichtigsten Workouts von Mollys Trainer Jonathon Green stellt dieser Plan sicher, dass die Athleten das richtige Volumen aufbauen, das sie brauchen, um einen Marathon so zu laufen, wie sie es können. Wenn du wie ein Profi trainieren willst, ist dies ein großartiger Plan, der dich bei jedem Schritt begleitet. Wenn du einen individuelleren Ansatz suchst, besuche verdetrackclub.com und wende dich an Coach Green, wenn du Hilfe brauchst!'
    },
    '2:45-3:00 12-Week Marathon Plan': {
      title: '2:45-3:00 12-Wochen-Marathonplan',
      desc: 'Dies ist ein aggressiver Trainingsplan, bei dem die Athleten im Bereich von 30-40 Meilen/Woche beginnen und sich auf 60 Meilen/Woche steigern. Die Trainingseinheiten bestehen aus Intervalleinheiten in der Wochenmitte, einem Grundlagentraining und langen Läufen in einem marathonspezifischen Tempo. Athleten, die dieses Programm beginnen, sollten ein Grundvolumen von 30-40 Meilen pro Woche haben. Die Athleten werden ein Bewusstsein für ein Tempo von 6:18-6:52/Meilen entwickeln, mit dem sie einen Marathon unter 3 Stunden laufen können.'
    },
    '3:15-3:35 12-Week Marathon Plan': {
      title: '3:15-3:35 12-Wochen-Marathonplan',
      desc: 'Dieser Trainingsplan ist so konzipiert, dass die Athleten ihr Trainingspensum auf 50 Meilen/Woche steigern und sich gleichzeitig auf einen 3:15-3:35-Marathon vorbereiten. Die Athleten absolvieren eine Mischung aus Schwellenintervallen in der Wochenmitte, aeroben Ausdauer-Basiskilometern für das Volumen und marathonspezifischen Trainingseinheiten, um ihr Tempo zu steigern. Die Athleten sollten ein Grundgerüst von 30-40 Meilen pro Woche haben, bevor sie mit diesem Plan beginnen.'
    },
    '4:00-4:30 12-Week Marathon Plan': {
      title: '4:00-4:30 12-Wochen-Marathonplan',
      desc: 'Dieser Plan beginnt mit 26 Meilen/Woche und steigert sich bis zu 40/Woche, bevor du dich auf den Marathon vorbereitest. Der Großteil dieses Plans besteht darin, dass die Athleten mit ihrer aeroben Ausdauerherzfrequenz oder einem spezifischen Marathontempo laufen, um einen Marathon in 4:00-4:30 zu beenden (9:09-10:17/Meilen). Die Athleten sollten in der Lage sein, 25-30 Meilen pro Woche zu laufen, bevor sie mit diesem Programm beginnen. Wenn die Athleten den Trainingsplan durchlaufen, sollten sie die marathonspezifischen Trainingseinheiten nutzen, um eine realistische Erwartung für den Wettkampftag zu entwickeln. Wenn du in der Lage bist, alle spezifischen Trainingseinheiten unter einer Pace von 9:09/Meile zu absolvieren, dann ist ein Marathon unter 4 vielleicht in deiner Zukunft. Wenn du Schwierigkeiten hast, eine Pace von 10:17/Meile zu halten, ist ein Wert von über 4:30 vielleicht realistischer. Du kannst die spezifischen Tage nach Bedarf anpassen, die Tage für die aerobe Ausdauer aber beibehalten!'
    },
    'Beginner Marathon Plan': {
      title: 'Anfänger-Marathonplan',
      desc: 'Dieser Trainingsplan ist für alle gedacht, die einen neuen Trainingsblock beginnen und ihren ersten Marathon laufen wollen! Vielleicht bist du in der Vergangenheit bereits Halbmarathon gelaufen und möchtest nun die Distanz erhöhen. Dieser Plan beginnt mit 13 Meilen/Woche und steigert sich bis zu 50 Meilen/Woche in Woche 18. Er ist so konzipiert, dass er auf sichere und effiziente Weise aufgebaut wird. So können die Athleten sicher sein, dass sie nach den 20 Wochen auf dem richtigen Weg sind, 26,2 Meilen zu laufen. Wenn du derzeit über dem Trainingsvolumen der ersten Wochen liegst, behalte dein derzeitiges Volumen bei, bis du den Punkt erreichst, an dem der Plan mehr Meilen vorsieht. Mach einfach von da an weiter und genieße die Ergebnisse! Lass uns auf jeden Fall an deiner Reise teilhaben und sag uns, wie dein Training läuft! #exploreperfection'
    },
    '6-Week Mountain Running Training Plan': {
      title: '6-Wochen-Berglauf-Trainingsplan',
      desc: 'Das 6-wöchige Berglauftraining wurde entwickelt, um deine Fähigkeit zu verbessern, höhere Intensitäten auf hügeligem und technischem Terrain durchzuhalten. Dieser Plan konzentriert sich auf längere Lauftage mit niedriger/moderater Intensität. Er enthält einen 2-Block-Aufbau ohne Taper-Zeit, ist aber sehr spezifisch für eine Vielzahl von Bergprojekten. Die Athleten sollten auf 6 Lauftage bis zu 80 km (50 Meilen) pro Woche vorbereitet sein. Der Zugang zu hügeligem Terrain ist Pflicht.'
    },
    '12-Week 100 Mile Ultra Training Plan': {
      title: '12-wöchiger 100-Meilen-Ultra-Trainingsplan',
      desc: 'Für Athleten, die mit diesem Trainingsplan beginnen möchten, empfehlen wir, dass sie mindestens eine Basisfitness von 80 haben und durchschnittlich über 40 Meilen pro Woche laufen. Wenn du dieses Niveau noch nicht erreicht hast, folge bitte einem unserer anderen Trainingspläne, um diesen Punkt zu erreichen. Dieser Plan ist so konzipiert, dass die Athleten innerhalb von 12 Wochen eine Fitness aufbauen, die sie in die Lage versetzt, einen 100-Meilen-Ultra-Marathon zu laufen. Der Plan besteht aus Kraft- und Lauftraining, um sicherzustellen, dass die Athleten die erforderliche Muskelkraft und Ausdauer haben. Die wichtigsten Trainingseinheiten pro Woche sind die langen Läufe am Wochenende. Wenn du deinen Zeitplan umstellen musst, ist das kein Problem, aber konzentriere dich auf die langen Tage und den Aufbau deiner aeroben Ausdauer!'
    },
    '10-Week Return to Running Training Plan': {
      title: '10-wöchiger Trainingsplan für den Wiedereinstieg ins Laufen',
      desc: 'Dieser Trainingsplan soll dir helfen, wieder mit dem Laufen anzufangen. Dieser Plan setzt sich aus Spaziergängen, Gehen/Laufen und Laufen zusammen. Der Plan führt die Teilnehmer durch ein schrittweises Training und hilft ihnen dabei, nach 10 Wochen wieder regelmäßig zu laufen. Achte darauf, dass du mit deinem eigenen Tempo und deinem Wohlbefinden beginnst. Die Trainingstage können je nach Bedarf in deinem Kalender verschoben werden. Dieser Plan soll dir helfen, das Training wieder in deinen Lebensstil zu integrieren. Nach den 10 Wochen, in denen du diesem Plan folgst, hast du die Möglichkeit, einen laufspezifischen Plan zu verfolgen, wenn du das möchtest. Achte darauf, dass dies Spaß macht und sich im Rahmen der Vorgaben bewegt. Der beste Weg, das Ziel von 10 Wochen zu erreichen, ist ein konsequentes und überschaubares Training. Du schaffst das! Genieße die Reise!'
    },
    '8-Week Off-Season Training Plan': {
      homeRecommendedTitle: '8-wöchiger Off-Season-Trainingsplan',
      title: '8-wöchiger Off-Season-Trainingsplan',
      desc: 'Dieser Plan wurde entwickelt, um die Athleten in der Nebensaison in Bewegung zu halten. Wir werden 15-25 Meilen pro Woche laufen und Cross-Training einbauen. Die Athleten können jede Cross-Trainingsaktivität einbauen, die mit "Radfahren" gekennzeichnet ist. Das übergeordnete Ziel ist es, dass die Athleten gesund und motiviert in die nächste Trainingssaison starten. Achte darauf, dass du es in dieser Phase des Jahres relativ ruhig angehen lässt. Das soll dir helfen, dich zu erholen und gleichzeitig fit zu bleiben.'
    },
    '8 Week Threshold Development': {
      title: '8 Wochen Schwellenwertentwicklung',
      desc: 'Das Ziel dieses Trainingsplans ist es, die Zeit an der Schwelle und den VO2-Wert im Laufe der Wochen zu steigern. Das wöchentliche Volumen bleibt relativ konstant, nur die Intensität wird erhöht, um eine Veränderung zu bewirken. Die Athleten sollten sich auf 5-6 Lauftage pro Woche mit einem Volumen von 25-40 Meilen pro Woche einstellen. Der Schwerpunkt liegt jede Woche auf Schwellen- oder VO2-Sätzen. Die Basisläufe sollen das Volumen aufrechterhalten und den Athleten helfen, sich zu erholen. Überschreite das Tempo der leichten Läufe nicht. Am Ende dieser 8 Wochen solltest du einen 5 km-Test durchführen. Wenn sich dein Schwellentempo verändert hat, solltest du neue Bereiche erkennen und diesen Trainingsplan erneut anwenden können, wenn du mehr Schwellentraining möchtest.'
    },
    '12 Week Run Speed Development': {
      title: '12 Wochen Entwicklung der Laufgeschwindigkeit',
      desc: 'Dieser Plan ist für Läufer mit einer wöchentlichen Laufleistung von 25-40 Meilen (40-65 km) konzipiert. Während des gesamten Plans wird das wöchentliche Volumen bei 25-30 Meilen pro Woche liegen. Die Läufer können bei Bedarf ihr Grundpensum erhöhen, aber der Schwerpunkt sollte weiterhin auf dem Schnelligkeitstraining liegen. Da es sich um ein Schnelligkeitstraining handelt, wird empfohlen, dass die Athleten zusätzliche Erholungstage einlegen, wenn ihre Beine von den vorangegangenen Trainingseinheiten wund oder ermüdet sind. Am Ende dieser 12 Wochen sollten die Läufer eine Verbesserung ihrer Schwelle, ihres V02-Wertes und ihrer Laufeffizienz feststellen. Wenn du einen 5 km, 10 km oder Halbmarathon nach diesem Plan absolvierst, solltest du schnellere Zeiten erzielen.'
    },
    '50k Trail Run Training Plan': {
      title: '50-Kilometer-Trailrun-Trainingsplan',
      desc: 'Dieser Trainingsplan beginnt mit 25 Meilen/Woche und steigert sich bis zum Ende auf 60+ Meilen. Die ersten 10 Wochen dieses Plans dienen dem Aufbau der aeroben Ausdauer der Sportler. Die letzten 10 Wochen sind speziell auf die Anforderungen beim Trailrunning ausgerichtet und sollen die Fitness vor dem Wettkampf verbessern. Da alle Trail-Events unterschiedlich sind, wird empfohlen, dass die Athleten auf Trails oder unter Bedingungen laufen, die dem Renntag ähneln. Dieser Plan stellt sicher, dass deine Fitness bereit ist, aber jeder sollte nach Höhenmetern oder anderen Elementen suchen, um seine Bereitschaft zu maximieren. Wie immer gilt: Wenn ein Läufer zusätzliche freie Tage braucht, sollte er sie sich nehmen. Die wichtigsten Tage in diesem Plan sind mittwochs und die Wochenenden. Diesen Tagen solltest du oberste Priorität einräumen. Viel Spaß!'
    },
    'Beginner Sprint Distance Triathlon Plan': {
      title: 'Triathlon-Plan für Anfänger auf der Sprintdistanz',
      desc: 'Ein 12-Wochen-Plan, der dir helfen soll, 800 Meter Schwimmen, 12,4 Meilen Radfahren und 3,1 Meilen Laufen zu absolvieren. Dieser Plan nutzt das Herzfrequenztraining, um ein richtiges und effizientes Training zu gewährleisten. Bevor du mit dem Training beginnst, solltest du die Grundlagen der Schwimmtechnik beherrschen. Außerdem sollten die Athleten in der Lage sein, 4-5 Mal pro Woche 30-45 Minuten pro Tag zu trainieren, bevor sie mit diesem Plan beginnen.'
    },
    '12 Week Half Marathon HR Plan': {
      homeRecommendedTitle: 'Halbmarathon-12-Wochen-Training',
      title: '12-Wochen-Halbmarathon-HR-Plan',
      desc: 'Dieser Plan ist sowohl für Anfänger als auch für fortgeschrittene Läufer geeignet. Die Läufer sollten 4 Mal pro Woche laufen können und ein wöchentliches Laufvolumen von 10-15 Meilen haben. Der Plan nutzt die Herzfrequenzzonen, um ein angemessenes und effizientes Training zu gewährleisten. Am Ende des Plans werden die Läufer 30 Meilen pro Woche laufen und ihre aerobe Ausdauer sowie ihre Fähigkeit, Tempoanstrengungen durchzuhalten, verbessert haben.'
    },
    'Beginner Runner Base Plan (Imperial)': {
      title: 'Basisplan für Laufanfänger (Imperial)',
      desc: 'Ein 10-Wochen-Plan für Anfänger und fortgeschrittene Läufer, der bis zu 30 Meilen pro Woche vorsieht. Unter der Voraussetzung, dass das Tempo die ganze Woche über beibehalten wird, sollen sich die längeren Läufe natürlich härter anfühlen als andere Tage, was auch zu erwarten ist. Dieser Plan ist in imperialen Maßeinheiten.'
    },
    '12 Week 5000m Training Plan (Metric)': {
      title: '12-Wochen-Trainingsplan für 5.000 m (metrisch)',
      desc: 'Ein 12-Wochen-Plan, der von der US-Olympionikin Kim Conley erstellt wurde. Läufer sollten darauf vorbereitet sein, 6-7 Mal pro Woche zu laufen. Der Samstag ist ein Ruhetag, aber bei Bedarf kannst du bis zu 60 Minuten laufen. Dieser Plan ist metrisch.'
    },
    'Beginner Runner Base Plan (Metric)': {
      title: 'Basisplan für Laufanfänger (metrisch)',
      desc: 'Ein 10-Wochen-Plan für Anfänger und fortgeschrittene Läufer, der bis zu 30 Meilen pro Woche vorsieht. Vorausgesetzt, das Tempo wird die ganze Woche über beibehalten, sollen sich die längeren Läufe natürlich härter anfühlen als andere Tage, was auch zu erwarten ist. Dieser Plan ist in metrischen Maßeinheiten.'
    },
    'Sub-3:15 Marathon': {
      title: 'Sub-3:15 Marathon',
      desc: 'Ein 8-Wochen-Plan, der für 3:30-Marathonläufer mit einer hohen aeroben Ausdauer entwickelt wurde, um einen Marathon unter 3:15 zu laufen. Die Läufer sollten bereit sein, 5-6 Tage pro Woche zu laufen.'
    },
    'Sub-25 5K': {
      title: 'Sub-25 5K',
      desc: 'Ein 14-wöchiger Plan für Läufer, die einen 5 km-Lauf in 25 Minuten schaffen wollen. Die Läufer sollten bereit sein, 5 Tage pro Woche zu laufen.'
    },
    'Competitive 10K': {
      title: 'Wettkampfläufer 10K',
      desc: 'Ein 12-Wochen-Plan, der sich an Wettkampfläufer richtet, die für 10 km-Läufe trainieren. Die Läufer sollten bereit sein, zwischen 30 und 40 Meilen pro Woche zu laufen.'
    },
    'Half Marathon': {
      title: 'Halbmarathon',
      desc: 'Ein 15-Wochen-Plan, der sich an Wettkampfläufer richtet, die für einen Halbmarathon trainieren. Die Läufer sollten zwischen 55 und 70 Meilen pro Woche laufen.'
    },
    Marathon: {
      title: 'Marathon',
      desc: 'Ein 12-Wochen-Plan für Läufer, die ihre Topform für einen Marathon erreichen wollen. Wenn du bisher weniger als 30 Meilen pro Woche gelaufen bist, solltest du den Basistrainingsplan befolgen, um auf 30 Meilen pro Woche zu kommen. Das Hauptaugenmerk dieses Plans liegt auf der Verbesserung deiner Laktatgeschwindigkeit durch Tempo, Laktatintervalle und lange Progressionsläufe. Zu den sekundären Prioritäten gehören die Steigerung der langen Läufe und der Gesamtkilometerzahl.'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/contact.js
/* harmony default export */ const de_contact = ({
  pageTitle: 'KONTAKTIEREN SIE UNS',
  companyName: 'COROS Wearables, Inc.',
  mail: 'Mail',
  mailValue: '3 Peters Canyon Rd\n    Suite 100\n    Irvine, CA 92606\n    USA',
  phone: 'Telefon',
  phoneValue: '+1 (855) 934-4411',
  businessHours: 'Geschäftszeiten',
  businessHoursValue: 'Montag - Freitag 9-15 Uhr Pacific Time',
  salesSupport: 'Vertrieb und Partnerunterstützung',
  salesSupportValue: 'sales@coros.com',
  consumerSupport: 'Verbraucher-Support',
  consumerSupportValue: 'support@coros.com',
  careerOpportunities: 'Karrieremöglichkeiten',
  careerOpportunitiesValue: 'careers@coros.com',
  mediaRelations: 'Medienarbeit',
  mediaRelationsValue: 'press@coros.com',
  distributors: 'COROS Vertriebspartner weltweit',
  area: {
    hk: 'Hongkong',
    au_nz: 'Australien & Neuseeland',
    ar: 'Argentinien',
    BeNeLux: 'BeNeLux',
    bg: 'Bulgarien',
    br: 'Brasilien',
    ca: 'Kanada',
    cl: 'Chile',
    co: 'Kolumbien',
    ec: 'Ecuador',
    ee_lv_lt: 'Estland, Lettland, Litauen',
    fr: 'Frankreich',
    de: 'Deutschland',
    gt: 'Guatemala',
    gr: 'Griechenland',
    id: 'Indonesien',
    il: 'Israel',
    it: 'Italien',
    in_np_bd: 'Indien, Nepal, Bangladesch',
    jp: 'Japan',
    my: 'Malaysia',
    mt: 'Malta',
    mu: 'Mauritius',
    mx: 'Mexiko',
    me: 'Mittlerer Osten',
    nordics: 'Nordische Länder (Schweden, Norwegen, Finnland, Dänemark, Island)',
    pl: 'Polen, Ungarn, Tschechien, Slowakei, Slowenien, Kroatien, Serbien',
    ph: 'Philippinen',
    qa: 'Katar',
    ro: 'Rumänien',
    ru: 'Russland',
    sg: 'Singapur',
    za: 'Südafrika',
    es: 'Spanien, Portugal, Andorra',
    ch: 'Schweiz',
    th: 'Thailand',
    uk: 'Vereinigtes Königreich',
    vn: 'Vietnam',
    ve: 'Venezuela'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/warranty.js
/* harmony default export */ const de_warranty = ({
  pageTitle: 'GARANTIE',
  'getting warranty service': {
    title: 'Inanspruchnahme von Garantieleistungen',
    content: 'COROS-Produkte werden nach den höchstmöglichen Qualitätsstandards hergestellt. Kommt es dennoch zu Qualitätsmängeln, stehen wir hinter unseren Produkten. COROS sichert Erstkäufern einen Garantiezeitraum von zwei (2) Jahren ab dem Kaufdatum der Uhren zu. Bei Helmen beträgt der Garantiezeitraum ein (1) Jahr. Bei Zubehör beträgt der Garantiezeitraum 90 Tage. \nWenn ein Defekt vorliegt, der aus einem Produktionsfehler hervorgeht, und innerhalb des Garantiezeitraums bei COROS ein Antrag zur Genehmigung für die Warenrückgabe eingeht, ersetzt COROS das Produkt durch ein neues oder schafft Abhilfe. Ruf uns an oder schreibe eine E-Mail, damit wir dir zeitnah bei der Inanspruchnahme der Garantieleistung helfen können.'
  },
  returns: {
    title: 'Rücksendungen',
    content: 'COROS bietet ein 30-tägiges Rückgaberecht mit Geld-zurück-Garantie nur für coros.com-Bestellungen. Wenn du aus irgendeinem Grund unzufrieden bist, kannst du deinen Kauf innerhalb von 30 Tagen nach dem Lieferdatum zurückgeben und bekommst den vollen Kaufpreis erstattet. Die Produkte müssen in ihrem ursprünglichen Zustand mit allem Zubehör und der Verpackung zurückgegeben werden. COROS übernimmt keine Versandkosten für Produkte, die zur Erstattung zurückgegeben werden. Bitte wende dich an den Kundensupport, um Rückgabeverfahren und -genehmigungen zu erfragen. Bestellungen, die außerhalb des Rückgabezeitraums eingehen, werden nicht angenommen oder genehmigt. Es dauert bis zu 5 Werktage, bis die genehmigte Rückerstattung auf deinem Bankkonto erscheint. Die ursprünglichen Versandkosten und Zollgebühren werden nicht erstattet.'
  },
  'out-of-warranty service': {
    title: 'Service außerhalb der Garantie',
    content: 'COROS bietet Reparatur- bzw. Umtauschservices für Uhren außerhalb der Garantie zu folgenden Preisen an.',
    extraContent: 'Das Ersatzgerät hat eine 180-tägige Garantie und ist neu oder gleichwertig in Leistung und Zuverlässigkeit.\nKlicke hier für die Details zu Service und Richtlinien nach Ablauf der Garantiezeit.'
  },
  warranty: {
    title: 'Garantie',
    content: 'COROS Wearables Inc. (“COROS”) sichert Erstkäufern zu, dass das Produkt, das sie auf coros.com oder bei einem autorisierten COROS-Händler gekauft haben, bei normaler Verwendung gemäß den unten genannten Bestimmungen frei von Material- und Herstellungsfehlern ist. Diese eingeschränkte Garantie ist nur für den Erstkäufer gültig, nicht übertragbar und erstreckt sich nicht auf gebrauchte Produkte oder Produkte, die nicht bei coros.com oder einem autorisierten Händler gekauft wurden. \n  Eingeschlossene Produkte und Garantiezeitraum    Für die Zwecke dieser eingeschränkten Garantie, beziehen sich die Bezeichnungen “Produkte” und “Produkt” auf folgende COROS-Produkte:'
  },
  'Limited Warranty Term': {
    title: 'Eingeschränkte Gewährleistungsfrist',
    content: 'Der Zeitraum der eingeschränkten Garantie beträgt ab dem Kaufdatum zwei (2) Jahre für Uhren, ein (1) Jahr für Helme und 90 Tage für Zubehör. \n  Weder die Gebrauchsanleitung noch Produktinformationen dürfen so ausgelegt werden, dass sie eine vertragliche Gewährleistung für die Produkte kreieren. Maklern, Mitarbeitern, Händlern, Vertretern und Wiederverkäufern ist es nicht gestattet, Änderungen, Erweiterungen oder Ergänzungen an dieser eingeschränkten Produktgarantie vorzunehmen oder verbindliche Darstellungen oder Ansprüche hinsichtlich der Produkte oder dieser eingeschränkten Garantie in der Werbung, bei Präsentationen oder anderswo im Namen von COROS zu machen.    Nichts in dieser eingeschränkten Garantie betrifft die gesetzlichen Rechte von Konsumenten, auf die nicht verzichtet werden kann oder die nicht vertraglich eingeschränkt werden können. Diese eingeschränkte Garantie gewährt dir bestimmte gesetzliche Rechte. Außerdem hast du ggf. andere gesetzliche Rechte, die je nach Land bzw. Region variieren.    Für den Fall, dass ein Teil dieser eingeschränkten Garantie für rechtswidrig oder nicht durchführbar erklärt wird, beeinflusst diese partielle Rechtswidrigkeit oder Undurchsetzbarkeit nicht die Durchsetzbarkeit der restlichen eingeschränkten Garantie.    Diese Bestimmungen der eingeschränkten Garantie unterliegen in jeder Hinsicht den Gesetzen der Vereinigten Staaten von Amerika und dem US-Bundesstaat Kalifornien, unter Ausschluss seiner kollisionsrechtlichen Bestimmungen. Das Übereinkommen der Vereinten Nationen über Verträge über den internationalen Wareneinkauf (CISG) wird ausdrücklich ausgeschlossen. Ausschließlich das Landgericht und / oder der Bundesgerichtshof mit Sitz in Orange County, Kalifornien sollen für jegliche Rechtsstreitigkeiten oder Forderungen zuständig sein, die aus diesen eingeschränkten Garantiebestimmungen entstehen.'
  },
  'not covered': {
    title: 'Ausschlüsse',
    content: 'Diese eingeschränkte Garantie erstreckt sich nur auf Produkte, die gemäß dieser eingeschränkten Garantie und der von COROS veröffentlichten Dokumentation genutzt werden. Folgende Fälle sind von der eingeschränkten Garantie ausgeschlossen: \n  Produkte, die außerhalb der Werksangaben modifiziert wurden und / oder sich nicht im Auslieferungszustand befinden.    Produkte mit Modifikationen wie entfernter, verschobener, verfälschter, verunstalteter, beschädigter, veränderter oder unleserlich gemachter Seriennummer und / oder werkseitiger Kennzeichnung.    Produktschäden wie ein eingeschnittenes, zerkratztes, verzogenes, verbogenes, rissiges, eingedelltes oder gebrochenes Gehäuse.    Jegliche Schäden an Teilen, Hardware und / oder Baugruppen des Produkts inklusive jedoch nicht ausschließlich Schäden, die aus Nichtbeachtung, Missbrauch, Unfällen, Fehlbedienung oder unüblicher physischer, elektrischer oder elektromechanischer Beanspruchung resultieren.    Jegliche fehlende Hardware, Komponenten und / oder Baugruppen des Produkts.    Kosmetische Schäden aufgrund von tiefen Kratzern, Einschnitten, Rissen, Beulen, Verfärbungen am bzw. Nichtbeachtung, Fallenlassen oder Fehlbedienung des Produkts, die während eines als nicht angemessen erachteten Gebrauchs entstanden sind.    Produkte, die Flüssigkeiten, Flüssigkeitsrückständen oder einer extrem feuchten Umgebung ausgesetzt wurden, wodurch Rost, Nässe, Klammheit, Flecken oder Korrosionen an Komponenten, Hardware oder Elektronik entstanden sind. Verbrennungen oder Auflodern von Komponenten als Folge von Flüssigkeitskontakt.    Direkte Nutzung von Farbe, eintunken der Stromversorgung in Öl, Nutzung von Klebstoffen an jeglichen Teilen des Produkts, löten des Produkts, Modifikationen an der Elektronik und / oder Komponenten.    Kontakt mit Zigarettenrückständen, Feuchtigkeit, Sand, Dreck oder Schutt.    Produkte, die durch einen Unfall, einen Zusammenstoß mit einem anderen Objekt, den Gebrauch unverhältnismäßiger Gewalt, mangelnde Pflege und Wartung, Kontakt mit Feuer oder unverhältnismäßiger Hitze, Überschwemmungen, Dreck, Windstürme, Blitzschläge, Erdbeben, unverhältnismäßige Wetterbedingungen oder höhere Gewalt, Diebstahl, durchgebrannte Sicherungen, unsachgemäße Verwendung jeglicher Stromquellen oder überlasteter elektrischer Schaltungen funktionslos geworden sind.    Defekte oder Schäden, die aus der Nutzung von Produkten, Zubehör, Software oder Peripheriegeräten von Dritten, die nicht für die gemeinsame Nutzung mit dem COROS-Produkt ausgestattet oder dafür zugelassen sind, resultieren.    Defekte oder Schäden, die aus unsachgemäßem und / oder nicht von COROS durchgeführtem und nicht von COROS genehmigtem Testen, Bedienen, Pflegen, Installieren, Warten oder Anpassen resultieren.    Die Verwendung ungeeigneter Versandverpackungen oder ungeeigneten Verpackungsmaterials, durch die Schäden am Produkt entstehen während es sich mit dem Zustellunternehmen des Erst- oder Zweitkäufers auf dem Transportweg befindet.    Produkte, die bei nicht autorisierten Wiederverkäufern oder Händlern, inklusive Online-Marktplätzen wie eBay (der offizielle eBay-Store von COROS ausgenommen), Amazon (der offizielle Amazon-Store von COROS ausgenommen) und anderen Online-Auktionen und -Marktplätzen, gekauft wurden. Falls du unsicher bist, ob dein Wiederverkäufer autorisiert ist, kontaktiere bitte COROS hinsichtlich einer Bestätigung.    Exklusive Rechtsmittel und eingeschränkte Erstattungen.    Außer in den später genannten vorgesehenen besonderen Fällen, besteht dein einziges Rechtsmittel für ein defektes Produkt in der Reparatur oder dem Ersatz solch eines defekten Produkts in Übereinstimmung mit den Garantiebedingungen.    COROS bietet Erstattungen nur für Produkte an, die direkt auf der offiziellen Webseite coros.com gekauft wurden, wenn diese innerhalb von 30 Tagen nach Lieferung zurückgegeben werden.    Für Produkte, die nicht auf coros.com gekauft wurden, sind Erstattungsansprüche wenn überhaupt den Rückerstattungsrichtlinien des autorisierten Wiederverkäufers unterworfen und müssen über die Rückerstattungsrichtlinien des ursprünglichen autorisierten Wiederverkäufers abgewickelt werden. COROS löst keine Erstattungen ein, die von autorisierten Wiederverkäufern angeboten werden.    COROS übernimmt keine Versandkosten für Produkte, die zwecks einer Erstattung zurückgegeben werden.'
  },
  'how to obtain': {
    title: 'Inanspruchnahme von Garantieleistungen',
    content: 'Um Garantieleistungen gemäß dieser eingeschränkten Garantie zu erhalten, musst du COROS kontaktieren, um eine RMA-Nummer zu erhalten bevor du das Produkt gemäß dem RMA-Prozess an COROS zurückschickst. Bitte kontaktiere den technischen Support von COROS telefonisch unter + 1 714 389 0269 oder per E-Mail unter info@coros.com'
  },
  'product warranty replacement': {
    title: 'Garantieumtausch',
    content: 'COROS behält sich das Recht vor, die Gültigkeit deiner Garantie und deiner Garantieleistungsanfrage zu verifizieren. \n  COROS behält sich das Recht vor, dir die Versandkosten und Servicegebühren für unvollständige, beschädigte oder modifizierte Produkte, die an COROS zurückgeschickt wurden und repariert oder ausgetauscht werden müssen oder anderweitig nicht unter diese eingeschränkte Garantie fallen, in Rechnung zu stellen. Die Servicegebühren variieren basierend auf den Material- und Arbeitskosten, die vernünftigerweise erforderlich sind, um fehlende Teile zu ersetzen oder um modifizierte Teile auf den Werkszustand zurückzusetzen.    Produkte, die zwecks RMA zurückgeschickt wurden, werden repariert und zurückgegeben oder durch ein eingehend geprüftes neu zertifiziertes Produkt gleicher oder besserer Leistung ersetzt.    Diese eingeschränkte COROS-Garantie gilt ab dem Kaufdatum, welches durch einen Kaufnachweis verifiziert werden muss und / oder von einem autorisierten Wiederverkäufer bestätigt werden muss.    Bei den Produkten, die von der COROS RMA-Abteilung an den Erstkäufer oder Zweitkäufer zurückgegeben werden, handelt es sich um gründlich getestete und neu zertifizierte Produkte. Ersatzteile und / oder Produkte können neue oder generalüberholte Teile oder Produkte enthalten und werden für den Restzeitraum des ursprünglichen Garantiezeitraums unter Gewährleistung gestellt. Ersatzteile und / oder generalüberholte Produkte entsprechen dem Leistungsstandard und Zuverlässigkeitsniveau eines neuen Produkts oder Teils desselben Modells, jedoch können diese Produkte und / oder Teile kleine Kratzer, kleine Dellen, andere kosmetische Defekte oder Gebrauchsspuren aufweisen.    Wenn eine RMA für ein neues verpacktes Produkt innerhalb von 30 Tagen nach Lieferung notwendig ist, wird je nach Verfügbarkeit ein neues verpacktes Ersatzteil des Originalherstellers an den Erstkäufer geschickt.'
  },
  'shipping to coros for warranty': {
    title: 'Versand an COROS zwecks Garantie'
  },
  'warranty replacement shipping': {
    title: 'Versand bei Garantieumtausch',
    content: 'COROS versendet an die bestätigte Adresse, wenn deine RMA genehmigt wurde. \n  Wenn dein Garantieumtausch aufgrund von einer ungültigen Adresse, fehlenden Zugangsmöglichkeiten, dem Fehlen einer Adresse, Sicherheitshindernissen oder eingezäunten Bereichen nicht geliefert werden kann, trägst du die Kosten für das Nachsenden und den erneuten Versand, die je nach deiner Region variieren. Du musst COROS vor dem Versand zwecks Unterstützung kontaktieren, um diese Kosten zu vermeiden. COROS ist nicht für Pakete verantwortlich, die an eine veraltete Adresse geschickt wurden.    Wenn das COROS-Produkt aufgrund von einer Nichtzustellung an COROS zurückgeschickt wird, trägst du jegliche zusätzliche Versandkosten für die Weiterbeförderung. COROS möchte dich dazu ermutigen, die Versandadresse zu überprüfen, bevor du eine RMA abschickst.    Alle RMA-Ersatzlieferungen sind auf dem Paket mit “Warranty Replacement” (zu Deutsch: “Garantieumtausch”) gekennzeichnet, um jegliche Steuern, Abgaben und / oder Maklergebühren beim Zoll oder anderen zu vermeiden. COROS ist nicht für Gebühren verantwortlich, die von der Regierungsstelle, Maklern oder Dritten in der Zielregion erhoben werden. COROS ist nicht für unzustellbare Pakete, die von deiner Regierungsstelle zur Freigabe beim Zoll oder anderen beschlagnahmt werden und die aufgrund von einer Ablehnung der Freigabe herrenlos werden, verantwortlich.    Briefpost zum Versenden von COROS-Produkten wird nicht empfohlen. Wird dein Paket mit physischen Schäden empfangen, kann dein Antrag aufgrund der Beschränkungen des Postdienstes nicht bearbeitet werden und dein Paket wird ohne Alternativen an den Sender zurückgeschickt.    Wir behalten uns vor, diese eingeschränkte Garantie zu aktualisieren.    Wir haben im Laufe der Zeit Änderungen an der Richtlinie vorgenommen und werden auch weiterhin Änderungen an der Richtlinie vornehmen. Lies dieses Dokument sorgfältig durch und informiere dich über Aktualisierungen. COROS behält sich vor, diese Richtlinie ohne Vorankündigung zu ändern. Letzte Aktualisierung am 18. März 2020.'
  },
  registration: 'GARANTIEANMELDUNG',
  contact: {
    us: {
      area: 'United States',
      phone: '+1 (855) 934-4411 (9am-6pm PST, M-F)',
      email: 'support@coros.com',
      desc: 'Solltest du Support außerhalb der USA und Kanadas benötigen, wende dich bitte an die oben genannten Kontaktdaten und wir werden dich an den besten lokalen Support weiterleiten.'
    },
    uk: {
      area: 'Vereinigtes Königreich',
      address: '2pure Ltd, 4 Royston Road, Deans Industrial Estate, Livingston, West Lothian, EH54 8AH, United Kingdom',
      phone: '+0844 811 2001',
      email: 'support@coros.com',
      question: 'consumersupport@2pure.co.uk',
      desc: 'Solltest du Support außerhalb der USA und Großbritanniens benötigen, wende dich bitte an support@coros.com und wir werden dich an den besten Support vor Ort weiterleiten.'
    },
    ca: {
      area: 'Kanada',
      phone: '+1-438-794-8360 (9:00-15:00 Uhr Europäische Zeit)',
      email: 'contact@abritu-sport.com'
    }
  },
  title: 'Eingeschränkte Garantie',
  desc: 'Ein Unternehmen für Leistungssporttechnologie, das Athleten dabei unterstützt, ihr bestes Training zu gestalten.',
  checkWarranty: {
    title: 'Geräteabdeckung überprüfen - COROS',
    desc: 'Wählen Sie Ihren Gerätetyp und geben Sie die 6-stellige Geräte-ID ein, um Ihren COROS-Garantiestatus zu überprüfen.',
    snGuide: {
      title: 'Sie können die Seriennummer nicht finden?',
      desc: "Jedes COROS-Produkt hat eine 6-stellige Ger\xE4te-ID. Die meisten Produkte haben auch eine 10-stellige Seriennummer. Im Folgenden finden Sie verschiedene M\xF6glichkeiten, diese zu finden.",
      tips: [{
        title: 'Geräte-ID',
        tips: ["Sobald Sie mit der COROS-App verbunden sind \u2192 Profilseite \u2192 tippen Sie auf das Ger\xE4tesymbol", "Auf Ihrer COROS Watch \u2192 System \u2192 Weitere Einstellungen \u2192 Ger\xE4teinformationen \u2192 Ger\xE4te-ID"]
      }, {
        title: 'Seriennummer',
        tips: ["Gedruckt auf dem Aufkleber der Verpackung (falls zutreffend)", "Auf dem Ger\xE4t aufgedruckt (falls zutreffend)"]
      }]
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/about.js
/* harmony default export */ const de_about = ({
  title: 'test über uns',
  keywords: 'Schlüsselwörter',
  description: 'beschreibung über uns',
  201802: {
    time: 'Februar 2018',
    desc: 'COROS verlegt seinen US-Hauptsitz von Virginia nach Südkalifornien.'
  },
  201808: {
    time: 'August 2018',
    desc: 'Februar 2019'
  },
  201902: {
    time: 'Februar 2019',
    desc: 'COROS APEX gewinnt 2019 die Auszeichnung "Runner\'s World Editors\' Choice".'
  },
  201905: {
    time: 'März 2019',
    desc: "COROS APEX wird vom Triathlete 2019 Buyer's Guide als Best in Class ausgezeichnet."
  },
  201908: {
    time: 'August 2019',
    desc: 'Das Team COROS macht sich auf den Weg zum UTMB 2019 - COROS-Athleten Hillary Allen aus den USA wird 2. beim TDS und Maite Maora aus Spanien wird 3. beim kompletten UTMB.'
  },
  201910: {
    time: 'Oktober 2019',
    desc: 'COROS APEX Pro wird von BelieveInTheRun als Best In Gear ausgezeichnet.'
  },
  202001: {
    time: 'Januar 2020',
    desc: 'COROS erweitert sein Pro Athlete Team um professionelle Kletterer und Bergsteiger, angeführt vom legendären Steve House.'
  },
  202002: {
    time: 'Februar 2020',
    desc: 'Februar 2020'
  },
  202005: {
    time: 'Mai 2020',
    desc: 'COROS veröffentlicht Kraft- und Trainingsmodi. Ein komplexes Intervall-Aufbauprogramm mit der Möglichkeit, es mit Trainingspartnern zu teilen und Workouts von professionellen Athleten herunterzuladen. Außerdem enthält der Kraftmodus eine Bibliothek mit über 200 Trainingstypen und animierten Anleitungen für die Ausführung jeder Übung.'
  },
  202007: {
    time: 'Juli 2020',
    desc: 'COROS bringt die limitierte Auflage der COROS VERTIX Mojito auf den Markt, von der weltweit nur 200 Stück hergestellt werden. Die Uhr ist mit dem brandneuen Nylonarmband ausgestattet, das 50% leichter ist als das Standard-Silikonarmband. Die Nylonarmbänder sind in 4 Farben erhältlich und werden für alle COROS Uhrenmodelle angeboten.'
  },
  202208: {
    time: 'August 2022',
    desc: 'Kilian Jornet holt seinen 4. Sieg beim Ultra Trail Mont Blanc, indem er 20 Stunden unterbot und einen neuen Streckenrekord aufstellte. Der Franzose Mathieu Blanchard schaffte es zum zweiten Mal in Folge auf das Podium und wurde nur wenige Minuten hinter Jornet Zweiter, unter 20 Stunden und mit neuem Streckenrekord. Beide Athleten verwendeten das COROS APEX Pro, um ihre Rekordläufe zu verfolgen.'
  },
  20160907: {
    time: '7. September 2016',
    desc: 'COROS bringt sein erstes Produkt auf den Markt: LINX Smart Cycling Helmet und 1.135 Unterstützer, die kurz nach dem Start der Kickstarter-Kampagne 319.765 $ versprechen.'
  },
  20171205: {
    time: '5. Dezember 2017',
    desc: 'COROS bringt sein zweites Produkt auf den Markt und sammelt während der Indiegogo-Kampagne für den OMNI Smart Cycling Helm $130.974 USD von 835 Unterstützern.'
  },
  20180515: {
    time: '15. Mai 2018',
    desc: 'COROS bringt seine erste GPS-Uhr auf den Markt: PACE Multisport GPS Watch.'
  },
  20181209: {
    time: '9. Dezember 2018',
    desc: 'Ultraläuferin Camille Herron trägt COROS APEX 46mm während ihres Weltrekordlaufs über 24 Stunden. Ihre Uhr hat noch 32% Batteriekapazität.'
  },
  20190109: {
    time: '9. Januar 2019',
    desc: 'COROS bringt die APEX 24h World Record Limited Edition auf den Markt, um Camille Herrons Rekord zu feiern, die 163 Meilen in 24 Stunden zurücklegte - ein Rekord, den sie später in den Schatten stellen sollte.'
  },
  20190514: {
    time: '14. Mai 2019',
    desc: 'COROS bringt die VERTIX GPS Adventure Watch auf den Markt - die bisher leistungsstärkste Uhr der Marke mit 60 Stunden GPS-Akkulaufzeit und die erste Uhr der Produktreihe mit Pulsoxymeter.'
  },
  20190523: {
    time: '23. Mai 2019',
    desc: 'VERTIX begleitet Roxanne Vogel als Kletteruhr, während sie den Rekord für die schnellste Besteigung des Mount Everest von Tür zu Tür aufstellt.'
  },
  20190917: {
    time: '17. September 2019',
    desc: 'COROS bringt APEX Pro Premium Multisport GPS-Uhr auf den Markt.'
  },
  20200113: {
    time: '13. Januar 2020',
    desc: 'COROS Pro Athlete Hilaree Nelson und Jim Morisson nehmen ihre VERTIX Uhr mit auf einen eintägigen Vorstoß zum höchsten Gipfel der Antarktis, dem Mt. Vinson. Die Spitzenuhr der Marke wird unter einigen der härtesten Bedingungen der Welt getestet.'
  },
  20200229: {
    time: '29. Februar 2020',
    desc: 'COROS hat mehr als 10 professionelle Athleten und Botschafter, die bei den Olympischen Marathon-Trials 2020 in Atlanta, GA, an den Start gehen. Die neu verpflichtete Desiree Linden führte das Team mit einem 4. Platz an.'
  },
  20200825: {
    time: '25. August 2020',
    desc: 'COROS bringt die PACE 2 auf den Markt, die leichteste GPS-Uhr, die jemals hergestellt wurde, zusammen mit mehreren wichtigen Software-Funktionen, darunter Leistungsdaten für das Handgelenk, die erste native und vollständige Stryd-Integration eines Wearables-Unternehmens und die Erweiterung der COROS-Trainingsplattform um vollständige tägliche/wöchentliche/monatliche Trainingspläne.'
  },
  20201104: {
    time: '4. November 2020',
    desc: 'COROS führt mehrere neue Wassersportaktivitäten ein, darunter einen einzigartigen Speedsurfing-Modus, der gemeinsam mit der führenden Autorität im Speedsurfing entwickelt wurde - GPS-Speedsurfing.com. Die Liste der Wassersportmodi lautet: Speedsurfing, Windsurfing, Wildwasser, Flachwasser, Rudern und Indoor Rower.'
  },
  20201124: {
    time: '24. November 2020',
    desc: 'COROS nimmt den Marathon-Weltrekordhalter Eliud Kipchoge in sein Pro Athlete Team auf. Neben dem individuellen Sponsoring von Eliud hat COROS auch angekündigt, dass sie der offizielle GPS-Uhrenpartner des NN Running Teams werden, zu dem einige der weltbesten Leichtathleten und Straßenläufer gehören (einschließlich Eliud Kipchoge).'
  },
  20210112: {
    time: '12. Januar 2021',
    desc: 'COROS lanciert erfolgreich die Desert Sol VERTIX, eine saisonale, limitierte Farbvariante des Flaggschiffmodells. Diese Markteinführung symbolisiert eine Wiedergeburt, ein Aufstehen aus der Asche des Jahres 2020, das möglicherweise das schwierigste Jahr unserer Generation war.'
  },
  20210118: {
    time: '18. Januar 2021',
    desc: 'COROS entwickelt sich ständig weiter und beginnt das neue Jahr mit einem aufregenden Firmware-Update, das Navigationskontrollpunkte, Hundertstelsekunden für Runden und benutzerdefinierte Workouts im Track-Modus beinhaltet. Auch die COROS-App erhält Updates, darunter Wetterverfolgung und verbesserte Kartenebenen.'
  },
  20210127: {
    time: '27. Januar 2021',
    desc: 'COROS bringt im ersten Monat des Jahres 2021 eine zweite erfolgreiche Produkteinführung auf den Markt, den APEX PRO WHITE. Das APEX PRO WHITE ist inspiriert von den kontrastreichen Eis- und Felsformationen der Mammoth Lakes, einem beliebten Spielplatz der COROS-Athleten und -Mitarbeiter.'
  },
  20210520: {
    time: '20. Mai 2021',
    desc: 'COROS bringt die PACE 2 Speed Series auf den Markt. Die Speed Series wurde zusammen mit den besten und schnellsten Athleten der Welt entwickelt. Erhältlich in drei Saisonfarben: Evergreen, Track Red und Medal Gold.'
  },
  20210629: {
    time: '29. Juni 2021',
    desc: 'COROS führt die sportwissenschaftliche Plattform EvoLab ein. Nach zahllosen Stunden der Forschung, Entwicklung und Konstruktion, mit der gemeinsamen Anstrengung unserer Tausenden von öffentlichen Testern, ist COROS EvoLab nun für alle COROS-Uhrennutzer verfügbar.'
  },
  20210722: {
    time: '22. Juli 2021',
    desc: 'COROS Profi-Athletin Sally McRae gewinnt den Badwater 135. Sally siegte bei den Frauen in 30:48:47 - zwei Stunden und 49 Minuten vor der Zweitplatzierten.'
  },
  20210802: {
    time: '2. August 2021',
    desc: 'COROS nimmt den weltberühmten Kletterer Tommy Caldwell in sein Pro-Athletenprogramm auf. Tommy Caldwell wird als "King of El Cap" bezeichnet und ist eine lebende Legende in der Welt des Kletterns. Er ist auf der ganzen Welt geklettert und hat einige der härtesten Kletterrouten in den USA eingerichtet.'
  },
  20210808: {
    time: '8. August 2021',
    desc: 'Am Samstag, den 8. August, siegte Eliud Kipchoge im Marathon der Männer (2:08,38) und verteidigte seinen Titel von den Olympischen Spielen 2016 in Brasilien. EK inspiriert weiterhin die globale Laufgemeinschaft und beweist, dass #NoHumanIsLimited.'
  },
  20210817: {
    time: '17. August 2021',
    desc: 'COROS stellt der weltweiten Lauf- und Outdoor-Gemeinschaft erfolgreich seine brandneuen Uhren VERTIX 2 und Eliud Kipchoge PACE 2 vor. Die VERTIX 2 ist vollgepackt mit bahnbrechender Technologie, darunter 140 Stunden Akkulaufzeit im vollen GPS-Modus. Die limitierte Auflage der EK PACE 2 ist geschmackvoll in den Farben Rot und Grün gestaltet, die von den Nationalfarben von Eliuds Heimat Kenia inspiriert sind. Dies war die größte Markteinführung mehrerer Produkte in der Geschichte von COROS.'
  },
  20211014: {
    time: '14. Oktober 2021',
    desc: 'COROS führt den Multi-Pitch Climbing Modus auf dem VERTIX 2 ein. Dieser neue Trainingsmodus wurde speziell für technische Mehrseillängenklettereien entwickelt und ermöglicht es dem Benutzer, die Anzahl der Seillängen und die Schwierigkeitsgrade aufzuzeichnen, während er gleichzeitig den An-, Auf- und Abstieg separat verfolgt.'
  },
  20211122: {
    time: '22. November 2021',
    desc: 'COROS veröffentlicht ein größeres Firmware-Update, das die Unterstützung von Topo-/Landschaftskarten, den Walk-Modus, die Galileo-Unterstützung, die LIGHT-Tastenkombination und die Kamerasteuerung zu VERTIX und APEX Pro hinzufügt.'
  },
  20220120: {
    time: '20. Januar 2022',
    desc: 'COROS veröffentlicht ein weiteres großes Firmware-Update mit angepasster Geschwindigkeit, virtuellem Laufmodus, Temperatursensorunterstützung, Temperaturkalibrierung sowie zahlreichen Leistungs- und Algorithmusverbesserungen.'
  },
  20220125: {
    time: '25. Januar 2022',
    desc: 'COROS stellt die VERTIX 2 Karabiner vor und beginnt mit der Auslieferung. Der Karabiner wurde speziell für die Bedürfnisse von Extrembergsteigern entwickelt und ist ein unverzichtbares Accessoire für Outdoor-Forscher auf langen Wanderungen oder Klettertouren, um schnell auf die wichtigsten Messdaten auf dem VERTIX 2 zugreifen und diese anzeigen zu können.'
  },
  20220307: {
    time: '7. März 2022',
    desc: 'COROS nimmt die weltbekannten Bergsportler Kílian Jornet und Emelie Forsberg in sein Pro Athlete Team auf. Kilian und Emily haben gemeinsam mehrere große Meisterschaften gewonnen, darunter UTMB, Hardrock 100, Sky Running World Series und Ski Mountaineering World Series. Außerdem halten sie unzählige bedeutende Rekorde für Bergauf- und Bergabfahrten sowie für die schnellste bekannte Zeit (FKT).'
  },
  20220516: {
    time: '16. Mai 2022',
    desc: 'COROS veröffentlicht ein bedeutendes Firmware-Update, das die Verfolgung schneller Augenbewegungen, die Rate der wahrgenommenen Anstrengung für Aktivitäten, Mein Telefon finden/Meine Uhr finden und mehrere Leistungs- und Algorithmusverbesserungen beinhaltet.'
  },
  pageTitle: 'ÜBER COROS',
  desc: 'COROS ist ein Unternehmen für Leistungssporttechnologie, das Athleten dabei unterstützt, ihr bestes Training zu absolvieren. Für COROS dreht sich alles um die Natur, die Berge und einen leidenschaftlichen, aktiven Lebensstil. Wir kombinieren hochwertige Hardware mit innovativer Technologie, um Ausdauersportler mit der Ausrüstung auszustatten, auf die sie sich in den extremsten Umgebungen der Welt verlassen. Fortschrittliche Technologie mit einer effizienten und intuitiven Benutzererfahrung ist unser Kernstück – wenn Sie ein COROS-Produkt verwenden, wissen Sie, dass Sie ein Werkzeug erhalten, das von Athleten für Athleten entwickelt, getestet und perfektioniert wurde. COROS-Nutzer haben Weltrekorde aufgestellt und waren auf dem höchsten Punkt der Erde, wobei sie unsere Produkte bis zum Äußersten getrieben haben. Bei COROS sind Entwicklung und Innovation unaufhörlich. Unsere Kunden, die Athleten, machen COROS – werden Sie Teil unserer Community @COROSGlobal auf Facebook und Instagram.',
  milestones: 'COROS MEILENSTEINE',
  '201911_1': {
    time: 'November 2019',
    desc: 'COROS VERTIX wird von Outdoor Gear Lab als beste Höhenmesseruhr ausgezeichnet.'
  },
  '201911_2': {
    time: 'November 2019',
    desc: "COROS APEX gewinnt 2019 Runner's World Gear of the Year."
  },
  '20191112_1': {
    time: '12. November 2019',
    desc: 'COROS bringt das Performance Optimization Device (POD) auf den Markt, das erweiterte Laufmetriken liefert.'
  },
  '20191112_2': {
    time: '12. November 2019',
    desc: 'COROS führt den ersten Track-Running-Modus seiner Art in seine Uhrenlinien ein. Ein firmeneigener Algorithmus ermöglicht es dem Nutzer, seine Bahn mit einer noch nie dagewesenen Genauigkeit für eine GPS-Uhr auf einer Standard-400m-Bahn zu wähle'
  },
  '20181025_1': {
    time: '25. Oktober 2018',
    desc: 'COROS bringt seine dritte Generation intelligenter Fahrradhelme auf den Markt: SafeSound Road, Urban und Mountain.'
  },
  '20181025_2': {
    time: '25. Oktober 2018',
    desc: 'COROS bringt die APEX Premium Multisport-GPS-Uhr in zwei Größen auf den Markt - 46mm und 42mm - und ermöglicht so eine bessere Anpassung an den Nutzer.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/pace2.js
/* harmony default export */ const de_pace2 = ({
  viewPlans: 'Geprüfter Trainingsplan',
  viewWorkouts: 'Geprüftes Workout-Programm',
  accessories: 'ZUBEHÖR',
  section: {
    light: {
      title: 'So leicht, dass sie fliegen könnte',
      desc: 'Mit nur 29 g mit dem COROS Nylonband ist die COROS PACE 2 bei ihrer Einführung die leichteste GPS-Uhr der Welt. Lass dich nicht mit mehr belasten, als du brauchst. Mit der COROS PACE 2 bist du bereit für deine neue persönliche Bestleistung – egal ob im Rennen oder im Kraftraum.'
    },
    processor: {
      title: 'Eine Kraft, mit der man rechnen muss',
      desc: 'Die COROS PACE 2 hat einen eineinhalbmal leistungsfähigeren Prozessor, bietet fünfmal mehr Arbeitsspeicher und viermal mehr Speicherplatz als die ursprüngliche COROS PACE und lässt viel Platz für erweiterte Funktionen. COROS PACE 2 wird dein Trainingspartner für die lange Strecke sein.',
      pace: 'COROS PACE PROZESSOR',
      pace2: 'COROS PACE 2 PROZESSOR',
      compareDesc: ['ZUSÄTZLICH', 'MEHR', 'SPEICHERPLATZ']
    },
    counts: {
      title: 'Jede Sekunde zählt',
      desc: 'Wir wissen, dass jede Sekunde zählt, wenn du um eine neue persönliche Bestzeit kämpfst. Deshalb hilft dir COROS, weniger Zeit damit zu verbringen, nach den wichtigen Informationen zu suchen, die du brauchst. Mit einem neuen Design und dem COROS Digital Zifferblatt bietet COROS PACE 2 ein noch einfacheres Benutzererlebnis. Mit nur einem Finger kannst du deine Zwischenzeiten abrufen, deine Herzfrequenz überprüfen oder dein nächstes Training planen.'
    },
    packs: {
      title: 'Starke Leistung',
      desc: 'Dank der Effizienz der COROS GPS-Batterietechnologie bietet die COROS PACE 2 eine volle GPS-Batterielaufzeit von 30 Stunden. Das ist eine Steigerung von 20 % gegenüber dem ursprünglichen COROS PACE. Wenn du eine noch längere Akkulaufzeit brauchst, kannst du auf UltraMax umschalten, um fast die Hälfte des Batterieverbrauchs zu sparen.',
      descKeyword: 'Stunden'
    },
    endurance: {
      title: 'Ausdauer an deinem Handgelenk',
      desc: 'COROS PACE 2 kann 20 Tage lang täglich genutzt werden. Das sind 20 Tage, in denen du jeden Tag deine Herzfrequenz und deinen Schlaf aufzeichnen, die Hintergrundbeleuchtung einschalten, Schritte messen, Benachrichtigungen und sogar Alarme erhalten kannst. Also, lass dein Ladegerät zurück und reise mit Zuversicht zu deinem nächsten Rennen, Spiel oder Familienurlaub.',
      descKeyword: 'werden'
    },
    night: {
      title: 'Erhelle den Nachthimmel',
      desc: 'Der Nachtmodus ist unser "Always-on"-Modus für nächtliche Aktivitäten. Er lässt die Hintergrundbeleuchtung für die gesamte Dauer deines Trainings an. Das Licht ist hell genug, damit sich deine Augen darauf einstellen und im Dunkeln lesen können, aber schwach genug, um die Batterieleistung während deines Laufs oder deiner Fahrt aufrechtzuerhalten, auch wenn du die ganze Nacht brauchst. Keine Sorge, sie schaltet sich automatisch aus, wenn du dein Training beendest, oder eine Stunde nach Sonnenaufgang.'
    },
    laps: {
      title: 'Runden an Land oder im Meer',
      desc: 'Egal, ob du im Schwimmbad schwimmst oder im Meer trainierst, mit einer Wasserdichtigkeit von 50 Metern kannst du den COROS PACE 2 tragen, um deine Aktivitäten im Wasser und an Land zu verfolgen.'
    },
    possibilities: {
      title: 'Neue Möglichkeiten',
      desc: 'Mit einer Gewichtsreduzierung von etwa 50 % gegenüber dem Silikonband ist das COROS Nylonarmband atmungsaktiver und bietet neue Farboptionen, die dir unendlich viele Möglichkeiten geben, dein persönliches Statement zu setzen. Die Nylonbänder sorgen außerdem für einen bequemeren und engeren Sitz, was die ohnehin schon hohe Genauigkeit der Herzfrequenzmessung noch weiter verbessern dürfte, insbesondere bei langen, schweißtreibenden Trainingseinheiten an warmen Tagen.'
    },
    athlete: {
      title: 'Etwas für jeden Athleten',
      desc: 'COROS PACE 2 ist vollgepackt mit den Sportmodi, nach denen du schon lange gesucht hast. Teste den neuen Kraftmodus, erforsche die Genauigkeit des Bahnlaufmodus oder werde ruhig nass mit dem neuen Flachwassermodus.'
    },
    trainer: {
      title: 'Dein neuer Personal Trainer',
      desc: 'Der Kraftmodus bietet dir über 200 Übungen und wird stets weiterentwickelt, damit du deinen Körper gezielt trainieren kannst. Die COROS PACE 2 erkennt deine Körperbewegungen und misst deine Herzfrequenz, um den Kalorienverbrauch zu berechnen.'
    },
    muscleHeatmap: {
      title: 'Muskel-Heatmap',
      desc: 'Wenn du fertig bist, kannst du dir mit der neuen Muskel-Heatmap ansehen, welche Muskelgruppen auf Tages-, Wochen- oder Monatsbasis am stärksten beansprucht wurden, um deinen nächsten Trainingsblock zu planen.'
    },
    learn: {
      title: 'Von den Besten lernen und teilen',
      desc: 'Hast du ein Workout, das du liebst? Behalte es nicht für dich, sondern teile es mit deinen Freunden mit einem Fingertipp in der COROS-App. Wir haben vorgefertigte Workouts und Trainingspläne von COROS-Athleten und ihren Trainern kostenlos auf COROS.com verfügbar. Lade sie einfach herunter, um dein nächstes Workout zu starten.'
    },
    follow: {
      title: 'Folge deinem Herzen',
      desc: 'Nicht jede Aktivität bringt dein Blut auf die gleiche Weise in Wallung. Leichte Läufe sind gleichmäßiger, während es bei Intervalltraining und Gewichtheben mehr Höhen und Tiefen gibt. COROS hat einzigartige Herzfrequenz-Algorithmen für jeden Aktivitätsmodus entwickelt, um dir die beste Herzfrequenzgenauigkeit am Handgelenk zu bieten.'
    },
    track: {
      title: 'Jede Sekunde zählt',
      mobileTitle: 'Bleib auf der Strecke',
      desc: 'Eine Standardstrecke ist 400 m lang. Warum können GPS-Geräte das nicht richtig machen? Mit dem neuen Track Run Mode von COROS wird ein eigener Algorithmus verwendet, der so genau ist wie eine Stoppuhr, um sicherzustellen, dass deine Bahnläufe und Trainings genau gemessen werden, egal welche Spur du wählst. Vorbei sind die zufälligen Zickzackkurse über das Feld oder scharfe Kurven, stattdessen gibt es jetzt die sanften Geraden und Kurven der Bahn – genau wie du läufst.'
    },
    smart: {
      title: 'Kraftvoll UND intelligent',
      desc: 'Die COROS-Uhren bieten alles, was du von einer GPS-Sportuhr erwartest, und zusätzlich einige der begehrtesten Aspekte einer Smartwatch, wie z. B. Telefonbenachrichtigungen, Anrufer-ID, Schlaftracking und Fitnesslevel-Analyse.'
    }
  },
  title: 'COROS PACE 2 GPS-Uhr',
  desc: 'Unsere leichteste Uhr für Multisportler, die schnell und weit laufen.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/terms.js
/* harmony default export */ const de_terms = ({
  termsofservice: 'NUTZUNGSBEDINGUNGEN',
  lastUpdate: 'Letzte Aktualisierung: 7. Oktober 2020',
  baseTOS: 'Diese Nutzungsbedingungen ("Bedingungen") regeln deine Nutzung der COROS-Produkte, unserer Websites, einschließlich www.coros.com, der in COROS-Geräte eingebetteten Software, der COROS-Software, der COROS-Mobilanwendungen und anderer COROS-Dienste (zusammenfassend der "COROS-Dienst").\nDu musst diese Bedingungen akzeptieren, um ein COROS-Konto zu erstellen und den COROS-Service zu nutzen. Wenn du kein Konto hast, akzeptierst du diese Bedingungen, indem du www.coros.com besuchst oder einen Teil des COROS-Dienstes nutzt. Wenn du eine dieser Bedingungen nicht akzeptierst, erstelle bitte kein COROS-Konto, besuche nicht www.coros.com und nutze den COROS-Service nicht.',
  whoCanUse: {
    title: 'Wer kann COROS nutzen?',
    desc: 'Um den COROS-Service nutzen zu können, musst du mindestens fünfzehn (15) Jahre alt sein. Wenn du mindestens fünfzehn (15) Jahre alt, aber an deinem Wohnort noch minderjährig bist, musst du die Bedingungen lesen und die Registrierung in deinem Namen von einem Elternteil oder Erziehungsberechtigten abschließen lassen, damit du den COROS-Service nutzen kannst. Die Person, die die Registrierung vornimmt, muss geschäftsfähig sein. Wenn du Fragen dazu hast, ob ein Produkt oder eine Anwendung als Autorisierte Verbindung gilt, wende dich bitte an info@coros.com'
  },
  account: {
    title: 'Registrierung und Login-Konto',
    desc: 'Damit du den COROS-Service in vollem Umfang nutzen kannst, musst du ein Konto erstellen, indem du uns eine gültige E-Mail-Adresse und ein sicheres Passwort mitteilst. Du kannst auch ein Konto erstellen oder dich über Konten Dritter anmelden. Gemäß der Vereinbarung für Drittanbieterkonten haben wir Zugriff auf deinen Benutzernamen, dein Vorschaubild und dein Geschlecht. Du bist für alle Aktivitäten verantwortlich, die in Verbindung mit deinem Konto stattfinden. COROS haftet nicht für Verluste oder Schäden, die dadurch entstehen, dass du es versäumst, die Sicherheit deiner Kontodaten zu gewährleisten.\nEs kann sein, dass wir dich bezüglich deiner Nutzung des COROS Service kontaktieren müssen. Diese Mitteilungen sind Teil des COROS-Dienstes und du kannst dich nicht dagegen entscheiden, sie zu erhalten. In deinen Kontoeinstellungen kannst du den Erhalt anderer Mitteilungen verwalten und abbestellen und deine E-Mail-Adresse auf dem neuesten Stand halten.'
  },
  equipment: {
    title: 'Erforderliche Ausrüstung',
    desc: 'Um den COROS-Service in vollem Umfang nutzen zu können, benötigst du einen Computer mit geeigneter Software oder ein unterstütztes Mobilgerät und einen Internetzugang. Die Wartung und Sicherheit dieser Geräte kann die Leistung des COROS-Dienstes beeinflussen und es liegt in deiner Verantwortung, die Funktionsfähigkeit der Geräte sicherzustellen. COROS haftet nicht für Verluste oder Schäden, die dadurch entstehen, dass du die Sicherheit deines Geräts nicht aufrechterhältst.'
  },
  disclaimers: {
    title: 'Haftungsausschlüsse',
    desc: 'Wir übernehmen keine Garantie dafür, dass der COROS-Service deinen Anforderungen entspricht oder ununterbrochen, sicher und fehlerfrei zur Verfügung steht. Wir übernehmen keine Garantie für die Qualität, Genauigkeit, Aktualität, Wahrhaftigkeit, Vollständigkeit oder Zuverlässigkeit des COROS-Dienstes. Wir übernehmen keine Garantie dafür, dass alle Fehler im COROS-Service rechtzeitig korrigiert und aktualisiert werden.\nDer COROS-Service ist nicht dazu gedacht, Krankheiten zu diagnostizieren, zu behandeln, zu heilen oder zu verhindern. Der gesamte "COROS-Inhalt" des COROS-Dienstes, einschließlich Text, Grafiken, Bilder, Musik, Software, Audio- und Videodateien, urheberrechtlich geschützte Werke jeglicher Art sowie Informationen und andere Materialien können nicht als Ersatz für Informationen und Ratschläge deines Arztes oder anderer Fachleute verwendet werden. Die COROS-Inhalte dürfen nicht für medizinische Zwecke oder auf Verpackungen oder Etiketten verwendet werden.\nWenn du an einer Krankheit oder einem Herzleiden leidest, konsultiere deinen Arzt, bevor du den COROS Service nutzt, ein Trainingsprogramm durchführst oder deine Ernährung umstellst. Wenn du einen medizinischen Notfall erlebst, höre auf, den COROS Service zu nutzen und konsultiere einen Arzt. Wir sind nicht verantwortlich für gesundheitliche Probleme, die aus Trainingsprogrammen, Beratungen, Produkten oder Veranstaltungen resultieren, von denen du über den COROS Service erfährst. Wenn du an einem Trainingsprogramm teilnimmst, das du über den COROS-Service erhältst oder über das du dich informierst, erklärst du dich damit einverstanden, dass du dies auf eigenes Risiko tust und freiwillig an diesen Aktivitäten teilnimmst.\nDu erklärst dich damit einverstanden, dass du für alle persönlichen oder materiellen Risiken verantwortlich bist, die mit deinen Aktivitäten verbunden sind, einschließlich, aber nicht beschränkt auf Radfahren, Laufen, Schwimmen oder die vom COROS-Service bereitgestellten Trainingspläne. COROS haftet nicht für Risiken in Bezug auf Personen- und Sachschäden.\nDu erklärst dich damit einverstanden, dass COROS nicht für Folgen haftet, die dadurch entstehen, dass du die SOS-Nachricht nicht versendest. Wir übernehmen keine Garantie dafür, dass die SOS-Nachricht unter allen Umständen versendet wird. Du erklärst dich damit einverstanden, dass die SOS-Nachricht während der Nutzung der COROS-Produkte vom Mobilfunknetz, der Wartung des Servers und anderen unvorhersehbaren Faktoren abhängt.\nDu erklärst dich damit einverstanden, dass der COROS-Dienst deine Informationen und Aktivitätsdaten auf Server Dritter hochlädt, die den Richtlinien Dritter unterliegen. Der COROS-Dienst kann dir die Möglichkeit bieten, dein COROS-Konto, deine COROS-Daten oder den COROS-Dienst mit Diensten Dritter zu verknüpfen. Obwohl wir diese Möglichkeit anbieten, erkennst du an, dass alle Dienste Dritter, die du in Verbindung mit dem COROS-Dienst nutzt, nicht Teil des COROS-Dienstes sind. Du nimmst zur Kenntnis, dass diese Bedingungen und die COROS-Datenschutzrichtlinie nicht für Drittanbieterdienste gelten. Du bist dafür verantwortlich, die Geschäftsbedingungen und die Datenschutzrichtlinie zu lesen und zu verstehen, die für deine Nutzung von Drittanbieter-Diensten gelten.'
  },
  UOS: {
    title: 'Nutzung der Dienste',
    desc: 'Die im COROS-Service enthaltenen Inhalte wie Texte, Grafiken, Bilder, Audio-, Video- und andere Materialien sowie die Domain-Namen, der Slogan und die Organisation sind durch das Urheberrecht, das Markenrecht und andere Gesetze in den Vereinigten Staaten und anderen Ländern geschützt und sind Eigentum von COROS oder werden von COROS kontrolliert. Die unbefugte Nutzung des COROS-Service kann gegen das Urheberrecht, das Markenrecht und andere Gesetze verstoßen.\nDu darfst nicht versuchen, dir mit unerlaubten Mitteln Zugang zu einem Teil oder einer Funktion des COROS-Dienstes oder zu anderen Systemen oder Netzwerken, die mit dem Dienst oder einem COROS-Server verbunden sind, oder zu einem der im oder über den Dienst angebotenen Dienste zu verschaffen.\nDu darfst den COROS-Service nicht für einen Zweck nutzen, der ungesetzlich oder durch diese Nutzungsbedingungen verboten ist, oder für andere Aktivitäten, die die Rechte von COROS oder anderen verletzen.\nDu verpflichtest dich, keine Geräte, Software oder Routinen zu verwenden, die das ordnungsgemäße Funktionieren des COROS Service oder die Nutzung des Service durch andere Personen beeinträchtigen oder zu beeinträchtigen versuchen.'
  },
  feedbackPolicy: {
    title: 'Feedback-Richtlinie',
    desc: 'Wenn du Kommentare, Ideen oder Feedback an COROS übermittelst, erklärst du dich damit einverstanden, dass COROS und seine Mitarbeiter diese ohne jegliche Einschränkung oder Entschädigung für dich verwenden dürfen. Wir verzichten nicht auf das Recht, ähnliche oder verwandte Ideen oder Rückmeldungen zu verwenden, die uns bereits bekannt sind, von COROS entwickelt wurden oder aus anderen Quellen als dir stammen. Du kannst uns über info@coros.com kontaktieren. Bitte sende uns kein Feedback ohne deine Erlaubnis. Unsere Feedback-Richtlinie ist ebenfalls Teil der Bedingungen.'
  },
  distribution: {
    title: 'Streitschlichtung',
    desc: 'Du erklärst dich damit einverstanden, dass alle Streitigkeiten zwischen dir und COROS, die sich aus diesen Nutzungsbedingungen, dem COROS-Service oder anderen COROS-Produkten oder -Dienstleistungen ergeben oder damit in Zusammenhang stehen (zusammenfassend als "Streitigkeiten" bezeichnet), durch das unten beschriebene Schiedsverfahren geregelt werden.\nGeltendes Recht: Die Nutzungsbedingungen und die Beilegung von Streitigkeiten unterliegen den Gesetzen des US-Bundesstaates Kalifornien unter Ausschluss der Kollisionsnormen und -prinzipien.\nInformelle Streitschlichtung: Wir möchten deine Anliegen ansprechen, ohne dass ein formeller Rechtsstreit notwendig ist. Bevor du eine Klage gegen COROS einreichst, erklärst du dich damit einverstanden, zu versuchen, die Streitigkeit informell zu lösen, indem du dich an info@coros.com wendest. Wir werden versuchen, den Streitfall informell zu lösen, indem wir uns per E-Mail mit dir in Verbindung setzen. Wenn ein Streitfall nicht innerhalb von 15 Tagen nach Einreichung gelöst wird, kannst du oder COROS ein formelles Verfahren einleiten.\nKeine Sammelklagen: Du kannst Streitigkeiten mit COROS nur auf individueller Basis lösen und darfst keine Ansprüche als Kläger oder Mitglied einer Gruppe in einer Sammel-, Sammel- oder repräsentativen Klage geltend machen. Sammelschlichtungen, Sammelklagen, Privatklagen und die Zusammenlegung mit anderen Schlichtungen sind im Rahmen dieser Vereinbarung nicht zulässig.\nVerjährung von Ansprüchen: Ungeachtet gegenteiliger gesetzlicher Bestimmungen müssen alle Ansprüche oder Klagegründe, die sich aus der Nutzung der COROS-Produkte oder des COROS-Dienstes ergeben oder damit in Zusammenhang stehen, innerhalb eines (1) Jahres nach Entstehen des Anspruchs oder Klagegrundes geltend gemacht werden, andernfalls ist der Anspruch oder Klagegrund dauerhaft verjährt.'
  },
  violation: {
    title: 'Verstoß gegen diese Nutzungsbedingungen',
    desc: 'Du nimmst zur Kenntnis und erklärst dich damit einverstanden, dass COROS jede Übermittlung oder Kommunikation zwischen dir und COROS über den COROS-Service aufbewahren darf und diese Daten auch offenlegen darf, wenn dies gesetzlich vorgeschrieben ist oder COROS feststellt, dass eine solche Aufbewahrung oder Offenlegung vernünftigerweise notwendig ist, um (1) einem rechtlichen Verfahren nachzukommen, (2) diese Nutzungsbedingungen durchzusetzen, (3) auf Ansprüche zu reagieren, dass solche Daten die Rechte anderer verletzen, oder (4) die Rechte, das Eigentum oder die persönliche Sicherheit von COROS, seinen Mitarbeitern, den Nutzern des COROS-Service und der Öffentlichkeit zu schützen.\nDu erklärst dich damit einverstanden, dass COROS nach eigenem Ermessen und ohne vorherige Ankündigung deinen Zugang zum COROS-Service beenden und/oder deinen zukünftigen Zugang zum COROS-Service sperren kann, wenn wir feststellen, dass du gegen diese Nutzungsbedingungen oder andere Vereinbarungen oder Richtlinien verstoßen hast, die mit deiner Nutzung des COROS-Service verbunden sein können. Du erklärst dich außerdem damit einverstanden, dass jeder Verstoß gegen diese Nutzungsbedingungen durch dich eine rechtswidrige und unfaire Geschäftspraxis darstellt und COROS einen nicht wiedergutzumachenden Schaden zufügt, für den ein finanzieller Schadenersatz unangemessen wäre, und du erklärst dich damit einverstanden, dass COROS jegliche Unterlassungs- oder Billigkeitsmaßnahmen ergreift, die COROS unter diesen Umständen für notwendig oder angemessen hält. Diese Rechtsmittel gelten zusätzlich zu allen anderen Rechtsmitteln, die COROS nach dem Gesetz oder nach dem Billigkeitsrecht zustehen.\nDu erklärst dich damit einverstanden, dass COROS nach eigenem Ermessen und ohne Vorankündigung deinen Zugang zum COROS-Service aus wichtigem Grund kündigen kann. Dazu gehören unter anderem (aber nicht ausschließlich) (1) Anfragen von Strafverfolgungsbehörden, (2) eine Anfrage von dir (selbst initiierte Kontolöschungen), (3) die Einstellung oder wesentliche Änderung des COROS-Service oder eines Dienstes, der im oder über den COROS-Service angeboten wird, oder (4) unerwartete technische Fragen oder Probleme.\nWenn COROS aufgrund eines Verstoßes gegen diese Nutzungsbedingungen rechtliche Schritte gegen dich einleitet, hat COROS das Recht, von dir alle angemessenen Anwaltsgebühren und Kosten für ein solches Verfahren zu verlangen, und du erklärst dich damit einverstanden, diese zusätzlich zu allen anderen COROS gewährten Rechtsbehelfen zu zahlen. Du erklärst dich damit einverstanden, dass COROS weder dir noch einem Dritten gegenüber für die Beendigung deines Zugangs zu den COROS-Diensten als Folge eines Verstoßes gegen diese Nutzungsbedingungen haftet.'
  },
  security: {
    title: 'Sicherheit; verlorene oder deaktivierte Geräte',
    desc: 'Du bist allein dafür verantwortlich, die Sicherheit deines COROS-Geräts zu gewährleisten. Du erklärst dich damit einverstanden, dass COROS keine Verantwortung trägt, wenn du dein COROS-Gerät verlierst oder den Zugang zu ihm teilst. Du erklärst dich damit einverstanden, dass COROS keine Verantwortung übernimmt, wenn du unbefugte Änderungen an deinem COROS-Gerät vornimmst.\nWenn dein COROS-Gerät verloren geht oder gestohlen wird, wende dich bitte an die örtliche Polizeibehörde. Du kannst dich auch an COROS wenden, um das Gerät zu sperren, damit es nicht mehr mit dem COROS Service synchronisiert und verbunden werden kann. Wende dich an support@coros.com, wenn du ein verlorenes COROS-Gerät gefunden hast oder dein COROS-Gerät aufgrund einer Falschmeldung fälschlicherweise gesperrt wurde. COROS behält sich das Recht vor, COROS-Geräte zu sperren, wenn (1) Nutzer gegen Vereinbarungen verstoßen, die COROS gemeinsam getroffen hat, oder (2) Nutzer betrügerische Bestellungen/Aktivitäten durchführen. Wenn du betrügerische oder missbräuchliche Aktivitäten meldest oder COROS diese vermutet, erklärst du dich bereit, bei allen Untersuchungen mit COROS zu kooperieren.'
  },
  orders: {
    title: 'Bestellungen',
    desc: 'COROS wird sich zwar nach Kräften bemühen, dir die in der Auftragsbestätigung aufgeführten Produkte und/oder Dienstleistungen zu liefern, es kann jedoch vorkommen, dass COROS diese Produkte und/oder Dienstleistungen nicht liefern kann, weil z. B. (1) diese Produkte oder Dienstleistungen nicht mehr hergestellt werden oder nicht mehr verfügbar sind, (2) COROS nicht in der Lage ist, die entsprechenden Komponenten zu beschaffen, (3) ein Preisfehler vorliegt oder (4) während des Bestellvorgangs böswillige Absichten/Praktiken vorliegen. In solchen Fällen setzt sich COROS mit dir in Verbindung und schlägt dir ggf. alternative Produkte oder Dienstleistungen vor, die du kaufen möchtest (zum gleichen oder einem anderen Preis). Im Falle eines Preisfehlers wird COROS dir den korrekten Preis mitteilen. Wenn du den von COROS vorgeschlagenen Ersatz oder die Preisänderung nicht akzeptierst, storniert COROS die Bestellung und erstattet dir alle Gelder zurück, die du für die Bestellung an COROS gezahlt hast. Die Rückzahlung solcher Gelder ist der Umfang der Haftung von COROS dir gegenüber, wenn COROS nicht in der Lage ist, die von dir bestellten Produkte und/oder Dienstleistungen zu liefern.\nCOROS behält sich das Recht vor, deine Bestellung zu stornieren, wenn eine betrügerische Handlung festgestellt wird. COROS wird dich informieren, wenn COROS deine Bestellung aus den oben genannten Gründen storniert. Alle von dir geleisteten Zahlungen werden dir zurückerstattet.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/athlete.js
/* harmony default export */ const de_athlete = ({
  pageTitle: 'COROS PRO ATHLETEN',
  mobilePageTitle: 'ENTDECKE DEINE INNERE INSPIRATION MIT DEN COROS PRO ATHLETEN',
  pageDesc: 'Das COROS Pro Team sind unsere Power-User der Spitzenklasse und leben dafür, das Unmögliche zu erforschen. Sie alle verwenden COROS-Produkte auf den härtesten Strecken der Welt. Und was noch wichtiger ist: Sie teilen die gleiche Leidenschaft, die besten Produkte für Athleten auf der ganzen Welt zu entwickeln. COROS ist außerdem stolz darauf, der offizielle GPS-Uhrenpartner des NN Running Teams zu sein.',
  trailAthletes: 'Trail-Sportler',
  roadAthletes: 'Straßensportler',
  alpineAthletes: 'Outdoor-Sportler'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/athleteDetails.js
/* harmony default export */ const de_athleteDetails = ({
  more: 'Mehr Athleten',
  athletes: 'Profisportler',
  dane_jackson: {
    name: 'Dane Jackson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Erstbegehung des Salto Maule Wasserfalls in Chile (134 ft)\n    7 Begehungen von Wasserfällen über 100ft\n    4x Gewinner der North Fork Championships\n    3x Gewinner des Whitewater Grand Prix\n    4x Gewinner des Green Race\n    3x Freestyle Weltmeister\n    Dutzende von Wettkampfsiegen auf der ganzen Welt\n    Streckenrekordhalter bei 3 Rennen\n    Er trägt ein COROS VERTIX 2',
    desc: 'Dane Jackson hat einige der besten Kajakrennen erlebt, die die Welt zu bieten hat. Kajakfahren ist Danes wahre Berufung, und das schon seit über 20 Jahren. Tennessee ist sein Zuhause, aber er verbringt mehr als 6 Monate im Jahr damit, zu den besten Orten für seinen Sport zu reisen. Er unternimmt häufig Expeditionen nach Mexiko, Neufundland, Kenia und Kanada. Seine Lieblingsflüsse sind der Sambesi, der Ottawa und der Nil. Seinem Vater Eric Jackson hat er es zu verdanken, dass er als Sportler so weit gekommen ist. Dane gilt als der beste Allround-Wildwasserkajakfahrer der Welt und hat mehr als 80 Medaillen bei Wettbewerben auf der ganzen Welt gewonnen. Sein Können und seine Entschlossenheit haben ihn an die Spitze gebracht.'
  },
  adrian_ballinger: {
    name: 'Adrian Ballinger',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Hat den Everest und den K2 ohne zusätzlichen Sauerstoff bestiegen\nErste Skiabfahrt vom Manaslu, dem achthöchsten Gipfel der Welt\nGründung von Alpenglow Expeditions\nSiebzehn Besteigungen von 8.000ern\nEinziger Amerikaner, der drei 8000er auf Skiern bezwang\nTrägt eine COROS VERTIX 2',
    desc: 'Adrian Ballinger ist ein großer Bergsteiger, Skifahrer und ein zertifizierter Bergführer. Adrian führt seit 25 Jahren professionell Gruppen auf die höchsten Berge der Welt und ist der Gründer von Alpenglow Expeditions, das jedes Jahr mehr als 6.000 Menschen zum Skifahren, Klettern und Bergsteigen nach Tahoe und in die ganze Welt bringt. Er hat über 150 internationale Kletterexpeditionen auf sechs Kontinenten geleitet und 17 Achttausender bestiegen, darunter 8 Gipfel des Mount Everest. Er ist bekannt als Pionier der Vorakklimatisierung für kommerzielle Expeditionen, mit der die Zeit, die man normalerweise auf einer Expedition verbringt, um die Hälfte reduziert wird. Als Sportler ist Adrian der einzige Amerikaner, der drei erfolgreiche Skiabfahrten von 8.000ern gemacht hat, darunter die erste Skiabfahrt vom Gipfel des Manaslu. Er ist außerdem der vierte Amerikaner, der sowohl den Mount Everest als auch den K2 ohne zusätzlichen Sauerstoff bestiegen hat. Vor kurzem hat Adrian nach einem Jahr konzentrierten Kletterns inmitten der Covid-Pandemie seine erste 8a/5.13b, Fall of Man in der Virgin River Gorge, geklettert. Adrian möchte sich in allen drei traditionellen Bergführerdisziplinen – Bergsteigen, Klettern und Skifahren – auszeichnen.'
  },
  kilian_journet: {
    name: 'Kilian Jornet',
    country: 'SPANIEN',
    countryIcon: 'spanien',
    achievement: '4 x UTMB-Meister\n5 x Hardrock Hundred Champion\n4 x Weltmeister im Skibergsteigen\n3 x Sky Running Weltmeister\nUnzählige bedeutende Aufstiegs-/Abstiegsrekorde und FKTs',
    desc: 'Es gibt wohl keinen besseren Allround-Bergsportler auf der Welt als Kilian Jornet. Er wuchs in den Pyrenäen auf und begann bereits im Alter von 3 Jahren, Berge zu besteigen. In seinen späten Teenagerjahren tauchte er in der Berg- und Traillaufszene auf und gewann 2007 seine erste von zehn Sky Running World Series. Im Jahr darauf gewann er den prestigeträchtigen UTMB zum ersten von drei Malen zwischen 2008 und 2011. Es gibt kaum ein größeres Berg- oder Traillaufrennen, das Kilian nicht gewonnen hat. Er war Champion der Western States, des Sierre-Zinal, des Pikes Peak Marathon, des Zegama, des Hardrock, des Marathon du Mont Blanc und vieler, vieler anderer.\nWas Kilian als Sportler vielleicht so besonders macht, ist, dass er nicht nur im Laufen, sondern auch im Skibergsteigen zur Weltspitze gehört. In dieser Disziplin tritt er seit 2002 an und hat dabei in jeder Altersklasse Europa- und Weltmeisterschaften gewonnen. Kilian lebt jetzt mit seiner Partnerin Emelie Forsberg und seinen beiden Töchtern in Norwegen.'
  },
  emelie_forsberg: {
    name: 'Emelie Forsberg',
    country: 'SCHWEDEN',
    countryIcon: 'schweden',
    achievement: '4 x SkyRunner World Series Champion\n6 x Medaillengewinner bei der Skibergsteiger-Weltmeisterschaft\n2 x Transvulcania-Meisterin\nFKT-Inhaberin auf dem Mont Blanc, dem Matterhorn, dem Grand Teton und mehreren anderen Berg- und Talrouten',
    desc: 'Emelie lebt in Norwegen und vertritt Schweden. Sie ist eine der erfolgreichsten Allround-Bergsportlerinnen der Welt – mit einem Schwerpunkt auf Trailrunning und Skibergsteigen. Ursprünglich hat sich Emelie vor allem als Bergsteigerin identifiziert, bevor sie aus reinem Vergnügen mit dem Laufen in den Bergen begann. Sie nahm 2009 an ihrem ersten ernsthaften Traillauf teil und gehört seitdem zu den Weltbesten auf Distanzen von einem vertikalen Kilometer bis zu 100 Meilen. Emelies Karriere als Skibergsteigerin begann ein paar Jahre später, als sie 2012 mit geliehenen Skiern an einem Rennen teilnahm und den 3. Platz erzielte. Seitdem hat sie bei mehreren Europa- und Weltmeisterschaftsrennen einen Platz auf dem Podium belegt.\nEmelie brachte im März 2019 mit ihrem Partner Kilian Jornet eine ihreTochter zur Welt und im April 2021 ihre zweite. Ab 2022 will sie wieder trainieren und Wettkämpfe auf höchstem Niveau bestreiten.'
  },
  emma_coburn: {
    name: 'Emma Coburn',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Weltmeisterin 2017 – 3.000 m Steeplechase\nSilbermedaillengewinnerin der Weltmeisterschaft 2019 – 3.000 m Steeplechase\nOlympia-Bronzemedaillengewinnerin 2016 – 3.000 m Steeplechase\n9 x USATF Nationaler Meister\n6 x NCAA All American',
    desc: "Emma stammt aus Crested Butte und Boulder, Colorado, und besuchte die University of Colorado, wo sie dreimalige nationale Meisterin und sechsmalige All American wurde. Als neunfache USATF-Nationalmeisterin in ihrer Paradedisziplin, dem 3.000-Meter-Steeplechase, hat Emma auf der Weltbühne alle Medaillen in der Tasche: Bronze bei den Olympischen Spielen in Rio, Silber bei den Weltmeisterschaften 2019 und 2017 die Goldmedaille und den Titel der Weltmeisterin. Emma trainiert mit dem Team Boss und wird von ihrem Mann Joe Bosshard betreut, der sich schnell zu einem der besten Trainer des Landes entwickelte. Auch außerhalb der Leichtathletik ist Emma eine Inspiration und ein Vorbild für viele, da sie ihren Unternehmergeist mit ihren eigenen Aktivitäten unter Beweis stellt, darunter ein kürzlich veröffentlichtes Kochbuch und Emma Coburn's Elk Run 5k, mit dem sie beträchtliche Summen zur Unterstützung der Krebskranken in Gunnison County, Colorado, gesammelt hat."
  },
  emily_infeld: {
    name: 'Emily Infeld',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2015 Weltmeisterschaften 10.000 m – 3. Platz\n2016 Olympiateilnehmerin 10.000 m\n2017 Weltmeisterschaft 10.000m – 6. Platz\n11x All American \nNCAA-Meisterin',
    desc: 'Emily hat einen beachtlichen Lebenslauf, der bis in ihre Highschool-Zeit in Ohio zurückreicht, wo sie Landesmeisterin und Landesrekordhalterin auf der Meile war. Im College in Georgetown wurde sie 2012 NCAA-Meisterin über 3 km, war 11-mal All-American und führte das Langlaufteam 2011 zum nationalen Titel. Auch nach ihrer College-Karriere gab es viele Höhepunkte, der größte vielleicht ihre Bronzemedaille über 10.000 m bei den Weltmeisterschaften 2015 in Peking. Emily ist Olympiateilnehmerin 2016 und vertrat die USA erneut bei den Weltmeisterschaften 2017, wo sie als beste Amerikanerin auf Platz 6 landete.'
  },
  eliud_kipchoge: {
    name: 'Eliud Kipchoge',
    country: 'Kenia',
    countryIcon: 'kenia',
    achievement: 'Weltrekordhalter – Marathon (2:01:09) – Berlin 2022\nErster und einziger Unter-2-Stunden-Marathonläufer – (1:59:40) – Wien 2019\n10 x World Marathon Major Champion\n2 x World Championship Medalist\n3 x Olympic Medalist\nHusband, Father of Three',
    desc: 'Eliud Kipchoge trainiert mit dem Mantra "Kein Mensch ist begrenzt" und das hat er in seiner Wettbewerbkarriere mehrfach bewiesen. Im Alter von 18 Jahren gewann Eliud Kipchoge eine WM-Medaille über 5.000 m und holte noch drei weitere Medaillen auf dieser Distanz. Im Jahr 2013 zeigte Eliud jedoch zum ersten Mal, was in der Zukunft auf ihn zukommen würde, als er bei seinem ersten Marathonlauf den Streckenrekord brach und gewann. Es ist kaum zu glauben, was dann folgte: 11 offizielle Marathonsiege, darunter 8 Marathon-Majors und die Olympischen Spiele, zwei Streckenrekorde beim London-Marathon und natürlich sein Weltrekordlauf beim Berlin-Marathon 2018 (bei dem er auch die Weltrekorde über 30 km, 35 km und 40 km brach). Trotz all dieser Errungenschaften wird seine vielleicht größte Leistung als Läufer nicht erwähnt: Eliud ist der erste und einzige Mensch, der die Marathondistanz in unter 2 Stunden gelaufen ist – mit der Weltbestzeit von 1:59:40 bei der INEOS Challenge auf einer geschlossenen Strecke in Wien (Österreich) im Oktober 2019. Eliud war 2018 die kenianische Person des Jahres der Vereinten Nationen und 2018 und 2019 IAAF (jetzt WAF) Male Athlete of the Year. Nicht zuletzt ist Eliud auch Ehemann und Vater von drei Kindern und lebt und trainiert in der Nähe von Eldoret, Kenia.'
  },
  molly: {
    name: 'Molly Seidel',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Olympische Bronzemedaillengewinnerin (Tokio 2020)\nPlatz 4 beim NYC Marathon 2021, schnellste Amerikanerin aller Zeiten (2:24:42)\n4x NCAA-Meisterin\n6x NCAA All-American',
    desc: 'Molly Seidel ist der Inbegriff von Kampfgeist und Ausdauer. In ihrem allerersten Marathonlauf belegte Molly bei den U.S. Olympic Trials 2020 den zweiten Platz und sicherte sich so ihren Platz im Team USA, in dem sie in Tokio die Bronzemedaille gewann. Molly ist das Rampenlicht nicht fremd: Sie war Foot Locker Cross Country Champion in der High School und 4-fache NCAA Champion an der University of Notre Dame. Trotz ihrer Erfolge ist sie für ihre bodenständige Persönlichkeit, ihren Humor und ihre Liebe zu Donuts und Craft Beer bekannt. Heute trainiert sie in Flagstaff, AZ, beim Verde Track Club.'
  },
  desiree_linden: {
    name: 'Desiree Linden',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Boston-Marathon-Siegerin 2018\nZweimalige Olympiateilnehmerin\n9 Top-5-Platzierungen bei den World Marathon Majors\nZweimaliger Zweiter bei den US Marathon Trials\nKaffee-Aficionado & Besitzer von Linden X Two\nWhiskey-Kenner. Musik-Junkie. Bücherfreak. Weltreisende.',
    desc: 'Im April 2018 trotzte Des Linden dem Gegenwind und sintflutartigen Regenfällen und wurde die erste US-Frauenmeisterin beim Boston Marathon seit 1985. Ihr Sieg ging in die Rekordbücher ein, da sie das Feld und die schlechtesten Bedingungen in der Geschichte des Rennens hinter sich ließ. Des ist zweifache US-Olympia-Marathonläuferin und belegte bei den Olympischen Spielen in Rio den 7. Platz. Sie begann ihre Laufkarriere an der Hilltop High School in San Diegos Vorort Chula Vista, Kalifornien, wo sie mit der All-State-Auszeichnung geehrt wurde. Linden besuchte die Arizona State University, wo sie sowohl beim Crosslauf als auch in der Leichtathletik All-American war. Nach ihrem Abschluss zog sie nach Rochester, Michigan, um sich dem Hansons Brooks Distance Project anzuschließen. Im Jahr 2019 kehrte Des zum Boston Marathon zurück und belegte den 5. Platz. Später im Herbst führte sie das Feld des NYC Marathons über den Halbmarathon in 1:11:40 Stunden an und beendete den Lauf als beste Amerikanerin mit der viertschnellsten Zeit in der Geschichte auf dem historischen Kurs durch fünf Stadtteile auf dem 6. Platz. Zu ihren Hobbys gehören Lesen und Schreiben, das Sammeln verschiedener Whiskeys, das Trinken von Linden X Two Coffee, das Werfen der ersten Würfe bei Baseballspielen der Major League, Entspannen mit ihren Hunden, Musikhören und das Überholen ihres Mannes, des Marathonläufers und Kona-Veteranen Ryan Linden.'
  },
  grayson_murphy: {
    name: 'Grayson Murphy',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '5 x NCAA All-American an der Universität von Utah \n2. Amerikanerin 2019 Boilermaker 15k \nSchulrekordhalterin der University of Utah – 3k Steeple, 5.000m (Indoor und Outdoor), 10.000 m',
    desc: 'Grayson trainiert in ihrer Heimatstadt Salt Lake City, Utah, und ist Mitglied des Idaho Distance Project. Sie konzentriert sich hauptsächlich auf Straßen- und Trailläufe. Grayson hat 2018 ihr Studium an der University of Utah mit einem Bachelor of Science in Bauingenieurwesen abgeschlossen und war 5x All-American in Cross Country und Track. Zu ihren Bestleistungen auf der Bahn gehören 32:28 im 10 km-Lauf, 15:44 im 5 km-Lauf und 9:44 im Hindernislauf. Kürzlich belegte Grayson beim Boilermaker 15k in Utica/NY, den zweiten Platz unter den Amerikanern. Für die Zukunft hofft Grayson, alle ihre Bestzeiten zu verbessern und an einer Vielzahl von Trail-, Berg-, Straßen- und Crossläufen teilzunehmen.'
  },
  emma_bates: {
    name: 'Emma Bates',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2019 Chicago Marathon - 1. Amerikanerin\n2019 USA-Marathon-Meisterin\n12 x NCAA D1 All-American\n2014 NCAA DI 10.000m Meisterin',
    desc: 'Emma trainiert in Boise/Idaho, und ist Mitglied des Idaho Distance Project. Sie konzentriert sich vor allem auf Mittel- und Langstreckenläufe auf der Straße. Emma hat ihren Abschluss an der Boise State University gemacht, wo sie 12 Mal All-American in der NCAA Division 1 war und 2014 NCAA-Meisterin im 10.000-Meter-Lauf wurde. Seitdem hat Emma die US-Marathonmeisterschaften der Frauen 2018 gewonnen und wurde beim Chicago Marathon 2019 mit einer persönlichen Bestzeit von 2:25:27 Vierte. Emmas freigeistige Einstellung hat sie zu einer der besten Läuferinnen Amerikas gemacht, die eine vielversprechende Zukunft vor sich hat.'
  },
  parker_stinson: {
    name: 'Parker Stinson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '2019 US-Rekordhalter über 25 km\n2019 Chicago Marathon - (1. Amerikaner)\n9 x NCAA D1 All-American',
    desc: 'Parker, der US-Rekordhalter über 25 km, wohnt in Boulder/Colorado. Er ist neunfacher All-American der University of Oregon, wo er bei den NCAA-Meisterschaften zwei Mal den dritten Platz über 5.000 Meter belegte. In seiner Jugend war Parker dreimaliger Juniorenmeister (U19) über 10.000 m. Zu seinen jüngsten Erfolgen gehören der Gewinn der USATF 25km-Meisterschaft 2019 und der Sieg als bester Amerikaner beim Chicago Marathon 2019 mit einer persönlichen Bestzeit von 2:10:53. Mit der Hilfe von COROS hofft Parker, weiterhin über seine Grenzen hinauszuwachsen und ein noch stärkerer Athlet zu werden.'
  },
  reed_fischer: {
    name: 'Reed Fischer',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '20. schnellster Halbmarathon in der amerikanischen Geschichte\nBester Amerikaner beim Aramco Houston Halbmarathon 2019\n4. Platz bei den USATF 10.000m\nMeisterschaften Zweimaliges Mitglied des Team USA',
    desc: 'Reed stammt ursprünglich aus Minnesota und lebt und trainiert derzeit bei Tinman Elite in Boulder, Colorado. Als Gründungsmitglied des aufregenden jungen Teams entdeckte Reed seine Vorliebe für längere Strecken auf der Straße. Als selbst so bezeichneter Spätzünder beendete er seine Karriere an der Drake University mit einem 9. Platz bei den NCAA-Meisterschaften 2017. Reed, der zum ersten Mal in das First Team All-American gewählt wurde, hat sich zu einem der vielversprechendsten Läufer der Nation gemausert. Mit nur 24 Jahren stellte Reed eine persönliche Halbmarathon-Bestzeit von 1:01:37 auf und plant, diesen Schwung in seine Marathon-Karriere mitzunehmen.'
  },
  coree_woltering: {
    name: 'Coree Woltering',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: '1. Superior Spring 50k 2019\n2. American River 50m & Quick Silver 50k 2018\n4. Superior 100 Mile 2018\nIce Age Trail (1147 Meilen) FKT 2020',
    desc: 'Coree lebt und trainiert in Ottowa, Illinois, ein seltener Elite-Ultraläufer aus dem Mittleren Westen. Obwohl er jetzt die längeren Strecken bevorzugt, begann er seine Laufkarriere mit 400- und 800-Meter-Läufen auf der Bahn – so ist er für jede Distanz und jeden Untergrund gerüstet. Bevor er sich 2014 für seinen ersten Marathon anmeldete, lief Coree gerade einmal 16 Meilen, aber er erreichte bei seinem Debüt eine sehr respektable Zeit von 2:37. Ein Jahr später gewann er jeden Trail Ultra, an dem er teilnahm. Ein paar Jahre später, im Jahr 2018, wurde er 25. bei den berüchtigten Western States. Bei seinem letzten Erfolg stellte Coree einen FKT auf dem Ice Age Trail auf und absolvierte die 1147 Meilen lange Strecke in nur 21 Tagen, 13 Stunden und 35 Minuten. Neben dem Laufen ist Coree auch Vater, Fallschirmspringer und ein Vorbild für alle, die sich für Vielfalt in der Outdoor-Welt einsetzen.'
  },
  john_kelly: {
    name: 'John Kelly',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: 'Sieger des Barkley Marathons 2017\n2018 ITU Langstrecken-Weltmeister in der Altersklasse\n2020 Spine Champion\nErster, der "The Grand Round" in Großbritannien absolvierte\nGuinness-Weltrekord für den "Schnellsten Marathon als Videospielfigur gekleidet" (Boston Marathon 2016)',
    desc: 'John ist spezialisiert auf bergige, mehrtägige Veranstaltungen wie die Barkley Marathons, The Spine Race, Tor Des Geants und lange FKTs wie sein jüngstes Projekt "Grand Round", das alle drei großen Fjälllaufrunden in Großbritannien miteinander verbindet. Er wuchs in East Tennessee auf, wo seine Liebe zu den Bergen begann, und lebt derzeit mit seiner Frau und seinen vier Kindern in Großbritannien, wo er als CTO und Mitbegründer eines Tech-Startups tätig ist. John wird weiterhin die Berge und seine eigenen Grenzen erforschen und sich selbst mit Zielen herausfordern, die an seine Grenzen gehen. Er hofft, dass er diese Leidenschaft an seine Kinder und andere weitergeben kann - und so die Wertschätzung und den Erhalt von wilden Orten und den Wert, den sie für unsere Gesellschaft haben, fördert.'
  },
  camille_herron: {
    name: 'Camille Herron',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: "3-fache Qualifier für die Olympic Marathon Trials ('08, '12, '16)\n2 x Weltmeisterin (50K, 100K)\nMeisterin im Comrades Marathon 2017\n100-Meilen-Trail-Bestzeit, 12:42:40\n4 Weltrekorde (50 mi, 12 h, 100 mi, 24 h)\n8 amerikanische Rekorde",
    desc: "Camille etabliert sich als die schnellste Ultraläuferin aller Zeiten über viele Distanzen und Untergründe. Ihre Geschwindigkeit, Vielseitigkeit, Zähigkeit und ihr Talent zu gewinnen machen sie zu einer Legende in diesem Sport. Sie wird von ihrem Mann Conor trainiert und lebt mit ihren Schäferhunden Hawi und Winny in Warr Acres, Alamosa/CO. Sie ist Trainerin, Forschungsassistentin am OUHSC, öffentliche Rednerin und Botschafterin und seit 2012 Sekretärin des USATF Women's Long Distance Running Committee."
  },
  hayden_hawks: {
    name: 'Hayden Hawks',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: '2016 Speedgoat 50km - 1. Platz\n2016/2017 TNF SF 50mile - 2./3. Platz\n2017 CCC 100km - 1. Platz und CR\n2018 Lavaredo Ultra Trail 120km - 1. Platz\nZion Traverse Fastest Known Time (FKT) 48 Meilen',
    desc: 'Professioneller Ultra-/Bergsportler aus Cedar City/Utah. Hayden verbringt seine Tage am liebsten damit, die Berge, Canyons und Wüsten in den Nationalparks und öffentlichen Gebieten in der Nähe seiner Heimat im Süden Utahs zu erkunden. Außerdem liebt er es, mit den beiden Menschen, die ihm am meisten bedeuten - seiner Frau und seinem kleinen Sohn - zu reisen und die Welt zu sehen. Er hat sich im Laufe der Jahre auf alle Laufdisziplinen spezialisiert, darunter Leichtathletik, Crosslauf, Straßenlauf, Berglauf und jetzt auch Ultramarathon. Er liebt das Laufen und alles, was damit zu tun hat.'
  },
  tim_tollefson: {
    name: 'Tim Tollefson',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: '2014 US 50k Trail National Champion\n2016 UTMB, 3. Platz\n2017 UTMB, 3. Platz\n2017 Ultra Trail Australia-Meister',
    desc: 'Tim Tollefson ist ein Bergsportler, der mit seiner reizenden Frau Lindsay in Mammoth Lakes/Kalifornien, lebt. Nach einer erfolgreichen Laufkarriere auf der Straße, bei der er sich zweimal für die Olympischen Spiele qualifizierte, wechselte Tim zum Trailrunning. In nur drei Jahren gewann er 2014 den USATF 50k Trail National Title, vertrat das Team USA bei den IAU Ultra Trail World Championships, gewann den Ultra Trail Australia und belegte zweimal den dritten Platz beim weltberühmten Ultra Trail du Mont Blanc (UTMB), dem härtesten und anspruchsvollsten 100-Meilen-Ultramarathon des Jahres. Tim arbeitet außerdem hauptberuflich als Physiotherapeut für die aktive Bevölkerung in der Eastern Sierra und für Gastsportler. Für die Zukunft hofft Tim, sich als Spitzensportler in den Bereichen Trailrunning, Skibergsteigen und Hochgebirgssport weiterzuentwickeln und gleichzeitig mit einer größeren Anzahl von Teilnehmern weltweit in Kontakt zu treten, um durch sauberen Sport die lebenslange Freude an Aktivitäten in den Bergen zu fördern.'
  },
  magda_boulet: {
    name: 'Magda Boulet',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: 'Marathon-Zweite der Olympischen Trials 2008\nMarathon PB 2:26.22 (Rotterdam 2010)\n2015 Meisterin der Weststaaten \n2017 Western States Vizemeisterin \n2017 Terewara 102k Runner Up',
    desc: 'Magda wuchs in Polen auf und wanderte 2001 in die USA ein, wo sie im selben Jahr die Staatsbürgerschaft erhielt. Sie erwarb einen Bachelorabschluss in Biodynamik an der UC Berkeley und einen Master-Abschluss in Trainingsphysiologie an der Cal State Hayward. Als Trainerin des legendären Jack Daniels hat Magda sowohl auf der Straße als auch auf dem Trail große Erfolge gefeiert. Mit ihrem zweiten Platz bei den Olympic Trials qualifizierte sich Magda für die Olympischen Spiele 2008 in Peking. Mit ihrer Marathon-Bestzeit von 2:26,22 Stunden, die sie 2010 beim Rotterdam Marathon aufstellte, liegt sie immer noch auf Platz 11 der US-Frauen über die 26,2-Distanz. Im Jahr 2013 wechselte Magda zum Trail- und Ultralauf und gewann nur zwei Jahre später den prestigeträchtigen Western States 100 bei ihrem ersten Test auf dieser Distanz. Eine Reihe weiterer starker Leistungen brachte ihr 2015 die Auszeichnung "North American Ultra Runner of the Year" ein. Magda lebt mit ihrem Mann Richie und ihrem Sohn Owen in Oakland, Kalifornien. Wenn sie nicht gerade an Wettkämpfen teilnimmt, ist sie bei GU Energy Labs für Innovation und Produktentwicklung zuständig.'
  },
  sally_mcrae: {
    name: 'Sally McRae',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: '10x Ultramarathon champion\n20x Podium finisher worldwide\n2x Western States 100 Top 10 Finisher',
    desc: 'Sally McRae ist eine abenteuerlustige Ehefrau und Mutter von zwei Kindern. Sie ist professionelle Trailläuferin, die Berge auf der ganzen Welt erklimmt, und arbeitet nebenbei als Trainerin, Autorin und Rednerin, um andere zu ermutigen, das Leben in vollen Zügen zu genießen.'
  },
  hillary_allen: {
    name: 'Hillary Allen',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: 'Sieg beim Cortina Trail Rennen 2018\nStreckenrekord, TNF Endurance Challenge Chile 80km 2018\nPlatz 2 in der World Sky Running Ultra-Rangliste 2017\nStreckenrekord, Maderia Skyrace 2017\nTransvulcania 3. Platz 2017\nUSA Berglauf-Team 2016\n3. Platz, Ultra Skyrunning World Series 2016\nStreckenrekord, TNF Cortina Trail 2016\nUS Sky Running Ultra-Meister 2015\nStreckenrekord, Speedgoat 50k 2015',
    desc: 'Die Leute nennen Hillary Allen nicht umsonst die "Bergziege". Sie hat schnell bewiesen, dass sie eine schnelle Läuferin in den Bergen ist. Ursprünglich war sie Tennisspielerin und begann erst während ihres Studiums der Neurowissenschaften mit dem Langstreckenlauf, weil sie ein Ventil brauchte, um den Kopf frei zu bekommen. Sie schloss sich mit ein paar lokalen Läufern zusammen und erreichte schnell Podiumsplätze bei Langstreckenläufen. Seitdem nimmt sie an Rennen auf der ganzen Welt teil, bei denen sie immer wieder Podiumsplätze und Streckenrekorde erzielt und dabei ihre bescheidene Einstellung und ihren großartigen Sinn für Humor beibehält.'
  },
  sage_canaday: {
    name: 'Sage Canaday',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: '2-fache US-Olympiaqualifikantin im Marathon \n3-fache Speedgoat 50km-Meisterin \n3-fache USATF Nationale Meisterin (100km Trail, Berglauf und Trail Marathon) \n2-facher Tarawera 100-km-Meister \n2-facher Lake Sonoma 50-Meilen-Meister \nSieger der The North Face 50-mile Endurance Challenge San Francisco \n2014 Weltmeister auf der Berg-Langstrecke (Pikes Peak-Besteigung in 2:10)',
    desc: 'Sage ist ein "Berg-Ultra-Trail"- oder "MUT"-Läufer seit 2012, als er nach Boulder/Colorado zog. Zuvor lief er hauptsächlich auf der Straße und auf der Bahn, wo er 2007 im Alter von 21 Jahren der jüngste Qualifikant bei den US Olympic Marathon Trials war. Nachdem er 2012 auf die Trails und Berge gewechselt war, wurde er US-Berglaufmeister und ein paar Jahre später fügte er seiner Liste der nationalen US-Titel auch die 100-km-Trail- und Marathon-Trail-Events hinzu. Auf internationaler Ebene gewann er zweimal die Tarawera 100 km in Neuseeland und wurde 2014 Weltmeister im Langstreckenberglauf am Pikes Peak. Außerdem gewann er das prestigeträchtige North Face Endurance Challenge 50-Meilen-Rennen in San Francisco und ist dreimaliger Gewinner des Speedgoat 50 km. In Zukunft möchte Sage bei den besten Berg-Ultra-Trail-Rennen der Welt antreten.'
  },
  cody_reed: {
    name: 'Cody Reed',
    country: 'Vereinigte Staaten',
    countryIcon: 'usa',
    achievement: '2014 NCAA Cross Country Nationals \n2014 Big Sky Indoor Conference Championships (in Flagstaff) 3k Platz 2 \n2016 Tamalpa Headlands 50k 1. Platz \n2017 Way Too Cool 1. Platz \n2018 Western States 7. Platz',
    desc: 'Cody Reed lebt und trainiert auf den Bergen und in den Canyons rund um Flagstaff/Arizona, mit den Coconino Cowboys. Er läuft seit der Mittelschule bei Wettkämpfen mit, aber erst 2016 entschied sich Cody, ein Trail-Rennen auszuprobieren, und seitdem hat er nicht mehr zurückgeblickt. Cody konnte die Welt bereisen, um das zu tun, was er liebt, und um zu verbreiten, wie toll Trailrunning und Rennen sind.'
  },
  harry_jones: {
    name: 'Harry Jones',
    country: 'Vereinigtes Königreich',
    countryIcon: 'kingdom',
    achievement: '',
    desc: 'Harry begann als Jugendlicher mit dem Laufen auf der Bahn, bevor er schließlich in die Welt des Ultratrailrennsports wechselte. In den letzten 2 Jahren hat er sich vor allem auf die 100-km-Distanz konzentriert und stand bei mehreren internationalen Rennen auf dem Podium, darunter der dritte Platz beim Tarawera Ultramarathon, dem Cappadocia Ultra-Trail und dem Ultra-Trail Australia. In seiner Freizeit arbeitet Harry als Lauftrainer und YouTuber und dokumentiert sein Training und seine Rennen auf der ganzen Welt. Derzeit trainiert er für seine bisher größte Herausforderung - seinen ersten 100-Meilen-Lauf beim UTMB im August 2019.'
  },
  zach_bitter: {
    name: 'Zach Bitter',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Welt- und amerikanischer Rekordhalter\nNationaler Meister 2012 und 2015 (50 Meilen)\n2014 Nationaler Meister (100 Meilen)\nJFK 50-Meilen-Lauf - 9. schnellste Zeit',
    desc: 'Zach Bitter ist ein extremer Ausdauersportler und Trainer. Zach hält den Weltrekord für 100 Meilen (11 Stunden 19 Minuten 13 Sekunden) und 12 Stunden (104,88 Meilen). Zach ist auf der ganzen Welt Rennen gelaufen und hat das Team USA dreimal bei den 100-km-Weltmeisterschaften vertreten. Wenn er nicht auf der Straße oder der Bahn unterwegs ist, ist Zach gerne auf Trails aktiv. Er hat sowohl den Javelina 100 Meilenlauf als auch den San Diego 100 Meilenlauf gewonnen.'
  },
  audrey_tanguy: {
    name: 'Audrey Tanguy',
    country: 'Frankreich',
    countryIcon: 'frankreich',
    achievement: '2019 Lavaredo Ultra Trail (Italien) - 2.\n2019 MIUT Ultra Trail de Madère - 3.\n2019 TransJeju Corée (50 km) - 1.\n2018 & 2019 Trace des Ducs de Savoie (74) - 1.\n2018 90 kms du Mont Blanc (74) - 2.',
    desc: 'Audrey Tanguy lebt in den französischen Alpen, wo sie trainiert, um eine der besten Trailrunnerinnen Europas zu werden. Ihre Erfolge als Trail- und Bergläuferin sind beeindruckend: Sie erreichte Podiumsplätze beim Marathon Du Mont-Blanc, beim Lavaredo Ultra Trail und zweimal beim Madeira Island Ultra Trail (MUIT). Das Außergewöhnlichste ist vielleicht, dass sie zweimalige Titelverteidigerin des UTMB-TDS ist. Mit ihrer Leidenschaft für Trailrunning hofft Audrey, ihre Titel weiterhin zu verteidigen und gleichzeitig neue Abenteuer zu erleben.'
  },
  scotty_hawker: {
    name: 'Scotty Hawker',
    country: 'Neuseeland',
    countryIcon: 'neuseeland',
    achievement: '5. Platz - 2019 Hongkong 100km, Hongkong\n1. Platz - 2019 Mt Solitary Ultra 45km, Australien\n3. Platz - 2019 Retezat Skyrace 28km, Rumänien\n3. Platz- 2019 Lavaredo Ultra Dolomiten, Italien \n2. Platz - 2019 Großglockner Ultra Trail 50km, Österreich \n3. Platz 2019 - UTMB, Frankreich\n1. Platz 2019 - Maesalong 10km, Thailand',
    desc: 'Scotty Hawker ist ein Trail- und Ultramarathonläufer aus Christchurch/Neuseeland. Derzeit verbringt er sechs Monate im Jahr damit, mit seiner Frau und seiner dreijährigen Tochter durch Europa zu reisen. Sie lieben es, neue Länder zu erkunden, und das gibt Scotty die Möglichkeit, bei einigen der weltweit wettbewerbsfähigsten Trail- und Ultramarathon-Veranstaltungen anzutreten. 2019 beendete Scotty eine großartige Rennsaison mit einem 3. Platz beim prestigeträchtigen Ultra Trail du Mont Blanc. Nach einem unglaublich herausfordernden Jahr 2018, in dem er den Sport fast aufgegeben hätte, war dies ein hart erkämpftes Ergebnis, das Scotty mit neuem Selbstvertrauen in die Saison 2020 gehen lässt. Scotty ist auch als Trainer tätig und hilft Athleten aus der ganzen Welt bei der Vorbereitung auf Trail- und Ultramarathon-Distanzrennen. Scotty liebt es, sein Wissen und seine Erfahrung im Trailrunning-Sport mit anderen zu teilen und findet, dass das Trainieren ihm einen Ausgleich zum Leben als Sportler bietet.'
  },
  tommy_caldwell: {
    name: 'Tommy Caldwell',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Erste freie Begehung der Dawn Wall des El Capitan Yosemite\nErste freie Besteigung der Dihedral Wall\nFreie Besteigung von The Nose in 11 Stunden\nGeschwindigkeitsrekord für die Nose in 1 Stunde 58 Minuten\nErstbegehung der Fitz Roy Traverse in Patagonien',
    desc: 'National Geographic nannte Caldwell "den wohl besten Allround-Felskletterer der Welt". Er ist auf der ganzen Welt geklettert und hat einige der härtesten Kletterrouten in den USA erschlossen. Ob die Dawn Wall, die Fitz Traverse oder der Geschwindigkeitsrekord in The Nose - Tommy ist nicht zu stoppen und beweist immer wieder, was möglich ist, wenn man den menschlichen Körper unter Druck setzt.'
  },
  john_price: {
    name: 'John Price',
    country: 'Kanada',
    countryIcon: 'kanada',
    achievement: '',
    desc: 'John Price ist ein Fotograf und Kletterer, der die letzten sechs Jahre damit verbracht hat, die ganze Welt zu bereisen, während er sich in Kanada niedergelassen hat.  In den letzten vier Jahren kletterte und fotografierte er Fels-, Eis- und Hochgebirgsklettereien in ganz Nordamerika, in den entlegenen Winkeln des Himalaya, im ländlichen Japan, bei Eisklettereien in China und in den kanadischen Rocky Mountains.  Derzeit lebt er in Canmore, Alberta, wo er als freiberuflicher Abenteuer-, Lifestyle- und Landschaftsfotograf arbeitet.'
  },
  luke_smithwick: {
    name: 'Luke Smithwick',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Ein Journalist bezeichnete den COROS Profi-Skibergsteiger und Alpinisten Luke Smithwick kürzlich als "einen der produktivsten Himalaya-Besteiger der letzten Zeit". Nach 73 Himalaya-Expeditionen in den letzten 9 Jahren konzentriert er sich auf die Erkundung des Gebirges mit Ski. Smithwick hat mehr als 30 ästhetische Erstbegehungen im Himalaya gemacht und dabei ein Wissen und einen Lebenslauf entwickelt, wie ihn nur wenige besitzen. Seine Heimat ist Victor/Idaho, am Fuße der Tetons.  Er kommt mit großen Plänen für die nächsten Jahre und darüber hinaus ins COROS Pro Team.'
  },
  hilaree_nelson: {
    name: 'Hilaree Nelson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: "Hilaree Nelson verbindet ihre Leidenschaft für Entdeckungen, Bergabenteuer und Skifahren und hat schon einige der exotischsten Gebirgsregionen der Welt bereist. Ihre Expeditionskarriere hat sie zu vielen Premieren in der Welt des Skibergsteigens geführt, darunter die Besteigung von zwei 8.000ern (Everest und Lhotse) in einem Zug, die erste Skiabfahrt auf Baffin Island, die erste amerikanische Besteigung und Skiabfahrt des Papsura-Gipfels in Indien und vor kurzem die erste Skiabfahrt vom vierthöchsten Gipfel der Welt, dem Lhotse. Sie ist Kapitänin des North Face Athlete Teams, eine aktive Klimaschützerin bei Protect Our Winters und eine begeisterte Befürworterin von Wildnisgebieten wie dem Arctic National Wildlife Refuge. Sie vertritt die Philosophie, dass diese verbleibenden wilden Orte sowohl für das Wohlergehen des Planeten als auch für die menschliche Psyche von großer Bedeutung sind. Kürzlich wurde Hilaree vom Men's Journal als eine der abenteuerlustigsten Frauen der letzten 25 Jahre und von National Geographic als Abenteurerin des Jahres 2018 ausgezeichnet. Hilaree ist außerdem Mutter von zwei wilden Jungs und findet ihren inneren Frieden in den San Juan Mountains in der Nähe ihres Zuhauses in Telluride/Colorado."
  },
  jim_morrison: {
    name: 'Jim Morrison',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Jim Morrison zementierte seinen Ruf als einer der größten Skibergsteiger aller Zeiten mit der Erstbefahrung des Lhotse Couloirs im Jahr 2018, einer der letzten verbliebenen erstklassigen Hochgebirgsskilaufstrecken der Welt. Schon Jahrzehnte vor dieser bahnbrechenden Leistung sammelte Morrison ein Leben lang Erfahrungen auf Skiern rund um den Globus. Von Chamonix über Alaska bis hin zum indischen Himalaya hat Morrison einige der anspruchsvollsten Gipfel der Welt bestiegen und befahren, darunter die Erstbefahrung des Papsura, eine neue Skiroute am Cho Oyu, sowie eine Gipfel- und Teilabfahrt des Mount Everest. Neben seiner Zeit in den Bergen ist Morrison auch ein erfolgreicher Unternehmer, der ein luxuriöses Hausbauunternehmen in Lake Tahoe besitzt und betreibt. Außerdem engagiert er sich als Vorstandsmitglied des örtlichen Flughafendistrikts für seine Gemeinde und für die gemeinnützige Umweltorganisation Protect Our Winters.'
  },
  jason_antin: {
    name: 'Jason Antin',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: 'Jason Antin, der in Neuengland geboren wurde und jetzt in Colorado zu Hause ist, widmet seine ganze Zeit dem Ziel, eine optimale Work-Life-Balance zu erreichen. Er hilft nicht nur dabei, eine Handvoll Start-Ups mit Outdoor-Fokus zu gründen, sondern verbringt auch einen Großteil seiner Zeit damit, als technischer Kletterführer für Alpenglow Mountain Guides und Denver Mountain Guiding zu arbeiten. Darüber hinaus ist er Kraft- und Konditionstrainer im Alpine Training Center in Boulder/Colorado, wo er seine Athleten auf die körperlichen und mentalen Strapazen der Berge vorbereitet. Außerhalb der Arbeitszeit lebt Jason mit seiner Frau Jenny und seiner 3-jährigen Tochter Avery in Golden, CO. Er genießt es, sich in den Bergen schnell zu bewegen, und zwar auf allen Untergründen, die Mutter Natur uns zur Verfügung stellt, egal ob es sich um Trails, Fels, Eis oder Schnee handelt.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/retail.js
/* harmony default export */ const de_retail = ({
  retailTitle: 'Händlersuche'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/privacy.js
/* harmony default export */ const de_privacy = ({
  privacyTitle: 'Datenschutzbestimmungen',
  title: 'DATENSCHUTZBESTIMMUNGEN',
  updateDate: 'Zuletzt aktualisiert: 15.08.2020',
  updateDesc: 'Diese Datenschutzrichtlinie erklärt, wie Informationen über dich von COROS Wearables Inc. ("COROS", "wir" oder "uns") gesammelt, verwendet und weitergegeben werden. Diese Datenschutzrichtlinie gilt für Informationen, die wir sammeln, wenn du unsere Produkte und Dienste, einschließlich unserer Websites und mobilen Anwendungen (zusammenfassend die "Dienste"), nutzt oder wenn du anderweitig mit uns interagierst. Einzelheiten zu den Wahlmöglichkeiten, die wir im Zusammenhang mit unseren Informationspraktiken anbieten, findest du weiter unten unter "Deine Wahlmöglichkeiten". Wenn du Fragen zu dieser Datenschutzrichtlinie hast, kontaktiere uns bitte unter info@coros.com.',
  infoTitle: 'Sammlung von Informationen',
  providedInfo: {
    title: 'Informationen, die du uns zur Verfügung stellst',
    desc: 'Wir sammeln Informationen, die du uns direkt über die Dienste oder auf andere Weise zur Verfügung stellst. Wir sammeln zum Beispiel Informationen, wenn du ein Konto erstellst, dein Profil aktualisierst, dich für unseren Newsletter anmeldest, unser Gerät für ein Training verwendest, deinen Trainingsverlauf mit unserem Server synchronisierst, einen Kauf tätigst, Kundensupport anforderst oder uns auf andere Weise Informationen zur Verfügung stellst. Zu den Informationen, die wir sammeln können, gehören dein Name, deine E-Mail-Adresse, deine Versand- oder Rechnungsadresse, deine Zahlungsmethode, dein Trainingsverlauf und alle anderen Informationen, die du uns zur Verfügung stellst.'
  },
  collectForService: {
    title: 'Informationen, die wir automatisch sammeln, wenn du die Dienste nutzt.',
    desc: '- Log-Informationen: Wir erheben Logdateien in Verbindung mit deiner Nutzung der Dienste, einschließlich des von dir verwendeten Browsertyps, der Zugriffszeiten, der aufgerufenen Seiten, deiner IP-Adresse und der Seite, die du besucht hast, bevor du zu unseren Websites navigiert hast.\n    - Geräteinformationen: Wir erfassen Informationen über den Computer oder das Mobilgerät, mit dem du auf unsere Dienste zugreifst, einschließlich des Hardwaremodells, des Betriebssystems und der Version, eindeutiger Gerätekennungen und Informationen über das Mobilnetz.\n    - Standortinformationen: Wir können mit verschiedenen Technologien Informationen über deinen Standort sammeln, z. B. indem wir aus der IP-Adresse deinen ungefähren Standort ableiten. Mit deiner Zustimmung können wir auch genauere Standortdaten über unsere mobile App erfassen.\n    - Nachdem du die COROS-App verwendet hast, um die Routine-Tracking-Daten und die Bewegung deines Geräts hochzuladen, werden die Daten auf den Server-Speicher hochgeladen und die hochgeladenen Daten umfassen Schritte, Kalorien, Herzfrequenz, Aktivitätszeit, Aktivitätsdaten und die Aktivitätsbahn. Du kannst den GPS-Schalter am Ende der Uhr ausschalten, dann kannst du deine Bewegungsdaten nicht mehr aufzeichnen und auf den Serverspeicher hochladen. Wenn du die Kartendarstellungsfunktion verwendest, senden wir deine Standortinformationen an den Anbieter des Kartendarstellungsdienstes, der deinen Standort entsprechend der Vereinbarung auf der Karte zeichnen und anzeigen kann; diese Anbieter dürfen diese Daten nicht weitergeben oder für andere Zwecke verwenden.\n- Um den COROS Training Hub zu nutzen, melde dich bitte mit denselben Zugangsdaten an, mit denen du dich auch in der COROS-App angemeldet hast. Wenn du einen Coaching-Zugang hast, kannst du Teams erstellen und andere Nutzer über Einladungslinks oder QR-Codes einladen, deinem Team beizutreten. Du hast die Möglichkeit, Datenschutzrechte festzulegen, um deine persönlichen Informationen und Trainingsdaten auf der Seite mit den persönlichen Informationen im COROS Training Hub zu verbergen oder deinem Team zu erlauben, sie einzusehen. Außerdem kannst du Datenschutzberechtigungen festlegen, die es Trainern erlauben, deinen Kalender zu bearbeiten, deine Trainingsdaten einzusehen und Kommentare zu hinterlassen, um deinen Trainingsfortschritt im COROS Training Hub zu überwachen. COROS ist nicht verantwortlich für den Inhalt von Nachrichten, die im COROS Training Hub erstellt werden. COROS ist nicht verantwortlich für das Verhalten eines Nutzers von COROS (online oder offline).\n    - App-Absturzbericht und Funktionsnutzungsbericht: Wenn deine COROS-App nicht richtig funktioniert, kann deine App Absturzberichte zur Analyse an unser Team senden. Dieser Bericht ist anonym und enthält keine persönlichen Informationen. Die App sammelt auch anonym Daten über das Nutzerverhalten, um den Entwicklern Feedback darüber zu geben, welche Funktionen am beliebtesten sind, damit unsere Entwickler die besten Entscheidungen für die zukünftige Produktentwicklung treffen können.\n    - Notfallkontakt: Wenn du die Notfallkontaktfunktion des Helms nutzt, gibst du im Voraus den Telefonkontakt und die Memo-Informationen für den Notfallkontakt ein. Diese werden nur verwendet, wenn du einen Helm trägst und mit der App fährst, der Helm diesen Notfall erkennt und die App auffordert, den Server zu bitten, eine Nachricht an den Notfallkontakt zu senden. Wir geben diesen Kontakt nicht für andere Zwecke preis. Im Falle eines Unfalls, der den Versand einer Textnachricht auslöst, werden wir die Standortinformationen in der gesendeten Nachricht und die Ortszeit, zu der sich der Unfall ereignet hat, an den zuvor eingestellten Notfallkontakt weitergeben. Wir sind nicht dafür verantwortlich, wenn die Zustellung der SOS-SMS aufgrund einer Unterbrechung des SMS-Carrier-Dienstes oder einer fehlenden Antwort fehlschlägt. Durch Cookies und andere Tracking-Technologien gesammelte Informationen: Wir und unsere Dienstanbieter verwenden verschiedene Technologien, um Informationen zu sammeln, darunter Cookies und Web Beacons. Cookies sind kleine Datendateien, die auf deiner Festplatte oder im Speicher deines Geräts gespeichert werden und uns dabei helfen, unsere Dienste und deine Erfahrungen zu verbessern, zu sehen, welche Bereiche und Funktionen unserer Dienste beliebt sind und die Besuche zu zählen. Web Beacons sind elektronische Bilder, die in unseren Diensten oder E-Mails verwendet werden können und uns dabei helfen, Cookies auszuliefern, Besuche zu zählen und die Nutzung und Wirksamkeit von Kampagnen zu verstehen.'
  },
  collectFromOther: {
    title: 'Informationen, die wir aus anderen Quellen sammeln',
    desc: 'Wir können auch Informationen aus anderen Quellen erhalten. Wenn du z. B. dein Konto über einen Social-Media-Dienst erstellst oder dich dort anmeldest, erhalten wir bestimmte Informationen von diesem Dienst, wie z. B. deinen Namen, Kontoinformationen oder deine Freundesliste, in Übereinstimmung mit den von diesem Dienst festgelegten Genehmigungsverfahren. Wir können die Informationen, die wir über dich sammeln, kombinieren und diese Informationen verwenden, um:\n    - Unsere Dienste bereitzustellen, zu pflegen und zu verbessern und neue Produkte und Dienste zu entwickeln;\n    - die von dir angeforderten oder gekauften Produkte oder Dienstleistungen bereitzustellen und zu liefern;\n    - dir Mitteilungen, Aktualisierungen, Warnungen, Bestätigungen, Antworten des Kundendienstes und andere Support- und Verwaltungsnachrichten zu senden;\n    - mit dir über Produkte, Dienstleistungen, Angebote, Aktionen oder andere Informationen zu kommunizieren, von denen wir glauben, dass sie für dich von Interesse sind;\n    - Überwachung und Analyse von Trends, Nutzung und Aktivitäten im Zusammenhang mit unseren Diensten;\n    - betrügerische Transaktionen und andere illegale Aktivitäten zu erkennen, zu untersuchen und zu verhindern sowie die Rechte und das Eigentum von COROS und anderen zu schützen; und\n    - Personalisierung und Verbesserung der Dienste und Bereitstellung von Inhalten oder Funktionen, die deinem Profil oder deinen Interessen entsprechen.'
  },
  sharingInfo: {
    title: 'Weitergabe von Informationen',
    desc: 'Wir können Informationen über dich wie folgt oder wie anderweitig in dieser Datenschutzrichtlinie beschrieben weitergeben:\n    - Mit Dienstleistern, die in unserem Auftrag tätig sind;\n    - Wenn du dein COROS-Konto mit anderen Diensten von Drittanbietern wie Strava, TrainingPeaks oder anderen Diensten verbindest, die nicht ausdrücklich für die automatische Synchronisierung aufgeführt sind, werden deine Daten automatisch an diese Dienste gesendet. Du kannst die Auto-Sync-Einstellungen in deiner COROS-App jederzeit deaktivieren, aber die Daten, die an die Drittanbieter-Plattform gesendet werden, bleiben dort, bis sie von deren Server gelöscht werden.\n    - Wenn du an interaktiven Bereichen unserer Dienste teilnimmst, können bestimmte Informationen über dich öffentlich über die Dienste angezeigt werden, wie z. B. dein Benutzername und deine Profilinformationen;\n    - Als Antwort auf eine Anfrage nach Informationen, wenn wir der Meinung sind, dass die Offenlegung im Einklang mit geltenden Gesetzen, Vorschriften oder rechtlichen Verfahren steht oder von diesen verlangt wird;\n    - Wenn wir der Meinung sind, dass deine Handlungen gegen unsere Nutzervereinbarungen oder Richtlinien verstoßen, oder um die Rechte, das Eigentum und die Sicherheit von COROS oder anderen zu schützen;\n    - In Verbindung mit oder während der Verhandlungen über eine Fusion, einen Verkauf von Unternehmensvermögen, eine Finanzierung oder eine Übernahme unseres gesamten oder eines Teils unseres Unternehmens durch ein anderes Unternehmen;\n    - zwischen COROS und unseren derzeitigen und zukünftigen Muttergesellschaften, verbundenen Unternehmen, Tochtergesellschaften und anderen Unternehmen, die unter gemeinsamer Kontrolle und in gemeinsamem Besitz stehen;\n    - Mit deiner Zustimmung oder auf deine Anweisung hin können wir auch zusammengefasste oder de-identifizierte Daten weitergeben, die nicht dazu verwendet werden können, dich zu identifizieren.'
  },
  advancedRawData: {
    title: 'Fortgeschrittene Workout-Rohdaten',
    desc: 'Fortgeschrittene Workout-Rohdaten, einschließlich der Quelldaten des GPS deines COROS-Geräts, der Herzfrequenz, der Akkuleistung usw., werden auf deinem COROS-Gerät gespeichert. Es kann sein, dass du aufgefordert wirst, die Rohdaten über die COROS-App an unser Team zu senden, wenn du dich an den Kundensupport wendest oder Probleme beheben möchtest. Außerdem benötigt unser Team die Rohdaten, um im Falle eines Garantieanspruchs einen Hardwaredefekt feststellen zu können.'
  },
  socialSharingFeat: {
    title: 'Social-Sharing-Funktionen',
    desc: 'Die Dienste können Social-Sharing-Funktionen und andere integrierte Tools (z. B. mit anderen sozialen Netzwerken) anbieten, mit denen du Aktionen, die du auf unseren Diensten durchführst, mit anderen Medien teilen kannst und umgekehrt. Die Nutzung solcher Funktionen ermöglicht es dir, Informationen mit deinen Kontakten oder der Öffentlichkeit zu teilen, je nachdem, welche Einstellungen du bei dem Unternehmen, das die Social Sharing-Funktion anbietet, vorgenommen hast. Weitere Informationen über den Zweck und den Umfang der Datenerhebung und -verarbeitung im Zusammenhang mit Social Sharing-Funktionen findest du in den Datenschutzrichtlinien der Unternehmen, die diese Funktionen anbieten.'
  },
  ad: {
    title: 'Von Dritten bereitgestellte Analyse- und Werbedienste',
    desc: 'Wir können Dritte damit beauftragen, Analyse- und Werbedienste für unsere Websites und Online-Dienste bereitzustellen. Diese Unternehmen können Cookies, Web Beacons, Gerätekennungen und andere Technologien verwenden, um Informationen über deine Nutzung der Dienste und anderer Websites und Online-Dienste zu sammeln, einschließlich deiner IP-Adresse, deines Webbrowsers, Informationen über mobile Netzwerke, aufgerufene Seiten, die auf Seiten oder in Apps verbrachte Zeit, angeklickte Links und Konversionsinformationen. Diese Informationen können von COROS und anderen genutzt werden, um die Nutzungsaktivitäten zu analysieren und zu verfolgen, die Beliebtheit bestimmter Funktionen zu ermitteln und auf deine Interessen zugeschnittene Werbung und Inhalte zu liefern. Weitere Informationen zu interessenbezogener Werbung und wie du die Verwendung deiner Browsing-Daten für interessenbezogene Werbung ablehnen kannst, findest du unter www.aboutads.info/choices. Dein Mobilgerät kann auch eine Funktion enthalten, mit der du die Nutzung bestimmter Informationen, die über Apps gesammelt werden, für die Schaltung von interessenbezogener Werbung einschränken kannst.'
  },
  deleteAccount: {
    title: 'Löschung deines Kontos',
    desc: 'Du kannst eine E-Mail an support@coros.com senden, um die Löschung deines COROS-Kontos, einschließlich aller persönlichen Daten, zu beantragen. Mit dieser E-Mail kannst du auch eine Kopie deines Trainingsverlaufs im .fit-Dateiformat anfordern.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/tradeIn.js
/* harmony default export */ const de_tradeIn = ({
  title: 'COROS Trade In Anwendung',
  desc: 'Ein Unternehmen für Leistungssporttechnologie, das Athleten dabei unterstützt, ihr bestes Training zu gestalten.',
  pageTitle: 'EINTAUSCHANTRAG',
  pageDesc: 'Tausche eine funktionierende GPS-Uhr einer beliebigen Marke, einschließlich COROS, gegen eine Gutschrift von bis zu 100 US-Dollar für deinen neuen COROS-Uhrenkauf ein. Jede in Zahlung genommene Uhr kann nur für einen neuen Uhrenkauf verwendet werden. Sobald die Uhr an uns versandt wurde, kann sie nicht mehr zurückgegeben oder erstattet werden.',
  residentsDescNotify: 'Das Programm ist derzeit nur für Bürger der Vereinigten Staaten verfügbar.',
  residentsDesc: 'Das Programm ist derzeit nur für US-Bürger verfügbar.',
  nextSteps: ['Unser Team wird deine Angaben prüfen und dir einen Schätzwert per E-Mail mitteilen.', 'Wenn du dich entscheidest, das Angebot anzunehmen, gibst du deine neue Uhrenbestellung mit dem ursprünglichen Preis auf.', 'Schicke das in Zahlung gegebene Gerät mit dem von COROS zur Verfügung gestellten, vorausbezahlten Versandetikett zusammen mit deiner Bestellbestätigung per E-Mail ein.', 'Wir erstatten dir den Wert deiner Inzahlungnahme auf deine Bestellung, sobald wir deine Sendung erhalten haben.', 'Dieses Angebot kann nicht mit anderen Preisnachlässen kombiniert werden.', 'Viel Spaß mit deiner neu aufgerüsteten COROS-Uhr!'],
  howItWorks: ['Informationen übermitteln', 'Erhalten Sie ein Angebot', 'Gib eine Bestellung für die neue Uhr auf und sende deine in Zahlung gegebene Uhr ein', 'Erhalte eine Rückerstattung, wenn wir deine in Zahlung gegebene Uhr erhalten haben'],
  notifyButton: 'BENACHRICHTIGE MICH',
  notifyPlaceholder: 'BEI VERFÜGBARKEIT BENACHRICHTIGEN'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/apex.js
/* harmony default export */ const de_apex = ({
  title: 'COROS APEX GPS-Uhr',
  desc: 'Unsere vielseitigste Uhr für Outdoorsportler, die leicht und schnell unterwegs sind.',
  accessories: 'APEX-ZUBEHÖR KAUFEN',
  battery_life: {
    title: 'Extrem lange Akkulaufzeit',
    desc: "St\xE4ndiges Laden deiner Uhr geh\xF6rt ab sofort der Vergangenheit an! Die APEX \xFCbersteht jedes noch so lange Workout mit Leichtigkeit. Im UltraMax-GPS-Modus h\xE4lt der Akku bis zu 100 Stunden. Nutzt du den normalen GPS-Modus, reicht der Akku f\xFCr bis zu 35 Stunden und im t\xE4glichen Gebrauch reicht er f\xFCr bis zu 30 Tage."
  },
  'Built in Premium': {
    title: '2 in 1 Sport- und Alltags-Uhr',
    desc: "Dank der intelligenten Bauweise und dem schicken Design der APEX, wird der Wechsel vom Arbeitsplatz zum Training ganz einfach. Mit der Titanlegierung, der Edelstahl-Fassung und dem Saphirglas f\xFCr extremen Schutz, bist du auf jede Umgebung vorbereitet."
  },
  'Simplicity at its Finest': {
    title: 'Einfachheit vom Feinsten',
    desc: "Mit klassischen Tasten zwischen Bildschirm-Oberfl\xE4chen zu wechseln und verschiedene Ger\xE4te zu nutzen kann \xFCberw\xE4ltigend sein - vor allem mitten im Workout. Mit der Krone kannst du die APEX super einfach navigieren. So kannst du dich auf die wichtigen Dinge konzentrieren, wie z. B. deinen Lauf zu beenden oder dein n\xE4chstes Set vorzubereiten."
  },
  'Training Efficiency Without Injury': {
    title: 'Trainingseffizienz ohne\nVerletzungen',
    desc: "Um Verletzungen vorzubeugen, gibt es nichts Wichtigeres als richtig zu trainieren. Wir k\xF6nnen deine Gesamtleistung pr\xE4zise bestimmen und in Konditionslevel (0 - 100) und Trainingseffekt (0 - 6) aufschl\xFCsseln. Hast du zu viel Konditionstraining gemacht? Deine COROS-Uhr weist dich darauf hin, dass es Zeit ist zu pausieren. Basierend auf dem Leistungslevel und deinem Trainingsverlauf, wird dir anschlie\xDFend vorgeschlagen, wie lange du vor deiner n\xE4chsten Einheit aussetzen solltest."
  },
  'Navigation Track': {
    title: 'Navigieren und tracken',
    desc: "Ausgestattet mit einer Navigations- und Trackingfunktion, steht dir die APEX zur Seite, wenn du die Wegbeschreibung am dringendsten brauchst. Die Strecken werden auf die Uhr geladen und \xFCber einem Gitter als Breadcrumb-Navigation dargestellt. Der Kompasskurs und die H\xF6henlage werden dir in Echtzeit angezeigt und Alarme helfen dir zum Weg zur\xFCckzufinden."
  },
  'Smart Learning Stride Length': {
    title: 'Intelligente Schrittlängen-Analyse',
    desc: "D\xFCrfen wir vorstellen: der eigens von COROS entwickelte intelligente Schrittl\xE4ngen-Algorithmus. In diesem einzigartigen Algorithmus ist maschinelles Lernen tief verankert, um deinen pers\xF6nlichen Bewegungsumfang beim Laufen zu erfassen. Auf ihm baut dein ganz eigenes Schritt-Modell auf, das f\xFCr Lauftrainings in geschlossenen R\xE4umen und bei schwachem GPS-Signal (z. B. in einem Tunnel) genutzt wird."
  },
  gpsAbilities: ['Lernt Laufgewohnheiten\nim normalen GPS-Modus', 'Schätzt Laufdistanz und -strecke bei\nschwachem oder unterbrochenem GPS-Signal'],
  'Your Complete Training Guide': {
    title: 'Dein persönlicher Trainings-Guide',
    desc: "Basierend auf einem einzigartigen Algorithmus, der die aerobe Schwelle, maximale Sauerstoffaufnahme und Herzfrequenz mit einbezieht, meldet sich der COROS-Trainer jeden Tag bei deinem Lauftraining. Anhand deiner pers\xF6nlichen Geschwindigkeits-, Distanz- und Herzfrequenz-Werte, errechnet der COROS-Trainer die Leistung und schl\xE4gt dir eine Erholungsphase vor."
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ALLE WORKOUTS - IMMER UND ÜBERALL',
    desc: "Im Trainingsmodus kannst du aus mehr als 200 \xDCbungen ausw\xE4hlen, um dein ideales Lauf-, Fahrrad-, Schwimm- oder Krafttraining zu kreieren. Beim Erstellen deines Workouts sind dir quasi keine Grenzen gesetzt! \xDCber coros.com kannst du sogar Workouts von professionellen Athletinnen und Athleten und Trainerinnen und Trainern auf deine Uhr herunterladen. Anschlie\xDFend kannst du deine Erfolge z. B. per WhatsApp, E-Mail oder Facebook mit deinen Freundinnen und Freunden und Trainingspartnerinnen und -partnern teilen. Mit dem neuen Trainingsmodus sind deine besten Leistungen immer in Reichweite."
  },
  'Stay on Track': {
    title: 'Bleib auf Kurs',
    desc: "Eine Standard-Laufbahn ist 400 Meter lang. Trotzdem k\xF6nnen viele GPS-Ger\xE4te diese Strecke nicht richtig tracken. Beim neuen Bahntraining-Modus von COROS wird ein spezieller Algorithmus verwendet, um sicherzugehen, dass dein Bahntraining korrekt gemessen wird - egal welche Bahn du w\xE4hlst. Vorbei sind die willk\xFCrlichen Zickzacklinien oder scharfen Richtungswechsel \xFCber den Platz! Ab sofort wird dein Training so dargestellt, wie du l\xE4ufst."
  },
  pod: 'Zusammen mit dem COROS Performance Optimization Device (POD) kann die APEX erweiterte Laufdaten, z. B. zur Laufkraft und zum Laufstil, in Echtzeit zur Verfügung stellen. So läufst du noch intelligenter und effizienter.',
  podLinkText: 'COROS POD angucken',
  battery: {
    size46: {
      normal: "35 Stunden normaler\n      GPS-Modus",
      ultra: "70 Stunden\n      UltraMax GPS-Modus",
      regular: "30 Tage\n      normaler Gebrauch"
    },
    size42: {
      normal: "25 Stunden normaler\n      GPS-Modus",
      ultra: "60 Stunden\n      UltraMax GPS-Modus",
      regular: "24 Tage\n      normaler Gebrauch"
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/apex2.js
/* harmony default export */ const de_apex2 = ({
  apex2title: 'COROS APEX 2/2 Pro',
  title: 'COROS APEX 2/2 Pro GPS-Outdoor-Uhr',
  desc: 'Für Outdoor-Sportler, die hart trainieren und sich schnell bewegen',
  apex2Accessories: 'APEX 2 ZUBEHÖR',
  apex2proAccessories: 'APEX 2 Pro ZUBEHÖR',
  productTitle: 'FÜR TRAINING UND TRAILBLAZING',
  productDesc1: "Die APEX 2 und APEX 2 Pro GPS-Outdoor-Uhren wurden mit revolution\xE4ren Technologien f\xFCr\n  deine ehrgeizigsten Ziele entwickelt und sind auf Leistung in jedem Gel\xE4nde ausgelegt.",
  productDesc2: "Mit einem noch widerstandsf\xE4higeren \xC4u\xDFeren, einer neu gestalteten GPS-Antenne f\xFCr mehr\n    Leistung, einer verbesserten Navigation, einem optischen Herzfrequenzsensor der n\xE4chsten\n    Generation und einer l\xE4ngeren GPS-Akkulaufzeit sind die APEX 2 und APEX 2 Pro Uhren die\n    leistungsst\xE4rksten Werkzeuge, die du am Handgelenk tragen kannst, um dein Training zu\n    steuern und deine Bewegungen in der Wildnis zu verfolgen.",
  productDescMobile1: "Entwickelt f\xFCr Leistung in jedem Gel\xE4nde sind die \n  APEX 2 und APEX 2 Pro GPS-Outdoor-Uhren mit\n  revolution\xE4ren Technologien f\xFCr deine ehrgeizigsten\n  Ziele ausgestattet.",
  productDescMobile2: "Mit einem noch widerstandsf\xE4higeren \xC4u\xDFeren,\n    einer neu gestalteten GPS-Antenne f\xFCr mehr\n    Leistung, einer verbesserten Navigation, einem\n    optischen Herzfrequenzsensor der n\xE4chsten\n    Generation und einer l\xE4ngeren GPS-Akkulaufzeit\n    sind die APEX 2 und APEX 2 Pro Uhren die leistungsst\xE4rksten Werkzeuge, die du am Handgelenk\n    tragen kannst, um dein Training zu steuern und\n    deine Bewegungen in der Wildnis zu verfolgen.\n    Mach dich bereit, intelligenter zu trainieren\n    und l\xE4nger zu gehen.",
  explorationTitle: 'VERSCHIEBE DIE GRENZEN\n DER ERFAHRUNG',
  explorationDesc: "Die ultimative Outdoor-Sportuhr vereint Langlebigkeit und Funktionalit\xE4t. Deshalb haben\n    wir bei der Entwicklung jedes einzelnen Details auf Leistung geachtet. Mit der APEX 2\n    und der APEX 2 Pro hast du eine Uhr, die genauso lange h\xE4lt wie du. Und mehr.",
  designLabel1: 'Lünette aus Titan Grad 5 mit PVD-Beschichtung',
  designLabel2: 'Handschuhgerechtes großes Digitalzifferblatt',
  designLabel3: 'Kratzfestes Saphirglas',
  explorationDescMobile: 'Die ultimative Outdoor-Sportuhr vereint Langlebigkeit und Funktionalität. Deshalb haben wir jedes einzelne Detail mit Blick auf die Leistung sorgfältig entwickelt. Mit der APEX 2 und der APEX 2 Pro bekommst du eine Uhr, die genauso lange hält wie du. Und mehr.',
  designTitle: 'Entwickelt für Langlebigkeit',
  designDesc: "Das Saphirglas und die L\xFCnette aus einer Titanlegierung des Grades 5 sch\xFCtzen die elektronischen\n    Komponenten im Inneren der APEX 2 und APEX 2 Pro. W\xE4hrend das Saphirglas praktisch kratzfrei\n    bleibt, bietet eine neue PVD-Beschichtung auf der L\xFCnette eine zweifache Kratzfestigkeit im\n    Vergleich zum Vorg\xE4ngermodell.",
  designDescMobile: 'Das Saphirglas und die Lünette aus einer Titanlegierung des Grades 5 schützen die elektronischen Komponenten im Inneren der APEX 2 und APEX 2 Pro. Während das Saphirglas praktisch kratzfrei bleibt, bietet eine neue PVD-Beschichtung auf der Lünette eine zweifache Kratzfestigkeit im Vergleich zum Vorgängermodell.',
  temperatureResistanTitle: 'Temperaturbeständig',
  temperatureResistanDesc: "Jedes Klima, \xFCberall. Die APEX 2 funktioniert bei Betriebstemperaturen von -20\u2103 bis\n  50\u2103 am Handgelenk, damit du die Grenzen der Erkundungen ausloten kannst.",
  temperatureResistanDescMobile: 'Jedes Klima, überall. Die APEX 2 funktioniert bei Betriebstemperaturen von -20℃ bis 50℃ am Handgelenk, damit du die Grenzen der Erkundungen ausloten kannst.',
  temperatureResistanLower: '-20',
  temperatureResistanUpper: '50',
  temperatureUnit: '℃',
  waterproofTitle: 'Wasserbeständig',
  waterproofDesc: "Regen, Schnee, Pf\xFCtzen, Schlamm, was\n    immer du willst. Die APEX 2 bleibt unter\n    allen Bedingungen trocken. Mit einer\n    Wasserdichtigkeit von 5 ATM h\xE4lt diese\n    Uhr auch Druck bis zu einer Tiefe von 50 m aus.",
  waterproofDescMobile: 'Regen, Schnee, Pfützen, Schlamm, was immer du willst. Die APEX 2 bleibt unter allen Bedingungen trocken. Gebaut mit 5 ATM wasserdicht und hält einem Druck bis zu einer Tiefe von 50 m stand.',
  dialTitle: 'Einfach zu bedienendes Zifferblatt',
  dialDesc: "Unser einfaches Knopfdesign verf\xFCgt \xFCber ein gro\xDFes digitales Ziffernblatt, so dass du die\n  Einstellungen deiner Uhr mit ein paar einfachen Klicks \xE4ndern kannst \u2013 sogar mit Handschuhen.\n  ",
  dialDescMobile: 'Unser einfaches Knopfdesign verfügt über ein großes digitales Ziffernblatt, so dass du die Einstellungen deiner Uhr mit ein paar einfachen Klicks ändern kannst – sogar mit Handschuhen.',
  batteryTitle: 'Noch bessere Akkulaufzeit',
  batteryDesc: "Dank des geringen Stromverbrauchs durch das neueste Design des Satellitensignalsystems haben wir eine l\xE4ngere\n    GPS-Batterielaufzeit als bei der urspr\xFCnglichen APEX. Die APEX 2 bietet 40 Stunden volle GPS-Akkulaufzeit,\n    w\xE4hrend die APEX 2 Pro 66 Stunden schafft. Au\xDFerdem dauert es weniger als 2 Stunden, bis die Uhr von Null auf\n    volle Ladung umgestellt ist.",
  batteryDescKeyword: '66 Stunden schafft',
  batteryDescMobile: 'Dank des geringen Stromverbrauchs des neuesten Satellitensignalsystems ist die Lebensdauer der GPS-Batterie länger als beim ursprünglichen APEX. Die APEX 2 bietet 40 Stunden volle GPS-Akkulaufzeit, während die APEX 2 Pro 66 Stunden bietet. Außerdem braucht die Uhr weniger als 2 Stunden, um von Null auf volle Ladung zu kommen.',
  batteryDescMobileKeyword: '66 Stunden bietet',
  batteryCompareImprove: 'Bis zu',
  batteryCompareImproveTitle: 'Längere GPS-Akkulaufzeit',
  navTitle: 'NAVIGIERE IN DER NATUR WIE NIE ZUVOR',
  navDesc: "Die APEX 2 ist eine Uhr, die f\xFCr deine Abenteuer im Garten genauso wie f\xFCr die Besteigung von\n    Gletschern gewappnet ist. Du bist mit erstklassigen Navigationsfunktionen ausgestattet, sodass\n    du genau wei\xDFt, wo du dich in der Wildnis befindest und wie du zu deinem Ausgangspunkt zur\xFCckkommst.",
  navDescMobile: 'Die APEX 2 ist eine Uhr, die für deine Abenteuer im Garten genauso wie für die Besteigung von Gletschern gewappnet ist. Du bist mit erstklassigen Navigationsfunktionen ausgestattet, sodass du genau weißt, wo du dich in der Wildnis befindest und wie du zu deinem Ausgangspunkt zurückkommst.',
  gpsTitle: 'GPS-Genauigkeit der \bnächsten Stufe',
  gpsTitleMobile: 'GPS-Genauigkeit der nächsten Stufe',
  gpsDesc: "Mit der 50 % leistungsf\xE4higeren Antenne und dem\n    All-Satellite-GNSS-Chipsatz empf\xE4ngt der APEX 2\n    Signale von allen f\xFCnf gro\xDFen Satellitensystemen\n    und liefert so die pr\xE4zisesten Daten. Au\xDFerdem\n    verf\xFCgt der APEX 2 Pro \xFCber die neueste\n    Dual-Frequenz-Technologie, mit der du auch\n    an den schwierigsten Orten geortet werden kannst.",
  gpsDescMobile: 'Mit der 50 % leistungsfähigeren Antenne und dem All-Satellite-GNSS-Chipsatz empfängt der APEX 2 Signale von allen fünf großen Satellitensystemen und liefert so die präzisesten Daten.',
  outdoorNavTitle: 'Nie wieder verirren',
  outdoorNavDesc: "Unser \xE4u\xDFerst intuitives Navigationssystem gibt dir die Werkzeuge an die Hand, die du f\xFCr deine Erkundungstouren\n    in der Natur brauchst. Mit den kostenlosen globalen Offline-Landschaftskarten und topografischen Karten kannst du\n    auch an den entlegensten Orten auf wichtige Navigationsinformationen zugreifen. Mit dem digitalen Drehrad des\n    COROS APEX 2 und APEX 2 Pro kannst du ganz einfach in die Karte hinein- und herauszoomen, w\xE4hrend du auf dem\n    Touchscreen die Karte mit deinem Finger verschieben kannst.",
  outdoorNavLabel1: 'Sonnenbewegungen.',
  outdoorNavLabel2: 'Höhenprofil.',
  outdoorNavLabel3: 'Entfernung zum Ziel.',
  outdoorNavLabel4: 'Abweichungsalarm.',
  outdoorNavLabel5: 'Kontrollpunkt.',
  outdoorNavLabel6: 'Genaue GPS-Koordinaten.',
  outdoorNavScene1: 'Sei der Sonne einen Schritt voraus. Bewege dich schnell, bevor es dunkel wird, oder schlage den frühen Sonnenaufgang.',
  outdoorNavScene2: 'Mach dich vor oder während der Aktivität mit den Höhenunterschieden auf deiner Strecke vertraut.',
  outdoorNavScene3: 'Erhalte zusätzliche Motivation, indem du die Entfernung zum nächsten Kontrollpunkt oder zum Zielort kennst.',
  outdoorNavScene4: 'Erhalte Warnungen, wenn du von der Route abkommst, mit Entfernungs- und Richtungsangaben, um wieder auf den richtigen Weg zu kommen.',
  outdoorNavScene5: 'Markiere wichtige Orte wie Wasserquellen, Versorgungsstationen oder Ausrüstungsverstecke für die zukünftige Navigation.',
  outdoorNavScene6: 'Du kannst deinen aktuellen GPS-Standort, den Luftdruck und die geschätzte Höhe abrufen.',
  plan: 'Plane dein nächstes Abenteuer',
  planDesc1: "\xD6ffne einfach deine App, zeichne deine bevorzugte Route und lass den \n    Routenplaner deinen optimalen Weg auf der Grundlage der\nn\xE4chstgelegenen verf\xFCgbaren Wege oder Stra\xDFen ausw\xE4hlen. \xDCberpr\xFCfe \nEntfernung und H\xF6henmeter, speichere sie, \xFCbertrage sie auf deine \nUhr oder teile sie mit deinen Freunden.",
  planDesc2: "Derzeit ist das COROS-\xD6kosystem mit beliebten Drittanbietern f\xFCr die\n  Routenplanung wie Strava und Komoot kompatibel.",
  planDescMobile: 'Öffne einfach deine App, zeichne deine bevorzugte Route und lass den Routenplaner deinen optimalen Weg auf der Grundlage der nächstgelegenen verfügbaren Wege oder Straßen auswählen. Überprüfe Entfernung und Höhenmeter, speichere sie, übertrage sie auf deine Uhr oder teile sie mit deinen Freunden. Derzeit ist das COROS-Ökosystem mit beliebten Routenplanern von Drittanbietern wie Strava und Komoot kompatibel.',
  planDescMobile1: 'Öffne einfach deine App, zeichne deine bevorzugte Route und lass den Routenplaner deinen optimalen Weg auf der Grundlage der nächstgelegenen verfügbaren Wege oder Straßen auswählen. Überprüfe Entfernung und Höhenmeter, speichere sie, übertrage sie auf deine Uhr oder teile sie mit deinen Freunden.',
  planDescMobile2: 'Derzeit ist das COROS-Ökosystem mit beliebten Routenplanern von Drittanbietern wie Strava und Komoot kompatibel.',
  prepareTitle: 'Egal, was passiert, du bist gewappnet',
  prepareTitleMobile: 'Egal, was passiert, du bist gewappnet',
  prepareDesc: "Die Sch\xF6nheit der Natur bringt auch Risiken mit sich. St\xFCrmisches Wetter, H\xF6henkrankheit, Dunkelheit,\n    Dehydrierung \u2013 all das kann beim Trekking in der Wildnis passieren. Das APEX 2 und das APEX 2 Pro\n    bereiten dich auf jede Situation vor, damit du sicher und informiert bist, w\xE4hrend du den Gipfel erreichst.",
  prepareDescMobile: 'Die Schönheit der Natur bringt auch Risiken mit sich. Stürmisches Wetter, Höhenkrankheit, Dunkelheit, Dehydrierung – all das sind potenzielle Gefahren beim Trekking in der Wildnis. Das APEX 2 und APEX 2 Pro bereiten dich auf jede Situation vor, damit du auf deinem Weg zum Gipfel sicher und informiert bist.',
  nutritionAlert: 'ERNÄHRUNGSALARM',
  sunMovements: 'SONNENBEWEGUNGEN',
  stormAlert: 'STURMWARNUNG',
  cameraControl: 'KAMERASTEUERUNG',
  altitudeMode: 'HÖHENMODUS',
  nightMode: 'NACHTMODUS',
  fitnessTitle: 'FITNESS AUFBAUEN, DEIN BESTES SELBST ENTFALTEN',
  fitnessDesc: "Was auch immer dein n\xE4chstes Abenteuer sein mag, die COROS APEX 2 und APEX 2 Pro in Kombination\n    mit dem sportwissenschaftlichen System COROS EvoLab k\xF6nnen dir helfen, Fortschritte zu machen\n    oder eine neue pers\xF6nliche Bestleistung aufzustellen. Unsere Trainingsl\xF6sung, die von den besten\n    Ausdauersportlern der Welt unterst\xFCtzt wird, hilft dir dabei, zu Hause oder im Fitnessstudio\n    deine Fitness zu verbessern, damit du f\xFCr die gro\xDFe weite Welt bereit bist.",
  fitnessDescMobile: 'Was auch immer dein nächstes Abenteuer sein mag, die COROS APEX 2 und APEX 2 Pro in Kombination mit dem sportwissenschaftlichen System COROS EvoLab können dir helfen, Fortschritte zu machen oder eine neue persönliche Bestleistung aufzustellen. Unsere Trainingslösung, die von den besten Ausdauersportlern der Welt unterstützt wird, hilft dir dabei, zu Hause oder im Fitnessstudio deine Fitness zu verbessern, damit du für die große weite Welt bereit bist.',
  sensorTitle: 'Unser bisher genauester Herzfrequenzsensor',
  sensorDesc: 'Je genauer deine Herzfrequenzdaten sind, desto besser kannst du dein Training gestalten. Unser brandneuer optischer Herzfrequenzsensor für das Handgelenk verfügt über ein 5-LED-System mit 4 Fotodetektoren in einem angepassten Layout, das von einer glatten, kratzfesten Abdeckung geschützt wird. Dank der fortschrittlichen Algorithmen zur Unterdrückung des Signalrauschens bieten deine APEX 2 und APEX 2 Pro ein neues Maß an Herzfrequenzgenauigkeit. Egal, ob du dich schnell durch Schluchten bewegst oder zur Erholung im Zelt schläfst, die neuen APEX 2 Uhren zeichnen deine Leistung auf, ohne dass du einen Schlag verpasst. ...buchstäblich.',
  sensorDescMobile: 'Je genauer deine Herzfrequenzdaten sind, desto besser kannst du dein Training gestalten. Unser brandneuer optischer Herzfrequenzsensor für das Handgelenk verfügt über ein 5-LED-System mit 4 Fotodetektoren in einem angepassten Layout, das von einer glatten, kratzfesten Abdeckung geschützt wird. Dank der fortschrittlichen Algorithmen zur Unterdrückung des Signalrauschens bieten deine APEX 2 und APEX 2 Pro ein neues Maß an Herzfrequenzgenauigkeit. Egal, ob du dich schnell durch Schluchten bewegst oder zur Erholung im Zelt schläfst, die neuen APEX 2 Uhren zeichnen deine Leistung auf, ohne dass du einen Schlag verpasst. ...buchstäblich.',
  trackRecoverTitle: 'Verfolge deine Erholung',
  trackRecoverDesc: 'Richtig erholt kannst du härter trainieren. Überwache mit der APEX 2 und der APEX 2 Pro deine Schlafqualität, indem du den Tief-, Leicht- und REM-Schlaf misst – alle wichtigen Phasen deines Schlafzyklus. Mache nach dem Aufwachen eine schnelle Messung der Herzfrequenzvariabilität (HRV), um festzustellen, wie gut dein Körper auf die Belastungen des Tages vorbereitet ist. Wenn du in der Höhe trainierst, schalte den Höhenmodus ein oder überprüfe manuell deinen Sauerstoffgehalt im Blut (SpO2), um die Anpassung deines Körpers zu überwachen.',
  trackRecoverDescMobile: 'Richtig erholt kannst du härter trainieren. Überwache mit der APEX 2 und der APEX 2 Pro deine Schlafqualität, indem du den Tief-, Leicht- und REM-Schlaf misst – alle wichtigen Phasen deines Schlafzyklus. Mache nach dem Aufwachen eine schnelle Messung der Herzfrequenzvariabilität (HRV), um festzustellen, wie gut dein Körper auf die Belastungen des Tages vorbereitet ist. Wenn du in der Höhe trainierst, schalte den Höhenmodus ein oder überprüfe manuell deinen Sauerstoffgehalt im Blut (SpO2), um die Anpassung deines Körpers zu überwachen.',
  trainingSolutionTitle: 'Eine unvergleichliche Trainingslösung',
  trainingSolutionTitleMobile: 'Eine unvergleichliche Trainingslösung',
  trainingSolutionDesc: "Seit seiner Einf\xFChrung haben das COROS EvoLab und der COROS Training Hub zahlreiche sportliche\n    Rekorde unterst\xFCtzt: Eliud Kipchoges Marathonweltrekord, Kilian Jornets neuer UTMB-Streckenrekord\n    und unz\xE4hlige Ultralaufrekorde, darunter 24 Stunden, 100 Meilen und mehr. Mit COROS APEX 2 und\n    APEX 2 Pro hast du Zugang zu Trainingserkenntnissen der Weltklasse, genau wie die Profis.",
  trainingSolutionDescMobile: 'Seit seiner Einführung haben das COROS EvoLab und der COROS Training Hub zahlreiche sportliche Rekorde unterstützt: Eliud Kipchoges Marathonweltrekord, Kilian Jornets neuer UTMB-Streckenrekord und unzählige Ultralaufrekorde, darunter 24 Stunden, 100 Meilen und mehr. Mit COROS APEX 2 und APEX 2 Pro hast du Zugang zu Trainingserkenntnissen der Weltklasse, genau wie die Profis.',
  traninghubTitle: 'Erstelle strukturierte \nWorkouts und Trainingspläne',
  traninghubDesc: "Ein Trainingsplan macht das Training effizienter und\n    erm\xF6glicht es dir, deine Fitness im Laufe der Zeit zu\n    verbessern. Du kannst auf von Athleten gepr\xFCfte Workouts\n    und Trainingspl\xE4ne zugreifen oder \xFCber unsere mobilen\n    und Desktop-Apps deine eigenen erstellen. Programmiere\n    Workouts von deinem Trainer direkt im COROS Training\n    Hub, den er sofort einsehen kann, sobald deine\n    Uhr synchronisiert ist.",
  trainingLabel1: 'Allgemeiner Trainingsstatus.',
  trainingLabel2: 'Wettkampfvorhersage.',
  trainingLabel3: '7-Tage-Gesamtbelastung.',
  trainingLabel4: 'Effort Pace',
  trainingLabel5: 'Trainingsschwerpunkt.',
  trainingLabel6: 'Erholungstimer.',
  trainingDesc1: 'Verstehe, wie dein Körper auf das letzte Training reagiert, und erhalte Informationen über Ermüdung und Fitness.',
  trainingDesc2: 'Eine Schätzung, wie schnell du voraussichtlich einen 5 km, 10 km, Halbmarathon und Vollmarathon laufen wirst.',
  trainingDesc3: 'Verstehe deine Trainingsbelastungen der letzten Woche und überprüfe, ob sie in der empfohlenen Zone liegen.',
  trainingDesc4: 'Steuere deine Anstrengung unabhängig von Steigungen und Gefällen, um dein Training und deine Wettkämpfe besser zu gestalten.',
  trainingDesc5: 'Fasse die wichtigsten Verbesserungen deines Laufes auf Grundlage von Trainingsbelastung und Intensität zusammen.',
  trainingDesc6: 'Erhalte Rückmeldung über die Zeit, die du brauchst, um dich vollständig zu erholen und ob du mit leichtem oder hartem Training wieder starten solltest.',
  repsTrackTitle: 'Krafttrainingseinheiten leicht gemacht',
  repsTrackDesc: "Bist du es leid, mitzuz\xE4hlen? COROS zeichnet deine Wiederholungen und\n    S\xE4tze automatisch auf, damit du es nicht tun musst. W\xE4hle aus mehr als\n    200 vorinstallierten \xDCbungen, um deine ideale Krafttrainingseinheit zu\n    erstellen. Teile deine Workouts mit Freunden und Trainingspartnern per\n    SMS, E-Mail, Social Media oder pers\xF6nlich \xFCber einen QR-Code in der\n    COROS-App.",
  repsTrackDescMobile: 'Bist du es leid, mitzuzählen? COROS zeichnet deine Wiederholungen und Sätze automatisch auf, damit du es nicht tun musst. Wähle aus mehr als 200 vorinstallierten Übungen, um deine ideale Krafttrainingseinheit zu erstellen. Teile deine Workouts mit Freunden und Trainingspartnern per SMS, E-Mail, Social Media oder persönlich über einen QR-Code in der COROS-App.',
  packagelist: [{
    name: 'COROS APEX 2/2 Pro',
    num: '1'
  }, {
    name: 'Ladekabel',
    num: '1'
  }, {
    name: 'Nylonarmband',
    num: '1'
  }],
  comingSoon: 'DEMNÄCHST ERHÄLTLICH',
  filterDifferentDialog: {
    intro: 'Obwohl die APEX 2 und die APEX 2 Pro viele ähnliche Spezifikationen aufweisen, gibt es doch einige signifikante Unterschiede zwischen den beiden Uhren:',
    list1: ['COROS APEX 2', 'hat einen 1,2-Zoll-Bildschirm und hält im GPS-Modus 45 Stunden durch.'],
    list2: ['COROS APEX 2 Pro', 'verfügt über einen größeren Bildschirm, eine längere Akkulaufzeit und eine duale Frequenz für eine verbesserte Ortungsgenauigkeit.'],
    link: ['In der', 'Vergleichstabelle', 'finden Sie alle technischen Details']
  },
  dustyPinkDesc: "Im Morgengrauen oder in der Abendd\xE4mmerung, \xFCber vielf\xE4ltige\n  Landschaften aus Sand, Erde und Felsen, zollt die APEX 2 Dusty Pink\n  einer der inspirierendsten Farben der Natur Tribut, die oft nur f\xFCr einen\n  kurzen, magischen Moment existiert. Genie\xDFe diesen atemberaubenden,\n  limitierten Zeitpunkt an deinem Handgelenk, solange der Vorrat reicht.",
  gobiDescs: ["Bekannt f\xFCr seine trockene Landschaft, unbarmherzige Gel\xE4nde und extreme Bedingungen, leiht die\n    weite W\xFCste Gobi ihren Namen einer limitierten Uhrenedition, die sich an diesem Ort zuhause f\xFChlen w\xFCrde.", "Mit fortschrittlichen Navigationsfunktionen, f\xFChrender Akkulaufzeit, robuster Haltbarkeit und mehr ist die\n    COROS APEX 2 Pro Gobi entwickelt worden, um dort zu gedeihen, wo sich nur wenige trauen. Wohin auch immer dich\n    dein Pfad f\xFChrt, hol dir eine der 1500 verf\xFCgbaren Einheiten, bevor sie, wie die sich verschiebenden W\xFCstensande, verschwinden."],
  gobiDescsMobile: ["Bekannt f\xFCr seine trockene Landschaft, unbarmherzige\n    Gel\xE4nde und extreme Bedingungen, leiht die weite\n    W\xFCste Gobi ihren Namen einer limitierten Uhrenedition,\n    die sich an diesem Ort zuhause f\xFChlen w\xFCrde.", "Mit fortschrittlichen Navigationsfunktionen, f\xFChrender\n    Akkulaufzeit, robuster Haltbarkeit und mehr ist die\n    COROS APEX 2 Pro Gobi entwickelt worden, um dort\n    zu gedeihen, wo sich nur wenige trauen. Wohin auch\n    immer dich dein Pfad f\xFChrt, hol dir eine der 1500\n    verf\xFCgbaren Einheiten, bevor sie, wie die sich\n    verschiebenden W\xFCstensande, verschwinden."]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/pod.js
/* harmony default export */ const de_pod = ({
  title: 'COROS POD',
  desc: 'Unser Begleitgerät für erweiterte Datenerfassung und -analyse.',
  performanceTitle: 'Leistungsmesser',
  performanceDesc: 'Kann man jemals genug Daten haben? Wir sagen nein. Deswegen haben wir den COROS Performance Optimization Device (COROS POD) kreiert. Der Leistungsmesser liefert dir alle erweiterten Laufanalysen, nach denen du dich sehnst. Er ergänzt die COROS GPS-Uhren, um dir dabei zu helfen gesund und fit zu bleiben.',
  useDemo: 'Der COROS POD lässt sich einfach bedienen. Du musst ihn nur schütteln, um ihn zu aktivieren. Verbinde ihn anschließend mit deiner Uhr oder COROS-App und klemm den POD mittig und gerade an die Rückseite deiner Laufhose.',
  features: [{
    title: 'L / R Balance',
    desc: 'Wir würden alle gerne eine gleichmäßige Rechts-Links-Verteilung der Beine haben. Aus vielerlei Gründen ist das jedoch unüblicher als man denkt. Zu wissen, welche Körperseite du bevorzugst, kann dir dabei helfen potenzielle Verletzungen zu erkennen, bevor sie auftreten. Außerdem kannst du deinen Laufstil korrigieren.'
  }, {
    title: 'Stride Ratio',
    desc: 'Stride Ratio beschreibt das Verhältnis zwischen Schrittlänge und Schritthöhe. Lass uns das ideale Verhältnis herausfinden, um sicherzugehen, dass du nicht ungewollt springst. Wenn dein Stride Ratio stimmt, nutzt du die Energie deines Körpers, um dich so effizient wie möglich anzutreiben.'
  }, {
    title: 'Stride Height',
    desc: 'Stride Height beschreibt die vertikale Körperbewegung pro Schritt. Warum ist dieser Wert interessant? Es ist wichtig, dass du dich vom Boden abstößt, aber du solltest mehr Energie dafür verwenden, dich nach vorne anstatt nach oben zu bewegen. Ist deine Stride Height zu hoch oder zu niedrig, bestehen Verbesserungsmöglichkeiten. Lass uns deinen optimalen Wert finden!'
  }, {
    title: 'Ground Time',
    desc: 'Der Hauptunterschied zwischen laufen und gehen ist, dass es beim Laufen einen Zeitraum gibt, in dem kein Fuß den Boden berührt. Je länger deine Füße auf dem Boden sind, desto weniger bewegst du dich vorwärts. Bei einem effizienten Laufstil bist du lange genug auf dem Boden, um Energie für den nächsten Schritt zu sammeln, aber keine Millisekunde länger.'
  }, {
    title: 'Form Power',
    desc: 'Form Power ist die Kraft, die durch einen ineffizienten Laufstil verloren geht. Ähnlich wie bei der Ground Time, weist ein niedriger Wert auf einen besseren und effizienteren Laufstil hin. Schau dir unbedingt die Entwicklung deiner Form Power an während du läufst und dein Körper ermüdet, da es zu Einbrüchen kommen kann. Merke: mehr Effizienz = weniger verschwendete Energie = niedrigere Form Power.'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/pod2.js
/* harmony default export */ const de_pod2 = ({
  title: 'COROS POD 2 – Run Beyond GPS',
  desc: 'Die nächste Genauigkeitsstufe für alle Läufer.',
  shopify_product_extra_desc_1: '*Bestelle jetzt vor. Der Versand beginnt in 10-15 Werktagen.',
  shopify_product_extra_desc_2: '*Informationen zur Kompatibilität mit deiner Uhr findest du auf dem technischen Datenblatt.',
  name: 'COROS POD 2',
  subtitle: 'ÜBERWINDE DIE GRENZEN DER GPS-TECHNOLOGIE',
  product_detail: 'Das ist der brandneue COROS POD 2. Ein leichtes, wasserdichtes Uhrenzubehör, das du an deinem Schuh oder Hosenbund befestigen kannst, um die Genauigkeit deiner Laufdaten zu verbessern. Mit optimierter Sensorhardware und intuitiven Softwarealgorithmen misst der COROS POD 2 deinen Lauf direkt aus deinen Fuß- und Körperbewegungen. Er lässt sich mit deiner COROS-Uhr verbinden, um Echtzeitdaten zu liefern, damit du immer mit den richtigen Informationen trainieren oder wettkämpfen kannst.',
  problem: 'DAS PROBLEM',
  problem_desc: 'GPS-Technologie ist erstaunlich, aber nicht perfekt.',
  problem_desc_mobile: 'GPS-Technologie ist erstaunlich, aber nicht perfekt.',
  problem_scene1: 'Hohe Gebäude stören die Satellitendaten',
  problem_scene2: 'Geschwindigkeitsänderungen können bis zu 10 Sekunden Verzögerung haben',
  problem_scene2_mobile: 'Tempowechsel können eine Verzögerung haben',
  problem_scene3: 'Indoor-Laufen ist reine Raterei',
  solution: 'UNSERE LÖSUNG',
  solution_desc: 'Der COROS POD 2 löst die häufigsten Probleme der GPS-Uhrentechnologie beim Laufen, wie z.B. Datenverzögerung, schwaches Signal und Satellitenunterbrechung. Der COROS POD 2 misst die Bewegungen direkt an deinem Fuß und verbessert so die Genauigkeit und Pace-Sensibilität, damit du intelligenter und effizienter trainieren kannst.',
  more: 'MEHR',
  more1: 'MEHR',
  more2: 'MEHR',
  more3: 'MEHR',
  more4: 'MEHR',
  sensitive: 'SENSITIVE INSTANT PACE',
  datalag: 'Verabschiede dich von Übertragungsverzögerungen',
  datalag_desc: 'Mit dem fortschrittlichen Beschleunigungssensor des COROS POD 2 erhältst du die Daten direkt von deinem Fuß, damit die Pace auf deiner Uhr so schnell wie möglich angezeigt wird. Mit dem COROS POD 2 entfällt die Verzögerung von bis zu 10 Sekunden, die bei GPS-Uhren durch die Handgelenksensoren verursacht wird. Mit dem eingebauten Pace Alert stellt deine COROS-Uhr in Verbindung mit dem COROS POD 2 sicher, dass du dein Zieltempo fast in Echtzeit einhalten kannst, anstatt auf deine Daten zu warten, selbst wenn kein GPS-Signal vorhanden ist.',
  accurate: 'GENAU IN INNENRÄUMEN',
  accurate_subtitle: 'Ein zuverlässiger Weg, um die Distanz in Innenräumen zu messen',
  accurate_desc: 'Mit der präzisen Tempoerkennung misst der COROS POD 2 die genaue Distanz, die du gelaufen bist, sogar in geschlossenen Räumen. Indem er die Bewegung deines Fußes durch den Raum auf einer XYZ-Ebene aufzeichnet, kalibriert sich der COROS POD 2 automatisch, um deinen Schritt und die Distanz zu berechnen, die du auf einem Laufband oder einer Indoor-Bahn zurückgelegt hast. Der COROS POD 2 ist dein perfekter Trainingspartner für Indoor-Lauftrainings im Winter oder bei bei schlechtem Wetter.',
  consistent: 'KONSISTENT IN DEN STÄDTEN',
  gps: 'Verbessertes Tracking bei schwachen GPS-Signalen',
  gps_desc: 'Bei der GPS-Technologie kann es zu Störungen kommen. Wenn du durch Tunnel oder auf den ersten Kilometern des Chicago-Marathons zwischen  Wolkenkratzern läufst, werden nicht nur die Geschwindigkeits- und Distanzdaten deiner Uhr gestört, sondern auch die GPS-Tracks durcheinander gebracht. An dieser Stelle kommt der COROS POD 2 ins Spiel. Mit den Daten, die von verschiedenen internen Sensoren gesammelt werden, kann der COROS POD 2 GPS-Störungen wie Pace Spikes und Drops automatisch korrigieren. Deine COROS Uhr arbeitet mit dem COROS POD 2 zusammen, um die Datenkonsistenz während deiner Läufe zu verbessern.',
  precise: 'PRÄZISE AUF HÜGELIGEM TERRAIN',
  comprehensive_metric: 'Eine umfassende Metrik für dein gesamtes Training',
  comprehensive_metric_desc: 'Nicht jedes Laufgelände ist perfekt flach. Effort Pace ist eine einzigartige COROS-Kennzahl, die dir sagt, wie hart du auf hügeligem Terrain tatsächlich arbeitest. Mit der sofortigen Dateneingabe des COROS POD 2 wird deine Effort Pace noch genauer. Der COROS POD 2 macht deine Effort Pace 5x reaktionsschneller als herkömmliches GPS, sodass du nach dem Training blitzschnelle Entscheidungen treffen und deine Gesamtanstrengung besser analysieren kannst.',
  learn_effort_pace: 'Erfahre mehr über Effort Pace',
  beyond_gps: 'ÜBER GPS HINAUS',
  beyond_gps_desc: 'Der COROS POD 2 ist noch mehr als das. Er liefert fortschrittliche Laufdaten in einem leichten, schlanken Design, das einfach zu bedienen ist und deine längsten Läufe überdauern wird.',
  even: 'NOCH',
  even1: 'NOCH',
  running_insights: 'MEHR EINBLICKE INS LAUFEN',
  beyound_gps_desc1: 'Dank der intelligenten Erkennung der Trageposition (Schuh oder Bund) liefert der COROS POD 2 wichtige Messwerte, die dir helfen, deinen Laufstil, deine Form und deine Technik besser zu verstehen.',
  stride_height: 'Schritthöhe',
  balance: 'Links/Rechts-Gleichgewicht',
  ground_contact_time: 'Bodenkontaktzeit',
  stride_ratio: 'Schrittverhältnis',
  monitor: 'MONITOR',
  temperature: 'AUSSENTEMPERATUR',
  monitor_desc: 'Der COROS POD 2 zeichnet während deines Laufs die Umgebungstemperatur auf, damit du genau weißt, wie warm oder kalt es während deiner Aktivität war. Anhand dieser Daten kannst du deine Läufe weiter analysieren, wenn du in verschiedenen Klimazonen oder zu verschiedenen Jahreszeiten trainierst.',
  battery: 'AKKULAUFZEIT',
  battery_1: 'DIE DU NICHT SCHLAGEN KANNST',
  battery_desc: 'Der COROS POD 2 ist mit einem leistungsstarken Akku ausgestattet, der wochenlang geladen bleibt. In Verbindung mit der tragbaren Ladestation, die bis zu 5 volle Ladungen liefert, musst du dir keine Sorgen mehr um einen leeren Akku machen.',
  continuous_running: 'Bis zu 25 Stunden Dauerbetrieb',
  total_running: 'Bis zu 150 Stunden Gesamtbetriebszeit (mit Ladestation)',
  lightweight: 'LEICHT',
  and: 'UND',
  weatherproof: 'WETTERFEST',
  light_waterproof_desc: 'Mit einem Gewicht von nur 5,6 g wirst du den COROS POD 2 beim Training oder Wettkampf nicht einmal bemerken. Egal, ob du auf der Straße oder in den Bergen unterwegs bist, der COROS POD 2 hält den Elementen stand – von Temperaturen unter dem Gefrierpunkt bis zu großer Hitze (-10°C bis 60°C) – und ist bis zu 3 ATM wasserdicht.',
  setup: 'KONFIGURATION LEICHT GEMACHT',
  setup_desc: 'Der COROS POD 2 kann am Schuh getragen oder an den Hosenbund geklippt werden und schont die Batterie, wenn er nicht in Bewegung ist.',
  pair: 'KOPPELN',
  pair_desc: 'Füge den COROS POD 2 zu deiner COROS-App hinzu, um ihn automatisch mit verbundenen Uhren zu koppeln.',
  clip: 'CLIP',
  clip_desc: 'Befestige ihn an deinem Schuh oder Hosenbund. Wenn du willst, kannst du ihn nach dem Lauf an deinem Schuh lassen.',
  go: 'LOS',
  go_desc: 'Sobald die Ersteinrichtung abgeschlossen ist, kannst du ganz normal laufen und erhältst sofortige Messdaten in Echtzeit.',
  in_the_box: 'WAS IM KARTON IST',
  in_the_box_desc: 'Im Lieferumfang des COROS POD 2 ist alles enthalten, was du brauchst: zwei Schuhclips, ein Silikonclip für den Hosenbund, eine Ladestation, ein USB-A-zu-USB-C-Ladekabel und eine kompakte Tasche.',
  faq: 'FAQ',
  fullCorosPod2Faq: 'VOLLSTÄNDIGE COROS POD 2 FAQ',
  faq_list1: [{
    ask: 'Kann ich den COROS POD 2 auch mit anderen Uhren als COROS verwenden?',
    ans: 'Der COROS POD 2 ist nur mit COROS-Uhren kompatibel.'
  }, {
    ask: 'Misst der COROS POD 2 die Laufleistung?',
    ans: 'Nein, der COROS POD 2 verwendet die Effort-Pace-Messung, die viel einfacher und individueller zu verstehen ist, damit du genau weißt, wie hart dein Körper arbeitet.'
  }, {
    ask: 'Wie kann der COROS POD 2 mein Training verbessern?',
    ans: 'Der COROS POD 2 kann dir beim Training helfen, indem er dir genauere Informationen liefert, die du nach jedem Training überprüfen kannst. Gehe in dein       <a class=""color-danger"" href=""https://coros.com/traininghub"">COROS Training Hub</a> Konto, um Kennzahlen und Daten zu sehen, die dir helfen, deine Stärken und Schwächen zu erkennen. Dieses Tool wurde entwickelt, um dir die bestmöglichen Daten zu liefern, damit du dein Training und deine Leistung weiter verbessern kannst.'
  }, {
    ask: 'Wie kann mir der COROS POD 2 bei meinen Wettkämpfen helfen?',
    ans: 'Der COROS POD 2 kann dir bei deinen Wettkämpfen auf zwei Arten helfen. Du kannst die Effort Pace nutzen, um deine Anstrengung unabhängig von den Höhenunterschieden des Geländes besser zu verstehen. Eine genauere und sensiblere Pace kann dir helfen, dein Tempo besser zu bestimmen. Mit dem COROS POD 2 kennst du deine Pace ohne GPS-Verzögerung und kannst so sicherstellen, dass du nie über oder unter deinem geplanten Tempo bleibst.'
  }]
});
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/de/vertix2.js
var de_vertix2 = __webpack_require__(75352);
var de_vertix2_default = /*#__PURE__*/__webpack_require__.n(de_vertix2);
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/map.js
/* harmony default export */ const de_map = ({
  maptitle: 'Karte herunterladen',
  mapsubheader: 'Regionauswahl',
  mapdownloadentireregion: 'Download der gesamten Regionen',
  mapwelcome: 'Willkommen auf der brandneuen COROS-Karten-Download-Seite. Hier findest du unsere aktuellen topografischen (Topo) und Landschaftskarten, die du kostenlos herunterladen kannst! Zurzeit sind die Topo- und Landschaftskarten nur für die VERTIX 2 verfügbar. Wir freuen uns jedoch, ankündigen zu können, dass die Topo-Karten im Laufe des Jahres auch für APEX Pro- und VERTIX 1-Nutzer verfügbar sein werden.',
  mapdownload_instruction: 'Befolge diese Anweisungen, um die topografische Karte (Topo) und/oder die Landschaftskarte für deine Region herunterzuladen:',
  mapdownload_instruction_list1: '- Halte die SHIFT-Taste gedrückt, während du mit der Maus/dem Cursor über das gewünschte Gebiet ziehst.',
  mapdownload_instruction_list2: '- Wenn du die gewünschte Region ausgewählt hast, klicke auf die Schaltfläche "Herunterladen", um die ungefähre Dateigröße für den Download der Topo- oder Landschaftskarte für diese Region anzuzeigen.',
  mapdownload_tips: '* Bitte beachte bei der Auswahl einer Region, dass die Modelle APEX Pro und VERTIX 1 über 4 GB internen Speicher verfügen, während die VERTIX 2 32 GB hat. *',
  mapdownload_message: 'Der Download hat begonnen, schließe das Pop-up-Fenster, um den Fortschritt zu sehen',
  mapdownload_instruction_mobile: 'Bitte verwende deinen Desktop-Computer, um Karten von dieser Seite herunterzuladen.',
  maplandscope_introduction: 'Landschaftskarten enthalten derzeit Informationen wie Straßen, größere Straßennetze, natürliche Merkmale und Wasserwege. Landschaftskarten enthalten keine internationalen Grenzen, Verwaltungsgrenzen oder Informationen über interessante Orte wie Restaurants, Tankstellen, Geschäfte, Schulen usw.',
  maptopo_introduction: 'Topo-Karten sind eine detaillierte Aufzeichnung eines Landgebiets mit geografischen Positionen und Höhenangaben zu natürlichen und vom Menschen geschaffenen Merkmalen. Sie zeigen die Form des Landes, die Berge, Täler und Ebenen mit Hilfe von Höhenlinien (Linien gleicher Höhe über dem Meeresspiegel).',
  maph4: 'Bitte wähle eine Region zum Herunterladen aus der untenstehenden Tabelle.',
  maph5: 'Wie wird installiert?',
  mapl1: 'Bitte vergewissere dich vor dem Herunterladen, dass du genügend Speicherplatz auf deiner Festplatte hast.',
  mapl2: 'Entpacke die heruntergeladene Datei auf deiner Festplatte.',
  mapl3: 'Finde den Kartenordner und kopiere ihn auf die Uhr.',
  mapl4: 'siehe:',
  maph6: 'Karte im Querformat',
  mapt3: 'Geschätzte Dateiübertragungszeit:',
  maph7: 'Topo-Karte',
  mapt4: 'Geschätzte Dateiübertragungszeit:',
  mapconditions: '©OpenStreetMap Bedingungen und Konditionen',
  mapconditions_1: 'Diese Karte wurde mit Hilfe der von der Community erstellten ©OpenStreetMap (OSM) Datenbank erstellt. Die Nutzung dieser Karte unterliegt nicht den Bedingungen der Endnutzer-Lizenzvereinbarung (EULA), sondern den folgenden Bedingungen von ©OpenStreetMap：',
  mapconditions_2: 'Die ©OpenStreetMap-Daten unterliegen dem Urheberrecht der ©OpenStreetMap-Mitwirkenden und sind Gegenstand der Open Database License. Alle Rechte an den einzelnen Inhalten der ©OpenStreetMap-Daten werden unter der Database Content License lizenziert.',
  maph9: 'Datenumfang',
  mapt7: 'Diese Karte enthält nur das Straßen- und Wegenetz, Wasserstraßen und natürliche Merkmale. Sie enthält keine internationalen Grenzen, Verwaltungsgrenzen oder Points of Interest wie Geschäfte, Restaurants oder Parkplätze.',
  maph10: 'Warnung',
  mapt8: '©COROS formatiert und gestaltet nur ©OpenStreetMap-Karten. ©COROS übernimmt keine Garantie für die Richtigkeit oder Vollständigkeit der Kartendaten in ©OpenStreetMap-Produkten. Du nutzt sie auf eigenes Risiko.',
  mapt9: 'Du übernimmst die volle Verantwortung und das Risiko für die Nutzung der Kartendaten. ©COROS ist dir gegenüber nicht für die Kartierungsdaten verantwortlich und gibt dir gegenüber keine ausdrücklichen oder stillschweigenden Zusicherungen oder Gewährleistungen im Zusammenhang mit den Kartierungsdaten ab, einschließlich, aber nicht beschränkt auf die Genauigkeit, Vollständigkeit, Zuverlässigkeit oder Nutzbarkeit der Kartierungsdaten. Daher haftet ©COROS dir gegenüber nicht für Schäden oder Ansprüche, die sich direkt oder indirekt aus der Nutzung der Kartierungsdaten ergeben.',
  mapt10: 'Die ©COROS-Karten sind nur als Referenz gedacht und sollten nicht für Zwecke verwendet werden, die genaue Messungen von Richtung, Entfernung, Lage oder Gelände erfordern.',
  mapt11: 'Stunden',
  mapcopyright: '© 2021 | COROS Wearables Inc.',
  mapregion: 'Region',
  mapgeomap: 'Landschaft',
  downloadprocess: 'Dateien generieren',
  shiftPress: 'So wählst du eine Region aus: Halte die SHIFT-Taste gedrückt und ziehe den Cursor/Mauszeiger über die gewünschte Region.',
  mapcontours: 'Topo',
  maplanguage: 'Sprache',
  mapcn: '中文',
  mapen: 'English',
  africa: 'Afrika',
  antarctica: 'Antarktis',
  asia: 'Asien',
  asia1: 'Asien - 1',
  asia2: 'Asien - 2',
  asia3: 'Asien - 3',
  asia4: 'Asien - 4',
  'north-america1': 'Nordamerika - 1',
  'north-america2': 'Nordamerika - 2',
  'australia-oceania': 'Ozeanien',
  'central-america': 'Mittelamerika',
  europe: 'Europa',
  'north-america': 'Nordamerika',
  'south-america': 'Südamerika',
  maplocaldown: 'Herunterladen',
  mapdownloadbutton: 'Karte herunterladen',
  maphelplink: 'Installationsanleitung',
  mapdownloadtitle: 'Karten unten herunterladen',
  mapmacoshelp: 'Ausführliche Anleitung für MacOS',
  mapwinhelp: 'Ausführliche Anleitung für Windows',
  macostitle: 'Installationsanweisungen',
  macost1: '1. Wähle die Zip-Datei aus, um sie zu entpacken. Dadurch wird die Datei auf deiner Festplatte und als Ordner auf deinem Desktop gespeichert (zum Beispiel: Asia3_map.).',
  macost2: '2. Verbinde deine COROS-Uhr über das USB-/Ladekabel mit dem Computer und warte, bis das Diskettensymbol auf deinem Desktop erscheint.',
  macost3: '3. Wähle das Diskettensymbol (VERTIX 2), um das Stammverzeichnis deiner Uhr zu öffnen. Du wirst sehen, dass zwei Ordner, "map" und "Music", bereits im Verzeichnis deiner Uhr installiert sind (siehe unten).',
  macost4: '4. Halte die Optionstaste gedrückt und ziehe den heruntergeladenen Ordner "map" (mit der Bezeichnung: map) in das Hauptverzeichnis deiner COROS-Uhr. Auf dem Foto unten siehst du ein Beispiel mit Asia1_landscape als Beispiel.',
  macost5: 'Wenn du dazu aufgefordert wirst, wähle im Pop-up-Dialog "Zusammenführen" und warte, bis der Kopiervorgang abgeschlossen ist.',
  macoscautions: 'Bitte lesen:',
  macosc1: '1. Um zu vermeiden, dass das Standardverzeichnis [map] auf deiner Uhr ersetzt wird, befolge bitte die folgenden Schritte: Wenn du auf das Kartenverzeichnis zugreifst und es kopierst, drücke beim Ziehen und Kopieren die "Option"-Taste auf der Tastatur. Je nach Betriebssystem deines Computers kann ein Pop-up-Fenster erscheinen, in dem du aufgefordert wirst, "Anhalten, Ersetzen oder Zusammenführen" zu wählen. Wenn du dieses Pop-up-Fenster siehst, wähle bitte "Zusammenführen". Wähle nicht "Ersetzen", denn dadurch werden die ursprünglichen Kartendateien im [map]-Verzeichnis deiner Uhr gelöscht.',
  macosc2: '2. Je nach Internetgeschwindigkeit und Größe des Downloads kann es sehr lange dauern, bis die Kartendateien auf die Festplatte deiner Uhr übertragen sind. Bitte plane entsprechend ein und stelle sicher, dass dein Computer richtig mit dem Stromnetz verbunden ist.',
  macosc3: '3. Vergewissere dich, dass sich das [map]-Verzeichnis im Hauptverzeichnis deiner Uhr befindet und benenne die Datei nicht um, da dies zu Problemen bei der Installation führen kann.',
  windowstitle: 'Anleitung',
  windowst1: '1. Wähle die Zip-Datei aus, um sie zu entpacken. Dadurch wird die Datei auf deiner Festplatte und in einem Ordner auf deinem Desktop gespeichert (zum Beispiel: North_America_Contour).',
  windowst2: '2. Schließe die Uhr über das USB-Kabel an den Computer an, wähle "Datei-Explorer" in der Taskleiste und dann "Dieser PC" im linken Fensterbereich. Hier siehst du, dass deine COROS-Uhr als Festplattenlaufwerk angezeigt wird.',
  windowst3: '3. Suche nun das extrahierte Verzeichnis/die Kartendatei aus Schritt 1 (auf deinem Desktop oder in deinen Dateien), klicke mit der rechten Maustaste auf das [Karten]-Verzeichnis, klicke auf das Menü "Senden", wähle dann "VERTIX 2" und warte, bis die Dateiübertragung abgeschlossen ist.',
  windowscautions: 'Bitte lesen:',
  windowsc1: '1. Um zu vermeiden, dass das Standardverzeichnis [map] auf deiner Uhr ersetzt wird, wähle im Pop-up-Fenster "Zusammenführen". Wähle bitte nicht "Ersetzen", da dadurch die ursprünglichen Kartendateien im [map]-Verzeichnis deiner Uhr gelöscht werden.',
  windowsc2: '2. Je nach Internetgeschwindigkeit und Größe des Downloads kann es sehr lange dauern, bis die Kartendateien auf die Festplatte deiner Uhr übertragen sind. Bitte plane entsprechend und stelle sicher, dass dein Computer richtig mit dem Stromnetz verbunden ist.',
  windowsc3: '3.  Achte darauf, dass das Verzeichnis [map] im Hauptverzeichnis deiner Uhr liegt und benenne die Datei nicht um, da dies zu Problemen bei der Installation führen kann.',
  updatedAt: 'Update Time：{updateTime}',
  A3000: 'Select the firmware and update (update to the latest version is recommended)',
  A3001: '{version} and above',
  A3002: 'Other firmware updates',
  A3003: 'How to check your watch firmware version',
  A3004: 'Check the firmware version in COROS APP> Profile > Device page'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/trainingHub.js
/* harmony default export */ const de_trainingHub = ({
  title: 'COROS Training Hub',
  keywords: 'trainieren, analysieren, sportler, coach, sportlich, leistung, kommunikation, ausdauer, fitness, ermüdung, marathon, triathlon',
  description: 'Unsere kostenlose Analyse- und Coaching-Plattform für COROS-Nutzer.',
  desc: 'Aufbauend auf dem COROS EvoLab gibt der COROS Training Hub dir oder deinem Coach jetzt die Werkzeuge an die Hand, um auf höchstem Niveau zu trainieren – und das kostenlos. Über das Webportal des COROS Training Hub hast du sofortigen Zugriff auf deine Daten und kannst vergangene und aktuelle Kennzahlen analysieren, mit deinem Trainer kommunizieren und interagieren, einen Trainingsplan erstellen und einem Team beitreten oder es verwalten.',
  visualize: {
    title: "verstehe deine vergangenheit\n     analysiere deine gegenwart\n      gestalte deine zukunft",
    desc: "Visualisiere alle deine Daten im COROS Training Hub, damit du oder\n    dein Trainer die Effizienz maximieren und sicherstellen k\xF6nnen, dass\n    deine Fitness bereit ist, um dein n\xE4chstes Ziel zu erreichen."
  },
  plans: {
    title: 'folge einem plan',
    desc: "Pr\xE4diktive Analysen in Verbindung mit unserer Drag-and-Drop-Funktion\n    erm\xF6glichen es dir oder deinem Coach ganz einfach individuelle Workouts\n    und Trainingspl\xE4ne erstellen."
  },
  interact: {
    title: 'nahtlose interaktion',
    desc: "Trainingskommentare und Push-Benachrichtigungen, die mit deiner\n    COROS-App synchronisiert werden, erm\xF6glichen eine nahtlose\n    Zwei-Wege-Kommunikation zwischen Sportler und Trainer."
  },
  team: {
    title: 'trainiere mit einem team',
    desc: "Egal, ob es sich um ein bestehendes Team oder eine virtuelle\n    Laufgruppe handelt, der COROS Training Hub bietet dir die\n    M\xF6glichkeit, das Training deines gesamten Teams zu sehen,\n    um die Motivation, die Verantwortlichkeit und das\n    Gemeinschaftsgef\xFChl zu verbessern."
  },
  knowMore: {
    title: 'coros training hub kennenlernen',
    desc: 'Im COROS Help Center findest du eine ausführliche Übersicht über die Funktionen des COROS Training Hub.\n\nCOROS Training Hub ist für Coaches über die unten stehende Anmeldung verfügbar. Coaches können Teams erstellen, Athleten verwalten, Trainingspläne erstellen und zuweisen und weitere Funktionen der Plattform nutzen. Um Zugang zu erhalten, müssen die Trainer ihre Trainerlegitimation einreichen und ein Tutorial mit unserem Sportwissenschaftsteam absolvieren.'
  },
  coachSignup: 'traineranmeldung',
  athleteSignup: 'ATHLETENANMELDUNG',
  login: 'ANMELDEN',
  privacy: 'Datenschutzerklärung',
  readPrivacy: 'Ich habe die Datenschutzbestimmungen gelesen und stimme ihnen zu.',
  forgot: 'Passwort vergessen',
  rememderMe: 'An mich erinnern',
  loginFailed: 'Ungültige E-Mail oder ungültiges Passwort.',
  notOpen: 'Dienst noch nicht verfügbar',
  email: 'E-Mail',
  password: 'Kennwort',
  welcomeBack: 'WILLKOMMEN ZURÜCK!',
  launch: 'APP STARTEN',
  logOut: 'Abmelden',
  agreeNotify: 'Bitte lesen und prüfen Sie zuerst die Datenschutzbestimmungen und Nutzungsbedingungen'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/home.js
/* harmony default export */ const de_home = ({
  localeswitchtips: 'Umleitung zu Ihrem Standort?',
  insName: 'COROS_DACH',
  vertix2: {
    name: 'COROS VERTIX 2',
    desc: 'Für Sportler,\ndie alles wollen'
  },
  pace2: {
    name: 'COROS PACE 2',
    desc: 'Für Multisport-Athleten, die schnell und lange trainieren'
  },
  apexPro: {
    name: 'COROS APEX Pro',
    desc: 'Für Ausdauer-Athleten in rauen Umgebungen'
  },
  apex: {
    name: 'COROS APEX',
    desc: 'Für Outdoor-Athleten, die leicht und schnell reisen'
  },
  apex2: {
    name: 'COROS APEX 2',
    desc: 'Für intensive Bergsportler auf langen Strecken.'
  },
  vertix: {
    name: 'COROS VERTIX',
    desc: 'Unser Original für extreme Abenteurer'
  },
  pod: {
    name: 'COROS POD',
    desc: 'Erweiterte Laufmetriken zur Optimierung deiner Leistung'
  },
  pod2: {
    name: 'COROS POD 2',
    desc: 'Die nächste Stufe der Genauigkeit für alle Läufer'
  },
  trainingHub: {
    title: 'COROS TRAINING HUB',
    desc: 'Verstehe deine Vergangenheit, analysiere deine Gegenwart und gestalte deine Zukunft mit unserer leistungsstarken Trainingsplattform. Erstelle Trainingspläne und arbeite mit deinem Trainer von überall und zu jeder Zeit.'
  },
  story: {
    title: 'VORGESTELLTE STORYS'
  },
  viewAllPlans: 'ALLE PLÄNE ANSEHEN',
  plans: {
    title: 'TRAININGSPLÄNE',
    desc: 'Mit unseren von Trainer entworfenen und von Athleten erprobten Trainingsplänen holst du das Beste aus deiner Uhr und deinem Körper raus.'
  },
  banners: [{
    title: 'EXPLORE PERFECTION DISCOVER POTENTIAL',
    linkDesc: 'PRODUKTÜBERSICHT'
  }],
  learnMore: 'MEHR ERFAHREN',
  buy: 'KAUFEN',
  readMore: 'WEITERLESEN',
  watch: 'JETZT ANSEHEN',
  outOfStock: 'AUSVERKAUFT',
  title: 'COROS | Leistungssporttechnologie',
  desc: 'Innovation für Läufer, Abenteurer und Sportler aller Sportarten.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/common.js
/* harmony default export */ const de_common = ({
  header: {
    support: 'Support',
    stories: 'Beiträge',
    products: 'Produkte',
    training_science: 'Training',
    technology: 'Technologie',
    people: 'Menschen',
    trainingHub: 'Training Hub',
    plans: 'Trainingspläne',
    workouts: 'Workouts',
    trainingBlog: 'Training Blog',
    retail: 'Shop-Suche',
    athlete: 'Profi-Athleten',
    shopNow: 'JETZT KAUFEN',
    overview: 'ÜBERBLICK',
    specs: 'SPEZIFIKATIONEN',
    login: 'ANMELDEN',
    review: 'REZENSIONEN',
    login2trainingHub: 'LOGIN',
    all_watches: 'Alle GPS-Uhren',
    pod2: 'COROS POD 2',
    checkWarranty: 'Garantie-Status',
    menu1: {
      name: 'PRODUKT',
      subnav: {
        nav1: 'COROS VERTIX 2',
        nav2: 'COROS VERTIX',
        nav3: 'COROS APEX Pro',
        nav4: 'COROS APEX',
        nav5: 'COROS PACE 2',
        nav6: 'COROS PACE 2 EK',
        nav7: 'COROS POD',
        nav8: 'Zubehör',
        nav9: 'Andere',
        nav10: 'COROS PACE',
        nav11: 'SafeSound-MOUNTAIN',
        nav12: 'SafeSound-ROAD',
        nav13: 'SafeSound-URBAN',
        nav14: 'OMNI',
        nav15: 'LINX'
      }
    },
    menu2: {
      name: 'GEMEINSCHAFT',
      subnav: {
        nav1: 'COROS GESCHICHTEN',
        nav2: 'COROS PROFI-SPORTLER',
        nav3: 'EINTAUSCHPROGRAMM',
        nav4: 'GEPRÜFTES TRAINING',
        nav5: 'TRAININGSPLÄNE'
      }
    },
    menu3: {
      name: 'HILFE',
      subnav: {
        nav1: 'BENUTZERANMELDUNG',
        nav2: 'SUPPORT CENTER',
        nav3: 'GARANTIE',
        nav4: 'HINWEISE ZUR FREIGABE',
        nav5: 'UHRENVERGLEICH'
      }
    },
    menu4: {
      name: 'ÜBER',
      subnav: {
        nav1: 'ÜBER UNS',
        nav2: 'IN DEN NEWS',
        nav3: 'KONTAKT',
        nav4: 'VERANSTALTUNGEN',
        nav5: 'KARRIERE'
      }
    },
    menu5: {
      name: 'SHOP-SUCHE'
    },
    menu6: {
      name: 'LAND',
      subnav: {
        nav1: 'Vereinigte Staaten (Englisch)',
        nav2: 'Vereinigtes Königreich (Englisch)',
        nav3: 'Kanada (Englisch)',
        nav4: 'Frankreich (Français)',
        nav5: 'Deutschland (Deutsch)',
        nav6: '中国 (中文)',
        nav7: '日本 (日本語)'
      }
    }
  },
  footer: {
    subscribeEmailError: 'Bitte gültige E-Mail-Adresse angeben.',
    DealerLogin: 'Händler-Login',
    ReturnRefund: 'Rückgabe & Rückerstattung',
    WatchComparison: 'Uhrenvergleich',
    TermsConditions: 'Nutzungsbedingungen',
    ReleaseNotes: 'Versionsanmerkungen',
    PrivacyPolicy: 'Datenschutzrichtlinie',
    CookieSettings: 'Cookie-Einstellungen',
    WheretoDownload: 'Wo kann man herunterladen?',
    copyright: '© 2020 | COROS Wearables Inc.',
    trainingHub: 'COROS Training Hub',
    evolab: 'COROS EvoLab',
    coach: 'Coaching-Lösungen',
    warranty: 'Garantie',
    helpCenter: 'Hilfe-Center',
    maps: 'Karten',
    software: 'Software',
    hardware: 'Hardware',
    support: 'Hilfe',
    company: 'Unternehmen',
    news: 'Pressezentrum',
    inTheNews: 'In der Presse',
    countries: 'Regionen',
    about: 'Über uns',
    careers: 'Karriere',
    contact: 'Kontakt',
    joinUs: 'BEITRETEN',
    subscripPlaceholder: 'E-MAIL-ADRESSE ANGEBEN',
    pod2: 'COROS POD 2',
    subscribe: {
      success: {
        title: 'Vielen Dank!',
        desc: 'Abonnement erfolgreich!'
      },
      error: {
        title: 'Oops!',
        desc: 'Oops! Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.'
      },
      title: "Abonniere unseren Newsletter f\xFCr\n      aktuellsten News von COROS"
    }
  },
  country: {
    usa: 'usa',
    kingdom: 'königreich',
    newzealand: 'neuseeland'
  },
  home: 'Startseite',
  shopnow: 'Kaufen',
  speecs: 'SPEZIFIKATIONEN',
  comparisonchart: 'VERGLEICHSTABELLE',
  video: {
    play: 'Wiedergabe',
    pause: 'Pause',
    replay: 'Nochmal'
  },
  race: {
    courseDetails: 'Details zur Route'
  },
  subscribeBIS: {
    notifyMe: 'informieren',
    requireEmail: 'Gib deine E-Mail.',
    invalidEmail: 'Ungültige E-Mail. Bitte versuchen Sie es erneut.',
    emailMeWhenAvailable: 'mich benachrichtigen',
    success: 'Sie haben diesen Artikel abonniert.',
    tooManyReq: 'Bitte warten Sie ein paar Sekunden und versuchen Sie es erneut.',
    serverError: 'Der Server ist ausgefallen. Bitte versuchen Sie es später noch einmal.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/declarationOfConformity.js
/* harmony default export */ const de_declarationOfConformity = ({
  apex46: 'COROS APEX 46 mm',
  apex42: 'COROS APEX 42 mm',
  safeSound: 'COROS SafeSound'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/getApp.js
/* harmony default export */ const de_getApp = ({
  title: 'HOL DIR DIE APP',
  desc: 'Eine Fitness-App für alle',
  subDesc: 'Die COROS-App ist ein wesentlicher Bestandteil deines COROS-Erlebnisses. \nMit ihr kannst du dein Gerät verwalten und deine Daten synchronisieren, um detaillierte Leistungsanalysen zu erhalten.',
  appExamples: [{
    title: 'verfolgen sie ihren fortschritt',
    text: 'Erhalten Sie täglich Informationen über Herzfrequenz, Energieverbrauch, Schlaf und mehr.'
  }, {
    title: 'kennen sie ihren weg',
    text: 'Überprüfen Sie erweiterte Aktivitätsmetriken, GPS-Routen und Trainingstrends.'
  }, {
    title: 'kennen deinen weg',
    text: 'Überprüfen Sie erweiterte Aktivitätsmetriken, GPS-Routen und Trainingstrends.'
  }, {
    title: 'setze deine ziele',
    text: 'Trainieren Sie intelligenter mit Race Predictor, Fatigue Management und weiteren Tools.'
  }, {
    title: 'verwalte dein gerät',
    text: 'Aktualisieren Sie die Firmware, laden Sie Zifferblätter herunter, und personalisieren Sie Ihr Gerät.'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/apexPro.js
/* harmony default export */ const de_apexPro = ({
  title: 'COROS APEX Pro GPS-Uhr',
  desc: 'Unsere Premium-Uhr für Ausdauersportler in rauen Umgebungen.',
  name: 'COROS APEX Pro',
  accessories: 'APEX-PRO-ZUBEHÖR KAUFEN',
  trailTested: {
    title: "Geht mit dir\n        auf jedes Abenteuer",
    desc: 'Die Titan-Fassung, das Saphirglas und die Wasserdichtigkeit auf bis zu 100 Meter sorgen für eine ultimative Langlebigkeit. Bei einem Gewicht von gerade einmal 59 g (inklusive Armband), kannst du die APEX Pro auf jedes nur erdenkliche Abenteuer mitnehmen.'
  },
  battery: {
    desc: 'Die APEX Pro bietet dir 40 Stunden Akkulaufzeit im GPS-Modus - 14 % mehr als bei der originalen APEX. Jetzt schaffst du die 160 km durch die Berge auch ohne den UltraMax-Modus.'
  },
  mountainGuide: {
    title: 'Ein Bergführer an deinem Handgelenk',
    desc: 'Mit der 24/7 Blutsauerstoff-Messung und dem Höhen-Modus, sind die APEX Pro und die VERTIX die einzigen Uhren, die stündliche Akklimatisierungs-Bewertungen liefern. Deine Uhr lässt dich wissen, wann du weiter klettern kannst und wann du auf eine niedrigere Höhenlage zurückgehen solltest'
  },
  touchFeat: {
    title: 'Die Navigations-funktion',
    desc: 'Bei der APEX Pro stellt COROS erstmals einen Touchscreen vor. Durch den Touchscreen wird die ohnehin schon einfach bedienbare und funktionale APEX nun noch einfacher zu bedienen. Mit dem Touchscreen und der Krone kannst du deine Strecke hin und her bewegen und heran- bzw. rauszoomen.',
    videos: ['Wie benutze ich grundlegende Navigationsfunktionen', 'Wie benutze ich erweiterte Navigationsfunktionen', 'Wie benutze ich Zwischenstopps bei der Navigation']
  },
  trainingMode: {
    title: 'ALLE WORKOUTS - IMMER UND ÜBERALL',
    desc: 'Im Trainingsmodus kannst du aus mehr als 200 Übungen auswählen, um dein ideales Lauf-, Fahrrad-, Schwimm- oder Krafttraining zu kreieren. Beim Erstellen deines Workouts sind dir quasi keine Grenzen gesetzt! Über coros.com kannst du sogar Workouts von professionellen Athletinnen und Athleten und Trainerinnen und Trainern auf deine Uhr herunterladen. Anschließend kannst du deine Erfolge z. B. per WhatsApp, E-Mail oder Facebook mit deinen Freundinnen und Freunden und Trainingspartnerinnen und -partnern teilen. Mit dem neuen Trainingsmodus sind deine besten Leistungen immer in Reichweite!'
  },
  nightMode: {
    title: 'Klare Sicht für Nachtaktive',
    desc: 'Im Nachtmodus bleibt die Hintergrundbeleuchtung während des gesamten Workouts aktiv. Das Licht ist hell genug, um das Display nachts angenehm lesen zu können und gleichzeitig so gedimmt, dass die Akkulaufzeit kaum beeinflusst wird. Wenn du dein Workout beendest oder die Sonne aufgeht, wird der Nachtmodus automatisch deaktiviert.'
  },
  stayTrack: {
    title: 'Bleib auf Kurs',
    desc: 'Eine Standard-Laufbahn ist 400 Meter lang. Trotzdem können viele GPS-Geräte diese Strecke nicht richtig tracken. Beim neuen Bahntraining-Modus von COROS wird ein spezieller Algorithmus verwendet, um sicherzugehen, dass dein Bahntraining korrekt gemessen wird - egal welche Bahn du wählst. Vorbei sind die willkürlichen Zickzacklinien oder scharfen Richtungswechsel über den Platz! Ab sofort wird dein Training so dargestellt, wie du läufst.'
  },
  batteryDetails: {
    duration: ['Bis zu', '14 % längere', 'Akkulaufzeit'],
    subDesc: "Gemacht f\xFCr\n    den l\xE4ngeren Lauf"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/accessories.js
/* harmony default export */ const de_accessories = ({
  title: 'Zubehör',
  buy: 'JETZT KAUFEN',
  'vertix2-nylon-band': 'COROS VERTIX 2 Nylon-Armband',
  'vertix2-silicone-band': 'COROS VERTIX 2 Silikon-Armband',
  pod: 'COROS POD',
  'vertix-charging-cable': 'COROS APEX-/VERTIX-Ladekabel',
  'keychain-watch-charger': 'COROS Schlüsselanhänger-Ladekabel',
  'vertix-nylon-band': 'COROS VERTIX Nylon-Armband',
  'vertix-silicone-band': 'COROS VERTIX Silikon-Armband',
  'charging-cable': 'COROS Ladekabel',
  'apex-pro-nylon-band': 'COROS APEX 46 mm / APEX Pro Nylon-Armband',
  'apex-pro-silicone-band': 'COROS APEX 46 mm / APEX Pro Silikon-Armband',
  'pace2-nylon-band': 'COROS APEX 42 mm / PACE 2 Nylon-Armband',
  'pace2-silicone-band': 'COROS APEX 42 mm / PACE 2 Silikon-Armband',
  hrm: 'COROS HFM',
  detailPageDesc: 'Entdecke hochwertiges und stilvolles Zubehör für deine COROS-Uhren und Sensoren im Shop.',
  sortOptions: {
    priceLowToHigh: 'Preis: aufsteigend',
    priceHighToLow: 'Preis: absteigend',
    manual: 'Empfohlen'
  },
  selectProductType: 'Kompatibilität',
  tips4noProductType: 'Bitte wählen Sie zuerst das kompatible Produkt aus.',
  selectAccessoryType: 'Zubehörtypen',
  resetFilter: 'Zurücksetzen',
  sortBy: 'Sortieren nach',
  filters: 'Filters',
  confirmFilter: 'Bestätigen'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/specs.js
/* harmony default export */ const de_specs = ({
  model: 'Teilenummer',
  navigation: 'Navigation',
  sensors: 'Sensoren',
  batteryLife: 'Akkulaufzeit',
  supportedWorkouts: 'Unterstützte Workouts',
  yes: 'Ja',
  comparePageTitle: 'UHRENVERGLEICH',
  comparePlaceholder: 'Bitte wähle eine Uhr zum Vergleich aus',
  'FULL WATCH COMPARISON': 'vollständiger uhrenvergleich',
  'Hide Duplicated Details': 'Duplizierte Details ausblenden',
  compareLabel: {
    'Size and Weight': 'Größe und Gewicht',
    Dimensions: 'Abmessungen',
    'POD Dimensions': 'Abmessungen',
    Weight: 'Gewicht',
    Display: 'Display',
    'Display Size': 'Display-Größe',
    'Display Resolution': 'Display-Auflösung',
    'Display Type': 'Display-Typ',
    Materials: 'Materialien',
    'Screen Material': 'Material des Displays',
    'Bezel Material': 'Material des Rahmens',
    'Cover Material': 'Material der Abdeckung',
    'Band Material': 'Material des Bandes',
    'Watch Band': 'Uhrenarmband',
    Width: 'Breite',
    'Installation Type': 'Einbauart',
    Design: 'Design',
    Button: 'Tasten & Zifferblätter',
    Connectivity: 'Konnektivität',
    Phone: 'Telefon',
    Accessories: 'Zubehör',
    'Data Sync': 'Datensynchronisation',
    Durability: 'Langlebigkeit',
    'Water Resistance': 'Wasserbeständigkeit',
    'Working Temperature': 'Arbeitstemperatur',
    'Storage Temperature': 'Lagertemperatur',
    Battery: 'Akku',
    'UltraMax GPS Mode': 'UltraMax GPS-Modus',
    'Standard Full GPS': 'Standard Voll-GPS\n(GPS/QZSS)',
    'All Systems On': 'Alle Systeme ein\n(GPS,GLONASS, Galileo, Beidou, QZSS)',
    'All Systems + Dual Frequency On': 'Dualfrequenz\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Daily Use': 'Tägliche Nutzung',
    'Charging Time': 'Aufladezeit',
    'Geo Location': 'Geo-Standort',
    'Satellite Systems': 'Satellitensysteme',
    'GNSS Chipset': 'GNSS-Chipsatz',
    Navigation: 'Navigation',
    'Map Layer': 'Kartenebene',
    'Additional Features': 'Zusätzliche Funktionen',
    'Data Tracking': 'Daten-Tracking',
    Sensors: 'Sensoren',
    'Training Features': 'Trainingsfunktionen',
    'Daily Features': 'Tägliche Funktionen',
    '3rd Party Integration': 'Integration von Drittanbietern',
    'System Languages': 'Systemsprachen',
    'Supported Activity Modes': 'Unterstützte Aktivitätsmodi',
    'Compatible Apps': 'Kompatible Apps',
    'Display Language': 'Anzeigesprachen',
    Run: 'Laufen',
    Mountain: 'Berg',
    Bike: 'Fahrrad',
    Water: 'Wasser',
    Winter: 'Winter',
    Cardio: 'Kardio',
    Special: 'Spezial',
    Compatibility: 'Kompatibilität',
    'Supported Devices': 'Unterstützte Geräte',
    'Features & Metrics': 'Eigenschaften & Metriken',
    'Charging Dock Capacity': 'Kapazität der Ladestation',
    'Charging Dock Cable': 'Kabel für die Ladestation',
    'Activity Mode': 'Aktivitätsmodus',
    'Standby Mode': 'Standby-Modus',
    'COROS App': 'COROS App',
    'COROS Watch': 'COROS Uhr',
    'Case Material': 'Gehäusematerial',
    'Foot Clip Material': 'Material des Fußclips',
    'Waist Clip Material': 'Material des Gürtelclips',
    'Weight - COROS POD 2': 'Gewicht – COROS POD 2',
    'Weight - Charging Dock': 'Gewicht – Ladestation',
    'Standard Full GPS With Music': 'Standard Volles GPS mit Musik',
    'All Systems On With Music': 'Alle Systeme ein mit Musik',
    'Dual Frequency With Music': 'Dualfrequenz mit Musik',
    Fit: 'Passform',
    'Hrm Dimensions': 'Abmessungen',
    'Hrm Weight - Case Only': 'Gewicht - nur Sensor',
    'Hrm Weight - Case + Band': 'Gewicht - Sensor + Band',
    'Hrm Band Material': 'Band-Material',
    'Hrm Optical Heart Rate Hardware': 'Optische Herzfrequenz-Hardware',
    'Hrm Band Circumference': 'Armumfang',
    'Hrm Wearing Position': 'Trageposition',
    'Hrm Wireless Connection': 'Drahtlose Verbindung',
    'Hrm Supported Devices': 'Unterstützte Geräte',
    'Hrm Data Sync': 'Daten-Synchronisation',
    'Hrm Water Resistance': 'Wasserbeständigkeit',
    'Hrm Working Temperature': 'Arbeitstemperatur',
    'Hrm Storage Temperature': 'Lagertemperatur',
    'Hrm Charging Temperature': 'Temperatur beim Aufladen',
    'Hrm Activity Mode': 'Aktivitätsmodus',
    'Hrm Standby Mode': 'Standby-Modus',
    'Hrm Battery Capacity': 'Akku-Kapazität',
    'Hrm Charging Time': 'Ladedauer',
    'Hrm Charging Cable': 'Ladekabel',
    'Internal Memory': 'Interner Speicher',
    'Activity Memory': 'Aktivitätsspeicher',
    Memory: 'Speicher',
    Climb: 'Klettern',
    batteryDesc: 'Stand: 2024/2/5',
    'Dura Dimensions': 'Abmessungen',
    'Dura Weight - Device': 'Gewicht - Gehäuse',
    'Dura Weight - Mount': 'Gewicht - Halterung',
    'Dura Display Size': 'Display-Größe',
    'Dura Display Resolution': 'Display-Auflösung',
    'Dura Display Type': 'Display-Typ',
    'Dura Screen': 'Bildschirm',
    'Dura Body': 'Gehäuse',
    'Dura Mount': 'Halterung',
    'Dura Length': 'Länge',
    'Dura Compatible Handlebars': 'Kompatible Lenker',
    'Dura Button': 'Tasten & Zifferblätter',
    'Dura Phone': 'Telefon',
    'Dura Accessories': 'Zubehör',
    'Dura Accessory Types': 'Zubehör',
    'Dura Data Sync': 'Datensynchronisation',
    'Dura Water & Dust Resistance': 'Wasser- und Staubbeständigkeit',
    'Dura Working Temperature': 'Arbeitstemperatur',
    'Dura Storage Temperature': 'Lagertemperatur',
    'Dura All Systems On': 'Alle Systeme ein',
    'Dura All Systems + Dual Frequency On': 'Dualfrequenz',
    'Dura Solar Efficiency': 'Solar-Effizienz',
    'Dura Charging Time': 'Aufladezeit',
    'Dura Internal Memory': 'Interner Speicher',
    'Dura Activity Memory': 'Aktivitätsspeicher',
    'Dura Satellite Systems': 'Satellitensysteme',
    'Dura GNSS Chipset': 'GNSS-Chipsatz',
    'Dura Map Layer': 'Kartenebene',
    'Dura Additional Features': 'Zusätzliche Funktionen',
    'Dura Sensors': 'Sensoren',
    'Dura Training Features': 'Trainingsfunktionen',
    'Dura Safety Features': 'Safety Features',
    'Dura Compatible Apps': 'Kompatible Apps',
    'Dura Display Language': 'Anzeigesprachen',
    'Dura Outdoor': 'Outdoor',
    'Dura Electric': 'Electric',
    'Dura Indoor': 'Indoor',
    'Dura Size and Weight': 'Größe und Gewicht',
    'Dura Display': 'Display',
    'Dura Materials': 'Materialien',
    'Dura Out-Front Handlebar Mount': 'Out-Front-Lenkerhalterung',
    'Dura Design': 'Design',
    'Dura Connectivity': 'Konnektivität',
    'Dura Durability': 'Langlebigkeit',
    'Dura Battery': 'Akku',
    'Dura Memory': 'Speicher',
    'Dura Geo Location': 'Geo-Standort',
    'Dura Navigation': 'Navigation',
    'Dura Data Tracking': 'Daten-Tracking',
    'Dura 3rd Party Integration': 'Integration von Drittanbietern',
    'Dura System Languages': 'Systemsprachen',
    'Dura Supported Activity Modes': 'Unterstützte Aktivitätsmodi',
    'Size - Nylon': 'Größe - Nylon',
    'Size - Silicone': 'Größe - Silikon'
  },
  pace2: {
    displaySizeVal: '1,2 Zoll 240 x 240 (64 Farben)',
    displayType: 'Dauerhaft eingeschaltetes Memory-LCD',
    displayMaterialVal: 'Corning® Glass',
    bezelVal: 'Verbundwerkstoff (FRP)',
    coverVal: 'Verbundwerkstoff (FRP)',
    strapVal: 'Silikon / Nylon',
    sensorsVal: 'Optischer Herzfrequenzmesser Barometrischer Höhenmesser Beschleunigungsmesser Kompass Gyroskop Thermometer',
    waterResistanceVal: '5ATM (50 Meter)',
    workingTemp: '-4°F bis 140°F (-20°C bis 60°C)',
    storageTempVal: '-4°F bis 149°F (-20°C bis 65°C)',
    chargingVal: 'Weniger als 2 Stunden',
    batteryLifeVal: '20 Tage bei normalem Gebrauch 30 Stunden im vollen GPS-Modus 60 Stunden im UltraMax-Modus',
    workoutsVal: 'Run, Indoor Run, Track Run, Bike, Indoor Bike, Pool Swim, Open Water, Triathlon, Gym Cardio, GPS Cardio, Multisport, Strength, Training, Flatwater, Rowing, Indoor Rower, Walk'
  },
  comparsion: {
    pace3: {
      dimensionsVal: '41,9 x 41,9 x 11,7mm\nHöhe ohne den optischen Herzfrequenzsensor',
      weightVal: ['39g\nmit Silikonband', '30g\nmit Nylonband'],
      displaySizeVal: '1,2 Zoll',
      displayResolutionVal: '240 x 240\n64 Farben',
      displayTypeVal: 'Touchscreen Always-On Memory LCD',
      screenMaterialVal: 'Mineralglas',
      bezelMaterialVal: 'Faserverstärktes Polymer',
      coverMaterialVal: 'Faserverstärktes Polymer',
      bandMaterialVal: 'Silikon/Nylon',
      widthVal: '22mm',
      sizeNylonVal: '135mm - 205mm (Standard)|||150mm - 235mm (Lang)',
      sizeSiliconeVal: '130mm - 215mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digitales Zifferblatt', 'Zurück-Taste', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nGeeignet für Aktivitäten an der Wasseroberfläche und nicht zum Tauchen',
      workingTemperatureVal: '-20°C bis 50°C (-4°F bis 122°F)',
      storageTemperatureVal: '-20°C bis 60°C (-4°F bis 140°F)',
      standardFullGpsVal: ['38 Stunden\nVerbindet sich mit GPS und QZSS', '10 Stunden (mit Musik)\nVerbindet sich mit GPS und QZSS mit Offline-Musik'],
      allSystemsOnVal: ['25 Stunden\nVerbindet mit 5 Satellitensystemen gleichzeitig', '9 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig, mit Offline-Musik'],
      allSystemsDualFrequencyOnVal: ['15 Stunden\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen', '7 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen, mit Offline-Musik'],
      dailyUseVal: ['17 Tage\nMit täglichem und Schlaftracking', '15 Tage (Mit täglichem Stress)\nVerfolgt tagsüber deinen Stresslevel'],
      chargingTimeVal: 'Weniger als 2 Stunden',
      internalMemoryVal: '4GB',
      activityMemoryVal: '1200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satelliten-Doppelfrequenz',
      mapLayerVal: ['Breadcrumb', '—'],
      additionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', 'Touchscreen-gesteuerte Kartenkontrolle'],
      sensorsVal: ['Optischer Herzfrequenzmesser\nFunktioniert möglicherweise nicht über Tattoos', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', '3D-Kompass', 'Thermometer\nUnterstützt die Körpertemperatur im Training (mit kompatiblem Zubehör)', 'Optisches Pulsoximeter', '—'],
      trainingFeaturesVal: ['Effort Pace\nEine personalisierte Metrik, die die tatsächliche Anstrengung beim Laufen darstellt', 'EvoLab\nErholung, Ermüdung, Trainingsbelastung, Wettkampfvorhersage, VO2 max, Schwellenbereiche und weitere Messwerte', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Tempo, Herzfrequenz, Leistung und weitere Messwerte', 'Intervalltraining', 'Vorgeplante Workouts', 'Trainingspläne', 'Lauffitness', 'RHF', 'Unterwasserherzfrequenz', 'Action-Kamera-Steuerung\nUnterstützt ausgewählte GoPro und Insta360 Kameras', 'Virtueller Pacer', 'Virtueller Lauf', 'Laufstil-Test\nBenötigt COROS POD/POD 2', 'Höhelagenmodus\nRegelmäßige Auswertung von SpO2 und Fitness in großen Höhen', 'Touch Scroll\nWischen, um während des Trainings durch die Datenseiten zu blättern', 'Extender'],
      dailyFeaturesVal: ['Täglicher Stress', 'Gesundheitsüberprüfung', 'Nachricht/Ruf-Alarm\nUnterstützt den täglichen Gebrauch und während des Trainings', 'Schlaf\nmit REM-Verfolgung', 'Alarm', 'Timer', 'Stoppuhr', 'Tägliche Alarme\nInklusive Kalorien, Trainingszeit, Sturm und weitere Alarme', 'Aktualisierbare Firmware\nMit WLAN und der COROS-App', 'Mein Telefon finden', 'Meine Uhr finden', 'Hintergrundbeleuchtung im Always-On-Modus', 'HRV', 'Musik\nSpielt Offline-Musik, wenn sie mit unterstützten Bluetooth-Headsets gekoppelt ist'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nKlicke hier für eine vollständige Listehere',
      displayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      runVal: ['Laufen', 'Indoor-Lauf', 'Bahnlauf', 'Trail-Lauf'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Fahrrad', 'Indoor-Radfahren'],
      waterVal: ['Freiwasser', 'Pool-Schwimmen', 'Flachwasser', 'Rudern', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'XC Ski', '—'],
      cardioVal: ['GPS-Kardio', 'Fitnessstudio Kardio', 'Wanderungen', 'Indoor-Ruderer', 'Gehen', 'Seilspringen'],
      specialVal: ['Triathlon', 'Multisport', 'Kraft', 'Ausbildung', 'Trainingsplan']
    },
    vertix2: {
      dimensionsVal: '50,3 x 50,3 x 15,7mm',
      weightVal: ['89g\nmit Silikonband', '72g\nmit Nylonband'],
      displaySizeVal: '1,4 Zoll',
      displayResolutionVal: '280 x 280\n64 Farben',
      displayTypeVal: 'Touchscreen Always-On Memory-LCD',
      screenMaterialVal: 'Saphirglas',
      bezelMaterialVal: 'Titanlegierung Grad 5 mit PVD-Beschichtung',
      coverMaterialVal: 'Titanlegierung mit PVD-Beschichtung',
      bandMaterialVal: 'Silikon/Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Digitales Zifferblatt\nGrößere Größe und verbesserte Haltbarkeit', 'Zurück-Taste', 'Taste für Hintergrundbeleuchtung'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '10 ATM\nGeeignet für Aktivitäten an der Wasseroberfläche und nicht zum Tauchen',
      workingTemperatureVal: '-22°F bis 122°F (-30°C bis 50°C)',
      storageTemperatureVal: '-22°F bis 140°F (-30°C bis 60°C)',
      standardFullGpsVal: ['127 Stunden\nVerbindet sich mit GPS und QZSS', '32 Stunden (mit Musik)\nVerbindet sich mit GPS und QZSS mit Offline-Musik'],
      allSystemsOnVal: ['89 Stunden\nVerbindet sich mit 5 Satellitensystemen zur gleichen Zeit', '29 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig, mit Offline-Musik'],
      allSystemsDualFrequencyOnVal: ['49 Stunden\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen', '23 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen, mit Offline-Musik'],
      dailyUseVal: ['43 Tage\nMit täglichem und Schlaftracking', '39 Tage (Mit täglichem Stress)\nVerfolgt tagsüber deinen Stresslevel'],
      chargingTimeVal: 'Weniger als 2 Stunden',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satelliten-Doppelfrequenz',
      mapLayerVal: ['Querformat\nHerunterladbare globale Karten', 'Topo\nHerunterladbare regionale Karten'],
      additionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', 'Touchscreen-gesteuerte Kartenkontrolle'],
      sensorsVal: ['Optischer Herzfrequenzmesser\nFunktioniert möglicherweise nicht über Tattoos', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', '3D-Kompass', 'Thermometer\nUnterstützt die Körpertemperatur im Training (mit kompatiblem Zubehör)', 'Optisches Pulsoximeter', 'Elektrokardiogrammsensor'],
      trainingFeaturesVal: ['Effort Pace\nEine personalisierte Metrik, die die tatsächliche Anstrengung beim Laufen darstellt', 'EvoLab\nErholung, Ermüdung, Trainingsbelastung, Wettkampfvorhersage, VO2 max, Schwellenbereiche und weitere Messwerte', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Tempo, Herzfrequenz, Leistung und weitere Messwerte', 'Intervalltraining', 'Vorgeplante Workouts', 'Trainingspläne', 'Lauffitness', 'RHF', 'Unterwasserherzfrequenz', 'Action-Kamera-Steuerung\nUnterstützt ausgewählte GoPro und Insta360 Kameras', 'Virtueller Pacer', 'Virtueller Lauf', 'Laufstil-Test\nBenötigt COROS POD/POD 2', 'Höhelagenmodus\nRegelmäßige Auswertung von SpO2 und Fitness in großen Höhen', 'Touch Scroll\nWischen, um während des Trainings durch die Datenseiten zu blättern', 'Extender'],
      dailyFeaturesVal: ['Täglicher Stress', 'Gesundheitsüberprüfung', 'Nachricht/Ruf-Alarm\nUnterstützt den täglichen Gebrauch und während des Trainings', 'Schlaf\nmit REM-Verfolgung', 'Alarm', 'Timer', 'Stoppuhr', 'Tägliche Alarme\nInklusive Kalorien, Trainingszeit, Sturm und weitere Alarme', 'Aktualisierbare Firmware\nMit WLAN und der COROS-App', 'Mein Telefon finden', 'Meine Uhr finden', 'Hintergrundbeleuchtung im Always-On-Modus', 'HRV', 'Musik\nSpielt Offline-Musik, wenn sie mit unterstützten Bluetooth-Headsets gekoppelt ist'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nKlicke hier für eine vollständige Listehere',
      displayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      runVal: ['Laufen', 'Indoor-Lauf', 'Bahnlauf', 'Trail-Lauf'],
      climbVal: ['Multi-Abschn.\nErweitertes Daten-Tracking für Mehrseillängen- und Big-Wall-Klettern', 'Kletterwand\nUnterstützt Indoor Lead, Top Rope und Bouldern mit automatischer Routen-/Fallzählung', 'Klettern', 'Bouldering'],
      bikeVal: ['Fahrrad', 'Indoor-Radfahren'],
      waterVal: ['Freiwasser', 'Pool-Schwimmen', 'Flachwasser', 'Rudern', 'Wildwasser', 'Speedsurfen', 'Windsurfen'],
      winterVal: ['Ski', 'Snowboard', 'XC-Ski', 'Skitourengehen'],
      cardioVal: ['GPS-Kardio', 'Fitnessstudio Kardio', 'Wanderungen', 'Indoor-Ruderer', 'Gehen', 'Seilspringen'],
      specialVal: ['Triathlon', 'Multisport', 'Kraft', 'Ausbildung', 'Trainingsplan']
    },
    vertix2s: {
      dimensionsVal: '50,3 x 50,3 x 16mm',
      weightVal: ['87g\nmit Silikonband', '70g\nmit Nylonband'],
      displaySizeVal: '1,4 Zoll',
      displayResolutionVal: '280 x 280\n64 Farben',
      displayTypeVal: 'Touchscreen Always-On Memory-LCD',
      screenMaterialVal: 'Saphirglas',
      bezelMaterialVal: 'Titanlegierung Grad 5 mit PVD-Beschichtung',
      coverMaterialVal: 'Titanlegierung mit PVD-Beschichtung',
      bandMaterialVal: 'Silikon/Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['`', 'Zurück-Taste', 'Taste für Hintergrundbeleuchtung'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '10 ATM\nGeeignet für Aktivitäten an der Wasseroberfläche und nicht zum Tauchen',
      workingTemperatureVal: '-22°F bis 122°F (-30°C bis 50°C)',
      storageTemperatureVal: '-22°F bis 140°F (-30°C bis 60°C)',
      standardFullGpsVal: ['118 Stunden\nVerbindet sich mit GPS und QZSS', '32 Stunden (mit Musik)\nVerbindet sich mit GPS und QZSS mit Offline-Musik'],
      allSystemsOnVal: ['73 Stunden\nVerbindet sich mit 5 Satellitensystemen zur gleichen Zeit', '27 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig, mit Offline-Musik'],
      allSystemsDualFrequencyOnVal: ['43 Stunden\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen', '22 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen, mit Offline-Musik'],
      dailyUseVal: ['40 Tage\nMit täglichem und Schlaftracking', '36 Tage (Mit täglichem Stress)\nVerfolgt tagsüber deinen Stresslevel'],
      chargingTimeVal: 'Weniger als 2 Stunden',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satelliten-Doppelfrequenz',
      mapLayerVal: ['Querformat\nHerunterladbare globale Karten', 'Topo\nHerunterladbare regionale Karten'],
      additionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', 'Touchscreen-gesteuerte Kartenkontrolle'],
      sensorsVal: ['Optischer Herzfrequenzmesser\nFunktioniert möglicherweise nicht über Tattoos', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', '3D-Kompass', 'Thermometer\nUnterstützt die Körpertemperatur im Training (mit kompatiblem Zubehör)', 'Optisches Pulsoximeter', 'Elektrokardiogrammsensor'],
      trainingFeaturesVal: ['Effort Pace\nEine personalisierte Metrik, die die tatsächliche Anstrengung beim Laufen darstellt', 'EvoLab\nErholung, Ermüdung, Trainingsbelastung, Wettkampfvorhersage, VO2 max, Schwellenbereiche und weitere Messwerte', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Tempo, Herzfrequenz, Leistung und weitere Messwerte', 'Intervalltraining', 'Vorgeplante Workouts', 'Trainingspläne', 'Lauffitness', 'RHF', 'Unterwasserherzfrequenz', 'Action-Kamera-Steuerung\nUnterstützt ausgewählte GoPro und Insta360 Kameras', 'Virtueller Pacer', 'Virtueller Lauf', 'Laufstil-Test\nBenötigt COROS POD/POD 2', 'Höhelagenmodus\nRegelmäßige Auswertung von SpO2 und Fitness in großen Höhen', 'Touch Scroll\nWischen, um während des Trainings durch die Datenseiten zu blättern', 'Extender'],
      dailyFeaturesVal: ['Täglicher Stress', 'Gesundheitsüberprüfung', 'Nachricht/Ruf-Alarm\nUnterstützt den täglichen Gebrauch und während des Trainings', 'Schlaf\nmit REM-Verfolgung', 'Alarm', 'Timer', 'Stoppuhr', 'Tägliche Alarme\nInklusive Kalorien, Trainingszeit, Sturm und weitere Alarme', 'Aktualisierbare Firmware\nMit WLAN und der COROS-App', 'Mein Telefon finden', 'Meine Uhr finden', 'Hintergrundbeleuchtung im Always-On-Modus', 'HRV', 'Musik\nSpielt Offline-Musik, wenn sie mit unterstützten Bluetooth-Headsets gekoppelt ist'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nKlicke hier für eine vollständige Listehere',
      displayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      runVal: ['Laufen', 'Indoor-Lauf', 'Bahnlauf', 'Trail-Lauf'],
      climbVal: ['Multi-Abschn.\nErweitertes Daten-Tracking für Mehrseillängen- und Big-Wall-Klettern', 'Kletterwand\nUnterstützt Indoor Lead, Top Rope und Bouldern mit automatischer Routen-/Fallzählung', 'Klettern', 'Bouldering'],
      bikeVal: ['Fahrrad', 'Indoor-Radfahren'],
      waterVal: ['Freiwasser', 'Pool-Schwimmen', 'Flachwasser', 'Rudern', 'Wildwasser', 'Speedsurfen', 'Windsurfen'],
      winterVal: ['Ski', 'Snowboard', 'XC-Ski', 'Skitourengehen'],
      cardioVal: ['GPS-Kardio', 'Fitnessstudio Kardio', 'Wanderungen', 'Indoor-Ruderer', 'Gehen', 'Seilspringen'],
      specialVal: ['Triathlon', 'Multisport', 'Kraft', 'Ausbildung', 'Trainingsplan']
    },
    pace2: {
      dimensionsVal: '42 x 42 x 11,7mm',
      weightVal: ['35-36g\nmit Silikonband', '29-30g\nmit Nylonband'],
      displaySizeVal: '1,2 Zoll',
      displayResolutionVal: '240 x 240\n64 Farben',
      displayTypeVal: 'Always-On Memory-LCD',
      screenMaterialVal: 'Mineralglas',
      bezelMaterialVal: 'Faserverstärktes Polymer',
      coverMaterialVal: 'Faserverstärktes Polymer',
      bandMaterialVal: 'Silikon/Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digitales Zifferblatt', 'Zurück-Taste', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '5 ATM\nGeeignet für Aktivitäten an der Wasseroberfläche und nicht zum Tauchen',
      workingTemperatureVal: '-20°C bis 60°C (-4°F bis 140°F)',
      storageTemperatureVal: '-20°C bis 65°C (-4°F bis 149°F)',
      standardFullGpsVal: ['27 Stunden\nVerbindet sich mit GPS und QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 Tage\nMit täglichem und Schlaftracking', '11 Tage (Mit täglichem Stress)\nVerfolgt tagsüber deinen Stresslevel'],
      chargingTimeVal: 'Weniger als 2 Stunden',
      internalMemoryVal: '—',
      activityMemoryVal: '200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Einzelfrequenz',
      mapLayerVal: ['Breadcrumb', '—'],
      additionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', '—'],
      sensorsVal: ['Optischer Herzfrequenzmesser\nFunktioniert möglicherweise nicht über Tattoos', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', '3D-Kompass', 'Thermometer\nUnterstützt die Körpertemperatur im Training (mit kompatiblem Zubehör)', '—', '—'],
      trainingFeaturesVal: ['Effort Pace\nEine personalisierte Metrik, die die tatsächliche Anstrengung beim Laufen darstellt', 'EvoLab\nErholung, Ermüdung, Trainingsbelastung, Wettkampfvorhersage, VO2 max, Schwellenbereiche und weitere Messwerte', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Tempo, Herzfrequenz, Leistung und weitere Messwerte', 'Intervalltraining', 'Vorgeplante Workouts', 'Trainingspläne', 'Lauffitness', 'RHF', 'Unterwasserherzfrequenz', 'Action-Kamera-Steuerung\nUnterstützt ausgewählte GoPro und Insta360 Kameras', 'Virtueller Pacer', 'Virtueller Lauf', 'Laufstil-Test\nBenötigt COROS POD/POD 2', '—', '—', 'Extender'],
      dailyFeaturesVal: ['Täglicher Stress', 'Gesundheitsüberprüfung', 'Nachricht/Ruf-Alarm\nUnterstützt den täglichen Gebrauch und während des Trainings', 'Schlaf\nmit REM-Verfolgung', 'Alarm', 'Timer', 'Stoppuhr', 'Tägliche Alarme\nInklusive Kalorien, Trainingszeit, Sturm und weitere Alarme', 'Aktualisierbare Firmware\nMit der COROS-App', 'Mein Telefon finden', 'Meine Uhr finden', 'Hintergrundbeleuchtung im Always-On-Modus', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nKlicke hier für eine vollständige Listehere',
      displayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      runVal: ['Laufen', 'Indoor-Lauf', 'Bahnlauf', '—'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Fahrrad', 'Indoor-Radfahren'],
      waterVal: ['Freiwasser', 'Pool-Schwimmen', 'Flachwasser', 'Rudern', '—', '—', '—'],
      winterVal: ['—', '—', '—', '—'],
      cardioVal: ['GPS-Kardio', 'Fitnessstudio Kardio', 'Wanderungen', 'Indoor-Ruderer', 'Gehen', 'Seilspringen'],
      specialVal: ['Triathlon', 'Multisport', 'Kraft', 'Ausbildung', 'Trainingsplan']
    },
    pod2: {
      podDimensionsVal: '27,1 x 33,9 x 8,6 mm',
      weightCorosPod2Val: '5,6 g\nOhne angebrachte Clips',
      weightChargingDockVal: '17,6 g',
      caseMaterialVal: 'Faserverstärktes Polymer\nSowohl für den COROS POD 2 als auch für die Ladestation',
      footClipMaterialVal: 'Faserverstärktes Polymer',
      waistClipMaterialVal: 'Silikon',
      corosAppVal: 'Bluetooth',
      corosWatchVal: 'Bluetooth',
      dataSyncVal: 'Aktivitätsdaten in Echtzeit an die COROS-Uhr',
      waterResistanceVal: '3 ATM\nNur für den COROS POD 2 und nicht für die Ladestation',
      workingTemperatureVal: '14°F bis 140°F (-10°C bis 60°C)',
      storageTemperatureVal: '-4°F bis 158°F (-20°C bis 70°C)',
      activityModeVal: '25 Stunden\nBis zu 150 Stunden Gesamtlaufzeit mit der Ladestation',
      standbyModeVal: '40 Tage',
      chargingTimeVal: 'Weniger als 2 Stunden\nSowohl für den COROS POD 2 als auch für die Ladestation',
      chargingDockCapacityVal: '5 Ladungen',
      chargingDockCableVal: 'USB Typ-C',
      sensorsVal: ['Barometrischer Höhenmesser', 'Thermometer', 'Geomagnetisch', 'Beschleunigungsmesser', 'Gyroskop'],
      supportedDevicesVal: ['COROS-Uhren außer COROS PACE 1', 'KIPRUN GPS 500/GPS 900'],
      featuresMetricsVal: ['GPS-Track-Optimierung\nLauf / Bahnlauf', 'Distanz\nLauf / Bahnlauf / Hallenlauf', 'Pace\nLauf / Bahnlauf / Indoor-Lauf', 'Effort Pace\nLauf / Trail-Lauf', 'Kadenz\nLauf / Bahnlauf / Trail-Lauf / Indoor-Lauf', 'Schrittlänge\nLauf / Bahnlauf / Indoor-Lauf', 'Temperatur\nLauf / Bahnlauf / Trail-Lauf / Indoor-Lauf', 'Höhengewinn/-verlust\nLauf / Trail-Lauf', 'Höhenlage\nLauf / Trail-Lauf', 'Steigung \nLauf / Trail-Lauf', 'L/R-Balance\nLauf / Bahnlauf / Trail-Lauf / Indoor-Lauf', 'Bodenkontaktzeit \nLauf / Bahnlauf / Trail-Lauf / Indoor-Lauf', 'Schritthöhe\nLauf / Bahnlauf / Trail-Lauf / Indoor-Lauf', 'Schrittverhältnis\nLauf / Bahnlauf / Trail-Lauf / Indoor-Lauf']
    },
    apex2: {
      dimensionsVal: '43 x 42,8 x 12,8mm',
      weightVal: ['53g\nmit Silikonband', '42g\nmit Nylonband'],
      displaySizeVal: '1,2 Zoll',
      displayResolutionVal: '240 x 240\n64 Farben',
      displayTypeVal: 'Touchscreen Always-On Memory-LCD',
      screenMaterialVal: 'Saphirglas',
      bezelMaterialVal: 'Titanlegierung Grad 5 mit PVD-Beschichtung',
      coverMaterialVal: 'Titan-Legierung',
      bandMaterialVal: 'Silikon/Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digitales Zifferblatt', 'Zurück-Taste', 'Taste für die Hintergrundbeleuchtung'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS-App',
      waterResistanceVal: '5 ATM\nGeeignet für Aktivitäten an der Wasseroberfläche und nicht zum Tauchen',
      workingTemperatureVal: '-20°C bis 50°C (-4°F bis 122°F)',
      storageTemperatureVal: '-20°C bis 60°C (-4°F bis 140°F)',
      standardFullGpsVal: ['40 Stunden\nVerbindet sich mit GPS und QZSS', '10 Stunden (mit Musik)\nVerbindet sich mit GPS und QZSS mit Offline-Musik'],
      allSystemsOnVal: ['25 Stunden\nVerbindet mit 5 Satellitensystemen gleichzeitig', '9 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig mit Offline-Musik'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 Tage\nMit täglichem und Schlaftracking', '13 Tage (Mit täglichem Stress)\nVerfolgt tagsüber deinen Stresslevel'],
      chargingTimeVal: 'Weniger als 2 Stunden',
      internalMemoryVal: '8GB',
      activityMemoryVal: '1200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satelliten-Einzelfrequenz',
      mapLayerVal: ['Querformat\nHerunterladbare globale Karten', 'Topo\nHerunterladbare regionale Karten'],
      additionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', 'Touchscreen-gesteuerte Kartenkontrolle'],
      sensorsVal: ['Optischer Herzfrequenzmesser\nFunktioniert möglicherweise nicht über Tattoos', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', '3D-Kompass', 'Thermometer\nUnterstützt die Körpertemperatur im Training (mit kompatiblem Zubehör)', 'Optisches Pulsoximeter', 'Elektrokardiogrammsensor'],
      trainingFeaturesVal: ['Effort Pace\nEine personalisierte Metrik, die die tatsächliche Anstrengung beim Laufen darstellt', 'EvoLab\nErholung, Ermüdung, Trainingsbelastung, Wettkampfvorhersage, VO2 max, Schwellenbereiche und weitere Messwerte', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Tempo, Herzfrequenz, Leistung und weitere Messwerte', 'Intervalltraining', 'Vorgeplante Workouts', 'Trainingspläne', 'Lauffitness', 'RHF', 'Unterwasserherzfrequenz', 'Action-Kamera-Steuerung\nUnterstützt ausgewählte GoPro und Insta360 Kameras', 'Virtueller Pacer', 'Virtueller Lauf', 'Laufstil-Test\nBenötigt COROS POD/POD 2', 'Höhelagenmodus\nRegelmäßige Auswertung von SpO2 und Fitness in großen Höhen', 'Touch Scroll\nWischen, um während des Trainings durch die Datenseiten zu blättern', 'Extender'],
      dailyFeaturesVal: ['Täglicher Stress', 'Gesundheitsüberprüfung', 'Nachricht/Ruf-Alarm\nUnterstützt den täglichen Gebrauch und während des Trainings', 'Schlaf\nmit REM-Verfolgung', 'Alarm', 'Timer', 'Stoppuhr', 'Tägliche Alarme\nInklusive Kalorien, Trainingszeit, Sturm und weitere Alarme', 'Aktualisierbare Firmware\nMit WLAN und der COROS-App', 'Mein Telefon finden', 'Meine Uhr finden', 'Hintergrundbeleuchtung im Always-On-Modus', 'HRV', 'Musik\nSpielt Offline-Musik, wenn sie mit unterstützten Bluetooth-Headsets gekoppelt ist'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nKlicke hier für eine vollständige Listehere',
      displayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      runVal: ['Laufen', 'Indoor-Lauf', 'Bahnlauf', 'Trail-Lauf'],
      climbVal: ['—', 'Kletterwand\nUnterstützt Indoor Lead, Top Rope und Bouldern mit automatischer Routen-/Fallzählung', 'Klettern', 'Bouldering'],
      bikeVal: ['Fahrrad', 'Indoor-Radfahren'],
      waterVal: ['Freiwasser', 'Pool-Schwimmen', 'Flachwasser', 'Rudern', 'Wildwasser', 'Speedsurfen', 'Windsurfen'],
      winterVal: ['Ski', 'Snowboard', 'XC-Ski', 'Skitourengehen'],
      cardioVal: ['GPS-Kardio', 'Fitnessstudio Kardio', 'Wanderungen', 'Indoor-Ruderer', 'Gehen', 'Seilspringen'],
      specialVal: ['Triathlon', 'Multisport', 'Kraft', 'Ausbildung', 'Trainingsplan']
    },
    apex2pro: {
      dimensionsVal: '46,1 x 46,5 x 14mm',
      weightVal: ['66g\nmit Silikonband', '53g\nmit Nylonband'],
      displaySizeVal: '1,3 Zoll',
      displayResolutionVal: '260 x 260\n64 Farben',
      displayTypeVal: 'Touchscreen Always-On Memory-LCD',
      screenMaterialVal: 'Saphirglas',
      bezelMaterialVal: 'Titanlegierung Grad 5 mit PVD-Beschichtung',
      coverMaterialVal: 'Titan-Legierung',
      bandMaterialVal: 'Silikon/Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Kurz)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['Digitales Zifferblatt', 'Zurück-Taste', 'Taste für die Hintergrundbeleuchtung'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS-App',
      waterResistanceVal: '5 ATM\nGeeignet für Aktivitäten an der Wasseroberfläche und nicht zum Tauchen',
      workingTemperatureVal: '-20°C bis 50°C (-4°F bis 122°F)',
      storageTemperatureVal: '-20°C bis 60°C (-4°F bis 140°F)',
      standardFullGpsVal: ['66 Stunden\nVerbindet sich mit GPS und QZSS', '18 Stunden (mit Musik)\nVerbindet sich mit GPS und QZSS, mit Offline-Musik'],
      allSystemsOnVal: ['41 Stunden\nVerbindet sich mit 5 Satellitensystemen gleichzeitig', '15 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig, mit Offline-Musik'],
      allSystemsDualFrequencyOnVal: ['24 Stunden\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen', '12 Stunden (mit Musik)\nVerbindet sich mit 5 Satellitensystemen gleichzeitig in zwei Frequenzen, mit Offline-Musik'],
      dailyUseVal: ['24 Tage\nMit täglichem und Schlaftracking', '21 Tage (Mit täglichem Stress)\nVerfolgt tagsüber deinen Stresslevel'],
      chargingTimeVal: 'Weniger als 2 Stunden',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'All-Satelliten-Doppelfrequenz',
      mapLayerVal: ['Querformat\nHerunterladbare globale Karten', 'Topo\nHerunterladbare regionale Karten'],
      additionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', 'Touchscreen-gesteuerte Kartenkontrolle'],
      sensorsVal: ['Optischer Herzfrequenzmesser\nFunktioniert möglicherweise nicht über Tattoos', 'Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', '3D-Kompass', 'Thermometer\nUnterstützt die Körpertemperatur im Training (mit kompatiblem Zubehör)', 'Optisches Pulsoximeter', 'Elektrokardiogrammsensor'],
      trainingFeaturesVal: ['Effort Pace\nEine personalisierte Metrik, die die tatsächliche Anstrengung beim Laufen darstellt', 'EvoLab\nErholung, Ermüdung, Trainingsbelastung, Wettkampfvorhersage, VO2 max, Schwellenbereiche und weitere Messwerte', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Tempo, Herzfrequenz, Leistung und weitere Messwerte', 'Intervalltraining', 'Vorgeplante Workouts', 'Trainingspläne', 'Lauffitness', 'RHF', 'Unterwasserherzfrequenz', 'Action-Kamera-Steuerung\nUnterstützt ausgewählte GoPro und Insta360 Kameras', 'Virtueller Pacer', 'Virtueller Lauf', 'Laufstil-Test\nBenötigt COROS POD/POD 2', 'Höhelagenmodus\nRegelmäßige Auswertung von SpO2 und Fitness in großen Höhen', 'Touch Scroll\nWischen, um während des Trainings durch die Datenseiten zu blättern', 'Extender'],
      dailyFeaturesVal: ['Täglicher Stress', 'Gesundheitsüberprüfung', 'Nachricht/Ruf-Alarm\nUnterstützt den täglichen Gebrauch und während des Trainings', 'Schlaf\nmit REM-Verfolgung', 'Alarm', 'Timer', 'Stoppuhr', 'Tägliche Alarme\nInklusive Kalorien, Trainingszeit, Sturm und weitere Alarme', 'Aktualisierbare Firmware\nMit WLAN und der COROS-App', 'Mein Telefon finden', 'Meine Uhr finden', 'Hintergrundbeleuchtung im Always-On-Modus', 'HRV', 'Musik\nSpielt Offline-Musik, wenn sie mit unterstützten Bluetooth-Headsets gekoppelt ist'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nKlicke hier für eine vollständige Listehere',
      displayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      runVal: ['Laufen', 'Indoor-Lauf', 'Bahnlauf', 'Trail-Lauf'],
      climbVal: ['Multi-Abschn.\nErweitertes Daten-Tracking für Mehrseillängen- und Big-Wall-Klettern', 'Kletterwand\nUnterstützt Indoor Lead, Top Rope und Bouldern mit automatischer Routen-/Fallzählung', 'Klettern', 'Bouldering'],
      bikeVal: ['Fahrrad', 'Indoor-Radfahren'],
      waterVal: ['Freiwasser', 'Pool-Schwimmen', 'Flachwasser', 'Rudern', 'Wildwasser', 'Speedsurfen', 'Windsurfen'],
      winterVal: ['Ski', 'Snowboard', 'XC-Ski', 'Skitourengehen'],
      cardioVal: ['GPS-Kardio', 'Fitnessstudio Kardio', 'Wanderungen', 'Indoor-Ruderer', 'Gehen', 'Seilspringen'],
      specialVal: ['Triathlon', 'Multisport', 'Kraft', 'Ausbildung', 'Trainingsplan']
    },
    hrm: {
      hrmDimensionsVal: '42.5 x 28.4 x 9.1mm',
      hrmWeightCaseOnlyVal: '9.7g',
      hrmWeightCaseBandVal: '19g',
      hrmBandMaterialVal: 'Polyesterfaser, Nylon, Elasthan',
      hrmOpticalHeartRateHardwareVal: '5 LED-Leuchten mit 4 Fotodetektoren',
      hrmBandCircumferenceVal: '18 - 32 cm (7.09-12.6 Zoll)',
      hrmWearingPositionVal: 'Bizeps',
      hrmWirelessConnectionVal: 'Bluetooth',
      hrmSupportedDevicesVal: 'Bluetooth-kompatible Geräte, die Herzfrequenzdaten empfangen\nUnterstützt den gleichzeitigen Anschluss von 3 Geräten',
      hrmDataSyncVal: 'Herzfrequenzdaten in Echtzeit',
      hrmWaterResistanceVal: '3 ATM',
      hrmWorkingTemperatureVal: '-4°F to 122°F (-20°C to 50°C)',
      hrmStorageTemperatureVal: '-4°F to 140°F (-20°C to 60°C)',
      hrmChargingTemperatureVal: '32°F to 113°F (0°C to 45°C)',
      hrmActivityModeVal: '38 Stunden',
      hrmStandbyModeVal: '80 Tage',
      hrmBatteryCapacityVal: '55 mAh',
      hrmChargingTimeVal: 'Weniger als 2 Stunden',
      hrmChargingCableVal: 'USB Type-A\nWird über eine magnetische Schnittstelle mit dem Sensor verbunden'
    },
    dura: {
      duraDimensionsVal: '99.5 x 60.8 x 15.7mm\nOhne Halterung',
      duraWeightDeviceVal: '102g',
      duraWeightMountVal: '53g',
      duraDisplaySizeVal: '2.7 Zoll',
      duraDisplayResolutionVal: '400 x 240\n64 Farben',
      duraDisplayTypeVal: 'Touchscreen Always-On Memory LCD',
      duraScreenVal: 'Robustes Verbundglas',
      duraBodyVal: 'Verstärktes Polymer',
      duraMountVal: 'Verstärktes Polymer',
      duraLengthVal: '70mm\nVon der Lenkermitte bis zum Ende der vorderen Halterung',
      duraCompatibleHandlebarsVal: '25.4mm / 31.8mm',
      duraButtonVal: ['Digitales Zifferblatt', 'Zurück-Taste'],
      duraPhoneVal: 'Bluetooth',
      duraAccessoriesVal: 'ANT+ / Bluetooth\nBis zu 12 gleichzeitige Verbindungen mit BLE',
      duraAccessoryTypesVal: 'Herzfrequenzmesser, Leistungsmesser, Indoor-Trainer, Geschwindigkeits- und Trittfrequenzsensoren, Garmin Varia Radar, E-Bike-Gänge, elektronische Antriebssysteme von Shimano/SRAM\nFür die gesamte Liste hier klicken',
      duraDataSyncVal: 'Wi-Fi / COROS App',
      duraWaterDustResistanceVal: 'IP67',
      duraWorkingTemperatureVal: '-20℃ ~ 60℃',
      duraStorageTemperatureVal: '-30℃ ~ 70℃',
      duraAllSystemsOnVal: '120 Stunden\nOhne Solar',
      duraAllSystemsDualFrequencyOnVal: '70 Stunden\nOhne Solar',
      duraSolarEfficiencyVal: '1 Stunde in direkter Sonne erzeugt bis zu 2 Stunden zusätzliche Fahrzeit',
      duraChargingTimeVal: '2.5 Tage (15℃ ~ 45℃)|||4 Tage (0℃ ~ 15℃)\nLaden außerhalb dieser Temperaturen ist deaktiviert',
      duraInternalMemoryVal: '32GB',
      duraActivityMemoryVal: '1200 Stunden\nSchätzungen auf Basis von Outdoor-Aktivitäten',
      duraSatelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      duraGnssChipsetVal: 'All-Satelliten-Doppelfrequenz (L1 + L5)',
      duraMapLayerVal: 'Querformat Vorinstallierte globale Karten',
      duraAdditionalFeaturesVal: ['Kontrollpunkt', 'Zurück zum Start', 'Abweichungsalarm', 'Touchscreen-gesteuerte Kartenkontrolle', 'Abbiegehinweise', 'Intelligente Reroute-Navigation\nVerbindung zur COROS-App', 'Aufstiegsdetails'],
      duraSensorsVal: ['Barometrischer Höhenmesser', 'Beschleunigungsmesser', 'Gyroskop', 'Kompass', 'Temperatursensor'],
      duraTrainingFeaturesVal: ['Trainingsmanagement\nTrainingslast, Basisfitness, Lastwirkung', 'Trainingslastempfehlung', 'FTP-Test', 'Erholungs-Timer', 'Aktivitätswarnungen\nFür Schrittfrequenz, Distanz, Herzfrequenz, Leistung und weitere Messwerte', 'Vorgeplante Workouts', 'Trainingspläne', 'Touch Scroll\nWischen, um während des Trainings durch die Datenseiten zu blättern'],
      duraSafetyFeaturesVal: ['Gruppen-Tracking\nVerbindung zur COROS-App', 'Sicherheitsalarm\nVerbindung zur COROS-App', 'Fahrrad Alarm\nVerbindung zur COROS-App'],
      duraCompatibleAppsVal: 'Strava, Komoot, TrainingPeaks, Ride With GPS, Relive, Final Surge, Decathlon',
      duraDisplayLanguageVal: 'Englisch, Chinesisch (vereinfacht), Chinesisch (traditionell), Deutsch, Spanisch, Französisch, Polnisch, Thai, Japanisch, Koreanisch, Portugiesisch, Italienisch, Russisch',
      duraOutdoorVal: ['Straße', 'Schotter', 'Berg (MTB)'],
      duraElectricVal: ['E-Bike', 'E-Mountainbike (E-MTB)'],
      duraIndoorVal: 'Indoor'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/evolab.js
/* harmony default export */ const de_evolab = ({
  pages: [{
    title: 'COROS EvoLab',
    desc: ['Wie wirkt sich dein Training auf deine Fitness aus? EvoLab von COROS wertet dein Training, deine Erholung und vieles mehr aus, um dir eine erstklassige Fitnessanalyse zu bieten. Die EvoLab-Plattform ist für alle COROS-Nutzer kostenlos. Sie konzentriert sich auf deine allgemeine Fitness während der gesamten Trainingssaison und bietet zusätzliche Funktionen speziell für die Messung deiner Leistung beim Laufen auf der Straße.', 'EvoLab ist die Evolution der persönlichen Fitnessauswertung, verpackt in einem Wearable für das Handgelenk.']
  }, {
    title: 'Trainingsumfang',
    desc: ['Deine GPS-Uhr zeigt dir in Echtzeit an, wie stark sich eine bestimmte Trainingseinheit oder Aktivität auf deinen Körper auswirkt. Diese Zahl beginnt bei 0 und erhöht sich je nach Intensität und Dauer deiner Aktivität. Vergleiche deine Trainingsbelastung im Verlaufsmenü deiner Laufuhr, um zu sehen, wie dein heutiges Training im Vergleich zu ähnlichen Aktivitäten in der Vergangenheit abschneidet.']
  }, {
    title: 'Trainingseffekt',
    desc: ['Das Training wird oft in zwei Hauptkategorien unterteilt: Aerobe – kardioaufbauende Aktivitäten – oder anaerobe – Schnelligkeitsarbeit. Der Unterschied zwischen diesen beiden Kategorien ist deine Laktatschwelle. EvoLab bewertet deinen aeroben und anaeroben Trainingseffekt individuell auf einer Skala von 0-5+ in Echtzeit auf deiner GPS-Uhr.']
  }, {
    title: 'Grundfitness und Belastungswirkung',
    desc: ['Ein gutes Training heute bedeutet nicht, dass du morgen bereit für eine neue persönliche Bestleistung bist. Genauso wenig kann ein schlechtes Training einen guten Trainingsblock zunichte machen. EvoLab wertet deine Belastungsintensität (die letzten 7 Trainingstage) und deine Grundfitness (die letzten 6 Trainingswochen) aus. Deine GPS-Uhr empfiehlt dir außerdem einen 7-Tage-Trainingsbereich, der auf deiner Trainingshistorie basiert, um die besten Ergebnisse zu erzielen.']
  }, {
    title: 'Ermüdung',
    desc: ['Verschiedene Athleten reagieren auf unterschiedliche Trainingsbelastungen verschieden. Eine 100-Kilometer-Woche mag für Eliud Kipchoge ein leichtes Programm sein, aber für viele Menschen ist es mehr als das, was sie in einer Woche laufen können. Die Menge an Grundfitness, die nach der Belastung in deinem Körper verbleibt, wird Ermüdung genannt. Ermüdung macht deinen Körper müde, aber sie macht ihn auch stark. Das ist der Zyklus des Trainings, und EvoLab gibt einen Ermüdungswert von 0-100 an und teilt deinen Wert in 5 verschiedene Zonen ein. Bereitest du dich bald auf ein Rennen vor? Achte darauf, dass du von der Optimized Zone in die Performance Zone wechselst, oder wie du es nennen würdest - taper!']
  }, {
    title: 'Laufspezifische Funktionen',
    desc: ['• EvoLab bewertet deine aktuelle Marathonreife und gibt dir einen Wert, den du mit dem deiner Trainingspartner vergleichen kannst.', '• EvoLab stellt fest, ob dein letztes Training deine allgemeine Fitness verbessert hat.', '• EvoLab kategorisiert deine Trainingseinheiten und zeigt dir, welcher Teil deines Trainings Priorität hat.']
  }, {
    title: 'Marathon Level',
    desc: ['Auch wenn Wettkämpfe nicht auf dem Papier oder in Apps ausgetragen werden, liefert dir EvoLab eine Punktzahl von 0 bis 100, die dein Niveau als Marathonläufer anzeigt. Dieser Wert basiert zwar auf der 26,2-Meilen-Distanz (100 entspricht einem 2-Stunden-Marathon!), kann aber auch als Barometer für deine allgemeine Lauffitness dienen.']
  }, {
    title: 'Laufleistung',
    desc: ['Für diejenigen unter euch, die eine dynamischere Metrik wünschen, zeigt ein Laufleistungswert zwischen 80% und 120%, wie der heutige Lauf im Vergleich zu deiner allgemeinen Lauffitness abschneidet. Viele Faktoren können dazu beitragen, dass ein Lauf gut oder weniger gut läuft – Schlaf, Erholung, Ernährung, Stress, Wetter und vieles mehr. Wenn du weiterhin Werte von 100% oder mehr erreichst, ist das ein gutes Zeichen dafür, dass sich deine allgemeine Fitness verbessert.']
  }, {
    title: 'Wettkampfvorhersage',
    desc: ['Egal, ob du für die 5km-, 10km-, Halbmarathon- oder Marathondistanz trainierst, EvoLab liefert dir eine Gesamtvorhersage für das Rennen und das Renntempo direkt auf deine GPS-Uhr. Manche Läufe wirken sich auf die Vorhersage der Renndistanz aus, andere dagegen nicht, genau wie dein Training auf bestimmte Distanzen abzielt.']
  }, {
    title: 'Trainingsschwerpunkt',
    desc: ['Nicht alle Läufe sind gleich. Während wir hoffen, dass ein bestimmter Lauf seinen Zweck erfüllt, nutzt EvoLab die Herzfrequenz, die Pace und verschiedene andere Trainingsdaten deiner Laufuhr, um dir genau zu sagen, welcher Trainingstyp bei einem bestimmten Lauf den größten Einfluss hatte. Dabei geht es nicht darum, welche Art von Lauf du hattest, sondern welche Trainingsanstrengung wahrscheinlich verbessert wurde.']
  }, {
    title: 'Erweiterte Datenanalyse',
    desc: ['Das EvoLab bietet ein einfaches Tool, um deine Fitnessdaten und deren Trend zu überprüfen. Rufe deine COROS-App auf, besuche deine persönliche Profilseite und du wirst sehen, wie du dich im Laufe der Zeit verbesserst. Es gibt auch einen klaren Überblick über deinen saisonalen Fitnesstrend, damit du deinen Höhepunkt findest und dein Bestes gibst.']
  }],
  title: 'COROS EvoLab',
  desc: 'Unsere sportwissenschaftliche Plattform zur Bewertung Ihrer Fitness, Ermüdung und Leistung.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/convos.js
/* harmony default export */ const de_convos = ({
  eps: [{
    title: 'EMMA BATES – SCHNELLSTE AMERIKANISCHE MARATHONLÄUFERIN, 2021',
    mobileTitle: 'EMMA BATES SCHNELLSTE AMERIKANISCHE MARATHONLÄUFERIN, 2021',
    desc: 'In Episode 2 der COROS Convos tauschen der legendäre Big-Wall-Kletterer Hans Florine und die angehende Ultraläufer-Legende Camille Herron Geschichten aus ihrer Jugend, diskutieren über Wettbewerbsgeist, erklären unsere sich verändernde Welt und erforschen den tieferen Sinn, der in der Überwindung von Verletzungen und anderen Widrigkeiten liegt.',
    title4highlights: 'KARRIEREHIGHLIGHTS',
    highlights: ['2021 Fastest Marathon - American Woman', '2021 Chicago Marathon - 1st American', '2019 Chicago Marathon - 1st American', '2019 USA Marathon Champion', '2014 NCAA D1 10,000m Champion', '12-Time NCAA D1 All-American'],
    shopDesc: 'KAUFE EMMAS GPS UHR COROS APEX 42mm',
    title1: 'HANS FLORINE, WELTREKORDKLETTERER AN DER BIG WALL &',
    title2: 'CAMILLE HERRON, WELTREKORD-ULTRALÄUFERIN',
    highlights1: 'CAMILLE HERRON',
    highlights1list: ['3-fache Weltmeisterin (50 km, 100 km, 24 Stunden)', '2-fache Mannschaftsweltmeisterin (100 km, 24 Stunden)', 'Nationale Meisterin im Straßenlauf 50 km/50 Meilen/100 Meilen', "Meisterin des Comrades 'Uphill' Marathon", 'Derzeit 11-fache amerikanische Rekordhalterin', 'Derzeitige Weltbestzeit über 50 Meilen (5:38:41)', '100 Meilen Trail Bestleistung für Frauen (12:42:40)'],
    highlights2: 'HANS FLORINE',
    highlights2list: ["8 Geschwindigkeitsrekorde auf 'The Nose'", 'Autor von "On the Nose"', '3-facher X-Games-Goldmedaillengewinner', '12-facher nationaler Titel im Speed-Klettern', '2-facher nationaler Titel im Schwierigkeitsklettern', '1991 Speed Climbing Weltmeisterschaften', '1990 US Nationale Meisterschaften']
  }, {
    title1: 'TOMMY CALDWELL, LEGENDÄRER SPEED- UND BIG-WALL-KLETTERER',
    title2: 'KILIAN JORNET, DER GRÖSSTE BERGAUSDAUERSPORTLER ALLER ZEITEN',
    desc: 'Folge 3 bringt zwei der größten Bergsportler aller Zeiten zum ersten Mal zusammen. Am Tag nach Kilians Streckenrekord beim Hardrock 100 gefilmt, tauschen sie sich über ihre Erfahrungen aus und werfen einen Blick in ihre Zukunft. Was können sie voneinander lernen? Wo finden sie Inspiration? Wie erreichen sie Erfolg, und werden sie irgendwann auch zusammenarbeiten? Antworten auf diese Fragen und mehr gibt es in diesem denkwürdigen COROS-Gespräch.',
    highlights1: 'TOMMY',
    highlights1list: ['Erste freie Besteigung der Dawn Wall', 'Erste freie Besteigung der Dihedral Wall', 'Freie Besteigung von "The Nose" in 11 Stunden', 'Geschwindigkeitsrekord für "The Nose" in 1 Std. 58 Min.', 'Erstbegehung der Fitz Roy Traverse'],
    highlights2: 'KILIAN',
    highlights2list: ['4 x UTMB-Meister', '5 x Hardrock Hundred Champion', '4 × Weltmeister im Skibergsteigen', '3 × Sky Running Weltmeister', 'Zweimalige Speedbesteigung des Mt. Everest in einer Woche'],
    withoutSupplementalOxygen: 'ohne zusätzlichen Sauerstoff'
  }, {
    title1: 'MOLLY SEIDEL, COLLEGE-CHAMPION UND OLYMPIA-MEDAILLENGEWINNER',
    title2: 'DES LINDEN, LEGENDÄRER U.S. MARATHONLÄUFER UND ZWEIFACHER OLYMPIONIKE',
    desc: 'Episode 4 bringt eine erfahrene olympische Marathonläuferin mit einer olympischen Medaillengewinnerin zusammen. Woher nehmen sie ihre Wettkampfmotivation? Wie sieht die Erholung nach einem Marathon aus, und warum kommen sie immer wieder zurück, um weiterzumachen? In dieser Folge von COROS Convos erhalten Sie Antworten auf diese Fragen und erfahren mehr über ihre einzigartigen Wege zum Erfolg und darüber hinaus.',
    highlights1: 'MOLLY SEIDEL',
    highlights1list: ['4x NCAA-Meisterin', 'Bronzemedaillengewinnerin der Olympischen Spiele 2020 im Marathon', 'Schnellste Zeit einer Amerikanerin beim NYC Marathon', 'Bronzemedaillengewinnerin beim Great Edinburgh International XC', 'Erste U.S.-Olympionikin bei ihrem Debüt'],
    highlights2: 'DES LINDEN',
    highlights2list: ['Boston-Marathon-Siegerin 2018', 'Weltrekordhalterin über 50 km bei den Frauen', '2 x Olympische Marathonläuferin (2012, 2016)', 'Silbermedaillengewinnerin bei den Pan Am Games 2015, 10.000 m', '9 x Top-5-Platzierungen bei World Marathon Majors']
  }],
  shopTheirWatches: 'IHRE UHREN KAUFEN',
  careerHighlights: 'KARRIEREHIGHLIGHTS'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/login.js
/* harmony default export */ const de_login = ({
  loginTitle: 'BENUTZER-LOGIN',
  Email: 'E-Mail',
  password: 'Kennwort',
  signIn: 'Anmelden',
  createAccount: 'Konto erstellen',
  forgotYourPassword: 'Haben Sie Ihr Passwort vergessen?',
  DownloadPlugin: 'Laden Sie das Chrome-Plugin herunter',
  sendEmai: 'Wir werden Ihnen eine E-Mail schicken, um Ihr Passwort zurückzusetzen.',
  forgot: 'Ihr Passwort vergessen',
  submit: 'Absenden',
  newPassword: 'NEUES PASSWORT',
  newPasswordTips: 'Bitte geben Sie Ihr neues Passwort ein',
  newPasswordNext: 'WEITER',
  shortPasswordTips: 'Bitte geben Sie ein Passwort mit 8-20 Zeichen ein',
  invalidStr: 'Das Passwort muss sowohl Zahlen als auch Buchstaben enthalten.',
  resetSuccTitle: 'FERTIG ！',
  resetFailedTitle: 'ZURÜCKSETZEN FEHLGESCHLAGEN !',
  resetSuccDesc: 'Glückwunsch ! Sie haben Ihr neues Passwort zurückgesetzt ! <br> Jetzt gehen Sie und genießen Sie Ihre CTH-Reise!',
  resetFailedDesc: 'Hoppla ! Der Prüfcode ist ungültig !',
  accountNotExist: 'Diese E-Mail ist nicht registriert worden.',
  login: 'ANMELDEN'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/datalist.js
/* harmony default export */ const de_datalist = ({
  title: 'Workout-Verlauf',
  desc: 'Workouts insgesamt',
  total: 'Alle',
  run: 'Run',
  runOutdoor: 'Run',
  indoorRun: 'Indoor Run',
  trailRun: 'Trail Run',
  runMountaineer: 'Mtn Climb',
  hike: 'Hike',
  trackRun: 'Track Run',
  bike: 'Bike',
  indoorBike: 'Indoor Bike',
  swim: 'Swim',
  swimPool: 'Pool Swim',
  swimOpen: 'Open Water',
  triathlon: 'Triathlon',
  cardio: 'Cardio',
  aerobicOutdoor: 'GPS Cardio',
  aerobicIndoor: 'Gym Cardio',
  ski: 'Skiing',
  skiItem: 'Ski',
  skiSnowboard: 'Snowboard',
  skiMountaineering: 'Ski Touring',
  skiCrosscountry: 'XC Ski',
  multisport: 'Multisport',
  logOut: 'Abmelden',
  columnLabel: {
    title: 'Titel',
    distance: 'Distanz',
    averagePace: 'Durchschnittliche Pace',
    device: 'Gerät',
    date: 'Datum',
    workout: 'Training'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/yourproduct.js
/* harmony default export */ const de_yourproduct = ({
  yourProducts: 'Ihre Produkte',
  product: 'Produkt',
  productID: '6-stellige Produkt-ID',
  warrantyPeriod: 'Garantiezeitraum',
  expiration: 'Ablaufdatum der Garantie',
  workoutHistory: 'Trainingsverlauf',
  accountDetail: 'Kontodetails',
  serialNumber: 'Seriennummer'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/events.js
/* harmony default export */ const de_events = ({
  title: 'COROS New Products Launch Event',
  keywords: 'COROS Launch Event für neue Produkte - 17. Aug. 2021',
  description: 'COROS Launch Event für neue Produkte - 17. Aug. 2021',
  tittext1: 'VERANSTALTUNG ZUR EINFÜHRUNG NEUER PRODUKTE VON COROS',
  titdate: '17. August 2021',
  aftertit: 'Das haben wir angekündigt',
  aftervertix2tit: 'COROS VERTIX 2',
  aftervertix2subtit: 'GPS-Abenteueruhr',
  afterpace2tit: 'COROS PACE 2',
  afterpace2titsub: 'GPS-Sportuhr <br> Eliud Kipchoge Edition'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/shop.js
/* harmony default export */ const de_shop = ({
  chooseAdditionalBands: 'Zusätzliche Bandes',
  chooseBandMaterial: 'Material des Bandes',
  chooseSize: 'Wählen Sie Ihre Uhrengröße',
  chooseColor: 'Option/Farbe',
  chooseAccessories: 'Zusätzliches Zubehör',
  outOfStock: 'NICHT VORRÄTIG',
  add2Bag: 'JETZT BESTELLEN',
  total: 'Gesamt',
  overview: 'Übersicht',
  skipForNow: 'Erstmal überspringen',
  pace2: {
    difference: 'Was ist der Unterschied?',
    silicone1: 'Silikonbänder',
    silicone2: 'sind langlebig, schnell trocknend und leicht zu reinigen. Sie sind die erste Wahl für alle, die ihre Uhr 24 Stunden am Tag, 7 Tage die Woche tragen, auch im Wasser trainieren und ein Armband suchen, das lange hält.',
    nylon1: 'Nylon-Armbänder',
    nylon2: 'sind ultraleicht, atmungsaktiv und können sehr individuell angepasst werden. Diese Armbänder eignen sich gut für alle, die Wert auf einen guten Sitz und eine genaue Herzfrequenzmessung legen, aber auch für diejenigen, die Silikonarmbänder als unangenehm empfinden.'
  },
  details: 'Einzelheiten',
  price: 'Artikelpreis',
  quantity: 'Menge',
  subtotal: 'Preis',
  remove: 'Löschen',
  shipping: 'Versand',
  taxes: 'Steuer',
  estimatedTotal: 'Geschätzte Summe',
  checkOut: 'Bezahlen',
  frequentlyBoughtTogether: 'Das kann dir gefallen',
  shoppingBag: 'Einkaufstasche',
  bagPageTitle: 'Einkaufstasche - COROS',
  moreGoodStuffIsComingSoon: 'Neue Produkte in Kürze',
  added: 'Erledigt',
  calAtCheckout: 'Anhängig',
  bagEmpty: 'Deine Einkaufstasche ist leer',
  chooseModel: 'Uhrenmodell',
  whichModelIsRightForYou: 'Was ist der Unterschied?',
  bandTypes: {
    nylon: 'Nylonband',
    silicone: 'Silikonband'
  },
  thanksgivingPrompt: 'Füge deiner Bestellung eine kostenlose COROS Trainingstasche hinzu, wenn du für 300€ oder mehr bestellst.',
  thanksgivingPromotionDetails: {
    title: "F\xFCge deine kostenlose COROS Trainingstasche hinzu.",
    subTitles: ["Bestelle f\xFCr 300\u20AC oder mehr, um dieses Geschenk einzul\xF6sen.", "Das Angebot endet am 1. Dezember oder bis der Vorrat reicht.", "Nicht g\xFCltig mit anderen Angeboten oder Promotionen."]
  },
  thanksgivingPromptBanner: {
    title: "KOSTENLOS COROS TRAINING\n      TASCHE MIT BESTELLUNG",
    subTitles: ["Bestelle f\xFCr 300\u20AC oder mehr und erhalte diese\n      widerstandsf\xE4hige, vielseitige, und stilvolle\n      Tasche f\xFCr deine Ausr\xFCstung. ", "Das Angebot endet am 1. Dezember oder bis der Vorrat reicht."],
    shortDescs: ['Feiertagsangebot']
  },
  nnWaterBottlePromotion: {
    title: 'Offizielle NN-Rennflasche',
    subTitles: "Mach dich bereit f\xFCr die Marathon-Saison mit einer limitierten Edition der Trinkflasche, die von Eliud Kipchoge und dem NN Running Team verwendet wird."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/coaches.js
/* harmony default export */ const de_coaches = ({
  intro: 'COROS Training Hub ist ein kostenloses und umfassendes Tool für Trainer, die mit Einzelpersonen und Teams arbeiten, die COROS-Uhren verwenden.',
  features: {
    title: 'hauptmerkmale',
    list: [{
      title: 'Team- und Athletenansicht',
      list: ['Sortieren nach Leistungsmetriken', 'Sofortiges Feedback bereitstellen', 'Athleten vergleichen'],
      desc: 'Mit dem Training Hub habe ich alle meine Athleten an einem Ort und kann sie nach Laufniveau und Fähigkeiten gruppieren.',
      coach: 'Trainer Vowell: Flacon Youth AAU',
      btn: 'Falcon Youth: Fallstudie'
    }, {
      title: 'Pläne ziehen und ablegen',
      list: ['Erstellen/Speichern von Workouts und Plänen', 'Organisieren Sie Ihre Planbibliothek und greifen Sie darauf zu', 'Verschreibung von Plänen an Einzelpersonen oder Gruppen'],
      desc: 'Durch Drag & Drop von Kraftplänen für Sportler habe ich mehr Zeit, mich auf das Wesentliche zu konzentrieren',
      coach: 'Trainer Warrick: Drake University S&C',
      btn: 'Drake University: Fallstudie'
    }, {
      title: 'Athletenfitness optimieren',
      list: ['Maximierung von Leistungsspitzen & Erholung', 'Überwachen Sie die Mannschaftsleistung im Jahresvergleich', 'Wählen Sie vor wichtigen Events Tapers ein'],
      desc: 'Ich kann mir einen schnellen Überblick über die Fitness der Athleten und mögliches Übertraining verschaffen',
      coach: 'Tristan Hogue: Endurokin Coaching',
      btn: 'Endurokin: Fallstudie'
    }]
  },
  clickArea: [{
    title: 'coach anmelden',
    desc: 'Coaches, die ein Team aufbauen oder ihr Coaching-Unternehmen in den Training Hub einbringen möchten, können sich über den unten stehenden Link anmelden.'
  }, {
    title: 'teamverkäufe',
    desc: 'Teamverkäufe sind eine großartige Möglichkeit, ein ganzes Team oder eine Gruppe schnell auf den Training Hub zu bringen. Wenn Sie ein großes Team oder eine große Gruppe haben und eine Bestellung aufgeben möchten, füllen Sie bitte das unten stehende Formular aus.'
  }, {
    title: 'ausleihprogramm',
    desc: 'Das Leihprogramm soll Teams und Gruppen den Einstieg in den Training Hub erleichtern. Melden Sie sich unten für eine 4-wöchige Testphase für Ihr Team an. Nach Ablauf der 4 Wochen können die Sportler die Uhren kaufen oder zurückgeben.'
  }],
  form: {
    requiredMessage: 'Dieses Feld ist erforderlich.',
    emailMessage: 'Bitte geben Sie eine gültige E-Mail an!',
    placeholder: 'Ihre Antwort',
    noWatch: 'Ich habe keine COROS-Uhr.',
    labels: {
      fullname: 'Wie lautet Ihr vollständiger Name?',
      email: 'Wie lautet Ihre E-Mail-Adresse?',
      account: 'Wie lautet die E-Mail-Adresse Ihres COROS-Kontos?',
      teamName: 'Wie lautet der Name Ihres Teams?',
      teamSize: 'Wie groß ist Ihr Team?',
      role: 'Welche Rolle ist Ihre im Team?',
      yearsCoaching: 'Wie lange sind Sie bereits Trainer?',
      platform: 'Welche Coaching-Plattform nutzen Sie derzeit?',
      location: 'Aus welchem Land und Staat/Provinz kommen Sie?',
      interestedProducts: 'An welchen COROS-Produkten sind Sie interessiert?',
      channel: 'Wie haben Sie von diesem Programm erfahren?',
      additional: 'Zusätzliche Kommentare, die Sie uns mitteilen möchten.',
      phone: 'Wie lautet Ihre Telefonnummer?',
      watch: 'Welche COROS-Uhr verwenden Sie?',
      athletesCount: 'Wie viele Sportler betreuen Sie?',
      coachingWebsite: 'Wie lautet Ihre Trainer-Website?',
      credentials: 'Bitte geben Sie Ihre Trainerqualifikation an.',
      watchRequestCount: 'Wie viele Uhren möchten Sie anfordern?'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/careers.js
/* harmony default export */ const de_careers = ({
  pageTitle: '加入COROS',
  desc: "\u6211\u4EEC\u8BDA\u631A\u6B22\u8FCE\u4F18\u79C0\u7684\u4F60\u4EEC\u52A0\u5165\uFF0CCOROS \u79C9\u6301\u7740\u6210\u4E3A\u6700\u4F18\u79C0\u7684\u8FD0\u52A8\u79D1\u6280\u516C\u53F8\uFF0C\u901A\u8FC7\u6570\u636E \u6280\u672F\u63A8\u52A8\u8FD0\u52A8\u8BAD\u7EC3\u53D8\u9769\u7684\u613F\u666F\uFF0C\u5E0C\u671B\u4E0E\u5927\u5BB6\u4E00\u8D77\u575A\u6301\u957F\u671F\u3001\u7406\u6027\u3001\u5766\u8BDA\u3001\u8BDA\u4FE1\u3001\u521B\u65B0\u3001 \u6210\u957F\u7684\u4EF7\u503C\u89C2\uFF0C\u5EFA\u7ACB\u7B26\u5408 COROS\n  \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002\u5BF9\u4EC0\u4E48\u662F\u201CCOROS \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u201D\u611F\u5174\u8DA3?\u521A\u597D\uFF0C\u6211\u4EEC\u4E5F\u5BF9\u4F18\u79C0\u7684\u4F60\u611F\u5174\u8DA3\u3002",
  visionTitle: '使命与投递简历：',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/stories.js
/* harmony default export */ const de_stories = ({
  homeTitle: 'COROS Stories',
  viewAllStories: 'ALLE GESCHICHTEN ANZEIGEN',
  learnMore: 'MEHR LERNEN',
  searchCorosStories: 'COROS-GESCHICHTEN SUCHEN',
  search: 'SUCHE',
  viewMoreStories: 'MEHR GESCHICHTEN SEHEN',
  shareThisStory: 'Diese Geschichte teilen',
  by: 'Autor:',
  minRead: '{0} min read',
  resultsFound: '{0} ergebnisse gefunden'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/hrm.js
/* harmony default export */ const de_hrm = ({
  share: 'COROS Herzfrequenz-Messgerät',
  shareText: 'Präzise Daten aus dem Komfort Ihres Arms.',
  menu: 'COROS HFM',
  homeWatch: 'COROS HFM',
  homeWatchDesc: "Pr\xE4zise Daten aus dem \n  Komfort Ihres Arms",
  precise: 'PRÄZISE DATEN.\nTOTALER KOMFORT.',
  intro: 'Der COROS Herzfrequenzmonitor ist mit jedem Bluetooth-fähigen Gerät kompatibel und bietet über 38 Stunden kontinuierliche und genaue Herzfrequenzmessung, um Ihr Training ablenkungsfrei und komfortabel zu verfolgen.',
  easyToWear: 'EINFACH ZU TRAGEN.\nNICHTS LENKT AB.',
  sleek: 'Schlank und anschmiegsam',
  sleekText: 'Unser weiches Stoffband ist einfacher zu tragen als ein Brustgurt. Es legt sich flach um Ihren Arm und sitzt dank seiner strukturierten Oberfläche fest an seinem Platz. Das flache Design verhindert ein Hängenbleiben an Kleidung oder Fitnessgeräten, so dass Sie vergessen können, dass Sie es überhaupt tragen.',
  flexible: 'Flexibler Sitz',
  flexibleText: 'Stellen Sie die perfekte Position und Spannung des strapazierfähigen Gummibandes für Ihren Arm ein, indem Sie die Schnalle einfach so weit schieben, bis sie sich angenehm anfühlt. Dank des sicheren Klettverschlusses können Sie den Sensor schnell abnehmen und das Band einfach waschen.',
  accuracy: 'ENTWICKELT FÜR GENAUIGKEIT. \nGESCHAFFEN FÜR DIE LAST.',
  sensor: 'Fortschrittlicher Sensor',
  sensorText: 'Unser optischer Mehrkanalsensor der neuesten Generation bietet eine hohe Signalqualität. Unser fortschrittlicher Sensor, der in einem robusten und dennoch eleganten Gehäuse untergebracht und durch eine kratzfeste Abdeckung geschützt ist, liefert über Jahre hinweg zuverlässige und genaue Herzfrequenzdaten.',
  band: 'Überlegenes Band',
  bandText: 'Optische Herzfrequenzsensoren funktionieren am besten, wenn sie fest auf der Haut sitzen. Unser Band ist so konzipiert, dass der Sensor bündig an Ihrem Arm anliegt, damit kein Licht von außen eindringen kann und die Signalqualität unabhängig von Ihrer Aktivität erhalten bleibt.',
  noButtons: 'KEINE TASTEN.\nKEINE FÜSSE.',
  power: 'Langlebige Leistung',
  powerText: 'Mit 38 Stunden Vollbetrieb oder 80 Tagen Standby mit einer einzigen Ladung ist der COROS Herzfrequenzmonitor für eine lange Lebensdauer ausgelegt. Zeigen Sie den Batteriestand auf Ihrer COROS-Uhr oder App an und verwenden Sie das magnetische Kabel zum schnellen Aufladen.',
  detection: 'Verschleißerkennung',
  detectionText: 'Mit der integrierten Verschleißerkennung schaltet sich der COROS Herzfrequenzmonitor automatisch ein und aus, je nachdem, wann er getragen wird. So können Sie jedes Mal, wenn Sie ein Training beginnen, automatisch eine Verbindung zu Ihren gekoppelten Geräten herstellen.',
  connections: 'Mehrere Verbindungen',
  connectionsText: 'Das Gerät ist so konzipiert, dass es nahtlos mit Ihren bevorzugten COROS-Uhren und -Apps zusammenarbeitet. Es kann aber auch gleichzeitig mit bis zu drei Geräten gekoppelt werden, einschließlich Nicht-COROS-Uhren und anderen Bluetooth-kompatiblen Hometrainern, Fahrradcomputern und mehr.',
  why: 'Warum der Arm?',
  whyText: 'Optische Herzfrequenzsensoren arbeiten mit Licht, um den Blutfluss in den Kapillaren unter der Haut zu messen. Die Oberseite des Handgelenks ist ein praktischer Platz für eine Uhr, aber selbst für die besten Sensoren ist dies eine schwierige Position. Das Tragen am Arm bietet unserem optischen Sensor eine optimale Menge an Blutfluss, um Herzfrequenzdaten mit einer Genauigkeit zu erfassen, die der eines herkömmlichen Brustgurts entspricht.',
  box: 'WAS IN DER SCHACHTEL IST'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/chamonix.js
/* harmony default export */ const de_chamonix = ({});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/chamonix_edition.js
/* harmony default export */ const de_chamonix_edition = ({
  shareTitle: 'COROS APEX 2 Pro GPS Outdoor-Uhr Chamonix Edition',
  shareDesc: 'Für Outdoor-Sportler, die hart trainieren und sich schnell bewegen.',
  productName: 'COROS APEX 2 Pro Chamonix',
  mobileProductName: 'COROS APEX 2 Pro Chamonix',
  title: 'APEX 2 Pro CHAMONIX EDITION',
  intro: 'Wenn du hart trainieren und dich schnell in der Natur bewegen willst, gibt es keine ikonischere Basis als Chamonix. Die spirituelle Heimat des Trailrunnings und das Tor zum epischen Terrain des Mont Blanc. Diese Sonderedition des APEX 2 Pro feiert einen der großartigsten Orte der Welt, um zu trainieren und zu laufen.',
  introMobile: 'Wenn du hart trainieren und dich schnell in der Natur bewegen willst, gibt es keine ikonischere Basis als Chamonix. Die spirituelle Heimat des Trailrunnings und das Tor zum epischen Terrain des Mont Blanc. Diese Sonderedition des APEX 2 Pro feiert einen der großartigsten Orte der Welt, um zu trainieren und zu laufen.',
  limited: 'LIMITIERTE VERÖFFENTLICHUNG',
  limitedText: '3000 Einheiten weltweit',
  alpine: 'ALPIN INSPIRIERTE FARBEN',
  alpineText: 'Weit entfernt von dem Grün, das die unteren Hänge dominiert, erinnern die blauen und grauen Farben\nan die Höhenlagen des Mont Blanc, wo Felsen und Gletscher auf den stechenden Himmel treffen',
  alpineMobile: 'ALPIN INSPIRIERTE FARBEN',
  alpineMobileText: 'Weit entfernt von dem Grün, das die unteren Hänge dominiert, erinnern die blauen und grauen Farben\nan die Höhenlagen des Mont Blanc, wo Felsen und Gletscher auf den stechenden Himmel treffen',
  mont: 'MONT BLANC BEWÄHRT',
  montText: 'COROS-Benutzer haben, beginnend in Chamonix, über 1 Million Höhenmeter zurückgelegt. Vollgepackt mit unserer Technologie der neuesten Generation, innovativen Funktionen und der legendären Akkulaufzeit können Sie sicher sein, dass der APEX 2 Pro Sie nicht im Stich lassen wird.',
  montMobile: 'MONT BLANC BEWÄHRT',
  montMobileText: 'COROS-Benutzer haben, beginnend in Chamonix, über 1 Million Höhenmeter zurückgelegt. Vollgepackt mit unserer Technologie der neuesten Generation, innovativen Funktionen und der legendären Akkulaufzeit können Sie sicher sein, dass der APEX 2 Pro Sie nicht im Stich lassen wird.',
  reach: 'JEDEN GIPFEL ERREICHEN',
  reachText: 'Der APEX 2 Pro wurde für Leistung in jedem Gelände entwickelt und ist mit revolutionären Technologien für Ihre ehrgeizigsten Ziele ausgestattet. Mit einem robusten Gehäuse, einer neu gestalteten Antenne, einem optischen Sensor der nächsten Generation und einer längeren Akkulaufzeit kannst du schnell und weit gehen.',
  reachMobile: 'JEDEN GIPFEL ERREICHEN',
  reachMobileText: 'Der APEX 2 Pro wurde für Leistung in jedem Gelände entwickelt und ist mit revolutionären Technologien für Ihre ehrgeizigsten Ziele ausgestattet. Mit einem robusten Gehäuse, einer neu gestalteten Antenne, einem optischen Sensor der nächsten Generation und einer längeren Akkulaufzeit kannst du schnell und weit gehen.',
  noMatter: 'EGAL WAS PASSIERT,\nSIE WERDEN VORBEREITET SEIN',
  noMatterText: 'Die Schönheit der Natur bringt auch Risiken mit sich. Stürmisches Wetter, Höhenkrankheit, Dunkelheit, Dehydrierung - all das sind mögliche Realitäten beim Trekking in den Bergen. Das APEX 2 Pro Chamonix Edition bereitet Sie auf jede Situation vor, damit Sie auf Ihrem Weg zum Gipfel sicher und informiert sind.',
  noMatterMobile: 'EGAL WAS PASSIERT,\nSIE WERDEN VORBEREITET SEIN',
  noMatterMobileText: 'Die Schönheit der Natur bringt auch Risiken mit sich. Stürmisches Wetter, Höhenkrankheit, Dunkelheit, Dehydrierung - all das sind mögliche Realitäten beim Trekking in den Bergen. Das APEX 2 Pro Chamonix Edition bereitet Sie auf jede Situation vor, damit Sie auf Ihrem Weg zum Gipfel sicher und informiert sind.',
  findYour: 'FINDEN SIE IHREN WEG',
  findYourText: 'Mit den globalen Offline-Karten von COROS, Kontrollpunkten, benutzerdefinierter Routenplanung und vielem mehr können Sie auch an den entlegensten Orten sicher auf wichtige Navigationsinformationen zugreifen. Mit dem digitalen Drehrad des APEX 2 Pro Chamonix Edition können Sie die Karte ganz einfach vergrößern und verkleinern, während Sie mit dem Touchscreen die Karte mit dem Finger verschieben können.',
  findYourMobile: 'FINDEN SIE IHREN WEG',
  findYourMobileText: 'Mit den globalen Offline-Karten von COROS, Kontrollpunkten, benutzerdefinierter Routenplanung und vielem mehr können Sie auch an den entlegensten Orten sicher auf wichtige Navigationsinformationen zugreifen. Mit dem digitalen Drehrad des APEX 2 Pro Chamonix Edition können Sie die Karte ganz einfach vergrößern und verkleinern, während Sie mit dem Touchscreen die Karte mit dem Finger verschieben können.',
  box: 'WAS IM KARTON IST',
  cable: 'Ladekabel',
  nylonWatchBand: 'Nylonarmband',
  shopAllColors: 'Alle Farben kaufen',
  recommandedProduct: 'Wählen Sie Chamonix-Zubehör'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/pace3.js
/* harmony default export */ const de_pace3 = ({
  productName: 'COROS PACE 3 GPS-Sportuhr',
  productNameShort: 'COROS PACE 3',
  valencia_productNameShort: 'COROS PACE 3 Valencia',
  trainingPlansAndWorkoutsLinks1WordPc: 'Trainingspläne',
  intro: 'DER UNANGEFOCHTENE\nLEICHTGEWICHTS-\nCHAMPION',
  introText: 'Mit Verbesserungen in jeder Hinsicht gegenüber seinem legendären\nVorgänger, beeindruckt der PACE 3 umso mehr. Verfolge dein\nTraining und deine Erholung mit einer leichten und komfortablen\nUhr, ausgestattet mit fortschrittlicher Technologie, herausragender\nDatenpräzision und unterstützt durch das branchenführende COROS\nTrainingssoftware-System. Der COROS PACE 3 ebnet den Weg, \num dein Potenzial zu entdecken.',
  goTheDistance: 'ENTWICKELT FÜR JEDE ART VON DISTANZ',
  goTheDistanceText: 'Entwickelt, um die Batteriekapazität zu erhöhen, maximiert der PACE 3 die Zeit an deinem Handgelenk und minimiert die Ladezeit.',
  batteryAfter: 'BATTERIE NACH 10 STUNDEN\nGPS-NUTZUNG',
  batteryAfterFootnote: 'NUTZUNG',
  t247Comfort: 'RUND UM DIE UHR KOMFORT',
  t247ComfortText: 'Superleicht mit elegantem Gehäuse - der PACE 3 ist darauf ausgelegt, den ganzen Tag und die ganze Nacht getragen zu werden und bietet absoluten Komfort.',
  followYourOwnPath: 'FOLGE DEINEM EIGENEN WEG',
  followYourOwnPathText: 'Gehe selbstbewusst über deine gewohnte Laufstrecke hinaus und nutze eine Reihe leistungsstarker Tools, wie z.B. die Schritt-für-Schritt (step by step) Navigation.',
  nextGenerationGps: 'GPS DER \nNÄCHSTEN\nGENERATION',
  nextGenerationGpsText: 'Ein neu gestalteter Satelliten-Chip mit optionaler Dual-\nFrequenz sorgt dafür, dass deine GPS-Daten präzise\nbleiben, selbst in Städten mit hohen Gebäuden wie\nBerlin und New York.',
  lookGood: 'MIT STIL IN JEDER SITUATION',
  lookGoodText: 'Jedes Handgelenk ist einzigartig und jeder hat unterschiedliche Bedürfnisse. Deshalb bietet der PACE 3 die Wahl zwischen hochwertigen und stilvollen Silikon- und Nylonarmbändern. Wähle das, was am besten zu dir passt, oder kaufe mehrere, um deinen Look zu ändern.',
  lookGoodFeatures1: ['SILIKON', 'SCHNELLTROCKNEND', 'LEICHTE PFLEGE', 'WIDERSTANDSFÄHIG'],
  lookGoodFeatures2: ['NYLON', 'ATMUNGSAKTIV', 'LEICHTES GEWICHT', 'KOMFORT'],
  accurateActivityModes: 'UMFANGREICHE\nAKTIVITÄTSMODI',
  accurateActivityModesText: 'Laufen, Radfahren, Schwimmen, Krafttraining und Wintersportarten. Der PACE 3 bietet eine breite Palette von Aktivitätsmodi, die für genaue Messungen optimiert sind.',
  routePlanningMadeEasy: 'ROUTENPLANUNG LEICHT GEMACHT',
  routePlanningMadeEasyText: 'Erstelle ganz einfach individuelle Routen oder suche nach\neinem Ziel und synchronisiere es sofort mit dem PACE 3\nauf der "Entdecke"-Seite der COROS App.',
  neverMissABeat: 'IMMER AUF DEM LAUFENDEN BLEIBEN',
  neverMissABeatText: 'Unabhängig davon, ob es um die Verfolgung deines Schlafs, deines SpO2-Werts oder der\nIntensität deines Trainings geht, unser Herzfrequenzsensor der nächsten Generation\nliefert dir die genauesten Messungen am Handgelenk.',
  neverMissABeatFeatures: ['5 LEDs', '4 Fotodetektoren', 'Schutzglas', 'OPTISCHES PULSOXIMETER'],
  trainingDoesntEndAtBedtime: 'DAS TRAINING ENDET NICHT ZUR SCHLAFENSZEIT',
  trainingDoesntEndAtBedtimeText: 'Mit rundum Komfort, präzisen Sensoren und ausgezeichneter Akkulaufzeit liefert dir der PACE 3 jede Nacht rund um die Uhr umfangreiche Daten zu deiner Erholung im Schlaf.',
  trainingDoesntEndAtBedtimeFeatures: 'Misst Wachzustand, REM-, \nLeicht- und Tiefschlaf',
  trainingDoesntEndAtBedtimeFeatures2: 'Berechnet deine Ruheherzfrequenz',
  alwaysSeeTheBrightSide: 'SIEH IMMER DIE LICHTE SEITE',
  alwaysSeeTheBrightSideFeatures: ['TRANSREFLEKTIVES DISPLAY FÜR \nVERBESSERTE SICHTBARKEIT BEI \nHELLEM SONNENSCHEIN', 'IMMER EINGESCHALTETES\n1,2"-MINERALGLAS-DISPLAY', 'TOUCHSCREEN FÜR \nINTUITIVE BEDIENUNG', 'NACHTMODUS FÜR EINFACHE \nLESBARKEIT, SELBST IM DUNKELN'],
  sweatSwimShower: 'SCHWITZEN\nSCHWIMMEN\nDUSCHEN',
  sweatSwimShowerText: 'Dank einer Wasserresistenz von bis zu 5 ATM, stellt Feuchtigkeit für den PACE 3 kein Problem dar.',
  moreThanAWatch: 'MEHR ALS EINE UHR',
  moreThanAWatchText: 'Mit dem Kauf einer PACE 3 erhältst du zusätzlich das gesamte\nCOROS-Trainingsystem ohne zusätzliche Kosten.',
  trainingPlansAndWorkouts: 'TRAININGSPLÄNE UND WORKOUTS',
  trainingPlansAndWorkoutsText: 'Von 5 km bis Ultra. Lade kostenlose Trainingspläne und Workouts herunter, um das Erreichen deiner Ziele zu vereinfachen.',
  corosCoaches: 'COROS COACHES',
  corosCoachesText: 'Echte Trainer. Echte Beratung. Erhalte persönliche\nUnterstützung von unserem Expertenteam.',
  trainingHub: 'TRAINING HUB',
  trainingHubText: 'Fortgeschrittenes Trainingsanalysetool und direkte Kommunikation mit deinem Trainer. Vom NN Running Team empfohlen.',
  beyondYourTraining: 'ÜBER IHR TRAINING HINAUS',
  beyondYourTrainingText: 'Synchronisiere direkt mit deinen lieblings Gesundheits- und Fitness-Apps wie Strava, Nike Run Club, Apple Health und Health Connect. Bleib verbunden, indem du eingehende Textnachrichten und Anrufe anzeigen lässt oder die Funktion "Mein Gerät suchen" verwendest, um dein verlegtes Gerät zu finden, und steuere deine GoPro- und Insta360-Kameras direkt von deinem Handgelenk aus.',
  whatsInTheBox: 'WAS ENTHÄLT DIE BOX',
  chargingCable: 'Ladekabel',
  watchBand: 'Uhrenarmband',
  shareTitle: 'COROS PACE 3 GPS-Sportuhr',
  shareDesc: 'Für Multisportler, die intensiv trainieren und sich schnell bewegen.',
  homeProductPageDesc: 'Für schnelle,\nintensive Multisportler.',
  watchInfoHeader: 'GPS-SPORTUHR',
  weight: 'Gewicht (mit nylonband)',
  width: 'Dicke',
  inStandardGpsMode: '*GPS estándar completo',
  trainingPlansAndWorkoutsLinks1Word: 'Trainingspläne',
  trainingPlansAndWorkoutsLinks2Word: 'Workouts',
  corosCoachesLinksWord: 'unserem Expertenteam',
  trainingPlansAndWorkoutsLinks1Link: 'https://de.coros.com/plans',
  trainingPlansAndWorkoutsLinks2Link: 'https://de.coros.com/workouts',
  corosCoachesLinksLink: 'https://us.coros.com/stories/coros-coaches/c/coros-coaches-your-personal-training-support',
  mobile_intro: 'DER UNANGEFOCHTENE\nLEICHTGEWICHTS-CHAMPION',
  mobile_introText: 'Mit Verbesserungen in jeder Hinsicht gegenüber seinem legendären Vorgänger, beeindruckt der PACE 3 umso mehr. Verfolge dein Training und deine Erholung mit einer leichten und komfortablen Uhr, ausgestattet mit fortschrittlicher Technologie, herausragender Datenpräzision und unterstützt durch das branchenführende COROS Trainingssoftware-System. Der COROS PACE 3 ebnet den Weg, um dein Potenzial zu entdecken.',
  mobile_goTheDistance: 'ENTWICKELT FÜR JEDE ART VON DISTANZ',
  mobile_goTheDistanceText: 'Entwickelt, um die Batteriekapazität zu erhöhen, maximiert der PACE 3 die Zeit an deinem Handgelenk und minimiert die Ladezeit.',
  mobile_batteryAfter: 'BATTERIE NACH 10 STUNDEN\nGPS-NUTZUNG',
  mobile_batteryAfterFootnote: 'NUTZUNG',
  mobile_t247Comfort: 'RUND UM DIE UHR KOMFORT',
  mobile_t247ComfortText: 'Superleicht mit elegantem Gehäuse - der PACE 3 ist darauf ausgelegt, den ganzen Tag und die ganze Nacht getragen zu werden und bietet absoluten Komfort.',
  mobile_followYourOwnPath: 'FOLGE DEINEM EIGENEN WEG',
  mobile_followYourOwnPathText: 'Gehe selbstbewusst über deine gewohnte Laufstrecke hinaus und nutze eine Reihe leistungsstarker Tools, wie z.B. die Schritt-für-Schritt (step by step) Navigation.',
  mobile_nextGenerationGps: 'GPS DER NÄCHSTEN\nGENERATION',
  mobile_nextGenerationGpsText: 'Ein neu gestalteter Satelliten-Chip mit optionaler Dual-Frequenz sorgt dafür, dass deine GPS-Daten präzise bleiben, selbst in Städten mit hohen Gebäuden wie Berlin und New York.',
  mobile_lookGood: 'MIT STIL IN JEDER SITUATION',
  mobile_lookGoodText: 'Jedes Handgelenk ist einzigartig und jeder hat unterschiedliche Bedürfnisse. Deshalb bietet der PACE 3 die Wahl zwischen hochwertigen und stilvollen Silikon- und Nylonarmbändern. Wähle das, was am besten zu dir passt, oder kaufe mehrere, um deinen Look zu ändern.',
  mobile_lookGoodFeatures1: ['SILIKON', 'SCHNELLTROCKNEND', 'LEICHTE PFLEGE', 'WIDERSTANDSFÄHIG'],
  mobile_lookGoodFeatures2: ['NYLON', 'ATMUNGSAKTIV', 'LEICHTES GEWICHT', 'KOMFORT'],
  mobile_accurateActivityModes: 'UMFANGREICHE AKTIVITÄTSMODI',
  mobile_accurateActivityModesText: 'Laufen, Radfahren, Schwimmen, Krafttraining und Wintersportarten. Der PACE 3 bietet eine breite Palette von Aktivitätsmodi, die für genaue Messungen optimiert sind.',
  mobile_routePlanningMadeEasy: 'ROUTENPLANUNG LEICHT GEMACHT',
  mobile_routePlanningMadeEasyText: 'Erstelle ganz einfach individuelle Routen oder suche nach einem Ziel und synchronisiere es sofort mit dem PACE 3 auf der "Entdecke"-Seite der COROS App.',
  mobile_neverMissABeat: 'IMMER AUF DEM LAUFENDEN BLEIBEN',
  mobile_neverMissABeatText: 'Unabhängig davon, ob es um die Verfolgung deines Schlafs, deines SpO2-Werts oder der Intensität deines Trainings geht, unser Herzfrequenzsensor der nächsten Generation liefert dir die genauesten Messungen am Handgelenk.',
  mobile_neverMissABeatFeatures: ['5 LEDs', '4 Fotodetektoren', 'Schutzglas', 'OPTISCHES PULSOXIMETER'],
  mobile_trainingDoesntEndAtBedtime: 'DAS TRAINING ENDET NICHT ZUR SCHLAFENSZEIT',
  mobile_trainingDoesntEndAtBedtimeText: 'Mit rundum Komfort, präzisen Sensoren und ausgezeichneter Akkulaufzeit liefert dir der PACE 3 jede Nacht rund um die Uhr umfangreiche Daten zu deiner Erholung im Schlaf.',
  mobile_trainingDoesntEndAtBedtimeFeatures: 'Misst Wachzustand, REM-, \nLeicht- und Tiefschlaf',
  mobile_trainingDoesntEndAtBedtimeFeatures2: 'Berechnet deine Ruheherzfrequenz',
  mobile_alwaysSeeTheBrightSide: 'SIEH IMMER DIE LICHTE SEITE',
  mobile_alwaysSeeTheBrightSideFeatures: ['TRANSREFLEKTIVES DISPLAY FÜR \nVERBESSERTE SICHTBARKEIT BEI \nHELLEM SONNENSCHEIN', 'IMMER EINGESCHALTETES\n1,2"-MINERALGLAS-DISPLAY', 'TOUCHSCREEN FÜR \nINTUITIVE BEDIENUNG', 'NACHTMODUS FÜR EINFACHE \nLESBARKEIT, SELBST IM DUNKELN'],
  mobile_sweatSwimShower: 'SCHWITZEN\nSCHWIMMEN\nDUSCHEN',
  mobile_sweatSwimShowerText: 'Dank einer Wasserresistenz von bis zu 5 ATM, stellt Feuchtigkeit für den PACE 3 kein Problem dar.',
  mobile_moreThanAWatch: 'MEHR ALS EINE UHR',
  mobile_moreThanAWatchText: 'Mit dem Kauf einer PACE 3 erhältst du zusätzlich das gesamte COROS-Trainingsystem ohne zusätzliche Kosten.',
  mobile_trainingPlansAndWorkouts: 'TRAININGSPLÄNE UND WORKOUTS',
  mobile_trainingPlansAndWorkoutsText: 'Von 5 km bis Ultra. Lade kostenlose Trainingspläne und Workouts herunter, um das Erreichen deiner Ziele zu vereinfachen.',
  mobile_corosCoaches: 'COROS COACHES',
  mobile_corosCoachesText: 'Von 5 km bis Ultra. Lade kostenlose Trainingspläne und Workouts herunter, um das Erreichen deiner Ziele zu vereinfachen.',
  mobile_trainingHub: 'TRAINING HUB',
  mobile_trainingHubText: 'Echte Trainer. Echte Beratung. Erhalte persönliche Unterstützung von unserem Expertenteam.',
  mobile_beyondYourTraining: 'ÜBER IHR TRAINING HINAUS',
  mobile_beyondYourTrainingText: 'Synchronisiere direkt mit deinen lieblings Gesundheits- und Fitness-Apps wie Strava, Nike Run Club, Apple Health und Health Connect. Bleib verbunden, indem du eingehende Textnachrichten und Anrufe anzeigen lässt oder die Funktion "Mein Gerät suchen" verwendest, um dein verlegtes Gerät zu finden, und steuere deine GoPro- und Insta360-Kameras direkt von deinem Handgelenk aus.',
  mobile_weight: 'Gewicht',
  mobile_width: 'Dicke',
  mobile_inStandardGpsMode: '*GPS estándar completo'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/pace3_ek.js
/* harmony default export */ const de_pace3_ek = ({
  introText: 'Es gibt keinen besseren Läufer und keinen größeren Botschafter für die Laufsportart als Eliud Kipchoge. \nSeine Liste der Erfolge ist unübertroffen und setzt Maßstäbe für alle, die ihm folgen. \nMit dieser limitierten Auflage unseres preisgekrönten COROS PACE 3 \nfeiern wir seine Legende, sein Vermächtnis und seinen Traum.',
  dream: "ELIUD'S TRAUM",
  dreamText: 'Egal wie schnell du bist, glaubt Eliud, dass \nLaufen eine Kraft für das Gute ist. Abgesehen \nvon den offensichtlichen Vorteilen für deine \nGesundheit und dein Wohlbefinden hat das \nLaufen die Kraft, dein Leben zu bereichern \nund uns einander näher zu bringen. Wo auch \nimmer du bist, wenn du dich für EINE \nLAUFENDE WELT entscheidest, entscheidest \ndu dich dafür, eine bessere Welt zu schaffen.',
  words: ['Eine laufende Welt     ist eine gesunde Welt. ', 'Eine laufende Welt     ist eine reiche Welt.', 'Eine laufende Welt     ist eine friedliche Welt.', 'Eine laufende Welt     ist eine glückliche Welt.', 'Mein Traum ist es diese Welt zu einer laufenden Welt zu machen.'],
  inspiredByHome: 'VON DER HEIMAT INSPIRIERT',
  inspiredByHomeText: 'Mit Farben, die seine Nationalflagge widerspiegeln, und einem Design, das an traditionelle kenianische geometrische Muster erinnert, zollen wir dem Ort Tribut, an dem Eliud trainiert und den er immer sein Zuhause nennen wird.',
  trainLikeAPro: 'TRAINIERE WIE \nEIN PROFI',
  trainLikeAProText: 'Mit der COROS PACE 3 Eliud Kipchoge \nEdition erhältst du auch die gesamte \nCOROS-Trainingslösung ohne \nzusätzliche Kosten. Erfahre, wie \nCOROS Spitzensportler wie Eliud \nmit detaillierten Funktionen und \ntechnischen Spezifikationen dabei \nunterstützt, Weltrekorde zu brechen, \nund entdecke weitere Farben des \nCOROS PACE 3 unten im Shop.',
  clickToLearnMore: 'Klicke hier, um mehr über den COROS PACE 3 zu erfahren',
  yourBestTrainingPartner: 'DEIN BESTER TRAININGSPARTNER',
  iconsText: ['Ultra Leichtgewicht', 'Lange Batterielaufzeit', 'Präzise GPS', 'Umfangreiche Aktivitätsmodi', 'Fortschrittliche Sensoren', 'Volle Trainingsunterstützung'],
  limitedRelease: 'LIMITIERTE AUSGABE',
  limitedReleaseText: 'Die Produktion des COROS PACE 3 Eliud Kipchoge Edition wird weltweit begrenzt sein. Also, genauso \nwie der Mann selbst, solltest du schnell sein, wenn du dieses Stück Geschichte an deinem \nHandgelenk haben möchtest.',
  mobile_introText: 'Es gibt keinen besseren Läufer und keinen \ngrößeren Botschafter für die Laufsportart \nals Eliud Kipchoge. Seine Liste der Erfolge \nist unübertroffen und setzt Maßstäbe für \nalle, die ihm folgen. Mit dieser limitierten \nAuflage unseres preisgekrönten COROS \nPACE 3 feiern wir seine Legende, sein \nVermächtnis und seinen Traum.',
  mobile_dream: "ELIUD'S TRAUM",
  mobile_dreamText: 'Egal wie schnell du bist, glaubt Eliud, dass \nLaufen eine Kraft für das Gute ist. Abgesehen \nvon den offensichtlichen Vorteilen für deine \nGesundheit und dein Wohlbefinden hat das \nLaufen die Kraft, dein Leben zu bereichern \nund uns einander näher zu bringen. Wo auch \nimmer du bist, wenn du dich für EINE \nLAUFENDE WELT entscheidest, entscheidest \ndu dich dafür, eine bessere Welt zu schaffen.',
  mobile_words: ['Eine laufende Welt ist eine gesunde Welt. ', 'Eine laufende Welt ist eine reiche Welt.', 'Eine laufende Welt ist eine friedliche Welt.', 'Eine laufende Welt ist eine glückliche Welt.', 'Mein Traum ist es diese Welt zu einer laufenden Welt zu machen.'],
  mobile_inspiredByHome: 'VON DER HEIMAT INSPIRIERT',
  mobile_inspiredByHomeText: 'Mit Farben, die seine Nationalflagge \nwiderspiegeln, und einem Design, das an \ntraditionelle kenianische geometrische \nMuster erinnert, zollen wir dem Ort Tribut, \nan dem Eliud trainiert und den er immer \nsein Zuhause nennen wird.',
  mobile_trainLikeAPro: 'TRAINIERE WIE EIN PROFI',
  mobile_trainLikeAProText: 'Mit der COROS PACE 3 EK Edition erhältst du \nauch die gesamte COROS-Trainingslösung \nohne zusätzliche Kosten. Erfahre, wie COROS \nSpitzensportler wie Eliud mit detaillierten \nFunktionen und technischen Spezifikationen \ndabei unterstützt, Weltrekorde zu brechen, \nund entdecke weitere Farben des COROS \nPACE 3 unten im Shop.',
  mobile_clickToLearnMore: 'Klicke hier, um mehr über den \nCOROS PACE 3 zu erfahren',
  mobile_yourBestTrainingPartner: 'DEIN BESTER TRAININGSPARTNER',
  mobile_iconsText: ['Ultra \nLeichtgewicht', 'Lange \nBatterielaufzeit', 'Präzise \nGPS', 'Umfangreiche\nAktivitätsmodi', 'Fortschrittliche\nSensoren', 'Volle\nTrainingsunterstützung'],
  mobile_limitedRelease: 'LIMITIERTE AUSGABE',
  mobile_limitedReleaseText: 'Die Produktion des COROS PACE 3 Eliud Kipchoge \nEdition wird weltweit begrenzt sein. Genauso wie \nder Mann selbst, solltest du schnell sein, wenn \ndu dieses Stück Geschichte an deinem \nHandgelenk haben möchtest.',
  shareTitle: 'COROS PACE 3 GPS-Sportuhr Eliud Kipchoge Edition',
  shareDesc: 'Für Multisportler, die intensiv trainieren und sich schnell bewegen.',
  productNameShort: 'COROS PACE 3 EK',
  productMenuTitle: 'COROS PACE 3 Eliud Kipchoge Edition'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/pod2_2024.js
/* harmony default export */ const de_pod2_2024 = ({
  intro: 'LAUFE ÜBER DIE GRENZEN VON GPS HINAUS',
  introText: 'Der COROS POD 2 ist ein leichter, wasserbeständiger Sensor, der fortschrittliche Laufdaten direkt aus deiner Fuß- oder Körperbewegung liefert. Er verbindet sich mit deiner COROS-Uhr, um Echtzeitmetriken, Erkenntnisse nach dem Laufen und eine Laufstilanalyse bereitzustellen. So hast du die besten Informationen während und nach deinem Lauf.',
  allAboutAccuracy: 'ALLES ÜBER GENAUIGKEIT',
  allAboutAccuracyText: 'Der COROS POD 2 behebt die häufigsten Probleme der GPS-Uhrentechnologie, darunter Datenverzögerung, schwaches Signal \nund Ungenauigkeiten in Innenräumen. Durch die direkte Verfolgung der Bewegungen deines Fußes verbessert der COROS \nPOD 2 die Genauigkeit und Tempoempfindlichkeit, um deine Leistung in jeder Situation genau zu verfolgen.',
  sensitiveInstantPace: 'Empfindliches Echtzeit-Tempo.',
  sensitiveInstantPaceText: 'Interval-Workouts sind effektiver mit sofortigen Geschwindigkeitsdaten, aber GPS-Signale können bis zu einer 10-sekündigen Verzögerung haben. Der COROS POD 2 überträgt genaue Geschwindigkeitsdaten direkt von deinem Fuß, sodass die Pace-Alert-Funktion deiner COROS Uhr dir helfen kann, präzise in deiner Zielgeschwindigkeitszone zu bleiben.',
  accurateIndoorData: 'Präzise Indoor Daten.',
  accurateIndoorDataText: 'GPS-Technologie funktioniert nicht für Laufband-Workouts, und keine Uhr kann allein präzise Laufband-Geschwindigkeit und Distanz aufzeichnen. Der COROS POD 2 löst dieses Problem, indem er sich automatisch kalibriert, um deine Schrittlänge zu messen, und überträgt genaue Laufband-Laufdaten direkt an deine COROS Uhr.',
  preciseOnTheHills: 'Präzise auf den Hügeln.',
  preciseOnTheHillsText: 'Efforts Pace ist eine exklusive Metrik von COROS, um zu quantifizieren, wie intensiv du auf hügeligem Gelände läufst. Der COROS POD 2 macht Effort Pace noch präziser und reaktionsschneller als GPS, indem es sofortige Daten an deine COROS-Uhr übermittelt. Um mehr über Effort Pace zu erfahren, klicke hier.',
  preciseOnTheHillsTextLinkText: 'klicke hier',
  preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  understandYourRunningForm: 'ANALYIERE DEINE LAUFFORM',
  understandYourRunningFormText: 'Bist du ein Boden- oder Luftläufer? Wenn am Hosenbund befestigt, hilft dir der COROS POD 2 dies herauszufinden, indem er einen schnellen und einfachen Laufstiltest abschließt. Die Erkenntnisse aus dem Test sollen dir helfen, deine Technik zu verbessern und effizienter zu laufen. Um mehr über den Laufform-Test zu erfahren, klicke hier.',
  understandYourRunningFormTextLinkText: 'klicke hier',
  understandYourRunningFormTextLink: 'https://support.coros.com/hc/de/articles/22933404044564-Formtest-Ausf%C3%BChren',
  monitorOutsideTemperature: 'Überwache die Außentemperatur',
  monitorOutsideTemperatureText: 'Der COROS POD 2 zeichnet Echtzeit-Wettertemperaturen auf, damit du ein detailliertes Verständnis für die sich ändernde Umgebung während deines Laufs hast. Du kannst diese Datenpunkte nutzen, um deine Läufe weiter zu analysieren, während du in verschiedenen Klimazonen oder Jahreszeiten trainierst.',
  simpleSecure: 'SIMPEL & SICHER',
  simpleSecureText: 'Mit automatischer Bedienung ohne Tasten und sicheren Befestigungsoptionen für Schnürsenkel oder den Hüftbund kannst du \nsicher sein, dass dein COROS POD 2 selbst bei den extremsten Läufen bis zum Ende durchhält.',
  longBatteryLife: 'LANGE AKKULAUFZEIT',
  longBatteryLifeText: 'COROS POD 2 ist mit einem leistungsstarken Akku ausgestattet, der für eine lange Lebensdauer entwickelt wurde. Er zeichnet 25 Stunden kontinuierliches Laufen oder 150 Stunden Gesamtlaufzeit mit dem tragbaren Ladegerät auf.',
  data1: '25',
  data1Unit: 'Stunden',
  data1Text: 'EINE LADUNG',
  data2: '150',
  data2Unit: 'Stunden',
  data2Text: 'MIT LADESTATION',
  lightweightWeatherproof: 'LEICHT & WASSERFEST',
  lightweightWeatherproofText: 'Mit nur 5,6 g wirst du den COROS POD 2 beim Training oder im Rennen kaum bemerken, und er hält Temperaturen von (-10 °C bis 60 °C) stand, mit einer Wasserbeständigkeit von bis zu 3 ATM.',
  data3: '5,6',
  data3Unit: 'g',
  data3Text: 'SENSOR-GEWICHT',
  data4: '3',
  data4Unit: 'ATM',
  data4Text: 'WASSERBEWERTUNG',
  setupMadeEasy: 'LEICHTES SETUP',
  setupMadeEasyText: 'Der COROS POD 2 kann an deinem Schuh getragen oder an deinem Hosenbund befestigt werden und geht in den Schlafmodus, \num die Batterie zu schonen, wenn er sich nicht in Bewegung befindet.',
  pair: 'KOPPELN',
  pairText: 'Füge COROS POD 2 deiner COROS-App hinzu, um automatisch mit verbundenen Uhren zu koppeln.',
  clip: 'CLIPS',
  clipText: 'Befestige ihn an deinem Schuh oder \nHüftband, und die automatische \nTrageerkennung passt die \nFunktionen an.',
  go: 'LOS',
  goText: 'Starte deine Laufaktivität wie gewohnt und erhalte präzise Echtzeit-Messwerte.',
  box: 'WAS IST IN DER BOX?',
  boxText: 'Der COROS POD 2 wird mit allem geliefert, was du brauchst, einschließlich zwei Schuhclips, einem Clip für den Silikon-Gürtel, \neiner Ladestation, einem USB-A- auf USB-C-Ladekabel und einer kompakten Tasche.',
  generalFaQs: 'ALLGEMEINE',
  generalFaQsLink: 'https://support.coros.com/hc/de/articles/10351744085012-COROS-POD-2-FAQ-s',
  runningFormTestFaQs: 'LAUFFORM-TEST',
  runningFormTestFaQsLink: 'https://support.coros.com/hc/de/articles/22933404044564-Formtest-Ausf%C3%BChren',
  frequentlyAskedQuestions: 'HAUFIG\nGESTELLTE\nFRAGEN',
  mobile_intro: 'LAUFE ÜBER DIE GRENZEN VON GPS HINAUS',
  mobile_introText: 'Der COROS POD 2 ist ein leichter, \nwasserbeständiger Sensor, der fortschrittliche \nLaufdaten direkt aus deiner Fuß- oder \nKörperbewegung liefert. Er verbindet sich mit \ndeiner COROS-Uhr, um Echtzeitmetriken, \nErkenntnisse nach dem Laufen und eine \nLaufstilanalyse bereitzustellen. So hast du die \nbesten Informationen während und \nnach deinem Lauf.',
  mobile_allAboutAccuracy: 'ALLES ÜBER GENAUIGKEIT',
  mobile_allAboutAccuracyText: 'Der COROS POD 2 behebt die häufigsten Probleme der GPS-Uhrentechnologie, darunter Datenverzögerung, schwaches Signal und Ungenauigkeiten in Innenräumen. Durch die direkte Verfolgung der Bewegungen deines Fußes verbessert der COROS POD 2 die Genauigkeit und Tempoempfindlichkeit, um deine Leistung in jeder Situation genau zu verfolgen.',
  mobile_sensitiveInstantPace: 'Empfindliches Echtzeit-Tempo.',
  mobile_sensitiveInstantPaceText: 'Interval-Workouts sind effektiver mit sofortigen Geschwindigkeitsdaten, aber GPS-Signale können bis zu einer 10-sekündigen Verzögerung haben. Der COROS POD 2 überträgt genaue Geschwindigkeitsdaten direkt von deinem Fuß, sodass die Pace-Alert-Funktion deiner COROS Uhr dir helfen kann, präzise in deiner Zielgeschwindigkeitszone zu bleiben.',
  mobile_accurateIndoorData: 'Präzise Indoor Daten.',
  mobile_accurateIndoorDataText: 'GPS-Technologie funktioniert nicht für Laufband-Workouts, und keine Uhr kann allein präzise Laufband-Geschwindigkeit und Distanz aufzeichnen. Der COROS POD 2 löst dieses Problem, indem er sich automatisch kalibriert, um deine Schrittlänge zu messen, und überträgt genaue Laufband-Laufdaten direkt an deine COROS Uhr.',
  mobile_preciseOnTheHills: 'Präzise auf den Hügeln.',
  mobile_preciseOnTheHillsText: 'Efforts Pace ist eine exklusive Metrik von COROS, um zu quantifizieren, wie intensiv du auf hügeligem Gelände läufst. Der COROS POD 2 macht Effort Pace noch präziser und reaktionsschneller als GPS, indem es sofortige Daten an deine COROS-Uhr übermittelt. Um mehr über Effort Pace zu erfahren, klicke hier.',
  mobile_preciseOnTheHillsTextLinkText: 'klicke hier',
  mobile_preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  mobile_understandYourRunningForm: 'ANALYIERE DEINE LAUFFORM',
  mobile_understandYourRunningFormText: 'Bist du ein Boden- oder Luftläufer? Wenn am Hosenbund befestigt, hilft dir der COROS POD 2 dies herauszufinden, indem er einen schnellen und einfachen Laufstiltest abschließt. Die Erkenntnisse aus dem Test sollen dir helfen, deine Technik zu verbessern und effizienter zu laufen. Um mehr über den Laufform-Test zu erfahren, klicke hier.',
  mobile_understandYourRunningFormTextLinkText: 'klicke hier',
  mobile_understandYourRunningFormTextLink: 'https://support.coros.com/hc/de/articles/22933404044564-Formtest-Ausf%C3%BChren',
  mobile_monitorOutsideTemperature: 'Überwache die Außentemperatur',
  mobile_monitorOutsideTemperatureText: 'Der COROS POD 2 zeichnet Echtzeit-Wettertemperaturen auf, damit du ein detailliertes Verständnis für die sich ändernde Umgebung während deines Laufs hast. Du kannst diese Datenpunkte nutzen, um deine Läufe weiter zu analysieren, während du in verschiedenen Klimazonen oder Jahreszeiten trainierst.',
  mobile_simpleSecure: 'SIMPEL & SICHER',
  mobile_simpleSecureText: 'Mit automatischer Bedienung ohne Tasten und sicheren Befestigungsoptionen für Schnürsenkel oder den Hüftbund kannst du sicher sein, dass dein COROS POD 2 selbst bei den extremsten Läufen bis zum Ende durchhält.',
  mobile_longBatteryLife: 'LANGE AKKULAUFZEIT',
  mobile_longBatteryLifeText: 'COROS POD 2 ist mit einem leistungsstarken Akku ausgestattet, der für eine lange Lebensdauer entwickelt wurde. Er zeichnet 25 Stunden kontinuierliches Laufen oder 150 Stunden Gesamtlaufzeit mit dem tragbaren Ladegerät auf.',
  mobile_data1: '25',
  mobile_data1Unit: 'Stunden',
  mobile_data1Text: 'EINE LADUNG',
  mobile_data2: '150',
  mobile_data2Unit: 'Stunden',
  mobile_data2Text: 'MIT LADESTATION',
  mobile_lightweightWeatherproof: 'LEICHT & WASSERFEST',
  mobile_lightweightWeatherproofText: 'Mit nur 5,6 g wirst du den COROS POD 2 beim Training oder im Rennen kaum bemerken, und er hält Temperaturen von (-10 °C bis 60 °C) stand, mit einer Wasserbeständigkeit von bis zu 3 ATM.',
  mobile_data3: '5,6',
  mobile_data3Unit: 'g',
  mobile_data3Text: 'SENSOR-GEWICHT',
  mobile_data4: '3',
  mobile_data4Unit: 'ATM',
  mobile_data4Text: 'WASSERBEWERTUNG',
  mobile_setupMadeEasy: 'LEICHTES SETUP',
  mobile_setupMadeEasyText: 'Der COROS POD 2 kann an deinem Schuh getragen oder an deinem Hosenbund befestigt werden und geht in den Schlafmodus, um die Batterie zu schonen, wenn er sich nicht in Bewegung befindet.',
  mobile_pair: 'KOPPELN',
  mobile_pairText: 'Füge COROS POD 2 deiner COROS-App hinzu, um automatisch mit verbundenen Uhren zu koppeln.',
  mobile_clip: 'CLIPS',
  mobile_clipText: 'Befestige ihn an deinem Schuh oder Hüftband, und die automatische Trageerkennung passt die Funktionen an.',
  mobile_go: 'LOS',
  mobile_goText: 'Starte deine Laufaktivität wie gewohnt und erhalte präzise Echtzeit-Messwerte.',
  mobile_box: 'WAS IST IN DER BOX?',
  mobile_boxText: 'Der COROS POD 2 wird mit allem geliefert, was du \nbrauchst, einschließlich zwei Schuhclips, einem Clip \nfür den Silikon-Gürtel, einer Ladestation, einem \nUSB-A- auf USB-C-Ladekabel und einer \nkompakten Tasche.',
  mobile_generalFaQs: 'ALLGEMEINE',
  mobile_generalFaQsLink: 'https://support.coros.com/hc/de/articles/10351744085012-COROS-POD-2-FAQ-s',
  mobile_runningFormTestFaQs: 'LAUFFORM-TEST',
  mobile_frequentlyAskedQuestions: 'HAUFIG\nGESTELLTE\nFRAGEN',
  shareTitle: 'COROS PACE 3 GPS-Sportuhr Eliud Kipchoge Edition',
  shareDesc: 'Für Multisportler, die intensiv trainieren und sich schnell bewegen.',
  productNameShort: 'COROS POD 2',
  productMenuTitle: 'COROS PACE 3 Eliud Kipchoge Edition',
  faq: 'FAQ'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/sasha.js
/* harmony default export */ const de_sasha = ({
  bannerTitle: 'Für COROS APEX 2 & PACE 2',
  section: {
    brief: {
      title: "\xFCbernehme die f\xFChrung und \xFCberwinde deine \xE4ngste",
      desc: 'Schon als kleines Mädchen wusste die professionelle Kletterin Sasha Digiulian, dass sie für Großes bestimmt war. Mit gerade einmal 6 Jahren betrat sie erstmals die Sportarena und aufgrund begrenzter weiblicher Vorbilder in der Sportart musste sie die Führung übernehmen und ihren eigenen Weg bahnen. Im Alter von nur 17 Jahren gewann sie ihre erste nationale Meisterschaft und wurde ein Jahr später Weltmeisterin.'
    },
    "abstract": {
      desc: 'Heute ist Sasha eine Vorbildfigur für junge Frauen, die danach streben, sowohl im Sport als auch darüber hinaus Großes zu erreichen. Ihre Erfolge setzen fort, junge Frauen zu inspirieren, indem sie zeigt, dass mit Hingabe, Ausdauer und der Übernahme der Führung alles möglich ist - sei es als Weltklasse-Athletin, Unternehmerin, Autorin, Umweltschützerin und vieles mehr.'
    },
    inspire: {
      title: 'stich selbsbewusst heraus',
      desc: "Mit Selbstvertrauen kann alles erreicht werden. Das COROS x Sasha Nylonband f\xFCr APEX 2- und PACE 2-Uhren soll sich von \n      der Masse abheben und zu Handlungen inspirieren. Von ihrer Lieblingsfarbe Pink dominiert, spiegelt es perfekt ihre lebhafte \n      Pers\xF6nlichkeit und ihren Antrieb wider, sich f\xFCr sich selbst, andere und ihre \xDCberzeugungen einzusetzen.",
      subDesc: "Die Au\xDFenseite zeigt ein von Kletterseilen inspiriertes Muster, das mit ihrem pers\xF6nlichen Mantra \"\xDCBERNEHME DIE F\xDCHRUNG\" \n      verbunden ist. Die Innenseite zeigt eine Grafik ihres geliebten Flatiron-Gebirges in Boulder im US-Bundesstaat Colorado, \n      wo Sasha lebt und trainiert. Egal welche Sportart du betreibst, Sashas Band kann eine st\xE4ndige Erinnerung sein, \n      mit Stolz, Hingabe und Freude voranzuschreiten."
    },
    shop: {
      title: "kostenloses band + buchpaket bei jedem kauf einer apex 2",
      desc: "Sashas \"\xDCBERNEHME DIE F\xDCHRUNG\"-Mantra ist auch der Titel ihrer k\xFCrzlich ver\xF6ffentlichten Autobiografie. F\xFCr begrenzte Zeit und solange der Vorrat reicht, erh\xE4ltst du beim Kauf einer APEX 2 Uhr kostenlos eine Ausgabe von Sashas Buch und das COROS x Sasha-Armband dazu."
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/de/index.js



































// import workouts from './workouts.js';
// import progress from './progress.js';
// import kilianEdition from './kilianEdition.js';









/* harmony default export */ const de = ({
  pod2_2024: de_pod2_2024,
  sasha: de_sasha,
  pace3_ek: de_pace3_ek,
  pace3: de_pace3,
  chamonix_edition: de_chamonix_edition,
  chamonix: de_chamonix,
  hrm: de_hrm,
  stories: de_stories,
  declarationOfConformity: de_declarationOfConformity,
  specs: de_specs,
  products: de_products,
  accessories: de_accessories,
  terms: de_terms,
  privacy: de_privacy,
  warranty: de_warranty,
  vertix2: (de_vertix2_default()),
  apexPro: de_apexPro,
  pace2: de_pace2,
  getApp: de_getApp,
  vertix: de_vertix,
  apex: de_apex,
  pod: de_pod,
  home: de_home,
  common: de_common,
  plans: de_plans,
  login: de_login,
  datalist: de_datalist,
  careers: de_careers,
  yourproduct: de_yourproduct,
  "continue": 'Weiter',
  events: de_events,
  convos: de_convos,
  evolab: de_evolab,
  contact: de_contact,
  aboutPage: de_about,
  athlete: de_athlete,
  athleteDetails: de_athleteDetails,
  retail: de_retail,
  tradeIn: de_tradeIn,
  apex2: de_apex2,
  pod2: de_pod2,
  map: de_map,
  trainingHub: de_trainingHub,
  shop: de_shop,
  coaches: de_coaches,
  CommonHeaderMenu1name: 'PRODUKTE',
  CommonHeaderMenu1nav1: 'COROS VERTIX 2',
  CommonHeaderMenu1nav2: 'COROS VERTIX',
  CommonHeaderMenu1nav3: 'COROS APEX Pro',
  CommonHeaderMenu1nav4: 'COROS APEX',
  CommonHeaderMenu1nav5: 'COROS PACE 2',
  CommonHeaderMenu1nav6: 'COROS PACE 2 EK',
  CommonHeaderMenu1nav7: 'COROS POD',
  CommonHeaderMenu1nav8: 'Zubehör',
  CommonHeaderMenu1nav9: 'Andere',
  CommonHeaderMenu1nav10: 'COROS PACE',
  CommonHeaderMenu1nav11: 'SafeSound-MOUNTAIN',
  CommonHeaderMenu1nav12: 'SafeSound-ROAD',
  CommonHeaderMenu1nav13: 'SafeSound-URBAN',
  CommonHeaderMenu1nav14: 'OMNI',
  CommonHeaderMenu1nav15: 'LINX',
  CommonHeaderMenu1nav16: 'COROS PACE 2 Speed Series',
  CommonHeaderMenu1nav17: 'COROS APEX 2/2 Pro',
  CommonHeaderMenu1nav18: 'COROS APEX 2 Pro',
  CommonHeaderMenu1nav19: 'COROS PACE 2 Molly',
  CommonHeaderMenu1nav20: 'COROS PACE 2 Molly Seidel Edition',
  CommonHeaderMenu2name: 'COMMUNITY',
  coros_convos: 'COROS Convos',
  CommonHeaderMenu2nav1: 'COROS STORIES',
  CommonHeaderMenu2nav2: 'COROS PRO ATHLETE',
  CommonHeaderMenu2nav3: 'EINTAUSCHPROGRAMM',
  CommonHeaderMenu2nav4: 'GEPRÜFTE TRAININGSEINHEITEN',
  CommonHeaderMenu2nav5: 'TRAININGSPLÄNE',
  CommonHeaderMenu2nav6: 'COROS TRAINING HUB',
  menu_convos: 'CONVOS',
  CommonHeaderMenu3name: 'HILFE',
  CommonHeaderMenu3nav1: 'BENUTZERANMELDUNG',
  CommonHeaderMenu3nav2: 'HILFE-CENTER',
  CommonHeaderMenu3nav3: 'GARANTIE',
  CommonHeaderMenu3nav4: 'HINWEISE ZUR FREIGABE',
  CommonHeaderMenu3nav5: 'UHRENVERGLEICH',
  CommonHeaderMenu3nav6: 'KARTEN',
  CommonHeaderMenu4name: 'ÜBER',
  CommonHeaderMenu4nav1: 'ÜBER UNS',
  CommonHeaderMenu4nav2: 'IN DEN NACHRICHTEN',
  CommonHeaderMenu4nav3: 'KONTAKT',
  CommonHeaderMenu4nav4: 'VERANSTALTUNGEN',
  CommonHeaderMenu4nav5: 'KARRIERE',
  CommonHeaderMenu5name: 'SHOP-SUCHE',
  CommonHeaderMenu6name: 'LAND',
  CommonHeaderMenu6nav1: 'Vereinigte Staaten (Englisch)',
  CommonHeaderMenu6nav2: 'Vereinigtes Königreich (Englisch)',
  CommonHeaderMenu6nav3: 'Kanada (Englisch)',
  CommonHeaderMenu6nav4: 'Frankreich (Français)',
  CommonHeaderMenu6nav5: 'Deutschland (Deutsch)',
  CommonHeaderMenu6nav6: '中国 (中文)',
  CommonHeaderMenu6nav7: '日本 (日本語)',
  CommonFooterDealerLogin: 'Händler-Login',
  CommonFooterDealerReturnRefund: 'Rückgabe & Rückerstattung',
  CommonFooterDealerWatchComparison: 'Uhrenvergleich',
  CommonFooterDealerTermsConditions: 'Allgemeine Geschäftsbedingungen',
  CommonFooterDealerReleaseNotes: 'Hinweise zur Veröffentlichung',
  CommonFooterDealerPrivacyPolicy: 'Datenschutzbestimmungen',
  CommonFooterDealerWheretoDownload: 'Wo herunterladen',
  CommonFooterDealercopyright: '© 2022 | COROS Wearables, Inc.',
  Commonshopnow: 'JETZT KAUFEN',
  Commonspeecs: 'SPEZIFIKATIONEN',
  Commoncomparisonchart: 'VERGLEICH',
  SignupforNews: 'Jetzt anmelden',
  price: 'Preis',
  STORIEStitle: 'COROS Stories | Der Weg zur Perfektion',
  STORIESkeywords: 'COROS Stories | Der Weg zur Perfektion',
  STORIESdescription: 'Bringt Ihnen die faszinierendsten und inspirierendsten Geschichten der Welt und die Tipps, die Sie für Spitzenleistungen brauchen.',
  compproduct: 'Produkt',
  compproductvertix2: 'VERTIX 2 GPS Adventure Watch',
  compproductvertix: 'VERTIX GPS Adventure Watch',
  compproductapexpro: 'APEX Pro Premium Multisport GPS Watch',
  compproductapex46: 'APEX 46mm Premium Multisport GPS Watch',
  compproductapex42: 'APEX 42mm Premium Multisport GPS Watch',
  compproductpace2: 'COROS PACE 2 Premium GPS Sport Watch',
  compvertix2name: 'VERTIX 2 GPS Adventure Watch',
  compvertixname: 'VERTIX GPS Adventure Watch',
  compapexproname: 'APEX Pro Premium Multisport GPS Watch',
  compapex46name: 'APEX 46mm Premium Multisport GPS Watch',
  compapex42name: 'APEX 42mm Premium Multisport GPS Watch',
  comppace2name: 'COROS PACE 2 Premium GPS Sport Watch',
  compdispsize: 'Displaygröße',
  compdispsizevertix2: '1,4 Zoll 280 x 280 (64 Farben)',
  compdispsizevertix: '1,2 Zoll 240 x 240 (64 Farben)',
  compdispsizeapexpro: '1,2 Zoll 240 x 240 (64 Farben)',
  compdispsizeapex46: '1,2 Zoll 240 x 240 (64 Farben)',
  compdispsizeapex42: '1,1 Zoll 218 x 218 (64 Farben)',
  compdispsizepace2: '1,2 Zoll 240 x 240 (64 Farben)',
  compdisptype: 'Displayart',
  compdisptypevertix2: 'Touchscreen Always-On-Memory-LCD',
  compdisptypevertix: 'Touchscreen Always-On-Memory-LCD',
  compdisptypeapexpro: 'Touchscreen Always-On-Memory-LCD',
  compdisptypeapex46: 'Always-On-Memory-LCD',
  compdisptypeapex42: 'Always-On-Memory-LCD',
  compdisptypepace2: 'Always-On-Memory-LCD',
  compscreenmaterial: 'Displaymaterial',
  compscreenmaterialvertix2: 'Diamantähnliche Beschichtung Saphirglas',
  compscreenmaterialvertix: 'Diamantähnliche Beschichtung Saphirglas',
  compscreenmaterialapexpro: 'Saphirglas',
  compscreenmaterialapex46: 'Saphirglas',
  compscreenmaterialapex42: 'Saphirglas',
  compscreenmaterialpace2: 'Corning® Glas',
  compbezelmaterial: 'Material der Lünette',
  compbezelmaterialvertix2: 'Titanlegierung Grad 5 mit PVD-Beschichtung',
  compbezelmaterialvertix: 'Titanlegierung Grad 5',
  compbezelmaterialapexpro: 'Titanlegierung Grad 5',
  compbezelmaterialapex46: 'Titanlegierung Grad 5',
  compbezelmaterialapex42: 'Edelstahl',
  compbezelmaterialpace2: 'Faserverstärktes Polymer',
  compcovermaterial: 'Gehäusematerial',
  compcovermaterialvertix2: 'Titanlegierung mit PVD-Beschichtung',
  compcovermaterialvertix: 'Titanlegierung',
  compcovermaterialapexpro: 'Aluminium',
  compcovermaterialapex46: 'Aluminium',
  compcovermaterialapex42: 'Aluminium',
  compcovermaterialpace2: 'Faserverstärktes Polymer',
  compstrapmaterial: 'Armbandmaterial',
  compstrapmaterialvertix2: 'Silikon / Nylon',
  compstrapmaterialvertix: 'Silikon / Nylon',
  compstrapmaterialapexpro: 'Silikon / Nylon',
  compstrapmaterialapex46: 'Silikon / Nylon',
  compstrapmaterialapex42: 'Silikon / Nylon',
  compstrapmaterialpace2: 'Silikon / Nylon',
  compquickreleasefitband: 'Quick Release / Fit Band',
  compquickreleasefitbandvertix2: '26 mm',
  compquickreleasefitbandvertix: '22 mm',
  compquickreleasefitbandapexpro: '22 mm',
  compquickreleasefitbandapex46: '22 mm',
  compquickreleasefitbandapex42: '20 mm',
  compquickreleasefitbandpace2: '20 mm',
  compphysicalsize: 'Physikalische Größe',
  compphysicalsizevertix2: '50,3 x 50,3 x 15,7 mm',
  compphysicalsizevertix: '47 x 47 x 15,6 mm',
  compphysicalsizeapexpro: '47 x 47 x 13,4 mm',
  compphysicalsizeapex46: '46 x 46 x 11,9 mm',
  compphysicalsizeapex42: '42 x 42 x 11,75 mm',
  compphysicalsizepace2: '42 x 42 x 11,7 mm',
  compweightwithsiliconeband: 'Gewicht mit Silikonband',
  compweightwithsiliconebandvertix2: '89 g',
  compweightwithsiliconebandvertix: '76 g',
  compweightwithsiliconebandapexpro: '59 g',
  compweightwithsiliconebandapex46: '55,3 g',
  compweightwithsiliconebandapex42: '49 g',
  compweightwithsiliconebandpace2: '35 g-36 g',
  compweightwithnylonband: 'Gewicht mit Nylonband',
  compweightwithnylonbandvertix2: 'k. A.',
  compweightwithnylonbandvertix: '63 g',
  compweightwithnylonbandapexpro: '49 g',
  compweightwithnylonbandapex46: '45 g',
  compweightwithnylonbandapex42: '38 g',
  compweightwithnylonbandpace2: '29 g - 30 g',
  compphoneconnection: 'Handyverbindung',
  compphoneconnectionvertix2: 'Bluetooth',
  compphoneconnectionvertix: 'Bluetooth',
  compphoneconnectionapexpro: 'Bluetooth',
  compphoneconnectionapex46: 'Bluetooth',
  compphoneconnectionapex42: 'Bluetooth',
  compphoneconnectionpace2: 'Bluetooth',
  compaccessoryconnection: 'Zubehörverbindung',
  compaccessoryconnectionvertix2: 'Bluetooth',
  compaccessoryconnectionvertix: 'ANT+/Bluetooth',
  compaccessoryconnectionapexpro: 'ANT+/Bluetooth',
  compaccessoryconnectionapex46: 'ANT+/Bluetooth',
  compaccessoryconnectionapex42: 'ANT+/Bluetooth',
  compaccessoryconnectionpace2: 'ANT+/Bluetooth',
  compwaterresistance: 'Wasserdichtigkeit',
  compwaterresistancevertix2: '10 ATM (100 Meter/328 Feet)',
  compwaterresistancevertix: '15 ATM (150 Meter/492 Feet)',
  compwaterresistanceapexpro: '10 ATM (100 Meter/328 Feet)',
  compwaterresistanceapex46: '10 ATM (100 Meter/328 Feet)',
  compwaterresistanceapex42: '10 ATM (100 Meter/328 Feet)',
  compwaterresistancepace2: '5 ATM (50 Meter/164 Feet)',
  compworkingtemperature: 'Betriebstemperatur',
  compworkingtemperaturevertix2: '-22°F bis 122°F (-30°C bis 50°C)',
  compworkingtemperaturevertix: '-4°F bis 140°F (-20°C bis 60°C)',
  compworkingtemperatureapexpro: '14°F bis 140°F (-10°C bis 60°C)',
  compworkingtemperatureapex46: '14°F bis 140°F (-10°C bis 60°C)',
  compworkingtemperatureapex42: '14°F bis 140°F (-10°C bis 60°C)',
  compworkingtemperaturepace2: '-4°F bis 140°F (-20°C bis 60°C)',
  compstoragetemperature: 'Lagertemperatur',
  compstoragetemperaturevertix2: '-22°F to 140°F (-30°C to 60°C)',
  compstoragetemperaturevertix: '-22°F bis 158°F (-30°C bis 70°C)',
  compstoragetemperatureapexpro: '-4°F bis 158°F (-20°C bis 70°C)',
  compstoragetemperatureapex46: '-4°F bis 149°F (-20°C bis 65°C)',
  compstoragetemperatureapex42: '-4°F bis 149°F (-20°C bis 65°C)',
  compstoragetemperaturepace2: '-4°F bis 149°F (-20°C bis 65°C)',
  compchargingtime: 'Aufladezeit',
  compchargingtimevertix2: 'Weniger als 2 Stunden',
  compchargingtimevertix: 'Weniger als 2 Stunden',
  compchargingtimeapexpro: 'Weniger als 2 Stunden',
  compchargingtimeapex46: 'Weniger als 2 Stunden',
  compchargingtimeapex42: 'Weniger als 2 Stunden',
  compchargingtimepace2: 'Weniger als 2 Stunden',
  compultramaxGPSmode: 'UltraMax GPS-Modus',
  compultramaxGPSmodevertix2: '240 Stunden',
  compultramaxGPSmodevertix: '150 Stunden',
  compultramaxGPSmodeapexpro: '100 Stunden',
  compultramaxGPSmodeapex46: '100 Stunden',
  compultramaxGPSmodeapex42: '80 Stunden',
  compultramaxGPSmodepace2: '60 Stunden',
  compstandardfull: 'Standard GPS-Modus (GPS/QZSS)',
  compstandardfullvertix2: '140 Stunden',
  compstandardfullvertix: '60 Stunden',
  compstandardfullapexpro: '40 Stunden',
  compstandardfullapex46: '35 Stunden',
  compstandardfullapex42: '25 Stunden',
  compstandardfullpace2: '30 Stunden',
  compallsystemson: 'Alle Systeme AN (GPS,GLONASS, Galileo, Beidou,QZSS)',
  compallsystemsonvertix2: '90 Stunden',
  compallsystemsonvertix: 'k. A.',
  compallsystemsonapexpro: 'k. A.',
  compallsystemsonapex46: 'k. A.',
  compallsystemsonapex42: 'k. A.',
  compallsystemsonpace2: 'k. A.',
  compallsystemsdualfrequencyon: 'Alle Systeme + Dualfrequenz Ein (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsdualfrequencyonvertix2: '50 Stunden',
  compallsystemsdualfrequencyonvertix: 'k. A.',
  compallsystemsdualfrequencyonapexpro: 'k. A.',
  compallsystemsdualfrequencyonapex46: 'k. A.',
  compallsystemsdualfrequencyonapex42: 'k. A.',
  compallsystemsdualfrequencyonpace2: 'k. A.',
  compdailyuse: 'Tägliche Nutzung',
  compdailyusevertix2: '60 Tage',
  compdailyusevertix: '45 Tage',
  compdailyuseapexpro: '30 Tage',
  compdailyuseapex46: '30 Tage',
  compdailyuseapex42: '24 Tage',
  compdailyusepace2: '20 Tage',
  comphrmonitoring: '24/7 Herzfrequenz-Messung',
  compopticalheartratemonitor: 'Optischer Herzfrequenzsensor',
  compbarometricaltimeter: 'Barometrischer Höhenmesser',
  compaccelerometer: 'Beschleunigungsmesser',
  compgyroscope: 'Gyroskop',
  compcompass: 'Kompass',
  compcorosevoLab: 'COROS EvoLab (VO2 Max, Ermüdung, Trainingsbelastung,Schwellentempo, etc.)',
  comprecoverytime: 'Erholungszeit',
  compinterval: 'Intervall-, Triathlon- und Multisport-Training',
  compswimmingheartrate: 'Schwimm-Herzfrequenz',
  compsleepmonitoring: 'Schlafüberwachung',
  compphonenotifications: 'Anruf-, SMS- und App-Benachrichtigungen',
  comp3rdpartyintegration: 'Integration von Drittanbietern (Strava, TrainingPeaks etc.)',
  compthickglovescompatible: 'Geignet für dicke Handschuhe',
  compstructuredworkouts: 'Strukturierte Workouts & Trainingsprogramme',
  comprunningpowerfromthewrist: 'Laufleistung am Handgelenk',
  compstrydcompatible: 'Stryd-kompatibel',
  compphonenotificationsduringworkouts: 'Telefon-Benachrichtigungen während des Workouts',
  compbodytemperaturemonitorsupport: 'Unterstützung der Körpertemperaturüberwachung (CORE)',
  compbacklightalwaysnnnode: 'Hintergrundbeleuchtung im Always-On-Modus',
  compsapphireglass: 'Saphirglas',
  compbreadcrumbnavigation: 'Breadcrumb Navigation',
  compbacktostartnavigation: 'Zurück-zum-Start-Navigation',
  comp247blood: '24/7-Blutsauerstoffüberwachung in großen Höhen',
  compopticalpulseoxmonitor: 'Optisches Pulsoximeter',
  compdedicatedbacklightbutton: 'Taste für Hintergrundbeleuchtung',
  comptouchscreenmode: 'Touchscreen-Modus',
  compaltitudemode: 'Höhen-Modus',
  compextremedurability: 'Extreme Langlebigkeit',
  compallsatellitedualfrequency: 'All Satellite Dual Frequency GNSS Chipsatz',
  compgloballandscapemaplayer: 'Weltweite Landkarten-Ebene',
  compregionaltopomaplayer: 'Regionale topographische Kartenebene',
  compregionaltopomaplayervertix: 'Wird möglicherweise vor 2022 unterstützt',
  compregionaltopomaplayerapexpro: 'Wird möglicherweise vor 2022 unterstützt',
  comphybridmaplayer: 'Hybrid-Kartenebene',
  compelectrocardiogramsensor: 'Elektrokardiogrammsensor',
  comphrvindex: 'HRV-Index',
  compWiFi: 'Wi-Fi',
  compmusic: 'Musik',
  compinsta360cameracontrol: 'Kamerasteuerung',
  compvirtualrun: 'Virtueller Lauf',
  comppowermetercalibration: 'ANT+ Leistungsmesserkalibrierung',
  compsupportedworkoutmodes: 'Unterstützte Workout-Modi',
  comprun: 'Gehen',
  compindoorrun: 'Trail Run',
  comptrackrun: 'Hike',
  compbike: 'Mountain Climb',
  compindoorbike: 'Ski',
  compopenwater: 'Snowboard',
  comppoolswim: 'XC Ski',
  compflatwater: 'Ski Touring',
  comprowing: 'Speedsurfing',
  compGPScardio: 'Windsurfing',
  compgymcardio: 'Whitewater',
  comptriathlon: 'Triathlon',
  compindoorrower: 'Indoor Rower',
  compstrength: 'Strength',
  comptraining: 'Training (strukturierte Programme)',
  comptrainingplan: 'Trainingsplan',
  compmultisport: 'Multisport',
  compsupportedgnss: 'GNSS wird unterstützt (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compwalk: 'Gehen',
  comptrailrun: 'Trail Run',
  comphike: 'Hike',
  compmountainclimb: 'Mountain Climb',
  compski: 'Ski',
  compsnowboard: 'Snowboard',
  compxcski: 'XC Ski',
  compskitouring: 'Ski Touring',
  compspeedsurfing: 'Speedsurfing',
  compwindsurfing: 'Windsurfing',
  compwhitewater: 'Whitewater',
  compyes: '√',
  compbacklightbuttonshortcut: 'Hintergrundbeleuchtung Shortcut',
  compmultipitchclimb: 'Mehrseillängenklettern',
  Emailtittext1: 'E-MAIL-ADRESSE',
  Emailsubmit: 'ANMELDEN',
  Emailtitle: 'OC-Halbmarathon',
  Emailkeywords: 'OC-Halbmarathon',
  Emaildescription: 'OC-Halbmarathon'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/home.js
/* harmony default export */ const jp_home = ({
  title: 'COROS | Performance Sports Technology',
  desc: 'ランナー、冒険家、あらゆるスポーツのアスリートのためのイノベーション企業です。',
  localeswitchtips: '国や地域を選択？',
  insName: 'corosjp',
  vertix2: {
    name: 'COROS VERTIX 2',
    desc: '登山、ハイキングなどアウト\nドア アドベンチャーに最適'
  },
  pace2: {
    name: 'COROS PACE 2',
    desc: 'ランニングやトライアスロンなど\nスピードを求める方向け'
  },
  apex2: {
    name: 'COROS APEX 2/2 Pro',
    desc: 'トレイルランニングなど長距\n離とスピードを求める方向け'
  },
  pod2: {
    name: 'COROS POD 2',
    desc: '更なる高精度を求める方向け'
  },
  trainingHub: {
    title: 'COROS TRAINING HUB',
    desc: 'COROSが誇るトレーニングプラットフォームで過去を理解し、現在を分析し、未来を創造します。いつでもどこでもトレーニング計画を作成して運用することができます。'
  },
  story: {
    title: 'ピックアップ記事'
  },
  athletes: {
    title: 'COROSエリートアスリート'
  },
  viewAllPlans: '全てのプランを見る',
  plans: {
    title: 'トレーニングプラン（英語）',
    desc: 'ウォッチを最大限活用して、コーチやアスリートがオススメするトレーニングプランを手に入れましょう。'
  },
  banners: [{
    title: 'EXPLORE PERFECTION\nDISCOVER POTENTIAL',
    linkDesc: '全てのウォッチ'
  }],
  learnMore: '詳細を表示',
  buy: '購入',
  readMore: 'もっと読みたい',
  watch: 'WATCH NOW',
  outOfStock: '売り切れ'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/common.js
/* harmony default export */ const jp_common = ({
  header: {
    support: 'サポート',
    stories: 'ストーリー',
    products: '製品',
    training_science: 'トレーニング',
    technology: 'テクノロジー',
    people: '契約アスリート',
    trainingHub: 'Training Hub',
    plans: 'Training Plans',
    workouts: 'Workouts',
    trainingBlog: 'Training Blog',
    retail: 'お取扱店舗',
    shopNow: '今すぐ購入',
    specs: 'スペック',
    overview: '製品詳細',
    login: 'ログイン',
    review: 'レビュー',
    login2trainingHub: 'TRAINING HUB',
    all_watches: 'All GPS Watches',
    pod2: 'COROS POD 2',
    checkWarranty: '保証状況',
    // TODO: todo_xjf menu1-6 好像没有用到？
    menu1: {
      name: 'PRODUCT',
      subnav: {
        nav1: 'COROS VERTIX 2',
        nav2: 'COROS VERTIX',
        nav3: 'COROS APEX Pro',
        nav4: 'COROS APEX',
        nav5: 'COROS PACE 2',
        nav6: 'COROS PACE 2 EK',
        nav7: 'COROS POD',
        nav8: 'Accessories',
        nav9: 'Others',
        nav10: 'COROS PACE',
        nav11: 'SafeSound-MOUNTAIN',
        nav12: 'SafeSound-ROAD',
        nav13: 'SafeSound-URBAN',
        nav14: 'OMNI',
        nav15: 'LINX'
      }
    },
    menu2: {
      name: 'COMMUNITY',
      subnav: {
        nav1: 'COROS STORIES',
        nav2: 'COROS PRO ATHLETE',
        nav3: 'TRADE IN PROGRAM',
        nav4: 'VERIFIED WORKOUT',
        nav5: 'TRAINING PLANS'
      }
    },
    menu3: {
      name: 'SUPPORT',
      subnav: {
        nav1: 'USER LOGIN',
        nav2: 'HELP CENTER',
        nav3: 'WARRANTY',
        nav4: 'RELEASE NOTES',
        nav5: 'WATCH COMPARISON'
      }
    },
    menu4: {
      name: 'ABOUT',
      subnav: {
        nav1: 'ABOUT US',
        nav2: 'IN THE NEWS',
        nav3: 'CONTACT',
        nav4: 'EVENTS',
        nav5: 'CAREERS'
      }
    },
    menu5: {
      name: 'STORE LOCATOR'
    },
    menu6: {
      name: 'COUNTRY',
      subnav: {
        nav1: 'United States (English)',
        nav2: 'United Kingdom (English)',
        nav3: 'Canada (English)',
        nav4: 'France (Français)',
        nav5: 'Germany (Deutsch)',
        nav6: '中国(中文)',
        nav7: '日本(日本語)'
      }
    }
  },
  footer: {
    subscribeEmailError: '有効なメールアドレスを入力してくださ',
    // TODO: todo_xjf 这里的 DealerLogin 没有用到，footer 改用CommonFooterDealerLogin了
    DealerLogin: '販売店様専用ログイン',
    ReturnRefund: '返品/返金について',
    WatchComparison: '製品比較',
    TermsConditions: 'サービス約款',
    PrivacyPolicy: 'プライバシーポリシー',
    CookieSettings: 'Cookieの設定',
    WheretoDownload: 'Get App',
    copyright: '© 2020 | COROS Wearables Inc.',
    trainingHub: 'COROS Training Hub',
    evolab: 'COROS EvoLab',
    warranty: '保証について',
    helpCenter: 'ヘルプセンター',
    maps: 'マップダウンロード',
    software: 'ソフトウエア',
    hardware: 'ハードウエア',
    support: 'カスタマサービス',
    company: '会社',
    news: 'ニュース',
    inTheNews: 'In the News',
    countries: '国や地域選択',
    about: 'COROSについて',
    careers: 'キャリア',
    contact: 'お問い合わせ',
    joinUs: '登録',
    subscripPlaceholder: 'メールアドレスを入力',
    pod2: 'COROS POD 2',
    shippingReturn: '配送＆送料について',
    products: '製品関連',
    selectYourLocation: 'お住まいの地域を選択してください',
    subscribe: {
      success: {
        title: 'ありがとうございました！',
        desc: 'メールアドレスの登録が完了しました。'
      },
      error: {
        title: 'Oops!',
        desc: '何かが間違っていた。もう一度お試しください。'
      },
      title: 'ニュースレター配信登録'
    }
  },
  country: {
    usa: 'アメリカ',
    kingdom: 'イギリス',
    newzealand: 'ニュー時ランド'
  },
  home: 'ホームページ',
  shopnow: '今すぐ購入',
  loginNow: '今ログイン',
  speecs: 'スペック',
  comparisonchart: '比較表',
  video: {
    play: '再生',
    pause: '一時停止',
    replay: 'リプレイ'
  },
  subscribeBIS: {
    notifyMe: '入荷通知',
    requireEmail: 'メールアドレスを入力',
    invalidEmail: 'メールが無効です。もう一度お試しください。',
    emailMeWhenAvailable: '入荷通知を受け取る。',
    success: 'このアイテムを予約しました。',
    tooManyReq: '少々お待ちください。後でもう一度お試しください。',
    serverError: 'サーバーに接続できません。後でもう一度お試してください。'
  },
  promotionTips: '8/10（土）～8/18（日）公式サイト限定キャンペーン開催中！',
  promotionEntrance: '詳細確認'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/products.js
/* harmony default export */ const jp_products = ({
  pageMeta: {
    title: 'Discover COROS Premium GPS Watches',
    keywords: 'マラソン ウルトラ クロスカントリー レース スマートウォッチ 通知 登山 カロリー 睡眠 追跡 防水 距離 マイル 心拍数モニター GPS ランニング スイミング トライアスロン トレーニング キャンプ ハイキング 運動 フィットネストラッカー コンパス',
    description: 'ランナー、冒険家、すべてのアスリートのために作られたプレミアムGPSスポーツウォッチです。COROSは、先進のテクノロジーでアスレチック・トレーニングの革命をリードしています。'
  },
  learnMore: '製品を表示',
  compareEntrance: '製品比較',
  pageTitle: 'COROS GPS WATCHES',
  pageDesc: 'COROS GPSウォッチは、アスリートのために設計されたハイグレードなハードウェアと、革新的なテクノロジーを融合させた製品です。COROSは、世界で最も過酷な環境において活動するエンデュランスアスリートたちから、信頼されるギアを提供しています。',
  pace2: {
    name: 'COROS PACE 2',
    header: 'GPS SPORT WATCH',
    desc: 'ランニングやトライアスロンなど\nスピードを求める方向け'
  },
  apex2: {
    name: 'COROS APEX 2',
    header: 'GPS OUTDOOR WATCH',
    desc: 'トレイルランニングなど長距\n離とスピードを求める方向け'
  },
  apex2pro: {
    name: 'COROS APEX 2 Pro',
    header: 'GPS OUTDOOR WATCH',
    desc: 'トレイルランニングなど長距\n離とスピードを求める方向け'
  },
  vertix2: {
    name: 'COROS VERTIX 2',
    header: 'GPS ADVENTURE WATCH',
    desc: '登山、ハイキングなどアウト\nドア アドベンチャーに最適'
  },
  pod2: {
    name: 'COROS POD 2',
    header: 'PERFORMANCE OPTIMIZATION DEVICE',
    desc: '更なる高精度を求める方向け'
  },
  hrm: {
    name: 'COROS心拍センサー',
    header: 'Optical Heart Rate Armband',
    desc: '腕から高精度のデータ、\n快適な着け心地'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/carabiner.js
/* harmony default export */ const jp_carabiner = ({
  name: 'VERTIX 2 カラビナ',
  pageTitle: 'VERTIX 2 カラビナ第2世代',
  pageDesc: 'VERTIX 2を手首から外して使用したいクライマーのために作られた第2世代のカラビナは、必要なときに簡単にバックパックなど手が届く場所に時計を装着できます。',
  desc: "VERTIX 2\u3092\u624B\u9996\u304B\u3089\u5916\u3057\u3066\u4F7F\u7528\u3057\u305F\u3044\u30AF\u30E9\u30A4\u30DE\u30FC\u306E\u305F\u3081\u306B\u4F5C\u3089\u308C\u305F\u7B2C2\u4E16\u4EE3\u306E\u30AB\u30E9\u30D3\u30CA\u306F\u3001\n    \u5FC5\u8981\u306A\u3068\u304D\u306B\u7C21\u5358\u306B\u30D0\u30C3\u30AF\u30D1\u30C3\u30AF\u306A\u3069\u624B\u304C\u5C4A\u304F\u5834\u6240\u306B\u6642\u8A08\u3092\u88C5\u7740\u3067\u304D\u307E\u3059\u3002\n    \u30AF\u30E9\u30C3\u30AF\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u306E\u30C6\u30AF\u30CB\u30AB\u30EB\u306A\u30EB\u30FC\u30C8\u3092\u767B\u3063\u3066\u3044\u308B\u3068\u304D\u3067\u3082\u3001\u30CF\u30A4\u30AD\u30F3\u30B0\u3059\u308B\u3068\u304D\n    \u3067\u3082\u3001GPS\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u306E\u5B8C\u5168\u306A\u52D5\u4F5C\u306F\u3001\u3053\u306E\u65B0\u3057\u3044\u30AB\u30E9\u30D3\u30CA\u3067\u5B8C\u74A7\u306B\u6A5F\u80FD\u3057\u7D9A\u3051\u307E\u3059\u3002\n    \u307E\u305F\u3001\u5FC3\u62CD\u6570\u3092\u8A08\u6E2C\u3057\u305F\u3044\u5834\u5408\u306F\u3001\u5916\u4ED8\u3051\u306E\u5FC3\u62CD\u8A08\u3068\u7D44\u307F\u5408\u308F\u305B\u308B\u3053\u3068\u3067\u3001\u5FC3\u62CD\u6570\u3092\u9003\u3059\n    \u3053\u3068\u306A\u304F\u8A08\u6E2C\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  keyFeatures: '主な特徴',
  features: [{
    title: 'ロックシステム',
    desc: "\u5076\u767A\u7684\u306A\u30B2\u30FC\u30C8\u30AA\u30FC\u30D7\u30F3\u3092\u9632\u304E\u307E\u3059\u3002"
  }, {
    title: 'センサーの保護',
    desc: "\u30A6\u30A9\u30C3\u30C1\u306E\u80CC\u9762\u306B\u3042\u308B\u30BB\u30F3\u30B5\u30FC\u3092\u50B7\u3064\u3051\u306A\u3044\u3088\u3046\u3057\u3063\u304B\u308A\u3068\u5B88\u308A\u307E\u3059\u3002"
  }, {
    title: '簡単なトリガー操作',
    desc: "\u30C8\u30EA\u30AC\u30FC\u3092\u5F15\u3063\u5F35\u308B\u3053\u3068\u3067\n\u30A6\u30A9\u30C3\u30C1\u3092\u56FA\u5B9A\u30FB\u53D6\u308A\u5916\u3059\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  }, {
    title: 'スクリューロック',
    desc: "\u7DE0\u3081\u5177\u5408\u3092\u8ABF\u6574\u3067\u304D\u307E\u3059\u3002"
  }, {
    title: '安全安心なロックシステム',
    desc: "\u30C0\u30D6\u30EB\u30ED\u30C3\u30AF\u3092\u4F7F\u7528\u3059\u308C\u3070\n\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u6642\u306B\u843D\u3068\u3057\u3066\n\u3057\u307E\u3046\u5FC3\u914D\u304C\u3042\u308A\u307E\u305B\u3093\u3002"
  }, {
    title: '軽量かつ頑丈',
    desc: "\u4E08\u592B\u306A\u7D20\u6750\u3092\u4F7F\u3044\u306A\u304C\u3089\u3082\u3001\u91CD\u91CF\u308F\u305A\u304B40g\u3002"
  }],
  keyFeaturesDesc: "UIAA\u8A8D\u5B9A\u306E\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u5B89\u5168\u6A5F\u5668\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n    \u30B1\u30A4\u30C7\u30F3\u30B9\u3001\u7E04\u8DF3\u3073\u56DE\u6570\u3001\u7B4B\u30C8\u30EC\u306A\u3069\u56DE\u6570\u3092\u8A08\u7B97\u3059\u308B\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u306B\u9069\u7528\u3067\u304D\u307E\u305B\u3093\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/vertix.js
/* harmony default export */ const jp_vertix = ({
  name: 'COROS VERTIX',
  accessories: 'ACCESSORIES',
  readMore: 'READ MORE',
  'Rugged YET premium': {
    title: 'Rugged YET premium',
    desc: 'A featherlight, corrosion free titanium frame and bezel showcase our commitment to durability. The quality of the VERTIX allows you to attack the world’s harshest elements without sacrificing your style.'
  },
  'Virtually scratch proof screen': {
    title: 'Virtually scratch proof screen',
    desc: 'Sapphire glass screen with Diamond-Like Coating gives VERTIX the most resilient screen available.'
  },
  'The ONLY GPS watch with a 150-meter waterproof rating': {
    title: 'The ONLY GPS watch with a 150-meter waterproof rating',
    desc: '15 ATM rated: withstands pressures equivalent to a depth of 150 meters.'
  },
  'Ultra-light Durability': {
    title: 'Ultra-light Durability',
    desc: 'VERTIX body weighs just 54 grams, making it the lightest watch in its class.'
  },
  'VERTIX is your Sherpa': {
    title: 'VERTIX is your Sherpa',
    desc: '24/7 blood oxygen monitoring With Altitude Mode, VERTIX is the only watch to provide daily acclimatization evaluation and suggests when it is safe to climb higher.'
  },
  'Industry leading performance in extreme cold': {
    title: 'Industry leading performance in extreme cold',
    desc: 'Works down to -4°F/-20°C with less than a 30% depreciation in battery performance VERTIX lasts for 21 hours in GPS mode under -22°F/-30°C extreme testing.'
  },
  'EASY use in ANY condition': {
    title: 'EASY use in ANY condition',
    desc: 'Completely new engineered Digital Dial for one finger control, even with thick climbing gloves or under water.'
  },
  'Track your path': {
    title: 'Track your path',
    desc: 'Now supports offline mapping, and includes: Landscape, Topo and Hybrid modes. By using touch screen and the digital dial, users can explore our new mapping function. You can track your path over maps. This is a completely revamped navigation experience on your wrist.'
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: 'With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and onto your watch. With the new training mode, your best efforts are well within your reach.'
  },
  'Light up the Night’s Sky': {
    title: 'Light up the Night’s Sky',
    desc: 'Night Mode – a new always on mode for nighttime activities. While manual options still remain for quick bursts of the backlight, Night Mode, leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark, but dim enough to maintain superior battery performance throughout your run or ride even needed all night long. Don’t worry, it turns off automatically when you finish you workout, or at sunrise.'
  },
  'Stay on Track': {
    title: 'Stay on Track',
    desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run on it.'
  },
  'Ice Breaker': {
    title: 'Ice Breaker',
    desc: 'Break the Ice in any group setting with this one of a kind watch.'
  },
  'Stand out in a Crowd': {
    title: 'Stand out in a Crowd',
    desc: 'The exclusive azure titanium bezel is a showstopper while the transparent fibre case creates a watch that is as elegant on your wrist as it is powerful on your adventure.'
  },
  'Handled With Care': {
    title: 'Handled With Care',
    desc: 'While strong enough to handle the harshest elements mother nature throws at it, the translucent fibre frame is hand assembled to ensure the best possible quality.'
  },
  batteryLife: {
    title: 'Battery life beyond your imagination',
    desc: 'With battery life strong enough for a Himalayan expedition or a thru-hike on the John Muir Trail all without a charge.',
    reqular: {
      title: '45d',
      desc: '45 days of regular use'
    },
    gps: {
      title: '60h',
      desc: '60 hours full GPS mode'
    },
    ultraMax: {
      title: '150h',
      desc: '150 hours UltraMax mode'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/plans.js
/* harmony default export */ const jp_plans = ({
  plan: 'プラン',
  roadRunning: 'Running',
  getItNow: '今すぐ入手',
  bannerTitle: 'アスリートトレーニングプラン',
  running: {
    '12-week Intermediate Mountain Training Plan': {
      title: '中級者向け山岳トレーニングプラン(12週間)',
      desc: "\u30AD\u30EA\u30A2\u30F3\u30FB\u30B8\u30E7\u30EB\u30CD\u304C\u4F5C\u6210\u3057\u305F\u4E2D\u7D1A\u8005\u5411\u3051\u306E\u5C71\u5CB3\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\uFF0812\u9031\u9593\uFF09\u306F\u3001\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u4F53\u529B\u3068\u9577\u8DDD\u96E2\u8D70\u306E\u80FD\u529B\u3092\u5411\u4E0A\u3055\u305B\u308B\u305F\u3081\u306B\u8A2D\u8A08\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C8\u30EC\u30A4\u30EB\u3084\u30ED\u30FC\u30EA\u30F3\u30B0\u30C6\u30EC\u30A4\u30F3\u30B3\u30FC\u30B9\u3092\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3059\u308B\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u305F\u3081\u306B\u3001\u5F37\u5EA6\u3068\u9577\u6642\u9593\u306E\u6709\u9178\u7D20\u904B\u52D5\u3001\u6A19\u9AD8\u3092\u7126\u70B9\u3092\u5F53\u3066\u3001\u76EE\u6A19\u9054\u6210\u306B\u5F79\u306B\u7ACB\u3061\u307E\u3059\u3002"
    },
    '12-Week Advanced Mountain Training Plan': {
      title: '上級者むけ山岳トレーニングプラン(12週間)',
      desc: "\u30AD\u30EA\u30A2\u30F3\u30FB\u30B8\u30E7\u30EB\u30CD\u304C\u4F5C\u6210\u3057\u305F\u4E0A\u7D1A\u8005\u3080\u3051\u306E\u5C71\u5CB3\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\uFF0812\u9031\u9593\uFF09\u306F\u3001\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u4F53\u529B\u3068\u9577\u6642\u9593\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u80FD\u529B\u3092\u5411\u4E0A\u3055\u305B\u308B\u305F\u3081\u306B\u8A2D\u8A08\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C8\u30EC\u30A4\u30EB\u3084\u30ED\u30FC\u30EA\u30F3\u30B0\u30C6\u30EC\u30A4\u30F3\u30B3\u30FC\u30B9\u3092\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3059\u308B\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u305F\u3081\u306B\u3001\u5F37\u5EA6\u3068\u9577\u6642\u9593\u306E\u6709\u9178\u7D20\u904B\u52D5\u3001\u6A19\u9AD8\u3092\u7126\u70B9\u3092\u5F53\u3066\u3001\u76EE\u6A19\u9054\u6210\u306B\u5F79\u306B\u7ACB\u3061\u307E\u3059\u3002\u3053\u306E\u30D7\u30E9\u30F3\u3067\u306F\u30014\u6642\u9593\u4EE5\u4E0A\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306E\u65E5\u306B\u3061\u304C\u591A\u3044\u3067\u3059\u306E\u3067\u3001\u9577\u6642\u9593\u7AF6\u6280\u3084\u30A6\u30EB\u30C8\u30E9\u306A\u3069\u76EE\u6307\u3059\u65B9\u306B\u306F\u6700\u9069\u3067\u3059\u3002"
    },
    '12-Week Molly Seidel Marathon Plan': {
      title: '12-Week Molly Seidel Marathon Plan',
      desc: "This plan is designed to showcase key workouts Molly Seidel uses to prepare for her marathon races. Along with key workouts provided by Molly's Coach, Jonathon Green, this plan will also ensure athletes build the proper volume necessary to run a marathon to their potential. If you're looking to train like the pro's, this is a great plan to guide you every step of the way. For a more individualized approach, please visit verdetrackclub.com and reach out to Coach Green for assistance!"
    },
    '2:45-3:00 12-Week Marathon Plan': {
      title: '2:45-3:00 12-Week Marathon Plan',
      desc: "This is an aggressive training plan that starts athletes in the 30-40 mile/week range and builds up towards 60 miles/week. Workouts consist of mid-week interval sessions, base volume, and marathon specific paced long runs. Athletes starting this program should have a base volume of 30-40 miles a week. Athletes will build awareness of 6:18-6:52/mile pace which will have them running a sub 3 hour marathon. "
    },
    '3:15-3:35 12-Week Marathon Plan': {
      title: '3:15-3:35 12-Week Marathon Plan',
      desc: "This training plan is designed to build athletes volume up towards 50 miles/week while preparing them to run a 3:15-3:35 marathon. Athletes will complete a mix of threshold intervals mid-week, aerobic endurance base miles for volume, and marathon specific workouts to dial in their pacing. Athletes should have a foundation of 30-40 miles/week before starting this plan. "
    },
    '4:00-4:30 12-Week Marathon Plan': {
      title: '4:00-4:30 12-Week Marathon Plan',
      desc: "This plan starts at 26 miles/week and builds up to 40/week before your taper into the marathon. The majority of this plan has athletes running at their aerobic endurance heart rate, or specific marathon pacing for a 4:00-4:30 marathon finish (9:09-10:17/mile pace). Athletes should be able to run 25-30 miles/week before starting this program. As athletes progress through the training plan, they should utilize the marathon specific workouts to gain a realistic expectation of race day. If you're able to perform all specific workouts below 9:09/mile pace, then perhaps a sub 4 marathon is in your future. If you're struggling to hold 10:17/mile pace, then perhaps above 4:30 is more realistic. Feel free to adjust the specific days as needed, while leaving the aerobic endurance days in place!"
    },
    'Beginner Marathon Plan': {
      title: 'Beginner Marathon Plan',
      desc: "This training plan is designed for the individual starting a new training block and looking to run their first marathon! Perhaps you ran a 10k, or 1/2 marathon in the past and want to jump up in distance. This plan starts at 13 miles/week and builds up to 50 miles/week by week 18. Designed to build in a safe and efficient manner, athletes can rest easy knowing they will be on track to run 26.2 miles after the 20 weeks. If you are currently above the training volume of the first few weeks, maintain your currently volume until you reach the point where the plan has more miles. Simply continue on from there and enjoy the results! Be sure to share your journey with us and let us know how your training is going! #exploreperfection"
    },
    '6-Week Mountain Running Training Plan': {
      title: '6-Week Mountain Running Training Plan',
      desc: "6-week mountain running training designed to increase your ability to sustain higher intensities on hilly and technical terrain. This plan focuses on longer days out at low/moderate intensities. It contains a 2-block buildup without taper time, but highly specific to a wide variety of mountain projects. Athletes should be prepared for 6 running days up to 80km (50miles) weekly. Access to hilly terrain is mandatory."
    },
    '12-Week 100 Mile Ultra Training Plan': {
      title: '12-Week 100 Mile Ultra Training Plan',
      desc: "For athletes looking to start this training plan, we recommend they have at least 80 Base Fitness and average above 40 miles/week running. If you are not at this level yet, please follow one of our other training plans to reach this point. This plan is designed to build athletes fitness over the course of 12 weeks and have them ready to run a 100 mile ultra-marathon. The plan consists of strength and running to ensure athletes have the muscular strength and endurance required. Key workouts each week are the long runs on the weekends. If you need to shift your schedule around that is fine, but focus on the long days and building your aerobic endurance!"
    },
    '10-Week Return to Running Training Plan': {
      title: '10-Week Return to Running Training Plan',
      desc: "The goal of this training plan is to help guide users to a return to running. This plan will be comprised of walks, walk/runs, and running. This plan will take users through a gradual progression of training and help them return to steady running after 10 weeks of training. Be sure to start at your own pace and comfort level. Training days can be shifted around in your calendar as needed. This plan is designed to help you fit training back into your lifestyle. After the 10 weeks of following this plan, you will have the ability to follow a run specific plan if you prefer. Be sure to keep this fun and within the parameters prescribed. The best way to reach the goal of 10 weeks is through consistency and manageable training. You got this! Enjoy the journey!"
    },
    '8-Week Off-Season Training Plan': {
      homeRecommendedTitle: '8 Week\nOff-Season Training Plan',
      title: '8-Week Off-Season Training Plan',
      desc: 'This plan is designed to keep athletes moving through the off-season. We will incorporate 15-25miles/week of running along with cross-training activities. Athletes can mix in any cross-training activity where "cycling" is labeled. The overall goal will be to have athletes healthy and motivated when they reach their next training season. Be sure to keep things relatively easy during this portion of the year. This is meant to help you recover while staying fit.'
    },
    '8 Week Threshold Development': {
      title: '8 Week Threshold Development',
      desc: 'The goal of this training plan is to increase time at threshold and VO2 throughout the weeks. Weekly volume will stay relatively consistent with only an increase in intensity serving to create change. Athletes should be prepared for 5-6 days/week running with 25-40 miles/week volume. Emphasis each week will be on key threshold or VO2 sets. Base runs are meant to maintain volume and help athletes recover. Do not over exceed easy run paces. At the end of these 8 weeks, please perform a 5k test. If your threshold pace changed, you should see new zones and be able to re-apply this training plan if more threshold work is desired.'
    },
    '12 Week Run Speed Development': {
      title: '12 Week Run Speed Development',
      desc: 'This plan is designed for runners with a weekly base mileage of 25-40 miles (40-65km). Throughout this plan, the weekly volume will stay around 25-30 miles each week. Runners are allowed to add more base volume as needed, but focus should remain on speed workouts. Due to the nature of training for run speed, it is recommended that athletes take extra recovery days if their legs are sore of fatigued from prior workouts. By the end of these 12 weeks, runners should see an increase in their threshold, v02, and running efficiency. Performing a 5k, 10k, or half marathon following this plan should result in faster times.'
    },
    '50k Trail Run Training Plan': {
      title: '50k Trail Run Training Plan',
      desc: 'This training plan starts at 25 miles/week and builds to 60+ miles by the end. The first 10 weeks of this plan are designed to build athletes aerobic endurance. The final 10 weeks are specific to trail running demands and meant to peak fitness before competition. Due to all trail events being different, it is recommended that athletes run trails or in conditions that will mimic race day. This plan will ensure your fitness is ready, but individuals should seek out vertical gain or elements to help maximize their readiness. As always, if a runner needs additional days off, please take them. Key days in this plan are Wednesdays and the weekends. You should make those your top priority. Enjoy!'
    },
    'Beginner Sprint Distance Triathlon Plan': {
      title: 'Beginner Sprint Distance Triathlon Plan',
      desc: 'A 12-week plan designed to help users complete a 800 meter swim, 12.4 mile bike, and 3.1 mile run. This plan will utilize heart rate training to ensure proper and efficient training. Athletes should understand basic swimming technique before beginning. Athletes should also be able to train 4-5 times a week for 30-45 minutes a day prior to starting this plan.'
    },
    '12 Week Half Marathon HR Plan': {
      homeRecommendedTitle: 'Half Marathon\n12 Week Training',
      title: '12 Week Half Marathon HR Plan',
      desc: 'This plan is designed for both beginners and intermediate runners. Runners should be comfortable running 4 times per week and have a weekly volume of 10-15 miles. The plan will utilize heart rate zones to ensure proper and efficient training. By the end of the plan, the user will be running 30 miles per week and will have increased their aerobic endurance and ability to sustain tempo efforts.'
    },
    'Beginner Runner Base Plan (Imperial)': {
      title: 'Beginner Runner Base Plan (Imperial)',
      desc: 'A 10-week plan designed for a beginner to intermediate runner, building up to 30 miles per week. Assuming pace is maintained throughout the week, the longer runs are intended to naturally feel harder than other days, which is expected. This plan is in imperial.'
    },
    '12 Week 5000m Training Plan (Metric)': {
      title: '12 Week 5000m Training Plan (Metric)',
      desc: 'A 12-week plan created by US Olympian Kim Conley. Runners should be prepared to run 6-7 times a week. Saturday is a rest day, but can run up to 60 minuts if needed. This plan is in metric.'
    },
    'Beginner Runner Base Plan (Metric)': {
      title: 'Beginner Runner Base Plan (Metric)',
      desc: 'A 10-week plan designed for a beginner to intermediate runner, building up to 30 miles per week. Assuming pace is maintained throughout the week, the longer runs are intended to naturally feel harder than other days, which is expected. This plan is in metric.'
    },
    'Sub-3:15 Marathon': {
      title: 'Sub-3:15 Marathon',
      desc: 'An 8-week plan designed for 3:30 marathon runners with high aerobic endurance to run a sub 3:15 marathon. Runners should be prepared to run 5-6 days a week.'
    },
    'Sub-25 5K': {
      title: 'Sub-25 5K',
      desc: 'A 14-week plan designed for runners who want to run a 5k in 25 minutes. Runners should be prepared to run 5 days a week.'
    },
    'Competitive 10K': {
      title: 'Competitive 10K',
      desc: 'A 12-week plan designed for competitive runners to train for 10K races. Runners should be prepared to run between 30-40 miles per week.'
    },
    'Half Marathon': {
      title: 'Half Marathon',
      desc: 'A 15-week plan designed for competitive runners to train for a half marathon. Runners should be prepared to run between 55-70 miles per week.'
    },
    Marathon: {
      title: 'Marathon',
      desc: 'A 12-week plan designed for runners who want to reach their peak form for marathon. If you have been running fewer than 30 miles per week, you should follow the base training plan for building up to 30 miles per week.The primary focus of this plan is to improve your lactate pace through tempo, lactate intervals, and long progression runs. Secondary priorities include increasing long runs and overall mileage.'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/contact.js
/* harmony default export */ const jp_contact = ({
  pageTitle: 'CONTACT US',
  companyName: 'COROS Wearables, Inc.',
  mail: 'Mail',
  mailValue: "\n    3 Peters Canyon Rd\n    Suite 100\n    Irvine, CA 92606\n    USA",
  phone: 'Phone',
  phoneValue: '+1 (855) 934-4411',
  businessHours: 'Business Hours',
  businessHoursValue: 'Monday - Friday 9AM - 6PM Pacific Time',
  salesSupport: '販売とサポートパートナー',
  salesSupportValue: 'sales@coros.com',
  consumerSupport: '消費者サポート',
  consumerSupportValue: 'support@coros.com',
  careerOpportunities: 'キャリア採用情報',
  careerOpportunitiesValue: 'careers@coros.com',
  mediaRelations: 'メディア関係',
  mediaRelationsValue: 'press@coros.com',
  distributors: 'COROSグローバル代理・販売店',
  area: {
    hk: '香港',
    au_nz: 'オーストラリア＆ニュージーランド',
    ar: 'アルゼンチン',
    BeNeLux: 'ベネルクス',
    bg: 'ブルガリア',
    br: 'ブラジル',
    ca: 'カナダ',
    cl: 'チリ',
    co: 'コロンビア',
    ec: 'エクアドル',
    ee_lv_lt: 'エストニア、ラトビア、リトアニア',
    fr: 'フランス',
    de: 'ドイツ',
    gt: 'グアテマラ',
    gr: 'ギリシャ',
    id: 'インドネシア',
    il: 'イスラエル',
    it: 'イタリア',
    in_np_bd: 'インド、ネパール、バングラデシュ',
    jp: '日本',
    my: 'マレーシア',
    mt: 'マルタ',
    mu: 'マウリティアス',
    mx: 'メキシコ',
    me: '中東',
    nordics: '北欧（スウェーデン、ノルウェー、フィンランド、デンマーク、アイスランド）',
    pl: 'ポーランド、ハンガリー、チェコ、スロバキア、スロベニア、クロアチア、セルビア',
    ph: 'フィリピン',
    qa: 'カタール',
    ro: 'ルーマニア',
    ru: 'ロシア',
    sg: 'シンガポール',
    za: '南アフリカ共和国',
    es: 'スペイン、ポルトガル、アンドラ',
    ch: 'スイス',
    th: 'タイ',
    uk: 'イギリス',
    vn: 'ベトナム',
    ve: 'ベネズエラ'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/warranty.js
/* harmony default export */ const jp_warranty = ({
  title: '保証期間について',
  desc: 'アスリートが最高のパフォーマンスを発揮するためのトレーニングをサポートするスポーツ・テクノロジー・カンパニーです。',
  pageTitle: 'WARRANTY',
  'getting warranty service': {
    title: 'Getting Warranty Service',
    content: "COROS products are manufactured to the highest quality standards possible. However, on the rare occurrence should one suffer quality issues, we stand behind our products. COROS offers a 2-year warranty from the activation date for Watches and a 6-month warranty for PODs. Helmets are covered by a 1-year warranty. All Accessories are covered by a 90-day warranty.\n\n        Should you have an issue with your product resulting from a manufacturing defect, COROS will help replace your product or remedy your issue.\n\n        Simply reach out to us via phone or e-mail to assist in completing a warranty claim and we\u2019ll assist in getting the warranty completed in a timely fashion."
  },
  returns: {
    title: 'Returns',
    content: "COROS offers a 30-day money back guarantee return policy for coros.com orders only. If for any reason you are unsatisfied, you may return your purchase within 30 days of the delivery date for a full refund of the purchase price. Products must be returned in their original physical condition with all accessories and packaging. COROS does not cover shipping costs for products that are returned for a refund. Please contact customer support for return procedures and approvals. Orders outside of the return window will not be accepted or approved. Approved refund takes up to 5 business days to show up on your bank account. Original shipping costs and customs are not refundable."
  },
  'out-of-warranty service': {
    title: 'Out-Of-Warranty Service',
    content: "COROS offers repair/replacement services for out-of-warranty watches at the below cost.",
    extraContent: "The replacement unit has a 180-day warranty and will be new or equivalent to new in performance and reliability.\n\nClick here for Out-Of-Warranty Service & Policy details."
  },
  warranty: {
    title: 'Warranty',
    content: "COROS Wearables Inc. (\"COROS\") warrants that the Product (defined below) delivered hereunder to the original purchaser (\"Original Purchaser\") from COROS.com or a COROS Authorized Reseller (each an \"Authorized Reseller\") will be free from material and workmanship defects that adversely affect the performance of the Product under normal use, pursuant to the terms outlined below. This Limited Warranty is only valid for the Original Purchaser, is non-transferable and does not extend to any used Products or Products not purchased from COROS.com or an Authorized Reseller.\n\n        Products Covered and Warranty Length\n\n        For purposes of this Limited Warranty, \"Products\" and \"Product\" mean the individual COROS product(s) as described below by the following prefix:"
  },
  'Limited Warranty Term': {
    title: 'Limited Warranty Term',
    content: "The length of the Limited Warranty is limited to two years from the original date of purchase for watches, one year for helmets and ninety days for accessories.\n\n        Nothing in the Product instructions or information shall be construed to create an express warranty of any kind with respect to the Products. No agent, employee, dealer, representative or reseller is authorized to modify or extend this Limited Warranty or to make binding representations or claims, whether in advertising, presentations or otherwise, on behalf of COROS regarding the Products or this Limited Warranty.\n\n        Nothing in this Limited Warranty affects any statutory rights of consumers that cannot be waived or limited by contract. This Limited Warranty gives you specific legal rights, and you may also have other rights which vary from State to State or Province to Province.\n\n        If any portion of this Limited Warranty is held to be illegal or unenforceable, such partial illegality or unenforceability shall not affect the enforceability of the remainder of the Limited Warranty.\n\n        These Limited Warranty terms shall be governed in all respects by the laws of the United States and of the State of California, without regard to the conflicts of laws principles thereof. The United Nations Convention on Contracts for International Sale of Goods is specifically disclaimed. The state and/or federal courts residing in Orange County, California shall have exclusive jurisdiction over any dispute or claim arising out of these Limited Warranty terms."
  },
  'not covered': {
    title: 'What is not covered by this Limited Warranty',
    content: "This Limited Warranty applies only to Products used in accordance with this Limited Warranty and COROS's published documentation, and does not cover:\n\n        Products that are modified outside of factory specifications and/or not in factory condition.\n\n        Products with modification to the serial number and/or factory identification labels whether removed, relocated, falsified, defaced, damaged, altered or made illegible.\n\n        Damages to the body of the product whether cut, scratched, warped, bent, cracked, dented or broken.\n\n        Any damages to the components, hardware and/or assembly of the Products including but not limited to damages caused as a result of neglect, abuse, accidents, misuse, or unusual physical, electrical or electromechanical stress.\n\n        Any missing hardware, components and/or assemblies of the Product.\n\n        Cosmetic damages deemed outside of reasonable usage caused by deep scratches, cuts, cracks, dents, discoloration, neglect, dropping or mishandling the Product.\n\n        Products that are exposed to liquid, liquid residue or excessive humid environments resulting in rust, moisture, dampness, stains, corrosion or liquid spills on components, hardware or electronics. Burns or component flare-ups as a result of a liquid accident or spill.\n\n        Direct usage of paint, submersion of the power supply in oil, use of adhesives or glues on any part of the Product, usage of solder to the Product, electronics and/or component modification.\n\n        Exposure to cigarette tar residue, dampness, sand, dirt or excessive debris.\n\n        Products that are rendered non-functional due to an accident, collision with an object or tool, use of excessive force, neglect for care, exposure to fire or abnormal heat, flooding, dirt, windstorms, lightning, earthquakes, excessive weather conditions, or other acts of God, theft, blown fuses, improper use of any electrical source, or overloaded electrical circuits.\n\n        Defects or damage resulting from the use of a 3rd party product in conjunction or connection with accessories, products, software or secondary peripheral equipment not furnished for the usage with or approved for the Product by COROS.\n\n        Defects or damages resulting from improper testing, operation, maintenance, installation, service, or adjustment not furnished or approved by COROS.\n\n        The use of inadequate shipment packaging or use of inadequate packing material resulting in damages to the Product while in transit with Original Purchaser's or Second-Hand Purchaser's shipping courier.\n\n        Products purchased from unauthorized resellers or dealers, which include, without limitation, online marketplaces such as eBay (except for COROS's official eBay store), Amazon (except for COROS's official Amazon Marketplace store), and other online auction and/or marketplace websites. If you are unsure of whether a reseller is an Authorized Reseller, please contact COROS for confirmation.\n\n        Exclusive Remedy and Limited Refunds\n\n        Except as specifically provided below, your sole remedy for a defective Product shall be the repair or replacement of such defective Product in accordance with the terms and conditions of this Limited Warranty.\n\n        COROS only offers refunds for products purchased directly from its official website COROS.com if such products are returned within 30 days of delivery.\n\n        For products not purchased at COROS.com, refund claims, if any, are subject to the Authorized Reseller's refund policy and must be processed through the original Authorized Reseller's return policy. COROS will not honor any refunds offered through Authorized Resellers.\n\n        COROS does not cover shipping costs for products that are returned for a refund."
  },
  'how to obtain': {
    title: 'How to obtain Warranty Service',
    content: "To obtain warranty service under this Limited Warranty, you must contact COROS to receive a Return Merchandise Authorization (\"RMA\") number prior to returning the product to COROS in accordance with the COROS RMA Process. Please contact COROS Technical support at +1 (855) 934-4411 or contact us by email at support@coros.com."
  },
  'product warranty replacement': {
    title: 'Product Warranty Replacement',
    content: "COROS reserves the right to verify the validity of your warranty and your request for warranty service.\n\n        COROS reserves the right to invoice you for shipping fees and service charges for any incomplete, damaged or modified Product that is returned to COROS and requires repair or replacement or that is not otherwise covered under this Limited Warranty. Service charges are variable based upon the actual material and labor cost reasonably necessary to replace missing or return modified parts to their original factory condition.\n\n        Products sent in for RMA will be repaired and returned or replaced with a thoroughly tested recertified product of equal or greater performance.\n\n        This COROS Limited Warranty begins from the date that the Product was originally purchased, as verified by a proof of purchase provided and/or confirmed by an Authorized Reseller.\n\n        All products returned to Original Purchasers or Second-Hand Purchasers from COROS's RMA department are thoroughly tested recertified products. Replacement parts and/or Products may include new or refurbished parts or Products and are warranted only until the expiration of the original warranty period. Replacement parts and/or Products will meet the standard of performance and reliability of a new Product or part of the same model, however, such Products and/or parts may have small scratches, small dents, other cosmetic defects, or noticeable use.\n\n        If an RMA is necessary within 30 days of the delivery date of a new in box Product, a new in box OEM replacement will be sent to the Original Purchaser in return, subject to availability."
  },
  'shipping to coros for warranty': {
    title: 'Shipping to COROS for Warranty'
  },
  'warranty replacement shipping': {
    title: 'Warranty Replacement Shipping',
    content: "COROS will ship to the confirmed address at the time your RMA is approved.\n\n        If your warranty replacement is unable to be delivered due to the address being invalid or delivery is not made due to lack of access, no known address, security obstacles or gated areas, you are responsible for a redirect or re-ship fee which will vary depending on your region. You must contact COROS prior to shipment for assistance in avoiding this charge. COROS is not responsible for packages delivered to an outdated address.\n\n        If the product is returned to COROS due to non-delivery you will be responsible to pay for any additional shipping charges for reshipment. COROS encourages you to review your shipping address prior to submitting any RMA request.\n\n        All RMA replacements will state \"Warranty Replacement\" on the package to assist in avoiding any taxes, duties and/or brokerage fees through customs or otherwise. COROS is not responsible for any fees charged by the destination country's government body, brokers or other third party. COROS is not responsible for any unclaimed package that is held by your governing body for clearance from customs or otherwise that becomes abandoned as a result of the refusal of clearance compliance.\n\n        Postal mail is not recommended for shipping any COROS product. If your package is received with physical damage, a claim cannot be processed due to the limitations of postal services, and the package will be returned to sender without alternative options.\n\n        We reserve the right to update this Limited Warranty\n\n        We have and will continue to make policy changes over time. Make sure you read this document carefully and check back for updates. COROS reserves the right to change this policy without notice. Last update March 18, 2020."
  },
  registration: ' WARRANTY REGISTRATION',
  contact: {
    us: {
      area: 'United States',
      phone: '+1 (855) 934-4411 (9am-6pm PST, M-F)',
      email: 'support@coros.com',
      desc: 'Should you need support outside the United States & Canada, please reach out to the information above and we’ll direct you to the best localised support.'
    },
    uk: {
      area: 'United Kingdom',
      address: '2pure Ltd, 4 Royston Road, Deans Industrial Estate, Livingston, West Lothian, EH54 8AH, United Kingdom',
      phone: '+0844 811 2001',
      email: 'support@coros.com',
      question: 'consumersupport@2pure.co.uk',
      desc: 'Should you need support outside the United States & United Kingdom, please reach out to support@coros.com and we’ll direct you to the best localised support.'
    },
    ca: {
      area: 'Canada',
      phone: '+1-438-794-8360 (9am-5pm ET)',
      email: 'contact@abritu-sport.com'
    }
  },
  checkWarranty: {
    title: 'COROSサポート',
    desc: 'デイバスのモデルを選択し、６桁のID番号を入力すると、該当デバイスの保証状況を確認することができます。',
    snGuide: {
      title: 'シリアルナンバーが見つかりませんか？',
      desc: '各 COROS 製品には 6 桁のデバイス ID があります。また、ほとんどの製品には 10 桁のシリアル番号があります。以下では、それらを見つけるさまざまな方法を紹介します。',
      tips: [{
        title: 'デバイスID',
        tips: ['COROSアプリに接続 → プロフィールページ → デバイスアイコンをタップ', "COROS Watch\u306E\u5834\u5408 \u2192 \u30B7\u30B9\u30C6\u30E0 \u2192 \u305D\u306E\u4ED6\u306E\u8A2D\u5B9A \u2192 \u30C7\u30D0\u30A4\u30B9\u306E\u60C5\u5831 \u2192 \u30C7\u30D0\u30A4\u30B9ID"]
      }, {
        title: 'シリアル番号',
        tips: ['パッケージのステッカーに印刷（該当する場合）', "\u6A5F\u5668\u306B\u5370\u5237\u3055\u308C\u3066\u3044\u308B\uFF08\u8A72\u5F53\u3059\u308B\u5834\u5408\uFF09"]
      }]
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/about.js
/* harmony default export */ const jp_about = ({
  pageTitle: 'COROS',
  subTitle: 'About COROS',
  desc: "COROS\uFF08\u30AB\u30ED\u30B9\uFF09\u306F\u30A2\u30A6\u30C8\u30C9\u30A2\u30B9\u30DD\u30FC\u30C4\u3092\u611B\u3059\u308B\u30CF\u30FC\u30C9\u30A6\u30A7\u30A2\u30A8\u30F3\u30B8\u30CB\u30A2\u9054\u306B\u3088\u3063\u30662014\u5E74\u306B\u8A2D\u7ACB\u3055\u308C\u307E\u3057\u305F\u3002\u30A2\u30A6\u30C8\u30C9\u30A2\u30B9\u30DD\u30FC\u30C4\u3092\u884C\u3046\u4EBA\u3005\u306E\u305F\u3081\u306B\u3001\u4FE1\u983C\u6027\u306E\u9AD8\u3044\u30B9\u30DE\u30FC\u30C8\u30A6\u30A7\u30E9\u30D6\u30EB\u30C7\u30D0\u30A4\u30B9\u306E\u958B\u767A\u306B\u53D6\u308A\u7D44\u3093\u3067\u3044\u307E\u3059\u3002\u9AD8\u54C1\u8CEA\u306E\u30CF\u30FC\u30C9\u30A6\u30A7\u30A2\u3068\u9769\u65B0\u7684\u306A\u30C6\u30AF\u30CE\u30ED\u30B8\u30FC\u3092\u7D44\u307F\u5408\u308F\u305B\u3001\u6301\u4E45\u7CFB\u30B9\u30DD\u30FC\u30C4\u306E\u30A2\u30B9\u30EA\u30FC\u30C8\u305F\u3061\u304C\u3001\u4E16\u754C\u3067\u6700\u3082\u904E\u9177\u306A\u74B0\u5883\u4E0B\u306B\u304A\u3044\u3066\u3082\u983C\u308A\u306B\u306A\u308B\u88FD\u54C1\u306E\u63D0\u4F9B\u3092\u884C\u3063\u3066\u3044\u307E\u3059\u3002\u52B9\u7387\u7684\u304B\u3064\u76F4\u611F\u7684\u306A\u30E6\u30FC\u30B6\u30FC\u30A8\u30AF\u30B9\u30DA\u30EA\u30A8\u30F3\u30B9\u3092\u5099\u3048\u305F\u9AD8\u5EA6\u306A\u30C6\u30AF\u30CE\u30ED\u30B8\u30FC\u304C\u3001\u79C1\u305F\u3061\u306E\u4E2D\u6838\u3092\u62C5\u3063\u3066\u3044\u307E\u3059\u3002\n  \n  COROS\u88FD\u54C1\u3092\u4F7F\u3046\u3068\u3001\u305D\u308C\u306F\u30A2\u30B9\u30EA\u30FC\u30C8\u306B\u3088\u3063\u3066\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u305F\u3081\u306B\u30C7\u30B6\u30A4\u30F3\u3055\u308C\u3001\u30C6\u30B9\u30C8\u3092\u7D4C\u3066\u5B8C\u6210\u3057\u305F\u3068\u3044\u3046\u3053\u3068\u304C\u5B9F\u611F\u3067\u304D\u307E\u3059\u3002\u696D\u754C\u3092\u30EA\u30FC\u30C9\u3059\u308B\u7A3C\u50CD\u6642\u9593\u3001\u7279\u8A31\u53D6\u5F97\u6E08\u306E\u30A2\u30F3\u30C6\u30CA\u30C6\u30AF\u30CE\u30ED\u30B8\u30FC\u3001\u30B9\u30DD\u30FC\u30C4\u30CB\u30FC\u30BA\u306B\u5BFE\u3059\u308B\u6DF1\u3044\u6D1E\u5BDF\u3001\u305D\u3057\u3066\u7D76\u3048\u9593\u306A\u3044\u9769\u65B0\u306E\u8FFD\u6C42\u306B\u3088\u308A\u3001COROS\u306F\u4E16\u754C\u306EGPS\u30B9\u30DD\u30FC\u30C4\u30A6\u30A9\u30C3\u30C1\u5206\u91CE\u3067\u811A\u5149\u3092\u6D74\u3073\u3066\u3044\u307E\u3059\u3002\n\n  \u79C1\u305F\u3061\u306E\u88FD\u54C1\u306E\u54C1\u8CEA\u3068\u9769\u65B0\u7684\u306A\u6311\u6226\u304C\u8A8D\u3081\u3089\u308C\u305F\u3053\u3068\u3067\u3001COROS\u306B\u306F\u73FE\u5728\u3001\u30DE\u30E9\u30BD\u30F3\u3084\u30AF\u30ED\u30B9\u30AB\u30F3\u30C8\u30EA\u30FC\u30EC\u30FC\u30B9\u306E\u4E16\u754C\u30C1\u30E3\u30F3\u30D4\u30AA\u30F3\u3001\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u306E\u4E16\u754C\u8A18\u9332\u4FDD\u6301\u8005\u3001\u305D\u306E\u4ED6\u306E\u30C8\u30C3\u30D7\u30A2\u30B9\u30EA\u30FC\u30C8\u306A\u3069\u4E16\u754C\u4E2D\u3067\u591A\u6570\u306E\u30A2\u30AF\u30C6\u30A3\u30D6\u30E6\u30FC\u30B6\u30FC\u3092\u64C1\u3057\u3066\u3044\u307E\u3059\u3002\u79C1\u305F\u3061\u306E\u30C1\u30FC\u30E0\u306F\u3001\u30D7\u30ED\u30A2\u30B9\u30EA\u30FC\u30C8\u3084\u30B9\u30DD\u30FC\u30C4\u611B\u597D\u5BB6\u306E\u58F0\u306B\u8033\u3092\u50BE\u3051\u3066\u5E38\u306B\u88FD\u54C1\u3092\u6700\u9069\u5316\u3057\u3001\u591A\u304F\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u30CB\u30FC\u30BA\u3092\u6E80\u305F\u3059\u305F\u3081\u3001\u3088\u308A\u9AD8\u6A5F\u80FD\u5316\u3055\u308C\u305F\u88FD\u54C1\u958B\u767A\u3092\u7D9A\u3051\u3066\u3044\u304D\u307E\u3059\u3002",
  visionTitle: '使命与愿景',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pace2.js
/* harmony default export */ const jp_pace2 = ({
  title: 'COROS PACE 2 GPS Watch',
  desc: 'ランニングやトライアスロンなどスピードを求める方向け、最軽量クラスウォッチです。',
  viewPlans: 'トレーニングプラン',
  viewWorkouts: 'ワークアウトプログラム',
  accessories: 'アクセサリー',
  section: {
    light: {
      title: 'まるで着けていない\nような軽さ',
      desc: '「COROS PACE 2」の重量は、世界最軽量の29g。装備を\n軽量化することで激しい運動時のストレスが軽減され、\nトレーニングやレースにより集中できます。',
      descMobile: "\u300CCOROS PACE 2\u300D\u306E\u91CD\u91CF\u306F\u3001\u4E16\u754C\u6700\u8EFD\u91CF\u306E29g\u3002\n      \u88C5\u5099\u3092\u8EFD\u91CF\u5316\u3059\u308B\u3053\u3068\u3067\u6FC0\u3057\u3044\u904B\u52D5\u6642\u306E\u30B9\u30C8\u30EC\u30B9\n      \u304C\u8EFD\u6E1B\u3055\u308C\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u306B\n      \u3088\u308A\u96C6\u4E2D\u3067\u304D\u307E\u3059\u3002"
    },
    processor: {
      title: '性能がさらに向上',
      desc: '旧モデルと比べCPU処理速度が1.5倍改善され、メモリ容量が4倍に増加。ハイパフォーマンスを実現するための多彩な機能を搭載したPACE 2が最高のトレーニングパートナーとなります。',
      pace: 'COROS PACE PROCESSOR',
      pace2: 'COROS PACE 2 PROCESSOR',
      compareDesc: ['ADDITIONAL', 'MORE', 'STORAGE']
    },
    counts: {
      title: '進化したデジタル\nダイヤル',
      desc: "\u30B3\u30F3\u30DE1\u79D2\u3092\u4E89\u3046\u30EC\u30FC\u30B9\u4E2D\u3067\u3082\u3001\u91CD\u8981\u306A\u60C5\u5831\u3092\u30B9\u30C8\u30EC\u30B9\u306A\u304F\u78BA\u8A8D\u3002\n      PACE 2\u306F\u5F93\u6765\u306E4\u30DC\u30BF\u30F3\u30C7\u30B6\u30A4\u30F3\u304B\u3089\u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u3078\u3068\u9032\u5316\u3057\u307E\u3057\u305F\u3002\n      \u6FC0\u3057\u3044\u52D5\u304D\u306E\u6700\u4E2D\u3067\u3082\u63071\u672C\u3067\u7D20\u65E9\u304F\u6B63\u78BA\u306A\u64CD\u4F5C\u304C\u53EF\u80FD\u3067\u3059\u3002",
      descMobile: "\u30B3\u30F3\u30DE1\u79D2\u3092\u4E89\u3046\u30EC\u30FC\u30B9\u4E2D\u3067\u3082\u3001\u91CD\u8981\u306A\u60C5\u5831\u3092\n      \u30B9\u30C8\u30EC\u30B9\u306A\u304F\u78BA\u8A8D\u3002\n      PACE 2\u306F\u5F93\u6765\u306E4\u30DC\u30BF\u30F3\u30C7\u30B6\u30A4\u30F3\u304B\u3089\u30C7\u30B8\u30BF\u30EB\n      \u30C0\u30A4\u30E4\u30EB\u3078\u3068\u9032\u5316\u3057\u307E\u3057\u305F\u3002\u6FC0\u3057\u3044\u52D5\u304D\u306E\u6700\u4E2D\n      \u3067\u3082\u63071\u672C\u3067\u7D20\u65E9\u304F\u6B63\u78BA\u306A\u64CD\u4F5C\u304C\u53EF\u80FD\u3067\u3059\u3002"
    },
    packs: {
      title: '妥協のない\n稼働時間',
      titleMobile: '妥協のない稼働時間',
      desc: "\u6700\u65B0\u306E\u5C0F\u578B\u9AD8\u5BC6\u5EA6\u96FB\u6C60\u3092\u642D\u8F09\u3057\u3001\u7701\u96FB\u529B\u8A2D\u8A08\n      \u306E\u30B7\u30B9\u30C6\u30E0\u306B\u3088\u3063\u3066\u898F\u683C\u5916\u306E\u7A3C\u50CD\u6642\u9593\u3092\u5B9F\u73FE\u3002\n      GPS\u30E2\u30FC\u30C9\u3067\u6700\u592730\u6642\u9593\u3068\u3044\u3046\u7A3C\u50CD\u6642\u9593\u306F\u3001\n      \u5404\u30B9\u30DD\u30FC\u30C4\u306B\u304A\u3051\u308B\u7A3C\u50CD\u6642\u9593\u306E\u8981\u6C42\u3092\u6E80\u305F\u3059\n      \u306E\u306B\u5341\u5206\u3067\u3059\u3002"
    },
    endurance: {
      title: '20日間の日常使用',
      desc: '終日の心拍数計測、日常活動記録、睡眠計測、メッセージ通知等の機能を使う日常使用であれば、20日間の連続稼働が可能です。'
    },
    night: {
      title: '目に優しい\nナイトモード',
      desc: 'ナイトモードをONにすると、柔らかなバックライトが常時点灯。\nナイトランでも点灯操作の必要がなく、いつでもデータを確認できます。'
    },
    laps: {
      title: '水上での\n運動にも対応',
      desc: 'PACE 2は50m防水（5ATM）性能を持ち、\nウォッチを装着したままで水上で運動の記録が可能。様々なトレーニングへの要求を満たすことができます。'
    },
    possibilities: {
      title: '選べるウォッチバンド',
      desc: "\u30B7\u30EA\u30B3\u30F3\u30D0\u30F3\u30C9\u306F\u8010\u6469\u64E6\u6027\u3001\u8010\u4E45\u6027\u306B\u512A\u308C\u3001\u7D30\u304B\u306A\u7A7A\u6C17\u5B54\u3067\u8EFD\u91CF\u6027\u3001\n      \u901F\u4E7E\u6027\u304C\u5411\u4E0A\u3002\u9280\u30CA\u30CE\u7C92\u5B50\u6297\u83CC\u6280\u8853\u63A1\u7528\u306E\u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u306F\u8EFD\u91CF\u6027\u3001\n      \u30D5\u30A3\u30C3\u30C8\u611F\u3001\u901A\u6C17\u6027\u306B\u512A\u308C\u3001\u9AD8\u5F37\u5EA6\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306B\u6700\u9069\u3067\u3059\u3002",
      descMobile: "\u30B7\u30EA\u30B3\u30F3\u30D0\u30F3\u30C9\u306F\u8010\u6469\u64E6\u6027\u3001\u8010\u4E45\u6027\u306B\u512A\u308C\u3001\u7D30\u304B\n      \u306A\u7A7A\u6C17\u5B54\u3067\u8EFD\u91CF\u6027\u3001\u901F\u4E7E\u6027\u304C\u5411\u4E0A\u3002\u9280\u30CA\u30CE\u7C92\u5B50\u6297\n      \u83CC\u6280\u8853\u63A1\u7528\u306E\u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u306F\u8EFD\u91CF\u6027\u3001\u30D5\u30A3\u30C3\u30C8\n      \u611F\u3001\u901A\u6C17\u6027\u306B\u512A\u308C\u3001\u9AD8\u5F37\u5EA6\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306B\u6700\u9069\u3067\n      \u3059\u3002"
    },
    athlete: {
      title: '豊富なトレーニング\nモード',
      desc: 'PACE 2はランニング以外にもサイクリング、スイミング、筋力トレーニングなど豊富なトレーニングモードを提供。正確な各運動データを提供し、科学的なトレーニングに役立てることができます。',
      descMobile: "PACE 2\u306F\u30E9\u30F3\u30CB\u30F3\u30B0\u4EE5\u5916\u306B\u3082\u30B5\u30A4\u30AF\u30EA\u30F3\u30B0\u3001\n      \u30B9\u30A4\u30DF\u30F3\u30B0\u3001\u7B4B\u529B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306A\u3069\u8C4A\u5BCC\u306A\n      \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30E2\u30FC\u30C9\u3092\u63D0\u4F9B\u3002\u6B63\u78BA\u306A\u5404\u904B\u52D5\n      \u30C7\u30FC\u30BF\u3092\u63D0\u4F9B\u3057\u3001\u79D1\u5B66\u7684\u306A\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306B\n      \u5F79\u7ACB\u3066\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
    },
    trainer: {
      title: 'パーソナル\nトレーナー',
      desc: '100種類の異なるトレーニング項目を網羅。\nトレーニング項目のカスタマイズが可能で、かつトレーニング中には各運動データが記録できます。'
    },
    muscleHeatmap: {
      title: '筋肉ヒート\nマップ',
      desc: "\u7B4B\u529B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306E\u5F8C\u306B\u3001\u935B\u3048\u305F\u90E8\u4F4D\n      \u306E\u7B4B\u8089\u30D2\u30FC\u30C8\u30DE\u30C3\u30D7\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002\n      \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u52B9\u679C\u3092\u3057\u3063\u304B\u308A\u7406\u89E3\u3059\u308B\n      \u3053\u3068\u3067\u5408\u7406\u7684\u306A\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u9805\u76EE\u3092\u8A08\n      \u753B\u3057\u3001\u30D0\u30E9\u30F3\u30B9\u3088\u304F\u5168\u8EAB\u3092\u935B\u3048\u308B\u3053\u3068\n      \u304C\u3067\u304D\u307E\u3059\u3002"
    },
    learn: {
      title: 'ベストから\n学びシェアする',
      desc: "COROS\u30A2\u30D7\u30EA\u306F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\n      \u4F5C\u6210\u3060\u3051\u3067\u306A\u304F\u3001\u4ED6\u30B7\u30B9\u30C6\u30E0/\u30E6\u30FC\u30B6\u30FC\n      \u304C\u4F5C\u6210\u3057\u305F\u30D7\u30E9\u30F3\u306E\u53D6\u308A\u8FBC\u307F\u3084\u30A2\u30EC\u30F3\u30B8\n      \u304C\u3067\u304D\u307E\u3059\u3002\n      \u307E\u305F\u3001COROS\u30A2\u30B9\u30EA\u30FC\u30C8/\u30B3\u30FC\u30C1\u4F5C\u6210\u306E\n      \u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u3084\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u304C\n       COROS.com \u304B\u3089\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u53EF\u3002"
    },
    follow: {
      title: '各運動の心拍数計算を最適化',
      desc: '各運動ごとに心拍数が変化する、という特徴に基づいて計算方法を最適化。運動ごとの心拍データへの干渉を効果的にフィルタリングすることで、各運動においての正確な心拍数データを提供します。'
    },
    track: {
      title: "\u30C8\u30E9\u30C3\u30AF\u30E9\u30F3\u30E2\u30FC\u30C9\u3067\n      \u3088\u308A\u6B63\u78BA\u306B",
      mobileTitle: '軌道修正',
      desc: '1周400mのトラックでの走行データを最適化。例えば、10000m以上の距離を走っても、走行距離の誤差はわずか数mにとどまります。データの精度に拘るシリアスランナーのためのモードだといえるでしょう。'
    },
    smart: {
      title: '最高のトレーニングパートナー',
      desc: '理想のスポーツウォッチとは、正確なトレーニングデータ、科学的なトレーニングプラン、実用性の高い日常機能を兼ね備えています。PACE 2が最高のトレーニングパートナーになることは間違いありません。'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/terms.js
/* harmony default export */ const jp_terms = ({
  termsofservice: 'サービス約款',
  lastUpdate: '更新日：2020年10月7日',
  baseTOS: "\u672C\u30B5\u30FC\u30D3\u30B9\u7D04\u6B3E\uFF08\u4EE5\u4E0B\u300C\u7D04\u6B3E\u300D\uFF09\u306F\u3001\u30E6\u30FC\u30B6\u30FC\u304C\u4F7F\u7528\u3059\u308BCOROS\u306E\u88FD\u54C1\u3001\u5F53\u793E\u306E\u30A6\u30A7\u30D6\u30B5\u30A4\u30C8\uFF08www.coros.com\u3092\u542B\u3080\uFF09\u3001COROS\u30C7\u30D0\u30A4\u30B9\u306B\u7D44\u307F\u8FBC\u307E\u308C\u305F\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u3001COROS\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u3001COROS\u30E2\u30D0\u30A4\u30EB\u30A2\u30D7\u30EA\u53CA\u3073\u305D\u306E\u4ED6\u306ECOROS\u30B5\u30FC\u30D3\u30B9\uFF08\u4EE5\u4E0B\u300C\u30B5\u30FC\u30D3\u30B9\u300D\uFF09\u306B\u9069\u7528\u3055\u308C\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306F\u3053\u306E\u7D04\u6B3E\u3092\u53D7\u3051\u5165\u308C\u308B\u3053\u3068\u3067\u3001COROS\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4F5C\u6210\u3068\u30B5\u30FC\u30D3\u30B9\u306E\u4F7F\u7528\u304C\u53EF\u80FD\u3068\u306A\u308A\u307E\u3059\u3002\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u304A\u6301\u3061\u3067\u306A\u3044\u5834\u5408\u306F www.coros.com \u306E\u30A6\u30A7\u30D6\u30B5\u30A4\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u3001\u307E\u305F\u306F\u4F55\u3089\u304B\u306E\u30B5\u30FC\u30D3\u30B9\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068\u3067\u672C\u7D04\u6B3E\u3092\u627F\u8AFE\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u672C\u7D04\u6B3E\u3092\u627F\u8AFE\u3057\u306A\u3044\u5834\u5408\u306F\u3001COROS\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4F5C\u6210\u3092\u305B\u305A\u306B www.coros.com \u3078\u306E\u8A2A\u554F\u3001\u307E\u305F\u306F\u30B5\u30FC\u30D3\u30B9\u306E\u4F7F\u7528\u3092\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
  whoCanUse: {
    title: 'COROSの使用許可',
    desc: 'サービスを使用するには、満15歳以上である必要があります。ただし、ユーザーが15歳に達していても未成年である場合においては、約款をよく読み、保護者または法律上の監護者がユーザーに代わって登録を完了することで、サービスを使用することができます。登録を完了した者は、法的な資格を有している必要があります。製品またはアプリが接続許可の資格を有しているかの疑問がある場合には japan@coros.com にご連絡ください。'
  },
  account: {
    title: '登録とログイン',
    desc: "\u30E6\u30FC\u30B6\u30FC\u304C\u30B5\u30FC\u30D3\u30B9\u3092\u5229\u7528\u3059\u308B\u305F\u3081\u306B\u306F\u3001\u6709\u52B9\u306A\u96FB\u5B50\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u63D0\u4F9B\u3057\u3066\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4F5C\u6210\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u307E\u305F\u3001\u65B0\u305F\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4F5C\u308A\u76F4\u3057\u3001\u7B2C\u4E09\u8005\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u4F7F\u7528\u3057\u3066\u767B\u9332\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002\u7B2C\u4E09\u8005\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u5408\u610F\u306B\u57FA\u3065\u304D\u3001\u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u540D\u3001\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u5199\u771F\u3001\u6027\u5225\u3092\u53D6\u5F97\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306F\u3054\u81EA\u8EAB\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u304A\u3051\u308B\u5168\u3066\u306E\u6D3B\u52D5\u306B\u8CAC\u4EFB\u3092\u8CA0\u3046\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u304C\u3054\u81EA\u8EAB\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u8A3C\u660E\u306E\u5B89\u5168\u6027\u7DAD\u6301\u304C\u56F0\u96E3\u306A\u5834\u5408\u306E\u3044\u304B\u306A\u308B\u640D\u5931\u3084\u640D\u5BB3\u306B\u5BFE\u3057\u3066\u3001COROS\u306F\u4E00\u5207\u306E\u8CAC\u4EFB\u3092\u8CA0\u3044\u307E\u305B\u3093\u3002\n    \u5F53\u793E\u306F\u30B5\u30FC\u30D3\u30B9\u306B\u95A2\u3059\u308B\u60C5\u5831\u4F7F\u7528\u306B\u95A2\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306B\u9023\u7D61\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u3053\u308C\u306F\u30B5\u30FC\u30D3\u30B9\u306E\u4E00\u90E8\u3067\u3042\u308A\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u305D\u308C\u3092\u62D2\u5426\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u305D\u306E\u4ED6\u306E\u9023\u7D61\u306B\u3064\u3044\u3066\u306F\u7BA1\u7406\u3001\u62D2\u5426\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306F\u3054\u81EA\u8EAB\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u8A2D\u5B9A\u3067\u6700\u65B0\u306E\u96FB\u5B50\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
  },
  equipment: {
    title: '必要なデバイス',
    desc: 'サービスを問題なく利用するためには、対応するモバイルデバイスおよびインターネットにアクセス可能なコンピュータが重要となります。このデバイスの維持と安全性がサービスの性能に影響を与えます。ユーザーはデバイスの機能の安全性を確保する責任があります。ユーザーがデバイスの安全性を維持できなかったで生じたいかなる損失または損害に対しても、COROSは一切責任を負いません。'
  },
  disclaimers: {
    title: '免責事項',
    desc: "\u5F53\u793E\u306F\u30B5\u30FC\u30D3\u30B9\u304C\u30E6\u30FC\u30B6\u30FC\u306E\u5168\u3066\u306E\u8981\u6C42\u3092\u6E80\u305F\u3059\u3053\u3068\u306B\u3064\u3044\u3066\u4FDD\u8A3C\u3067\u304D\u307E\u305B\u3093\u3002\u307E\u305F\u3001\u30B5\u30FC\u30D3\u30B9\u306E\u54C1\u8CEA\u3001\u6B63\u78BA\u6027\u3001\u9069\u6642\u6027\u3001\u771F\u5B9F\u6027\u3001\u5B8C\u5168\u6027\u3001\u4FE1\u983C\u6027\u3001\u307E\u305F\u306F\u30B5\u30FC\u30D3\u30B9\u306B\u304A\u3051\u308B\u5168\u3066\u306E\u30A8\u30E9\u30FC\u304C\u9069\u6642\u306B\u8A02\u6B63\u3001\u66F4\u65B0\u3055\u308C\u308B\u3053\u3068\u306B\u3064\u3044\u3066\u4FDD\u8A3C\u3092\u3044\u305F\u3057\u304B\u306D\u307E\u3059\u3002\n    \u30B5\u30FC\u30D3\u30B9\u306F\u8A3A\u65AD\u3001\u6CBB\u7642\u3001\u4E88\u9632\u307E\u305F\u306F\u4F55\u3089\u304B\u306E\u75BE\u75C5\u306E\u4E88\u9632\u3092\u610F\u56F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u307E\u305F\u3001\u30B5\u30FC\u30D3\u30B9\u304C\u63D0\u4F9B\u3059\u308B\u5168\u3066\u306E\u30C6\u30AD\u30B9\u30C8\u3001\u56F3\u5F62\u3001\u5199\u771F\u3001\u97F3\u697D\u3001\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u3001\u30AA\u30FC\u30C7\u30A3\u30AA\u3001\u30D3\u30C7\u30AA\u3001\u3042\u3089\u3086\u308B\u30AB\u30C6\u30B4\u30EA\u306E\u8457\u4F5C\u6A29\u3084\u60C5\u5831\u3001\u307E\u305F\u306F\u305D\u306E\u4ED6\u306E\u6750\u6599\u3092\u542B\u3080\u300CCOROS\u30B3\u30F3\u30C6\u30F3\u30C4\u300D\u306F\u3001\u3044\u305A\u308C\u3082\u533B\u5E2B\u3084\u305D\u306E\u4ED6\u5C02\u9580\u5BB6\u304C\u63D0\u4F9B\u3059\u308B\u60C5\u5831\u306B\u53D6\u3063\u3066\u4EE3\u308F\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002COROS\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u3042\u3089\u3086\u308B\u533B\u5B66\u7684\u7406\u7531\u3001\u5305\u88C5\u307E\u305F\u306F\u30E9\u30D9\u30EB\u3078\u306E\u4F7F\u7528\u3092\u7981\u3058\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u304C\u4F55\u3089\u304B\u306E\u8A3A\u7642\u3092\u53D7\u3051\u3066\u3044\u308B\u5834\u5408\u3084\u5FC3\u81D3\u75BE\u60A3\u304C\u3042\u308B\u5834\u5408\u306F\u3001\u30B5\u30FC\u30D3\u30B9\u3092\u5229\u7528\u3059\u308B\u524D\u306B\u533B\u5E2B\u306B\u76F8\u8AC7\u3057\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3084\u98DF\u4E8B\u5185\u5BB9\u306E\u6539\u5584\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u533B\u7642\u306B\u304A\u3051\u308B\u7DCA\u6025\u4E8B\u614B\u304C\u767A\u751F\u3057\u305F\u5834\u5408\u306F\u3001\u30B5\u30FC\u30D3\u30B9\u306E\u4F7F\u7528\u3092\u3059\u3050\u306B\u505C\u6B62\u3057\u3001\u533B\u5E2B\u3084\u5C02\u9580\u5BB6\u306B\u76F8\u8AC7\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30B5\u30FC\u30D3\u30B9\u3092\u901A\u3057\u3066\u5F97\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3001\u30B3\u30F3\u30B5\u30EB\u30C6\u30A3\u30F3\u30B0\u3001\u88FD\u54C1\u307E\u305F\u306F\u4E8B\u8C61\u306B\u3088\u3063\u3066\u5065\u5EB7\u554F\u984C\u3092\u5F15\u304D\u8D77\u3053\u3057\u305F\u3068\u3057\u3066\u3082\u3001\u5F53\u793E\u306F\u4E00\u5207\u8CAC\u4EFB\u3092\u8CA0\u3044\u307E\u305B\u3093\u3002\u30B5\u30FC\u30D3\u30B9\u4E0A\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3092\u5B9F\u884C\u3059\u308B\u5834\u5408\u306F\u3001\u30E6\u30FC\u30B6\u30FC\u304C\u3054\u81EA\u8EAB\u3067\u30EA\u30B9\u30AF\u3092\u8CA0\u3044\u3001\u81EA\u3089\u306E\u610F\u601D\u3067\u3053\u308C\u3089\u306E\u6D3B\u52D5\u306B\u53C2\u52A0\u3059\u308B\u3053\u3068\u306B\u540C\u610F\u3057\u305F\u3068\u307F\u306A\u3057\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306F\u3001\u3054\u81EA\u8EAB\u306E\u6D3B\u52D5\u306B\u5BFE\u3059\u308B\u500B\u4EBA\u7684\u3001\u8CA1\u7523\u306B\u304B\u304B\u308F\u308B\u30EA\u30B9\u30AF\u306B\u3064\u3044\u3066\u8CAC\u4EFB\u3092\u8CA0\u3046\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u3001\u305D\u306E\u7BC4\u56F2\u306F\u30B5\u30FC\u30D3\u30B9\u306E\u63D0\u4F9B\u3057\u305F\u30B5\u30A4\u30AF\u30EA\u30F3\u30B0\u3001\u30E9\u30F3\u30CB\u30F3\u30B0\u3001\u6C34\u6CF3\u307E\u305F\u306F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3092\u542B\u307F\u307E\u3059\u304C\u3001\u3053\u308C\u3089\u306B\u9650\u308A\u307E\u305B\u3093\u3002COROS\u306F\u3044\u304B\u306A\u308B\u4EBA\u8EAB\u50B7\u5BB3\u3001\u8CA1\u7523\u306E\u640D\u5931\u30EA\u30B9\u30AF\u306B\u5BFE\u3059\u308B\u8CAC\u4EFB\u3082\u8CA0\u3044\u307E\u305B\u3093\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306F\u3001COROS\u304CSOS\u60C5\u5831\u306E\u672A\u9001\u4FE1\u306B\u3088\u308B\u3044\u304B\u306A\u308B\u7D50\u679C\u306B\u3082\u8CAC\u4EFB\u3092\u8CA0\u308F\u306A\u3044\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u5F53\u793E\u306FSOS\u60C5\u5831\u304C\u3044\u304B\u306A\u308B\u72B6\u6CC1\u4E0B\u306B\u304A\u3044\u3066\u3082\u767A\u4FE1\u3055\u308C\u308B\u3053\u3068\u306B\u3064\u3044\u3066\u4FDD\u8A3C\u3092\u3044\u305F\u3057\u304B\u306D\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306F\u3001COROS\u88FD\u54C1\u3092\u4F7F\u7528\u3059\u308B\u969B\u306BSOS\u60C5\u5831\u304C\u30BB\u30EB\u30E9\u30FC\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3001\u30B5\u30FC\u30D0\u30FC\u4FDD\u8B77\u304A\u3088\u3073\u305D\u306E\u4ED6\u4E8B\u524D\u306B\u4E88\u77E5\u3067\u304D\u304B\u306D\u308B\u554F\u984C\u306B\u3088\u3063\u3066\u5DE6\u53F3\u3055\u308C\u308B\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306F\u3001\u30B5\u30FC\u30D3\u30B9\u304C\u7B2C\u4E09\u8005\u30DD\u30EA\u30B7\u30FC\u306B\u57FA\u3065\u304D\u3001\u7B2C\u4E09\u8005\u306E\u30B5\u30FC\u30D0\u30FC\u306B\u30E6\u30FC\u30B6\u30FC\u306E\u60C5\u5831\u304A\u3088\u3073\u6D3B\u52D5\u30C7\u30FC\u30BF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002 \u30B5\u30FC\u30D3\u30B9\u306F\u3001COROS\u30A2\u30AB\u30A6\u30F3\u30C8\u3001COROS\u30C7\u30FC\u30BF\u307E\u305F\u306F\u30B5\u30FC\u30D3\u30B9\u3068\u7B2C\u4E09\u8005\u30B5\u30FC\u30D3\u30B9\u306B\u95A2\u9023\u3059\u308B\u6A5F\u4F1A\u3092\u63D0\u4F9B\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u5F53\u793E\u306F\u3053\u306E\u6A5F\u4F1A\u3092\u63D0\u4F9B\u3057\u307E\u3059\u304C\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u30B5\u30FC\u30D3\u30B9\u3067\u5229\u7528\u3057\u305F\u3044\u304B\u306A\u308B\u7B2C\u4E09\u8005\u306E\u30B5\u30FC\u30D3\u30B9\u3082\u3001\u30B5\u30FC\u30D3\u30B9\u306E\u4E00\u90E8\u306B\u5C5E\u3055\u306A\u3044\u3053\u3068\u3092\u627F\u8AFE\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306F\u3001\u3053\u308C\u3089\u306E\u7D04\u6B3E\u3068COROS\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC\u304C\u3044\u304B\u306A\u308B\u7B2C\u4E09\u8005\u306E\u30B5\u30FC\u30D3\u30B9\u306B\u3082\u9069\u7528\u3055\u308C\u306A\u3044\u3053\u3068\u3092\u627F\u8AFE\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306F\u3001\u4F7F\u7528\u3059\u308B\u5168\u3066\u306E\u7B2C\u4E09\u8005\u306E\u30B5\u30FC\u30D3\u30B9\u306E\u7D04\u6B3E\u304A\u3088\u3073\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC\u3092\u719F\u8AAD\u3057\u3066\u7406\u89E3\u3059\u308B\u8CAC\u4EFB\u304C\u3042\u308A\u307E\u3059\u3002"
  },
  UOS: {
    title: 'COROSサービスの使用',
    desc: "\u30B5\u30FC\u30D3\u30B9\u306B\u542B\u307E\u308C\u308B\u6587\u7AE0\u3001\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u3001\u753B\u50CF\u3001\u97F3\u58F0\u3001\u6620\u50CF\u306A\u3069\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3001\u304A\u3088\u3073\u30C9\u30E1\u30A4\u30F3\u540D\u3001\u30AD\u30E3\u30C3\u30C1\u30D5\u30EC\u30FC\u30BA\u3001\u7D44\u7E54\u306A\u3069\u306F\u3001\u7C73\u56FD\u304A\u3088\u3073\u8AF8\u5916\u56FD\u306E\u8457\u4F5C\u6A29\u6CD5\u3001\u5546\u6A19\u6CD5\u3001\u305D\u306E\u4ED6\u306E\u5F53\u8A72\u6CD5\u5F8B\u306B\u3088\u308A\u4FDD\u8B77\u3055\u308C\u3066\u304A\u308A\u3001COROS\u306B\u3088\u3063\u3066\u6240\u6709\u307E\u305F\u306F\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30B5\u30FC\u30D3\u30B9\u3092\u7121\u65AD\u3067\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u8457\u4F5C\u6A29\u6CD5\u3001\u5546\u6A19\u6CD5\u3001\u305D\u306E\u4ED6\u306E\u6CD5\u5F8B\u306B\u9055\u53CD\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306F\u672C\u30B5\u30FC\u30D3\u30B9\u306E\u4E00\u90E8\u307E\u305F\u306F\u6A5F\u80FD\u3001\u672C\u30B5\u30FC\u30D3\u30B9\u306B\u63A5\u7D9A\u3055\u308C\u305F\u4ED6\u306E\u30B7\u30B9\u30C6\u30E0\u3001\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3001COROS\u30B5\u30FC\u30D0\u30FC\u3001\u307E\u305F\u306F\u672C\u30B5\u30FC\u30D3\u30B9\u3092\u901A\u3058\u3066\u63D0\u4F9B\u3055\u308C\u308B\u30B5\u30FC\u30D3\u30B9\u306E\u3044\u305A\u308C\u304B\u306B\u4E0D\u6B63\u306A\u624B\u6BB5\u3067\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u307E\u305F\u3001\u9055\u6CD5\u884C\u70BA\u3084\u672C\u5229\u7528\u898F\u7D04\u3067\u7981\u6B62\u3055\u308C\u3066\u3044\u308B\u884C\u70BA\u306A\u3069\u3001COROS\u3084\u4ED6\u8005\u306E\u6A29\u5229\u3092\u4FB5\u5BB3\u3059\u308B\u884C\u70BA\u306B\u30B5\u30FC\u30D3\u30B9\u3092\u5229\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306F\u30B5\u30FC\u30D3\u30B9\u306E\u6B63\u5E38\u306A\u52D5\u4F5C\u3084\u4ED6\u8005\u306B\u3088\u308B\u672C\u30B5\u30FC\u30D3\u30B9\u306E\u5229\u7528\u3092\u59A8\u5BB3\u3059\u308B\u3001\u307E\u305F\u306F\u59A8\u5BB3\u3057\u3088\u3046\u3068\u3059\u308B\u30C7\u30D0\u30A4\u30B9\u3001\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u3001\u30EB\u30FC\u30C6\u30A3\u30FC\u30F3\u3092\u4F7F\u7528\u3057\u306A\u3044\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002"
  },
  feedbackPolicy: {
    title: 'フィードバックポリーシー',
    desc: '当社にご意見、ご感想またはフィードバックをお寄せいただいた場合、ユーザーは当社がそれらの意見を使用することができ、いかなる制限または賠償を受けないことに同意するものとします。当社はCOROSが開発し、またはユーザー以外のルートから得た既知事項、フィードバック権利の使用を放棄いたしません。ユーザーは  japan@coros.com から当社に問い合わせることができます。ユーザーの許可がない場合は、当社への一切のフィードバック送信をお控えください。当社のフィードバックポリシーは約款の一部です。'
  },
  distribution: {
    title: '紛争解決',
    desc: "\u30E6\u30FC\u30B6\u30FC\u306F\u3053\u306E\u7D04\u6B3E\u306B\u304A\u3044\u3066\u3001\u30B5\u30FC\u30D3\u30B9\u3084\u305D\u306E\u4ED6\u306ECOROS\u88FD\u54C1\u3001\u307E\u305F\u306F\u30B5\u30FC\u30D3\u30B9\u306B\u3088\u3063\u3066\u5F15\u304D\u8D77\u3053\u3055\u308C\u305F\u30E6\u30FC\u30B6\u30FC\u3068COROS\u9593\u306E\u3044\u304B\u306A\u308B\u7D1B\u4E89\uFF08\u300C\u7D1B\u4E89\u300D\u3068\u7DCF\u79F0\u3057\u307E\u3059\uFF09\u3082\u4EE5\u4E0B\u306E\u4EF2\u88C1\u30D7\u30ED\u30BB\u30B9\u306B\u5247\u308B\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\n    \u6E96\u62E0\u6CD5\uFF1A\u30B5\u30FC\u30D3\u30B9\u7D04\u6B3E\u304A\u3088\u3073\u3042\u3089\u3086\u308B\u7D1B\u4E89\u306E\u89E3\u6C7A\u65B9\u6CD5\u306F\u3001\u7C73\u56FD\u30FB\u30AB\u30EA\u30D5\u30A9\u30EB\u30CB\u30A2\u5DDE\u306E\u6CD5\u5F8B\u3068\u305D\u306E\u89E3\u91C8\u306B\u6E96\u62E0\u3057\u3001\u885D\u7A81\u3059\u308B\u6CD5\u5F8B\u3068\u539F\u5247\u306F\u8003\u616E\u3057\u306A\u3044\u3082\u306E\u3068\u3057\u307E\u3059\u3002\n    \u5354\u8B70\u306B\u3088\u308B\u7D1B\u4E89\u89E3\u6C7A\uFF1A\u5F53\u793E\u306F\u6B63\u5F0F\u306A\u8A34\u8A1F\u306E\u5FC5\u8981\u306A\u304F\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u7591\u554F\u306A\u3069\u3092\u89E3\u6D88\u3059\u308B\u3053\u3068\u3092\u5E0C\u671B\u3057\u3066\u3044\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306FCOROS\u306B\u640D\u5BB3\u8CE0\u511F\u3092\u8ACB\u6C42\u3059\u308B\u524D\u306B japan@coros.com \u3092\u901A\u3058\u3066\u5354\u8B70\u306B\u3088\u308A\u7D1B\u4E89\u3092\u89E3\u6C7A\u3059\u308B\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u5F53\u793E\u306F\u96FB\u5B50\u30E1\u30FC\u30EB\u3092\u901A\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u3068\u9023\u7D61\u3092\u53D6\u308A\u3001\u5354\u8B70\u306B\u3088\u308A\u7D1B\u4E89\u3092\u89E3\u6C7A\u3059\u308B\u3053\u3068\u306B\u5C3D\u529B\u3057\u307E\u3059\u3002\u610F\u898B\u306E\u63D0\u51FA\u5F8C15\u65E5\u4EE5\u5185\u306B\u7D1B\u4E89\u304C\u89E3\u6C7A\u306B\u81F3\u3089\u306A\u304B\u3063\u305F\u5834\u5408\u306F\u3001\u30E6\u30FC\u30B6\u30FC\u307E\u305F\u306FCOROS\u306F\u6B63\u5F0F\u306A\u624B\u7D9A\u304D\u306B\u3088\u308A\u8A34\u8A1F\u3092\u63D0\u8D77\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\n    \u96C6\u56E3\u8A34\u8A1F\u4E0D\u53EF\uFF1A\u30E6\u30FC\u30B6\u30FC\u306F\u500B\u4EBA\u3067\u306E\u307FCOROS\u3068\u306E\u7D1B\u4E89\u3092\u89E3\u6C7A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u306A\u304A\u304B\u3064\u305D\u306E\u4ED6\u306E\u533A\u5206\u306F\u3067\u304D\u305A\u3001\u539F\u544A\u307E\u305F\u306F\u96C6\u56E3\u306E\u4E00\u54E1\u3068\u3057\u3066\u306E\u8A34\u8A1F\u3092\u5408\u4F75\u307E\u305F\u306F\u4EE3\u8868\u3059\u308B\u5F62\u3067\u63D0\u8D77\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u5F53\u793E\u306E\u5354\u8B70\u306B\u304A\u3044\u3066\u306F\u533A\u5225\u3057\u3066\u306E\u4EF2\u88C1\u306F\u8A31\u3055\u308C\u305A\u3001\u96C6\u56E3\u8A34\u8A1F\u3001\u500B\u4EBA\u306E\u5F01\u8B77\u58EB\u306E\u8A34\u8A1F\u3092\u4ED6\u306E\u4EF2\u88C1\u3068\u5408\u4F75\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n    \u640D\u5BB3\u8CE0\u511F\u306E\u5236\u9650\uFF1A\u3044\u304B\u306A\u308B\u6CD5\u5F8B\u3084\u3001\u6CD5\u5F8B\u306B\u53CD\u3059\u308B\u898F\u5B9A\u304C\u306A\u3044\u9650\u308A\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u30B5\u30FC\u30D3\u30B9\u306E\u4F7F\u7528\u3068\u95A2\u4FC2\u306E\u3042\u308B\u5168\u3066\u306E\u640D\u5BB3\u8CE0\u511F\u3082\u3057\u304F\u306F\u8A34\u8A1F\u306F\u3001\u640D\u5BB3\u8CE0\u511F\u3084\u8A34\u8A1F\u306E\u539F\u56E0\u304C\u767A\u751F\u3057\u3066\u304B\u30891\u5E74\u4EE5\u5185\u306B\u63D0\u8D77\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u305D\u3046\u3067\u306A\u3051\u308C\u3070\u3001\u305D\u306E\u4E3B\u5F35\u3084\u8A34\u8A1F\u306E\u539F\u56E0\u306F\u6052\u4E45\u7684\u306B\u7981\u6B62\u3055\u308C\u307E\u3059\u3002"
  },
  violation: {
    title: '本規約に違反する行為',
    desc: "\u5F53\u793E\u304C\u30B5\u30FC\u30D3\u30B9\u3092\u901A\u3058\u3066\u30E6\u30FC\u30B6\u30FC\u304B\u3089\u306E\u9001\u4FE1\u60C5\u5831\u3092\u4FDD\u5B58\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u6CD5\u5F8B\u306B\u3088\u3063\u3066\u958B\u793A\u8ACB\u6C42\u3055\u308C\u305F\u5834\u5408\u306F\uFF081\uFF09\u6CD5\u7684\u624B\u7D9A\u304D\u306E\u9075\u5B88\uFF082\uFF09\u672C\u5229\u7528\u898F\u7D04\u306E\u57F7\u884C\uFF083\uFF09\u5F53\u8A72\u30C7\u30FC\u30BF\u304C\u4ED6\u8005\u306E\u6A29\u5229\u3092\u4FB5\u5BB3\u3059\u308B\u3068\u3044\u3046\u4E3B\u5F35\u3078\u306E\u5BFE\u5FDC\uFF084\uFF09COROS\u3001\u5F53\u793E\u306E\u793E\u54E1\u3001\u30B5\u30FC\u30D3\u30B9\u306E\u30E6\u30FC\u30B6\u30FC\u304A\u3088\u3073\u516C\u8846\u306E\u6A29\u5229\u3001\u8CA1\u7523\u307E\u305F\u306F\u500B\u4EBA\u306E\u5B89\u5168\u3092\u5B88\u308B\u305F\u3081\u306B\u5408\u7406\u7684\u306B\u5FC5\u8981\u3068\u5224\u65AD\u3055\u308C\u305F\u5834\u5408\u306B\u306F\u5F53\u8A72\u30C7\u30FC\u30BF\u3092\u958B\u793A\u3067\u304D\u308B\u3053\u3068\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u304C\u672C\u5229\u7528\u898F\u7D04\u3084\u305D\u306E\u4ED6\u306E\u30AC\u30A4\u30C9\u30E9\u30A4\u30F3\u306B\u9055\u53CD\u3057\u305F\u3068\u5224\u65AD\u3057\u305F\u5834\u5408\u3001COROS\u306F\u72EC\u81EA\u306E\u88C1\u91CF\u3067\u4E8B\u524D\u901A\u77E5\u7121\u3057\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u30B5\u30FC\u30D3\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u7D42\u4E86\u3055\u305B\u3001\u4ECA\u5F8C\u306E\u30B5\u30FC\u30D3\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u30D6\u30ED\u30C3\u30AF\u3067\u304D\u308B\u3053\u3068\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u306B\u3088\u308B\u672C\u5229\u7528\u898F\u7D04\u306E\u9055\u53CD\u306B\u3088\u3063\u3066\u91D1\u92AD\u7684\u306A\u640D\u5BB3\u8CE0\u511F\u8ACB\u6C42\u3067\u306F\u4FEE\u5FA9\u4E0D\u53EF\u80FD\u306A\u307E\u3067\u306E\u640D\u5BB3\u3092COROS\u306B\u5BFE\u3057\u3066\u4E0E\u3048\u308B\u3053\u3068\u3001\u304A\u3088\u3073COROS\u304C\u305D\u306E\u72B6\u6CC1\u306B\u304A\u3044\u3066\u5FC5\u8981\u3001\u9069\u5207\u3068\u307F\u306A\u3059\u5DEE\u6B62\u6551\u6E08\u3084\u8861\u5E73\u6CD5\u4E0A\u306E\u6551\u6E08\u3092\u5F97\u308B\u3053\u3068\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u3053\u308C\u3089\u306E\u6551\u6E08\u306F\u3001COROS\u304C\u6CD5\u5F8B\u4E0A\u307E\u305F\u306F\u8861\u5E73\u6CD5\u4E0A\u6709\u3059\u308B\u305D\u306E\u4ED6\u306E\u6551\u6E08\u306B\u8FFD\u52A0\u3055\u308C\u308B\u3082\u306E\u3067\u3059\u3002\n    COROS\u304C\uFF081\uFF09\u6CD5\u57F7\u884C\u6A5F\u95A2\u306B\u3088\u308B\u8981\u8ACB\uFF082\uFF09\u30E6\u30FC\u30B6\u30FC\u306B\u3088\u308B\u8981\u8ACB\uFF08\u81EA\u4E3B\u7684\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u524A\u9664\uFF09\uFF083\uFF09\u30B5\u30FC\u30D3\u30B9\u3084\u305D\u308C\u3092\u901A\u3058\u3066\u63D0\u4F9B\u3055\u308C\u308B\u30B5\u30FC\u30D3\u30B9\u306E\u4E2D\u6B62\u3084\u5909\u66F4\uFF084\uFF09\u4E88\u671F\u305B\u306C\u6280\u8853\u7684\u554F\u984C\u3084\u305D\u306E\u4ED6\u306E\u554F\u984C\u306B\u3088\u308A\u3001\u72EC\u81EA\u306E\u88C1\u91CF\u306B\u3088\u3063\u3066\u4E88\u544A\u306A\u304F\u30E6\u30FC\u30B6\u30FC\u306E\u30B5\u30FC\u30D3\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u7D42\u4E86\u3067\u304D\u308B\u3053\u3068\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u304C\u672C\u5229\u7528\u898F\u7D04\u306B\u9055\u53CD\u3057\u3066\u5F53\u793E\u304C\u30E6\u30FC\u30B6\u30FC\u306B\u5BFE\u3057\u3066\u4F55\u3089\u304B\u306E\u6CD5\u7684\u63AA\u7F6E\u3092\u8B1B\u3058\u305F\u5834\u5408\u3001\u5F53\u793E\u306F\u5F53\u8A72\u63AA\u7F6E\u306B\u304B\u304B\u308B\u5168\u3066\u306E\u5F01\u8B77\u58EB\u5831\u916C\u3084\u8CBB\u7528\u3092\u30E6\u30FC\u30B6\u30FC\u304B\u3089\u56DE\u53CE\u3059\u308B\u6A29\u5229\u3092\u6709\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u305D\u306E\u652F\u6255\u3044\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u307E\u305F\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u672C\u5229\u7528\u898F\u7D04\u3092\u9055\u53CD\u3057\u3066\u30B5\u30FC\u30D3\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u7981\u3058\u3089\u308C\u305F\u5834\u5408\u3001\u3044\u304B\u306A\u308B\u7B2C\u4E09\u8005\u306B\u5BFE\u3057\u3066\u3082\u8CAC\u4EFB\u3092\u8CA0\u308F\u306A\u3044\u3053\u3068\u306B\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002"
  },
  security: {
    title: 'セキュリティ、デバイスの紛失・故障',
    desc: "\u30E6\u30FC\u30B6\u30FC\u306F\u3001\u3054\u81EA\u8EAB\u306ECOROS\u30C7\u30D0\u30A4\u30B9\u306E\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u306B\u3064\u3044\u3066\u81EA\u5DF1\u8CAC\u4EFB\u3092\u8CA0\u3046\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u3054\u81EA\u8EAB\u306ECOROS\u30C7\u30D0\u30A4\u30B9\u3092\u7D1B\u5931\u3057\u305F\u308A\u30A2\u30AF\u30BB\u30B9\u3092\u5171\u6709\u3057\u305F\u5834\u5408\u3001 COROS\u304C\u3044\u304B\u306A\u308B\u8CAC\u4EFB\u3082\u8CA0\u308F\u306A\u3044\u3053\u3068\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002\u307E\u305F\u3001\u30E6\u30FC\u30B6\u30FC\u304CCOROS\u30C7\u30D0\u30A4\u30B9\u306B\u4E0D\u6B63\u306A\u6539\u9020\u3092\u884C\u3063\u305F\u5834\u5408\u3001COROS\u304C\u3044\u304B\u306A\u308B\u8CAC\u4EFB\u3082\u8CA0\u308F\u306A\u3044\u3053\u3068\u3068\u3057\u307E\u3059\u3002\n    COROS\u30C7\u30D0\u30A4\u30B9\u306E\u7D1B\u5931\u3001\u76D7\u96E3\u306E\u969B\u306F\u3001\u8FD1\u304F\u306E\u4EA4\u756A\u3084\u8B66\u5BDF\u7F72\u306B\u76F8\u8AC7\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u307E\u305F\u3001\u30E6\u30FC\u30B6\u30FC\u304B\u3089COROS\u306B\u9023\u7D61\u3059\u308B\u3053\u3068\u3067\u3001\u30C7\u30D0\u30A4\u30B9\u3092\u30ED\u30C3\u30AF\u3057\u3066\u30C7\u30FC\u30BF\u540C\u671F\u3084\u30B5\u30FC\u30D3\u30B9\u3068\u306E\u63A5\u7D9A\u6A5F\u80FD\u3092\u505C\u6B62\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u7D1B\u5931\u3055\u308C\u305F\u3068\u601D\u308F\u308C\u308B\u843D\u3068\u3057\u7269\u306ECOROS\u30C7\u30D0\u30A4\u30B9\u3092\u767A\u898B\u3057\u305F\u5834\u5408\u3084\u3001\u4E0D\u6B63\u78BA\u306A\u5831\u544A\u306B\u3088\u3063\u3066COROS\u30C7\u30D0\u30A4\u30B9\u304C\u8AA4\u3063\u3066\u30ED\u30C3\u30AF\u3055\u308C\u305F\u5834\u5408\u306F japan@coros.com \u307E\u3067\u3054\u9023\u7D61\u304F\u3060\u3055\u3044\u3002\n    COROS\u306F\uFF081\uFF09\u30E6\u30FC\u30B6\u30FC\u304C\u4E00\u62EC\u3057\u3066\u7DE0\u7D50\u3057\u305F\u5951\u7D04\u306B\u9055\u53CD\u3057\u305F\u5834\u5408\uFF082\uFF09\u30E6\u30FC\u30B6\u30FC\u304C\u4E0D\u6B63\u306A\u6CE8\u6587\u3084\u884C\u70BA\u306E\u5BFE\u8C61\u3068\u306A\u3063\u305F\u5834\u5408\u3001COROS\u30C7\u30D0\u30A4\u30B9\u3092\u30ED\u30C3\u30AF\u3059\u308B\u6A29\u5229\u3092\u6709\u3057\u307E\u3059\u3002\u307E\u305F\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u4E0D\u6B63\u304C\u5831\u544A\u3055\u308C\u305F\u308A\u767A\u899A\u3057\u305F\u308A\u3001COROS\u304C\u30E6\u30FC\u30B6\u30FC\u306E\u4E0D\u6B63\u3092\u7591\u7FA9\u3092\u78BA\u8A8D\u3057\u305F\u5834\u5408\u306F\u3001COROS\u306E\u8ABF\u67FB\u306B\u5354\u529B\u3059\u308B\u3053\u3068\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u540C\u610F\u3059\u308B\u3082\u306E\u3068\u3057\u307E\u3059\u3002"
  },
  orders: {
    title: '注文について',
    desc: "\u5F53\u793E\u306F\u3001\u6CE8\u6587\u78BA\u8A8D\u66F8\u306B\u8A18\u8F09\u3055\u308C\u305F\u672C\u88FD\u54C1\u3084\u672C\u30B5\u30FC\u30D3\u30B9\u3092\u30E6\u30FC\u30B6\u30FC\u306B\u63D0\u4F9B\u3059\u308B\u305F\u3081\u306B\u6700\u5927\u9650\u52AA\u3081\u307E\u3059\u304C\uFF081\uFF09\u5F53\u8A72\u88FD\u54C1\u307E\u305F\u306F\u30B5\u30FC\u30D3\u30B9\u306E\u88FD\u9020\u3084\u8CA9\u58F2\u304C\u7D42\u4E86\u3057\u3066\u3044\u308B\uFF082\uFF09\u95A2\u9023\u90E8\u54C1\u304C\u8ABF\u9054\u3067\u304D\u306A\u3044\uFF083\uFF09\u4FA1\u683C\u306B\u8AA4\u308A\u304C\u3042\u3063\u305F\uFF084\uFF09\u6CE8\u6587\u624B\u7D9A\u304D\u4E2D\u306B\u60AA\u610F\u304C\u3042\u3063\u305F\u7B49\u306E\u7406\u7531\u306B\u3088\u308A\u3001\u5F53\u8A72\u88FD\u54C1\u3084\u30B5\u30FC\u30D3\u30B9\u304C\u63D0\u4F9B\u3067\u304D\u306A\u3044\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002\n    \u3053\u306E\u6642\u3001\u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u306B\u9023\u7D61\u3057\u3066\u8CFC\u5165\u5E0C\u671B\u306E\u4EE3\u66FF\u54C1\uFF08\u540C\u4E00\u4FA1\u683C\u307E\u305F\u306F\u7570\u306A\u308B\u4FA1\u683C\uFF09\u3092\u63D0\u6848\u3059\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u4FA1\u683C\u8A2D\u5B9A\u306B\u8AA4\u308A\u304C\u3042\u308C\u3070\u3001\u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u306B\u6B63\u78BA\u306A\u4FA1\u683C\u3092\u3054\u9023\u7D61\u3057\u307E\u3059\u3002\n    \u30E6\u30FC\u30B6\u30FC\u304C\u4EE3\u66FF\u6848\u3084\u4FA1\u683C\u5909\u66F4\u306B\u540C\u610F\u3067\u304D\u306A\u3044\u5834\u5408\u3001\u5F53\u793E\u306F\u6CE8\u6587\u3092\u53D6\u308A\u6D88\u3057\u3066\u6CE8\u6587\u6642\u306B\u304A\u652F\u6255\u3044\u3044\u305F\u3060\u3044\u305F\u4EE3\u91D1\u3092\u8FD4\u9084\u3057\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u304C\u6CE8\u6587\u3057\u305F\u5546\u54C1\u3084\u30B5\u30FC\u30D3\u30B9\u3092\u304A\u5C4A\u3051\u3067\u304D\u306A\u3044\u5834\u5408\u306B\u306F\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u5BFE\u3057\u3066\u4EE3\u91D1\u306E\u8FD4\u9084\u3092\u884C\u3046\u3053\u3068\u304C\u3001COROS\u306E\u8CAC\u4EFB\u306E\u7BC4\u56F2\u3068\u306A\u308A\u307E\u3059\u3002\u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u306E\u4E0D\u6B63\u884C\u70BA\u3092\u78BA\u8A8D\u3057\u305F\u969B\u306B\u6CE8\u6587\u53D6\u6D88\u306E\u6A29\u5229\u3092\u4E00\u6642\u7684\u306B\u7559\u4FDD\u3057\u3001\u4E0A\u8A18\u306B\u57FA\u3065\u3044\u3066\u6CE8\u6587\u53D6\u6D88\u306E\u65E8\u3092\u901A\u77E5\u3057\u3066\u4EE3\u91D1\u306F\u8FD4\u91D1\u3055\u308C\u307E\u3059\u3002"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/athlete.js
/* harmony default export */ const jp_athlete = ({
  pageTitle: "COROS\u30A8\u30EA\u30FC\u30C8\u30A2\u30B9\u30EA\u30FC\u30C8",
  mobilePageTitle: "COROS\u30A8\u30EA\u30FC\u30C8\u30A2\u30B9\u30EA\u30FC\u30C8",
  pageDesc: "COROS\u30A8\u30EA\u30FC\u30C8\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u30C1\u30FC\u30E0\u306F\u3001\u79C1\u305F\u3061\u306E\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u306E\u30D1\u30EF\u30FC\u30E6\u30FC\u30B6\u30FC\u3067\u3042\u308A\u3001\u4E0D\u53EF\u80FD\u3092\u53EF\u80FD\u306B\u5909\u3048\u3066\u3044\u304F\u3053\u3068\u306B\u60C5\u71B1\u3092\u6301\u3063\u3066\u3044\u307E\u3059\u3002\n\n  \u5F7C\u3089\u306F\u7686\u3001\u4E16\u754C\u3067\u6700\u3082\u904E\u9177\u306A\u74B0\u5883\u4E0B\u306B\u304A\u3044\u3066\u96C6\u4E2D\u7684\u306BCOROS\u88FD\u54C1\u3092\u4F7F\u7528\u3057\u3066\u304D\u307E\u3057\u305F\u3002\u3055\u3089\u306B\u91CD\u8981\u306A\u3053\u3068\u306F\u300C\u4E16\u754C\u4E2D\u306E\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u305F\u3081\u306B\u6700\u9AD8\u306E\u88FD\u54C1\u3092\u4F5C\u308A\u305F\u3044\u300D\u3068\u3044\u3046\u60C5\u71B1\u3092\u79C1\u305F\u3061\u3068\u5171\u6709\u3057\u3066\u3044\u308B\u3053\u3068\u3067\u3059\u3002\n\n  \u307E\u305F\u3001COROS\u306F\u4E16\u754C\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u306E\u9678\u4E0A\u9577\u8DDD\u96E2\u30C1\u30FC\u30E0\u3067\u3042\u308B\u300CNN Running Team\u300D\u306E\u30AA\u30D5\u30A3\u30B7\u30E3\u30EBGPS\u30A6\u30A9\u30C3\u30C1\u30D1\u30FC\u30C8\u30CA\u30FC\u3067\u3042\u308B\u3068\u3044\u3046\u3053\u3068\u3082\u8A87\u308A\u306B\u601D\u3063\u3066\u3044\u307E\u3059\u3002",
  trailAthletes: 'トレイルランナー',
  roadAthletes: 'ロード\nランナー',
  alpineAthletes: '登山家'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/athleteDetails.js
/* eslint-disable no-irregular-whitespace */
/* harmony default export */ const jp_athleteDetails = ({
  more: 'アスリート一覧',
  athletes: 'プロアスリート',
  dane_jackson: {
    name: 'デーン・ジャクソン / Dane Jackson',
    country: 'アメリカ',
    achievement: "\u30FB30m\u4EE5\u4E0A\u306E\u6EDD\u3078\u306E\u767B\u65007\u56DE\n    \u30FB\u30CE\u30FC\u30B9\u30D5\u30A9\u30FC\u30AF\u9078\u624B\u6A29\u512A\u52DD4\u56DE\n    \u30FB\u30DB\u30EF\u30A4\u30C8\u30A6\u30A9\u30FC\u30BF\u30FCGP\u512A\u52DD3\u56DE\n    \u30FB\u30B0\u30EA\u30FC\u30F3\u30EC\u30FC\u30B9\u512A\u52DD4\u56DE\n    \u30FB\u30D5\u30EA\u30FC\u30B9\u30BF\u30A4\u30EB\u4E16\u754C\u738B\u80053\u56DE",
    desc: "\u30C7\u30FC\u30F3\u30FB\u30B8\u30E3\u30AF\u30BD\u30F3\u306F\u3001\u4E16\u754C\u304C\u63D0\u4F9B\u3059\u308B\u6700\u9AD8\u306E\u30AB\u30E4\u30C3\u30AF\u3092\u3044\u304F\u3064\u304B\u4F53\u9A13\u3057\u3066\u304D\u307E\u3057\u305F\u3002\u30AB\u30E4\u30C3\u30AF\u306F\u30C7\u30FC\u30F3\u306E\u5929\u8077\u3067\u3042\u308A\u300120\u5E74\u4EE5\u4E0A\u305D\u308C\u3092\u7D9A\u3051\u3066\u3044\u307E\u3059\u3002\u7C73\u56FD\u30FB\u30C6\u30CD\u30B7\u30FC\u5DDE\u306F\u5F7C\u306E\u62E0\u70B9\u3067\u3059\u304C\u30011\u5E74\u306E\u3046\u30616\u30F6\u6708\u4EE5\u4E0A\u3092\u5F7C\u306E\u30B9\u30DD\u30FC\u30C4\u306B\u6700\u9069\u306A\u5834\u6240\u3001\u30E1\u30AD\u30B7\u30B3\u3001\u30CB\u30E5\u30FC\u30D5\u30A1\u30A6\u30F3\u30C9\u30E9\u30F3\u30C9\u3001\u30B1\u30CB\u30A2\u3001\u30AB\u30CA\u30C0\u306A\u3069\u3078\u306E\u65C5\u306B\u8CBB\u3084\u3057\u3066\u3044\u307E\u3059\u3002\n    \u5F7C\u306E\u597D\u304D\u306A\u5DDD\u306F\u3001\u30B6\u30F3\u30D9\u30B8\u5DDD\u3001\u30AA\u30BF\u30EF\u5DDD\u3001\u30CA\u30A4\u30EB\u5DDD\u3002\u30C7\u30FC\u30F3\u306F\u3001\u7236\u89AA\u306E\u30A8\u30EA\u30C3\u30AF\u30FB\u30B8\u30E3\u30AF\u30BD\u30F3\u306E\u304A\u304B\u3052\u3067\u3001\u73FE\u5728\u306E\u30A2\u30B9\u30EA\u30FC\u30C8\u3068\u3057\u3066\u306E\u5730\u4F4D\u3092\u7BC9\u304F\u3053\u3068\u304C\u3067\u304D\u305F\u3068\u4FE1\u3058\u3066\u3044\u307E\u3059\u3002\u30C7\u30FC\u30F3\u306F\u4E16\u754C\u6700\u9AD8\u306E\u30AA\u30FC\u30EB\u30E9\u30A6\u30F3\u30C9\u30FB\u30DB\u30EF\u30A4\u30C8\u30A6\u30A9\u30FC\u30BF\u30FC\u30FB\u30AB\u30E4\u30C3\u30AB\u30FC\u3068\u8A00\u308F\u308C\u3066\u304A\u308A\u3001\u4E16\u754C\u4E2D\u306E\u5927\u4F1A\u306780\u4EE5\u4E0A\u306E\u512A\u52DD\u3092\u53CE\u3081\u3066\u3044\u307E\u3059\u3002"
  },
  adrian_ballinger: {
    name: 'エイドリアン・バリンジャー \nAdrian Ballinger',
    country: 'アメリカ',
    achievement: "\u30FB\u30A8\u30D9\u30EC\u30B9\u30C8\u3068K2\u3092\u7121\u88DC\u7D66\u3067\u767B\u9802\n    \u30FB\u4E16\u754C\u7B2C8\u4F4D\u306E\u9AD8\u5CF0\u30DE\u30CA\u30B9\u30EB\u3092\u30B9\u30AD\u30FC\u3067\u521D\u6ED1\u964D\n    \u30FB\u30A2\u30EB\u30DA\u30F3\u30B0\u30ED\u30FC\u30FB\u30A8\u30AF\u30B9\u30DA\u30C7\u30A3\u30B7\u30E7\u30F3\u30BA\u3092\u8A2D\u7ACB\n    \u30FB8000m\u7D1A\u306E\u5C71\u306B17\u56DE\u767B\u9802",
    desc: "\u30A8\u30A4\u30C9\u30EA\u30A2\u30F3\u30FB\u30D0\u30EA\u30F3\u30B8\u30E3\u30FC\u306F\u3001\u767B\u5C71\u5BB6\u3001\u30B9\u30AD\u30FC\u30E4\u30FC\u3001\u305D\u3057\u3066\u516C\u8A8D\u5C71\u5CB3\u30AC\u30A4\u30C9\u3068\u3057\u3066\u6D3B\u8E8D\u3057\u3066\u3044\u307E\u3059\u3002\u5F7C\u306F25\u5E74\u306B\u308F\u305F\u3063\u3066\u4E16\u754C\u306E\u9AD8\u5C71\u3067\u306E\u30D7\u30ED\u30AC\u30A4\u30C9\u3068\u3057\u3066\u6D3B\u8E8D\u3057\u3001\u4E16\u754C\u4E2D\u3067\u5E74\u95936000\u4EBA\u4EE5\u4E0A\u3092\u30B9\u30AD\u30FC\u3001\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3001\u767B\u5C71\u306B\u8A98\u3046\u30A2\u30EB\u30DA\u30F3\u30B0\u30ED\u30FC\u30FB\u30A8\u30AF\u30B9\u30DA\u30C7\u30A3\u30B7\u30E7\u30F3\u30BA\u306E\u5275\u8A2D\u8005\u3067\u3082\u3042\u308A\u307E\u3059\u3002\u5F7C\u306F\u3053\u308C\u307E\u3067\u306B6\u5927\u9678\u3067150\u56DE\u4EE5\u4E0A\u306E\u56FD\u969B\u767B\u5C71\u9060\u5F81\u3092\u884C\u3044\u3001\u30A8\u30D9\u30EC\u30B9\u30C88\u5EA7\u3092\u542B\u30808000m\u7D1A\u306E\u5C71\u306717\u5EA7\u306E\u767B\u9802\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002\n    \u30A2\u30B9\u30EA\u30FC\u30C8\u3068\u3057\u3066\u306F\u3001\u30DE\u30CA\u30B9\u30EB\u5C71\u9802\u304B\u3089\u306E\u30B9\u30AD\u30FC\u6ED1\u964D\u3092\u542B\u3081\u30018000m\u7D1A\u306E\u5C71\u3067\u30B9\u30AD\u30FC\u6ED1\u964D\u30923\u5EA6\u6210\u529F\u3055\u305B\u305F\u552F\u4E00\u306E\u30A2\u30E1\u30EA\u30AB\u4EBA\u3067\u3059\u3002\u307E\u305F\u3001\u30A8\u30D9\u30EC\u30B9\u30C8\u3068K2\u306E\u4E21\u65B9\u306B\u88DC\u52A9\u9178\u7D20\u306A\u3057\u3067\u767B\u9802\u3057\u305F4\u4EBA\u76EE\u306E\u30A2\u30E1\u30EA\u30AB\u4EBA\u3067\u3059\u3002\u6700\u8FD1\u3067\u306F\u3001COVID-19\u306E\u30D1\u30F3\u30C7\u30DF\u30C3\u30AF\u306E\u5F71\u97FF\u30671\u5E74\u9593\u306F\u30ED\u30C3\u30AF\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u306B\u96C6\u4E2D\u3057\u305F\u5F8C\u3001\u30F4\u30A1\u30FC\u30B8\u30F3\u30FB\u30EA\u30D0\u30FC\u30FB\u30B4\u30FC\u30B8\u3067\u521D\u306E8a/5.13b\u3001Fall of Man\u3092\u767B\u6500\u3057\u307E\u3057\u305F\u3002"
  },
  kilian_journet: {
    name: 'キリアン・ジョルネ / Kilian Jornet',
    country: 'スペイン',
    achievement: "\u30FBUTMB \u512A\u52DD4\u56DE / \u5927\u4F1A\u8A18\u9332\u4FDD\u6301\u8005\uFF0819\u6642\u959349\u520630\u79D2\uFF09\n    \u30FBHardrock 100 \u512A\u52DD5\u56DE / \u5927\u4F1A\u8A18\u9332\u4FDD\u6301\u8005\uFF0821\u6642\u959336\u520624\u79D2\uFF09\n    \u30FB\u6570\u591A\u304F\u306ESkyrunner World Series\u30EC\u30FC\u30B9\u3067\u306E\u512A\u52DD\n    \u30FB\u5C71\u5CB3\u30B9\u30AD\u30FC\u7AF6\u6280\uFF08\u30B9\u30AD\u30FC\u30E2\uFF09\u4E16\u754C\u9078\u624B\u6A29\u512A\u52DD4\u56DE",
    desc: "\u30AD\u30EA\u30A2\u30F3\u30FB\u30B8\u30E7\u30EB\u30CD\u307B\u3069\u3001\u30AA\u30FC\u30EB\u30E9\u30A6\u30F3\u30C9\u306A\u30DE\u30A6\u30F3\u30C6\u30F3\u30A2\u30B9\u30EA\u30FC\u30C8\u306F\u4E16\u754C\u306B\u306F\u3044\u306A\u3044\u3067\u3057\u3087\u3046\u3002\u30D5\u30E9\u30F3\u30B9\u3068\u30B9\u30DA\u30A4\u30F3\u306E\u56FD\u5883\u306B\u4F4D\u7F6E\u3059\u308B\u30D4\u30EC\u30CD\u30FC\u5C71\u8108\u3067\u80B2\u3063\u305F\u30AD\u30EA\u30A2\u30F3\u306F\u3001\u308F\u305A\u304B3\u6B73\u306E\u6642\u306B\u767B\u5C71\u3092\u958B\u59CB\u300210\u4EE3\u5F8C\u534A\u3067\u30DE\u30A6\u30F3\u30C6\u30F3 / \u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u30B7\u30FC\u30F3\u306B\u767B\u5834\u3057\u30012007\u5E74\u306B\u306F\u30B9\u30AB\u30A4\u30E9\u30F3\u30CB\u30F3\u30B0\u30FB\u30EF\u30FC\u30EB\u30C9\u30B7\u30EA\u30FC\u30BA\u306E\u30EC\u30FC\u30B9\u3067\u901A\u7B9710\u56DE\u76EE\u306E\u512A\u52DD\u3092\u679C\u305F\u3057\u307E\u3057\u305F\u3002\n    2008\u30012009\u30012011\u5E74\u306EUTMB\u3067\u512A\u52DD\u3057\u3001Western States\u3001Sierre-Zinal\u3001Pikes Peak Marathon\u3001Zegama\u3001Hardrock 100\u3001Marathon du Mont Blanc\u306A\u3069\u3001\u5F7C\u304C\u3053\u308C\u307E\u3067\u306B\u512A\u52DD\u3057\u3066\u3044\u306A\u3044\u30E1\u30B8\u30E3\u30FC\u306A\u5C71\u5CB3\u30FB\u30C8\u30EC\u30A4\u30EB\u30EC\u30FC\u30B9\u306F\u307B\u3068\u3093\u3069\u306A\u3044\u3067\u3057\u3087\u3046\u3002\u307E\u305F\u3001\u30AD\u30EA\u30A2\u30F3\u304C\u30A2\u30B9\u30EA\u30FC\u30C8\u3068\u3057\u3066\u7279\u5225\u306A\u306E\u306F\u3001\u30E9\u30F3\u30CB\u30F3\u30B0\u3060\u3051\u3067\u306A\u304F\u5C71\u5CB3\u30B9\u30AD\u30FC\u7AF6\u6280\uFF08\u30B9\u30AD\u30FC\u30E2\uFF09\u306B\u304A\u3044\u3066\u3082\u4E16\u754C\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u3067\u3042\u308B\u3053\u3068\u3067\u3059\u3002"
  },
  emelie_forsberg: {
    name: 'エミール・フォースバーグ \nEmelie Forsberg',
    country: 'スウェーデン',
    achievement: "\u30FBSkyrunner World Series\u90E8\u9580\u738B\u80054\u56DE\n    \u30FB\u5C71\u5CB3\u30B9\u30AD\u30FC\u7AF6\u6280\u4E16\u754C\u9078\u624B\u6A29\u30E1\u30C0\u30EB\u7372\u5F976\u56DE\n    \u30FBTransvulcania 73 km\u512A\u52DD2\u56DE\n    \u30FB\u6570\u3005\u306E\u30B3\u30FC\u30B9\u3067\u306EFKT\u4FDD\u6301\u8005",
    desc: "\u30B9\u30A6\u30A7\u30FC\u30C7\u30F3\u3092\u4EE3\u8868\u3059\u308B\u30C8\u30C3\u30D7\u30B9\u30EA\u30FC\u30C8\u306E\u30A8\u30E1\u30EA\u30FC\u30FB\u30D5\u30A9\u30FC\u30B9\u30D0\u30FC\u30B0\u306F\u3001\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3068\u5C71\u5CB3\u30B9\u30AD\u30FC\u7AF6\u6280\u3092\u4E2D\u5FC3\u306B\u3001\u4E16\u754C\u3067\u6700\u3082\u512A\u308C\u305F\u7DCF\u5408\u5C71\u5CB3\u30A2\u30B9\u30EA\u30FC\u30C8\u306E1\u4EBA\u3067\u3059\u3002\u30A8\u30E1\u30EA\u30FC\u306F\u3082\u3068\u3082\u3068\u767B\u5C71\u5BB6\u3067\u3057\u305F\u304C\u3001\u7D14\u7C8B\u306B\u697D\u3057\u3080\u305F\u3081\u306B\u5C71\u3092\u8D70\u308B\u3088\u3046\u306B\u306A\u308A\u30012009\u5E74\u306B\u521D\u3081\u3066\u672C\u683C\u7684\u306A\u30C8\u30EC\u30A4\u30EB\u30EC\u30FC\u30B9\u306B\u51FA\u5834\u3057\u3066\u4EE5\u6765\u3001\u30D0\u30FC\u30C6\u30A3\u30AB\u30EB\u30AD\u30ED\u30E1\u30FC\u30BF\u30FC\u304B\u3089100\u30DE\u30A4\u30EB\u307E\u3067\u306E\u8DDD\u96E2\u3067\u4E16\u754C\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u306E\u6210\u7E3E\u3092\u53CE\u3081\u3066\u3044\u307E\u3059\u3002\n    \u307E\u305F\u3001\u30A8\u30E1\u30EA\u30FC\u306E\u5C71\u5CB3\u30B9\u30AD\u30FC\u7AF6\u6280\u306E\u30AD\u30E3\u30EA\u30A2\u306F\u30012012\u5E74\u306B\u501F\u308A\u7269\u306E\u30B9\u30AD\u30FC\u677F\u3092\u4F7F\u3063\u3066\u30EC\u30FC\u30B9\u306B\u53C2\u52A0\u3057\u30663\u4F4D\u3068\u306A\u3063\u305F\u3053\u3068\u304B\u3089\u59CB\u307E\u308A\u3001\u305D\u308C\u4EE5\u6765\u3001\u6B27\u5DDE\u9078\u624B\u6A29\u3084\u4E16\u754C\u9078\u624B\u6A29\u3067\u8868\u5F70\u53F0\u306B\u4E0A\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F\u3002"
  },
  emma_coburn: {
    name: 'エマ・コバーン / Emma Coburn',
    country: 'アメリカ',
    achievement: "\u30FB2016\u5E74\u30EA\u30AA\u4E94\u8F2A3\u4F4D\uFF083000mSC\u3001\u4EE5\u4E0B\u5168\u3066\u540C\u7A2E\u76EE\uFF09\n    \u30FB2017\u5E74\u30ED\u30F3\u30C9\u30F3\u4E16\u754C\u9078\u624B\u6A29\u512A\u52DD\n    \u30FB2019\u5E74\u30C9\u30FC\u30CF\u4E16\u754C\u9078\u624B\u6A292\u4F4D\n    \u30FB\u5168\u7C73\u9078\u624B\u6A29\u512A\u52DD10\u56DE",
    desc: "\u30A8\u30DE\u30FB\u30B3\u30D0\u30FC\u30F3\u306F\u7C73\u56FD\u30FB\u30B3\u30ED\u30E9\u30C9\u5DDE\u51FA\u8EAB\u3067\u3001\u5730\u5143\u306E\u30B3\u30ED\u30E9\u30C9\u5927\u5B66\u6642\u4EE3\u306B\u5168\u7C73\u9078\u624B\u6A29\u30922\u9023\u8987\u3002\u5F7C\u5973\u306E\u5C02\u9580\u7A2E\u76EE\u3067\u3042\u308B3000mSC\u3067\u306F\u3001\u5168\u7C73\u9078\u624B\u6A29\u306710\u56DE\u512A\u52DD\u3001\u30EA\u30AA\u4E94\u8F2A\u3067\u9285\u30E1\u30C0\u30EB\u30012017\u5E74\u4E16\u754C\u9078\u624B\u6A29\u512A\u52DD\u30012019\u5E74\u4E16\u754C\u9078\u624B\u6A29\u9280\u30E1\u30C0\u30EB\u3068\u7D20\u6674\u3089\u3057\u3044\u5B9F\u7E3E\u3092\u6301\u3063\u3066\u3044\u307E\u3059\u3002\n    \u30A8\u30DE\u306F\u3001\u5168\u7C73\u30C8\u30C3\u30D7\u30B3\u30FC\u30C1\u306E1\u4EBA\u3067\u3042\u308B\u592B\u306E\u30B8\u30E7\u30FC\u30FB\u30DC\u30B9\u30CF\u30FC\u30C9\u304C\u30B3\u30FC\u30C1\u3092\u52D9\u3081\u308B\u201CTeam BOSS\u201D\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u3057\u3066\u304A\u308A\u3001\u30DC\u30EB\u30C0\u30FC\u3092\u62E0\u70B9\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u307E\u305F\u3001\u305D\u306E\u4ED6\u306E\u6D3B\u52D5\u3068\u3057\u3066\u3001\u6599\u7406\u672C\uFF08Runner's Kitchen\uFF09\u306E\u51FA\u7248\u3084\u3001\u304C\u3093\u60A3\u8005\u3078\u306E\u5BC4\u4ED8\u3092\u52DF\u3063\u305F\u30ED\u30FC\u30C9\u30EC\u30FC\u30B9\uFF08Emma Coburn's Elk Run 5k\uFF09\u306E\u958B\u50AC\u306A\u3069\u3001\u8D77\u696D\u5BB6\u3068\u3057\u3066\u3082\u30A4\u30F3\u30B9\u30D4\u30EC\u30FC\u30B7\u30E7\u30F3\u3092\u4E0E\u3048\u3001\u591A\u304F\u306E\u4EBA\u3005\u306E\u30ED\u30FC\u30EB\u30E2\u30C7\u30EB\u3068\u306A\u3063\u3066\u3044\u307E\u3059\u3002"
  },
  emily_infeld: {
    name: 'エミリー・インフェルド / Emily Infeld',
    country: 'アメリカ',
    achievement: "\u30FB2015\u5E74\u5317\u4EAC\u4E16\u754C\u9078\u624B\u6A293\u4F4D\uFF0810000m\uFF09\n    \u30FB2016\u5E74\u30EA\u30AA\u4E94\u8F2A11\u4F4D\uFF0810000m\uFF09\n    \u30FB2017\u5E74\u30ED\u30F3\u30C9\u30F3\u4E16\u754C\u9078\u624B\u6A296\u4F4D\uFF0810000m\uFF09\n    \u30FB2022\u5E74\u30AA\u30EC\u30B4\u30F3\u4E16\u754C\u9078\u624B\u6A2914\u4F4D\uFF085000m\uFF09",
    desc: "\u7C73\u56FD\u30FB\u30AA\u30CF\u30A4\u30AA\u5DDE\u51FA\u8EAB\u306E\u30A8\u30DF\u30EA\u30FC\u30FB\u30A4\u30F3\u30D5\u30A7\u30EB\u30C9\u306F\u3001\u30B8\u30E7\u30FC\u30B8\u30BF\u30A6\u30F3\u5927\u5B66\u30672012\u5E74\u306B\u5168\u7C73\u5B66\u751F\u5BA4\u5185\u9078\u624B\u6A29\u306E3000m\u3067\u512A\u52DD\u3057\u3001\u305D\u306E\u5F8C\u306E\u30D7\u30ED\u30AD\u30E3\u30EA\u30A2\u3067\u306F2015\u5E74\u4E16\u754C\u9078\u624B\u6A29\u306E10000m\u3067\u9285\u30E1\u30C0\u30EB\u3092\u7372\u5F97\u3057\u307E\u3057\u305F\u3002\u305D\u306E\u5F8C\u3082\u5168\u7C73\u4EE3\u8868\u9078\u624B\u3068\u3057\u30663\u56DE\u306E\u4E16\u754C\u5927\u4F1A\u51FA\u5834\u3092\u679C\u305F\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  eliud_kipchoge: {
    name: 'エリウド・キプチョゲ / Eliud Kipchoge',
    country: 'ケニア',
    countryIcon: 'kenya',
    achievement: "\u30FB\u30DE\u30E9\u30BD\u30F3\u3067\u4E94\u8F2A\u306E\u9023\u8987\u3092\u9054\u6210\uFF082016\u5E74\u30EA\u30AA / 2021\u5E74\u6771\u4EAC\uFF09\n    \u30FB\u7537\u5B50\u30DE\u30E9\u30BD\u30F3\u4E16\u754C\u8A18\u9332\u4FDD\u6301\u8005\uFF082\u6642\u959301\u520609\u79D2\uFF1A2022\u5E74\u30D9\u30EB\u30EA\u30F3\uFF09\n    \u30FB\u975E\u516C\u8A8D\u6761\u4EF6\u3067\u306E\u30DE\u30E9\u30BD\u30F3\u30B5\u30D62\u9054\u6210\uFF081\u6642\u959359\u520640\u79D2\uFF1A2019\u5E74\u30A6\u30A3\u30FC\u30F3\uFF09\n    \u30FB\u30EF\u30FC\u30EB\u30C9\u30DE\u30E9\u30BD\u30F3\u30E1\u30B8\u30E3\u30FC\u30BA\u901A\u7B9710\u52DD\uFF084\u52DD\uFF1A\u30ED\u30F3\u30C9\u30F3\u3001\u30D9\u30EB\u30EA\u30F3 / 1\u52DD\uFF1A\u6771\u4EAC\u3001\u30B7\u30AB\u30B4\uFF09",
    desc: "\u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u306E\u5EA7\u53F3\u306E\u9298\u306F \u201CNo Human is Limited\u201D \u3067\u3059\u3002\u5F7C\u304C18\u6B73\u306E\u6642\u3001\u30D1\u30EA\u4E16\u754C\u9078\u624B\u6A29\u306E5000m\u3067\u512A\u52DD\u3092\u679C\u305F\u3057\u3001\u540C\u7A2E\u76EE\u3067\u306F\u305D\u306E\u5F8C\u4E94\u8F2A\u30672\u56DE\u3001\u4E16\u754C\u9078\u624B\u6A29\u30671\u56DE\u306E\u30E1\u30C0\u30EB\u3092\u7372\u5F97\u3057\u307E\u3057\u305F\u3002\n    \u5F7C\u306E\u30DE\u30E9\u30BD\u30F3\u30C7\u30D3\u30E5\u30FC\u306F28\u6B73\u3067\u3001\u305D\u306E\u5F8C\u306F\u4FE1\u3058\u3089\u308C\u306A\u3044\u6210\u7E3E\u3092\u91CD\u306D\u3066\u3044\u304D\u307E\u3059\u3002\u516C\u8A8D\u5927\u4F1A\u3067\u30DE\u30E9\u30BD\u30F317\u622615\u52DD\uFF082023\u5E741\u6708\u73FE\u5728\uFF09\u3001\u3046\u3061\u30EF\u30FC\u30EB\u30C9\u30DE\u30E9\u30BD\u30F3\u30E1\u30B8\u30E3\u30FC\u30BA\u901A\u7B9710\u52DD\u3001\u4E94\u8F2A\u306E\u9023\u8987\u30012\u56DE\u306E\u4E16\u754C\u8A18\u9332\u66F4\u65B0\u3002\u307E\u305F\u3001\u975E\u516C\u8A8D\u3067\u3059\u304C2019\u5E74\u306B\u306F\u4EBA\u985E\u521D\u306E\u30DE\u30E9\u30BD\u30F3\u30B5\u30D62\u3092\u30A6\u30A3\u30FC\u30F3\u306E\u5730\u3067\u9054\u6210\u3057\u307E\u3057\u305F\u3002\n    \u73FE\u5728\u30013\u4EBA\u306E\u5B50\u4F9B\u3092\u6301\u3064\u7236\u3067\u3082\u3042\u308B\u30A8\u30EA\u30A6\u30C9\u306F\u30B1\u30CB\u30A2\u306E\u30A8\u30EB\u30C9\u30EC\u30C3\u30C8\u306B\u5C45\u3092\u69CB\u3048\u3066\u3044\u307E\u3059\u304C\u30011\u9031\u9593\u306E\u3046\u30616\u65E5\u306F\u30A8\u30EB\u30C9\u30EC\u30C3\u30C8\u90CA\u5916\u306E\u5408\u5BBF\u6240\u3067\u30C1\u30FC\u30E0\u30E1\u30A4\u30C8\u3068\u5BDD\u98DF\u3092\u5171\u306B\u3057\u3066\u3044\u307E\u3059\u3002\u5F7C\u306F\u30B1\u30CB\u30A2\u3067\u82F1\u96C4\u7684\u306A\u9078\u624B\u3067\u3042\u308A\u3001\u591A\u304F\u306E\u9078\u624B\u306E\u76EE\u6A19\u30FB\u30E1\u30F3\u30BF\u30FC\u306E\u5B58\u5728\u3067\u3042\u308A\u7D9A\u3051\u3066\u3044\u307E\u3059\u3002"
  },
  molly: {
    name: 'モリー・サイデル / Molly Seidel',
    country: 'アメリカ',
    achievement: "\u30FB\u6771\u4EAC\u4E94\u8F2A\u5973\u5B50\u30DE\u30E9\u30BD\u30F3\u9285\u30E1\u30C0\u30EA\u30B9\u30C8\n    \u30FB\u5168\u7C73\u5B66\u751F\u9078\u624B\u6A29\u512A\u52DD4\u56DE\uFF0810000m\u3001\u30AF\u30ED\u30AB\u30F38km\u3001\u5BA4\u51853000 / 5000m\uFF09\n    \u30FB2021\u5E74New York City\u30DE\u30E9\u30BD\u30F34\u4F4D\uFF082\u6642\u959324\u520642\u79D2\uFF09\u7C73\u56FD\u9078\u624B\u306B\u3088\u308B\u540C\u5927\u4F1A\u3067\u306E\u6B74\u4EE3\u6700\u9AD8\u8A18\u9332",
    desc: "\u30E2\u30EA\u30FC\u30FB\u30B5\u30A4\u30C7\u30EB\u306F\u3001\u5F37\u3044\u610F\u5FD7\u30FB\u5FCD\u8010\u3092\u6301\u3064\u30DE\u30E9\u30BD\u30F3\u9078\u624B\u3067\u3059\u3002Full Send\uFF08\u5168\u529B\u3092\u5C3D\u304F\u3059\uFF09\u3068\u3044\u3046\u5EA7\u53F3\u306E\u9298\u3092\u6301\u3061\u307E\u3059\u3002\u5F7C\u5973\u306F2020\u5E74\u306E\u6771\u4EAC\u4E94\u8F2A\u5168\u7C73\u30DE\u30E9\u30BD\u30F3\u9078\u8003\u4F1A\u306B\u51FA\u5834\u3057\u3001\u30DE\u30E9\u30BD\u30F3\u30C7\u30D3\u30E5\u30FC\u306A\u304C\u3089\u30822\u4F4D\u306B\u5165\u308A\u3001\u5168\u7C73\u4EE3\u8868\u3068\u3057\u3066\u7FCC\u5E74\u306E\u6771\u4EAC\u4E94\u8F2A\u3067\u9285\u30E1\u30C0\u30EB\u3092\u7372\u5F97\u3057\u307E\u3057\u305F\u3002\n    \u30E2\u30EA\u30FC\u306F\u9AD8\u6821\u6642\u4EE3\u306B\u30AF\u30ED\u30B9\u30AB\u30F3\u30C8\u30EA\u30FC\u3067\u5168\u7C73\u9AD8\u6821\u30C8\u30C3\u30D7\u306E\u6210\u7E3E\u3092\u53CE\u3081\u3001\u30CE\u30FC\u30C8\u30EB\u30C0\u30E0\u5927\u5B66\u3067\u306F\u5168\u7C73\u5B66\u751F\u9078\u624B\u6A29\u30674\u56DE\u512A\u52DD\u3057\u305F\u7D4C\u6B74\u306E\u6301\u3061\u4E3B\u3067\u3059\u3002\u73FE\u5728\u3001\u5F7C\u5973\u306F\u7C73\u56FD\u30FB\u30A2\u30EA\u30BE\u30CA\u5DDE\u30D5\u30E9\u30C3\u30B0\u30B9\u30BF\u30C3\u30D5\u306EVerde Track Club\u3067\u3001\u540C\u3058\u304FCOROS\u5951\u7D04\u9078\u624B\u306E\u30B0\u30EC\u30A4\u30BD\u30F3\u30FB\u30DE\u30FC\u30D5\u30A3\u30FC\u3089\u3068\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3063\u3066\u3044\u307E\u3059\u3002"
  },
  desiree_linden: {
    name: 'デズリー・リンデン / Desiree Linden',
    country: 'アメリカ',
    achievement: "\u30FB2010\u5E74\u30B7\u30AB\u30B4\u30DE\u30E9\u30BD\u30F32\u4F4D\n    \u30FB2011\u5E74\u30DC\u30B9\u30C8\u30F3\u30DE\u30E9\u30BD\u30F32\u4F4D\n    \u30FB2016\u5E74\u30EA\u30AA\u4E94\u8F2A7\u4F4D\n    \u30FB2018\u5E74\u30DC\u30B9\u30C8\u30F3\u30DE\u30E9\u30BD\u30F3\u512A\u52DD",
    desc: "2018\u5E744\u6708\u3001\u30C7\u30BA\u30EA\u30FC\u30FB\u30EA\u30F3\u30C7\u30F3\u306F\u5F37\u3044\u5411\u304B\u3044\u98A8\u3068\u96E8\u306B\u6253\u305F\u308C\u306A\u304C\u3089\u3001\u30A2\u30E1\u30EA\u30AB\u306E\u5973\u5B50\u9078\u624B\u3068\u3057\u3066\u306F33\u5E74\u3076\u308A\u306B\u30DC\u30B9\u30C8\u30F3\u30DE\u30E9\u30BD\u30F3\u306E\u512A\u52DD\u3092\u679C\u305F\u3057\u307E\u3057\u305F\u3002\u305D\u3057\u3066\u3001100\u5E74\u4EE5\u4E0A\u306E\u9577\u3044\u6B74\u53F2\u3092\u6301\u3064\u3053\u306E\u5927\u4F1A\u53F2\u4E0A\u306B\u304A\u3044\u3066\u3001\u6700\u60AA\u306E\u6C17\u8C61\u6761\u4EF6\u3067\u306E\u512A\u52DD\u3060\u3063\u305F\u3053\u3068\u3082\u3042\u3063\u3066\u591A\u304F\u306E\u4EBA\u3005\u306E\u8A18\u61B6\u306B\u6B8B\u308A\u307E\u3057\u305F\u3002\n    \u30AB\u30EA\u30D5\u30A9\u30EB\u30CB\u30A2\u5DDE\u30FB\u30B5\u30F3\u30C7\u30A3\u30A8\u30B4\u51FA\u8EAB\u306E\u30C7\u30BA\u30EA\u30FC\u306F\u3001\u9AD8\u6821\u6642\u4EE3\u306B\u5DDE\u9078\u624B\u6A29\u3067\u512A\u52DD\u3002\u30A2\u30EA\u30BE\u30CA\u5DDE\u7ACB\u5927\u5B66\u3067\u3082\u5730\u533A\u5B66\u751F\u9078\u624B\u6A29\u3067\u597D\u6210\u7E3E\u3092\u53CE\u3081\u307E\u3057\u305F\u3002\u5352\u696D\u5F8C\u306F\u30DF\u30B7\u30AC\u30F3\u5DDE\u3092\u62E0\u70B9\u306B\u30DE\u30E9\u30BD\u30F3\u9078\u624B\u3068\u3057\u3066\u9577\u671F\u9593\u306E\u6D3B\u8E8D\u3092\u307F\u305B\u3066\u3044\u307E\u3059\u3002\n    \u81EA\u3089\u3092\u30D9\u30FC\u30B3\u30F3\u30D5\u30EA\u30FC\u30AF\u3068\u540D\u4E57\u308B\u5F7C\u5973\u306E\u8DA3\u5473\u306F\u3001\u8AAD\u66F8\u3084\u57F7\u7B46\u3001\u5404\u7A2E\u30A6\u30A4\u30B9\u30AD\u30FC\u306E\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3001\u81EA\u3089\u306E\u30D6\u30E9\u30F3\u30C9\u3067\u3042\u308BLINDEN x TWO\u30B3\u30FC\u30D2\u30FC\u3092\u98F2\u3080\u3053\u3068\u3001\u91CE\u7403\u89B3\u6226\u3001\u97F3\u697D\u9451\u8CDE\u306A\u3069\u3002\u305D\u3057\u3066\u3001\u5F7C\u5973\u306E\u3082\u30461\u3064\u306E\u697D\u3057\u307F\u306F\u3001\u540C\u3058\u304F\u30DE\u30E9\u30BD\u30F3\u30E9\u30F3\u30CA\u30FC\u306E\u592B\u3067\u3042\u308B\u30E9\u30A4\u30A2\u30F3\u30FB\u30EA\u30F3\u30C7\u30F3\u3092\u30E9\u30F3\u30CB\u30F3\u30B0\u4E2D\u306B\u8FFD\u3044\u629C\u304F\u3053\u3068\u3067\u3059\u3002"
  },
  grayson_murphy: {
    name: 'Grayson Murphy',
    country: 'アメリカ',
    achievement: "NCAA\u5168\u7C73\u30D5\u30A1\u30FC\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D75\u56DE\u3000\u30E6\u30BF\u5927\u5B66\n    2019\u5E74Boilermaker\uFF08\u30DC\u30A4\u30E9\u30FC\u30E1\u30FC\u30AB\u30FC\uFF0915\u30AD\u30ED\u3000\u7C73\u56FD\u9078\u624B2\u4F4D\n    \u30E6\u30BF\u5927\u5B66\u8A18\u9332\u4FDD\u6301\u8005\u20133,000m\u969C\u5BB3\u7269\u7AF6\u8D70\u30015,000m\uFF08\u5C4B\u5185\u30FB\u5C4B\u5916\uFF09\u300110000m",
    desc: "Grayson\uFF08\u30B0\u30EC\u30A4\u30BD\u30F3\uFF09\u306F\u6545\u90F7\u306E\u30E6\u30BF\u5DDE\u30BD\u30EB\u30C8\u30EC\u30A4\u30AF\u30B7\u30C6\u30A3\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3044\u3001\u30A2\u30A4\u30C0\u30DB\u9577\u8DDD\u96E2\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30E1\u30F3\u30D0\u30FC\u3068\u3057\u3066\u30ED\u30FC\u30C9\u30EC\u30FC\u30B9\u3068\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3092\u4E2D\u5FC3\u306B\u6D3B\u52D5\u3057\u3066\u3044\u307E\u3059\u3002\n    2018\u5E74\u306B\u30E6\u30BF\u5927\u5B66\u3092\u5352\u696D\u3057\u3001\u571F\u6728\u5DE5\u5B66\u306E\u5B66\u58EB\u53F7\u3092\u53D6\u5F97\u3057\u3066\u3044\u307E\u3059\u3002\u5728\u5B66\u4E2D\u3001\u30ED\u30FC\u30C9\u30EC\u30FC\u30B9\u3068\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u30675\u56DE\u3001\u5168\u7C73\u30D9\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D7\u306B\u5165\u308A\u307E\u3057\u305F\u3002\u500B\u4EBA\u30EC\u30FC\u30B9\u8A18\u9332\u306F\u300110\u30AD\u30ED\u3067\u306F32:28\u30015\u30AD\u30ED\u3067\u306F15:44\u30013000m\u969C\u5BB3\u7269\u3067\u306F9:44\u3067\u3059\u3002\n    \u6700\u8FD1\u3067\u306F\u3001\u30CB\u30E5\u30FC\u30E8\u30FC\u30AF\u5DDE\u30A6\u30C6\u30A3\u30AB\u3067\u958B\u50AC\u3055\u308C\u305F\u7C73\u56FD\u6700\u5927\u7D1A\u306E15\u30AD\u30ED\u30EC\u30FC\u30B9\u3067\u3042\u308B\u30DC\u30A4\u30E9\u30FC\u30E1\u30FC\u30AB\u30FC15\u30AD\u30ED\u30672\u4F4D\u3092\u7372\u5F97\u3057\u307E\u3057\u305F\u3002\u4ECA\u5F8C\u306B\u3064\u3044\u3066\u306F\u3001\u3059\u3079\u3066\u306E\u81EA\u5DF1\u30D9\u30B9\u30C8\u8A18\u9332\u3092\u66F4\u65B0\u3057\u3001\u3055\u307E\u3056\u307E\u306A\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3084\u5C71\u5CB3\u30EC\u30FC\u30B9\u3078\u306E\u53C2\u52A0\u306B\u610F\u6C17\u8FBC\u307F\u3092\u898B\u305B\u3066\u3044\u307E\u3059\u3002"
  },
  emma_bates: {
    name: 'Emma Bates',
    country: 'アメリカ',
    achievement: "2019\u5E74\u30B7\u30AB\u30B4\u30DE\u30E9\u30BD\u30F3\u7C73\u56FD\u9078\u624B1\u4F4D\n    2019\u5E74\u5168\u7C73\u30DE\u30E9\u30BD\u30F3\u512A\u52DD\n    NCAA D1\u5168\u7C73\u30D9\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D712\u56DE\n    2014\u5E74NCAA D1 10000m\u512A\u52DD",
    desc: "Emma\uFF08\u30A8\u30DE\uFF09\u306F\u30A2\u30A4\u30C0\u30DB\u5DDE\u30DC\u30A4\u30B7\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3044\u3001\u30A2\u30A4\u30C0\u30DB\u5DDE\u9577\u8DDD\u96E2\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30E1\u30F3\u30D0\u30FC\u3067\u3001\u4E2D\u9577\u8DDD\u96E2\u30ED\u30FC\u30C9\u30EC\u30FC\u30B9\u3092\u4E2D\u5FC3\u306B\u6D3B\u52D5\u3057\u3066\u3044\u307E\u3059\u3002\u30DC\u30A4\u30B7\u5DDE\u7ACB\u5927\u5B66\u3092\u5352\u696D\u3057\u3001NCAA D1\u5168\u7C73\u30D9\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D7\u306B12\u56DE\u9078\u51FA\u3055\u308C\u3066\u304A\u308A\u3001\u307E\u305F2014\u5E74\u306B\u306F10000m\u5927\u4F1A\u3067NCAA\u512A\u52DD\u3092\u679C\u305F\u3057\u307E\u3057\u305F\u3002\n    \u305D\u306E\u5F8C\u30012018\u5E74\u306E\u5168\u7C73\u5973\u5B50\u30DE\u30E9\u30BD\u30F3\u9078\u624B\u6A29\u3067\u512A\u52DD\u3057\u3001\u3055\u3089\u306B2019\u5E74\u306E\u30B7\u30AB\u30B4\u30DE\u30E9\u30BD\u30F3\u3067\u30822:25:27\u306E\u81EA\u5DF1\u30D9\u30B9\u30C8\u30BF\u30A4\u30E0\u30674\u4F4D\u306B\u5165\u8CDE\u3057\u3066\u3044\u307E\u3059\u3002\u30A8\u30DE\u306F\u305D\u306E\u81EA\u7531\u5954\u653E\u306A\u30B9\u30BF\u30A4\u30EB\u3067\u5168\u7C73\u30C8\u30C3\u30D7\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u4E00\u4EBA\u3068\u306A\u308A\u3001\u884C\u304F\u5148\u306B\u306F\u6BD4\u985E\u306E\u306A\u3044\u660E\u308B\u3044\u672A\u6765\u304C\u5F85\u3063\u3066\u3044\u308B\u3053\u3068\u3067\u3057\u3087\u3046\u3002"
  },
  parker_stinson: {
    name: 'Parker Stinson',
    country: 'アメリカ',
    achievement: "2019\u5E7425\u30AD\u30ED\u8D70\u5168\u7C73\u8A18\u9332\u4FDD\u6709\u8005\n    2019\u5E74\u30B7\u30AB\u30B4\u30DE\u30E9\u30BD\u30F3\u2013\uFF08\u7C73\u56FD\u9078\u624B1\u4F4D\uFF09\n    NCAA D1\u5168\u7C73\u30D9\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D79\u56DE\u9078\u51FA",
    desc: "Parker\uFF08\u30D1\u30FC\u30AB\u30FC\uFF09\u306F\u5168\u7C7325\u30AD\u30ED\u8D70\u306E\u8A18\u9332\u4FDD\u6301\u8005\u3067\u3001\u30B3\u30ED\u30E9\u30C9\u5DDE\u30DC\u30EB\u30C0\u30FC\u5728\u4F4F\u3067\u3059\u3002\u30AA\u30EC\u30B4\u30F3\u5927\u5B66\u6642\u4EE3\u3001\u5168\u7C73\u30D9\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D7\u306B9\u56DE\u9078\u51FA\u3055\u308C\u3001NCAA\u9078\u624B\u6A295000m\u3067\u306F2\u5E74\u9023\u7D9A\u30673\u4F4D\u3092\u7372\u5F97\u3057\u307E\u3057\u305F\u3002\u30D1\u30FC\u30AB\u30FC\u306F\u82E5\u3044\u9803\u3001\u30E6\u30FC\u30B9\u90E8\u9580\uFF08U19\uFF0910000m\u30673\u56DE\u306E\u512A\u52DD\u3092\u679C\u305F\u3057\u3066\u3044\u307E\u3059\u3002\n    \u6700\u8FD1\u306E\u6210\u7E3E\u3068\u3057\u3066\u306F\u30012019\u5E74\u306E\u5168\u7C73\u9678\u4E0A\u7AF6\u6280\u9023\u76DF25\u30AD\u30ED\u3067\u306E\u512A\u52DD\u3084\u30012019\u5E74\u306E\u30B7\u30AB\u30B4\u30DE\u30E9\u30BD\u30F3\u3067\u306F2:10:53\u3067\u500B\u4EBAPB\u3092\u66F4\u65B0\u3057\u3001\u5168\u7C73\u9078\u624B\u306E\u4E2D\u3067\u30C8\u30C3\u30D7\u306B\u7ACB\u3063\u305F\u3053\u3068\u306A\u3069\u304C\u3042\u3052\u3089\u308C\u307E\u3059\u3002\u30D1\u30FC\u30AB\u30FC\u306F\u3001COROS\u306E\u30B5\u30DD\u30FC\u30C8\u306E\u4E0B\u3001\u81EA\u5DF1\u306E\u9650\u754C\u3092\u8D85\u3048\u7D9A\u3051\u3001\u3055\u3089\u306B\u5F37\u3044\u30A2\u30B9\u30EA\u30FC\u30C8\u306B\u306A\u308B\u305F\u3081\u306B\u52AA\u529B\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  reed_fischer: {
    name: 'Reed Fischer',
    country: 'アメリカ',
    achievement: "2017\u5E74\u5168\u7C73\u9678\u4E0A\u7AF6\u6280\u9023\u76DF\u30DE\u30E9\u30BD\u30F3\u9078\u624B\u6A29\u5927\u4F1A-4\u4F4D\n    \u30CF\u30FC\u30D5\u30DE\u30E9\u30BD\u30F3\u3067\u5168\u7C73\u53F2\u4E0A20\u756A\u76EE\u306E\u6700\u901F\u30BF\u30A4\u30E0\u3092\u8A18\u9332\n    2019\u5E74\u30A2\u30E1\u30EA\u30ABAramco Houston\uFF08\u30A2\u30E9\u30E0\u30B3\u30FB\u30D2\u30E5\u30FC\u30B9\u30C8\u30F3\uFF09\u30CF\u30FC\u30D5\u30DE\u30E9\u30BD\u30F3\u3067\u30A2\u30E1\u30EA\u30AB\u9078\u624B1\u4F4D\n    \u5168\u7C73\u9678\u4E0A\u7AF6\u6280\u9023\u76DF10000m\u5927\u4F1A4\u4F4D\n    \u5168\u7C73\u30CA\u30B7\u30E7\u30CA\u30EB\u30C1\u30FC\u30E0\u512A\u52DD\u30E1\u30F3\u30D0\u30FC2\u56DE",
    desc: "\u30DF\u30CD\u30BD\u30BF\u5DDE\u51FA\u8EAB\u306EReed\uFF08\u30EA\u30FC\u30C9\uFF09\u306F\u73FE\u5728\u3001\u30B3\u30ED\u30E9\u30C9\u5DDE\u30DC\u30EB\u30C0\u30FC\u306B\u3042\u308BTinman Elite\uFF08\u30C6\u30A3\u30F3\u30DE\u30F3\u30FB\u30A8\u30EA\u30FC\u30C8\uFF09\u306B\u6240\u5C5E\u3057\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3063\u3066\u3044\u307E\u3059\u3002\u82E5\u3044\u30C1\u30FC\u30E0\u306E\u5275\u8A2D\u8005\u306E1\u4EBA\u3068\u3057\u3066\u3001\u30EA\u30FC\u30C9\u306F\u9577\u8DDD\u96E2\u3092\u8D70\u308B\u305F\u3081\u306E\u30D2\u30F3\u30C8\u3092\u3044\u304F\u3064\u304B\u6301\u3063\u3066\u3044\u307E\u3059\u3002\n    \u81EA\u5206\u306F\u5927\u5668\u6669\u6210\u578B\u3060\u3068\u601D\u3063\u3066\u3044\u305F\u5F7C\u306F\u3001\u30C9\u30EC\u30A4\u30AF\u5927\u5B66\u5728\u5B66\u4E2D\u3001\u65E9\u304F\u30822017\u5E74\u306ENCAA\u9078\u624B\u6A29\u5927\u4F1A\u30679\u4F4D\u306B\u5165\u8CDE\u3057\u307E\u3057\u305F\u3002\u5168\u7C73\u30D9\u30B9\u30C8\u30E9\u30A4\u30F3\u30CA\u30C3\u30D7\u306E\u30D5\u30A1\u30FC\u30B9\u30C8\u306B\u5165\u3063\u305F\u3053\u3068\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u304C\u3001\u4ECA\u3067\u306F\u7C73\u56FD\u3067\u6700\u3082\u6709\u671B\u306A\u30A2\u30B9\u30EA\u30FC\u30C8\u306E1\u4EBA\u306B\u6210\u9577\u3057\u3066\u3044\u307E\u3059\u3002\n    \u5F31\u51A024\u6B73\u3067\u3059\u304C\u3001\u30CF\u30FC\u30D5\u30DE\u30E9\u30BD\u30F3\u3067\u306F\u3059\u3067\u306B1:01:37\u306E\u81EA\u5DF1\u30D9\u30B9\u30C8\u3092\u9054\u6210\u3057\u3066\u3044\u307E\u3059\u3002\u30EA\u30FC\u30C9\u306F\u3053\u306E\u3088\u3046\u306A\u512A\u308C\u305F\u6210\u7E3E\u304C\u81EA\u8EAB\u306E\u30DE\u30E9\u30BD\u30F3\u306E\u30AD\u30E3\u30EA\u30A2\u306B\u7D76\u3048\u305A\u30E2\u30C1\u30D9\u30FC\u30B7\u30E7\u30F3\u3092\u4E0E\u3048\u3066\u304F\u308C\u308B\u3053\u3068\u3092\u671F\u5F85\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  coree_woltering: {
    name: 'Coree Woltering',
    country: 'アメリカ',
    achievement: "\u30B9\u30DA\u30EA\u30AA\u30FC\u30EB\u30B9\u30D7\u30EA\u30F3\u30B050k 2019\u5E74 1\u4F4D\n    \u30A2\u30E1\u30EA\u30AB\u30F3\u30EA\u30D0\u30FC50m\uFF06\u30AF\u30A4\u30C3\u30AF\u30B7\u30EB\u30D0\u30FC50k2018\u5E74 2\u4F4D\n    \u30B9\u30DA\u30EA\u30AA\u30FC\u30EB100\u30DE\u30A4\u30EB2018\u5E74 4\u4F4D\n    \u30A2\u30A4\u30B9\u30A8\u30A4\u30B8\u30C8\u30EC\u30A4\u30EB\uFF081147\u30DE\u30A4\u30EB\uFF09FKT - 2020\u5E74",
    desc: "\u30A4\u30EA\u30CE\u30A4\u5DDE\u30AA\u30C8\u30EF\u306B\u4F4F\u3080Coree(\u30B3\u30EA\u30FC)\u306F\u3001\u4E2D\u897F\u90E8\u3067\u306F\u73CD\u3057\u3044\u30A8\u30EA\u30FC\u30C8\u30FB\u30A6\u30EB\u30C8\u30E9\u30E9\u30F3\u30CA\u30FC\u3067\u3059\u3002\u73FE\u5728\u306F\u9577\u3044\u8DDD\u96E2\u3092\u597D\u3093\u3067\u8D70\u308A\u307E\u3059\u304C\u3001\u5F7C\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u30AD\u30E3\u30EA\u30A2\u306F\u30C8\u30E9\u30C3\u30AF\u3067400m\u3068800m\u306E\u30EC\u30FC\u30B9\u304B\u3089\u59CB\u307E\u308A\u3001\u3069\u3093\u306A\u8DEF\u9762\u306E\u3069\u3093\u306A\u8DDD\u96E2\u306B\u3082\u5BFE\u5FDC\u3067\u304D\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F\u30022014\u5E74\u306B\u521D\u30DE\u30E9\u30BD\u30F3\u306B\u767B\u9332\u3059\u308B\u524D\u306ECoree\u306E\u9577\u8DDD\u96E2\u8D70\u306F\u308F\u305A\u304B16\u30DE\u30A4\u30EB\u3067\u3057\u305F\u304C\u3001\u5F7C\u306F2:37\u3068\u3044\u3046\u975E\u5E38\u306B\u7ACB\u6D3E\u306A\u30C7\u30D3\u30E5\u30FC\u30BF\u30A4\u30E0\u3092\u8A18\u9332\u3059\u308B\u3053\u3068\u306B\u306A\u308A\u307E\u3059\u3002\u305D\u306E1\u5E74\u5F8C\u3001\u5F7C\u306F\u51FA\u5834\u3057\u305F\u3059\u3079\u3066\u306E\u30C8\u30EC\u30A4\u30EB\u30A6\u30EB\u30C8\u30E9\u3067\u512A\u52DD\u3092\u679C\u305F\u3057\u307E\u3057\u305F\u3002\u305D\u308C\u304B\u3089\u6570\u5E74\u7D4C\u3061\u30012018\u5E74\u306B\u306F\u60AA\u540D\u9AD8\u304DWestern States\u306725\u4F4D\u5165\u8CDE\u3092\u679C\u305F\u3057\u307E\u3057\u305F\u3002\u6700\u8FD1\u306E\u6210\u679C\u3068\u3057\u3066\u306F\u3001\u30A2\u30A4\u30B9\u30A8\u30A4\u30B8\u30C8\u30EC\u30A4\u30EB\u3067FKT\u3092\u9054\u6210\u3057\u30011147\u30DE\u30A4\u30EB\u306E\u30EB\u30FC\u30C8\u3092\u308F\u305A\u304B21\u65E513\u6642\u959335\u5206\u3067\u5B8C\u8D70\u3057\u305F\u3053\u3068\u3067\u3059\u3002\u30E9\u30F3\u30CB\u30F3\u30B0\u4EE5\u5916\u3067\u306F\u3001\u7236\u89AA\u3001\u30B9\u30AB\u30A4\u30C0\u30A4\u30D0\u30FC\u3001\u305D\u3057\u3066\u30A2\u30A6\u30C8\u30C9\u30A2\u306E\u4E16\u754C\u306B\u304A\u3051\u308B\u591A\u69D8\u6027\u3092\u652F\u6301\u3059\u308B\u4EBA\u3005\u306E\u30ED\u30FC\u30EB\u30E2\u30C7\u30EB\u3067\u3082\u3042\u308B\u3002"
  },
  john_kelly: {
    name: 'John Kelly',
    country: 'アメリカ',
    achievement: "2017\u5E74 \u30D0\u30FC\u30AF\u30EC\u30FC\u30DE\u30E9\u30BD\u30F3\u30C1\u30E3\u30F3\u30D4\u30AA\u30F3\n      2018\u5E74 ITU\u30ED\u30F3\u30B0\u30B3\u30FC\u30B9 \u30A8\u30A4\u30B8\u30B0\u30EB\u30FC\u30D7\u4E16\u754C\u30C1\u30E3\u30F3\u30D4\u30AA\u30F3  \n      2020\u5E74 \u30B9\u30D1\u30A4\u30F3\u30C1\u30E3\u30F3\u30D4\u30AA\u30F3\n      \u30A4\u30AE\u30EA\u30B9\u306E\u300C\u30B6\u30FB\u30B0\u30E9\u30F3\u30C9\u30E9\u30A6\u30F3\u30C9\u300D\u5B8C\u8D70\u7B2C\u4E00\u4EBA\n      \u30C6\u30EC\u30D3\u30B2\u30FC\u30E0\u306E\u30AD\u30E3\u30E9\u30AF\u30BF\u30FC\u306B\u626E\u3057\u305F\u6700\u901F\u30DE\u30E9\u30BD\u30F3\u300D\u30AE\u30CD\u30B9\u4E16\u754C\u8A18\u9332\uFF082016\u5E74\u30DC\u30B9\u30C8\u30F3\u30DE\u30E9\u30BD\u30F3\uFF09\u9054\u6210",
    desc: "\u30B8\u30E7\u30F3\u306F \u30D0\u30FC\u30AF\u30EC\u30FC\u30DE\u30E9\u30BD\u30F3\u3001 \u30B9\u30D1\u30A4\u30F3\u30EC\u30FC\u30B9\u3001\u30C8\u30EB\u30C7\u30B8\u30A2\u30F3\u306A\u3069\u306E\u5C71\u5CB3\u3001\u6570\u65E5\u9593\u306E\u30A4\u30D9\u30F3\u30C8\u3084\u3001\u30A4\u30AE\u30EA\u30B9\u306E3\u5927\u30D5\u30A7\u30E9\u30FC\u30E9\u30F3\u30CB\u30F3\u30B0\u30E9\u30A6\u30F3\u30C9\u3092\u3059\u3079\u3066\u3064\u306A\u3050\u6700\u8FD1\u306E\u30B0\u30E9\u30F3\u30C9\u30E9\u30A6\u30F3\u30C9\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306A\u3069\u306E\u9577\u3044FKT\u3092\u5C02\u9580\u3068\u3057\u3066\u3044\u308B\u3002\u30C6\u30CD\u30B7\u30FC\u5DDE\u6771\u90E8\u3067\u80B2\u3061\u3001\u305D\u3053\u3067\u5C71\u3078\u306E\u611B\u304C\u59CB\u307E\u3063\u305F\u3002\u73FE\u5728\u306F\u59BB\u30684\u4EBA\u306E\u5B50\u4F9B\u3068\u30A4\u30AE\u30EA\u30B9\u306B\u4F4F\u307F\u3001\u6280\u8853\u7CFB\u65B0\u8208\u4F01\u696D\u306ECTO\u517C\u5171\u540C\u8A2D\u7ACB\u8005\u3067\u3042\u308B\u3002\u30B8\u30E7\u30F3\u306F\u3001\u5C71\u3068\u81EA\u5206\u306E\u9650\u754C\u3092\u63A2\u6C42\u3057\u7D9A\u3051\u3001\u81EA\u5206\u306E\u9650\u754C\u3092\u8D85\u3048\u308B\u3088\u3046\u306A\u76EE\u6A19\u306B\u6311\u6226\u3057\u3066\u3044\u304D\u307E\u3059\u3002\u3053\u306E\u60C5\u71B1\u3092\u5B50\u4F9B\u305F\u3061\u3084\u4ED6\u306E\u4EBA\u305F\u3061\u306B\u3082\u4F1D\u3048\u3001\u81EA\u7136\u306E\u5834\u6240\u3068\u305D\u308C\u304C\u793E\u4F1A\u306B\u3082\u305F\u3089\u3059\u4FA1\u5024\u3078\u306E\u611F\u8B1D\u3068\u4FDD\u8B77\u3092\u4FC3\u9032\u3057\u305F\u3044\u3068\u8003\u3048\u3066\u3044\u307E\u3059\u3002"
  },
  camille_herron: {
    name: 'カミーユ・ヘロン / Camille Herron',
    country: 'アメリカ',
    achievement: "\u30FB4\u3064\u306E\u4E16\u754C\u8A18\u9332\u4FDD\u6301\u8005\uFF0850mile\u300112\u6642\u9593\u8D70\u3001100mile\u300124\u6642\u9593\u8D70\uFF09 \n    \u30FB8\u3064\u306E\u5168\u7C73\u8A18\u9332\u4FDD\u6301\u8005\uFF08\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u5404\u7A2E\u76EE\uFF09\n    \u30FB50km\u3001100km\u3067\u306E\u4E16\u754C\u30C1\u30E3\u30F3\u30D4\u30AA\u30F3\n    \u30FB2017\u5E74\u30B3\u30E0\u30E9\u30C3\u30BA\u30DE\u30E9\u30BD\u30F3\u512A\u52DD\n    \u30FB100mile\u30C8\u30EC\u30A4\u30EB\u306E\u81EA\u5DF1\u8A18\u9332\uFF1A12\u6642\u959342\u520640\u79D2",
    desc: "\u30AB\u30DF\u30FC\u30E6\u30FB\u30D8\u30ED\u30F3\u306F\u69D8\u3005\u306A\u8DDD\u96E2\u3084\u30B3\u30FC\u30B9\u3067\u3001\u53F2\u4E0A\u6700\u901F\u306E\u5973\u5B50\u30A6\u30EB\u30C8\u30E9\u30E9\u30F3\u30CA\u30FC\u3068\u3057\u3066\u306E\u5730\u4F4D\u3092\u78BA\u7ACB\u3057\u3066\u3044\u307E\u3059\u3002\u305D\u306E\u30B9\u30D4\u30FC\u30C9\u3001\u30BF\u30D5\u3055\u3001\u591A\u624D\u3055\u3001\u305D\u3057\u3066\u512A\u52DD\u306E\u53CE\u3081\u308B\u56DE\u6570\u306F\u3001\u5F7C\u5973\u3092\u3053\u306E\u30B9\u30DD\u30FC\u30C4\u306E\u4F1D\u8AAC\u7684\u5B58\u5728\u306B\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  hayden_hawks: {
    name: 'ヘイデン・ホークス / Hayden Hawks',
    country: 'アメリカ',
    achievement: "\u30FB2016\u5E74 Speedgoat 50km \u512A\u52DD\n    \u30FBTNF SF 50mile 2016\u5E742\u4F4D\u30012017\u5E743\u4F4D\n    \u30FB2017\u5E74 CCC 100km \u512A\u52DD\uFF08\u5927\u4F1A\u65B0\uFF09\n    \u30FB2018\u5E74 Lavaredo Ultra Trail 120km \u512A\u52DD\n    \u30FBZion Traverse 48 mile\u306EFKT",
    desc: "\u30D8\u30A4\u30C7\u30F3\u30FB\u30DB\u30FC\u30AF\u30B9\u306F\u7C73\u56FD\u30FB\u30E6\u30BF\u5DDE\u51FA\u8EAB\u306E\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3 / \u30DE\u30A6\u30F3\u30C6\u30F3\u30A2\u30B9\u30EA\u30FC\u30C8\u3067\u3059\u3002 \u5F7C\u306F\u56FD\u7ACB\u516C\u5712\u3084\u81EA\u5B85\u8FD1\u304F\u306E\u5C71\u3001\u5CE1\u8C37\u3001\u7802\u6F20\u3092\u8D70\u308B\u306E\u304C\u597D\u304D\u3067\u3059\u3002 \u5F7C\u306F\u59BB\u3068\u606F\u5B50\u3092\u611B\u3057\u3066\u304A\u308A\u3001\u4E00\u7DD2\u306B\u3088\u304F\u4E16\u754C\u4E2D\u3092\u65C5\u3057\u3066\u3044\u307E\u3059\u3002\u9577\u5E74\u306B\u308F\u305F\u3063\u3066\u5F7C\u306F\u30ED\u30FC\u30C9\u30EC\u30FC\u30B9\u3001\u30DE\u30A6\u30F3\u30C6\u30F3 / \u30C8\u30EC\u30A4\u30EB\u3001\u305D\u3057\u3066\u73FE\u5728\u306F\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u3092\u542B\u3080\u30EC\u30FC\u30B9\u3067\u6210\u529F\u3092\u53CE\u3081\u3066\u3044\u307E\u3059\u3002"
  },
  tim_tollefson: {
    name: 'ティム・トルフソン / Tim Tollefson',
    country: 'アメリカ',
    achievement: "\u30FB2014\u5E74 US 50k Trail National \u512A\u52DD\n    \u30FB2016\u5E74 UTMB 3\u4F4D\n    \u30FB2017\u5E74 UTMB 3\u4F4D\n    \u30FB2017\u5E74 Ultra Trail Australia \u512A\u52DD",
    desc: "\u59BB\u306E\u30EA\u30F3\u30B8\u30FC\u3068\u5171\u306B\u7C73\u56FD\u30FB\u30AB\u30EA\u30D5\u30A9\u30EB\u30CB\u30A2\u5DDE\u30DE\u30F3\u30E2\u30B9\u30EC\u30A4\u30AF\u30B9\u3092\u62E0\u70B9\u3068\u3059\u308B\u30DE\u30A6\u30F3\u30C6\u30F3\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u30C6\u30A3\u30E0\u30FB\u30C8\u30EB\u30D5\u30BD\u30F3\u306F\u304B\u3064\u3066\u3001\u4E94\u8F2A\u30DE\u30E9\u30BD\u30F3\u5168\u7C73\u9078\u8003\u4F1A\u306B2\u5EA6\u51FA\u5834\u3057\u305F\u3053\u3068\u306E\u3042\u308B\u30ED\u30FC\u30C9\u30E9\u30F3\u30CA\u30FC\u3067\u3057\u305F\u3002\u305D\u306E\u5F8C\u30012014\u5E74\u5168\u7C7350km\u30C8\u30EC\u30A4\u30EB\u9078\u624B\u6A29\u3067\u512A\u52DD\u3057\u3001\u5168\u7C73\u4EE3\u8868\u3068\u3057\u3066IAU\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\u4E16\u754C\u9078\u624B\u6A29\u306B\u51FA\u5834\u3002\u3055\u3089\u306B\u3001Ultra Trail Australia\u3067\u306E\u512A\u52DD\u3001UTMB\u30672\u5EA6\u306E3\u4F4D\u3068\u3001\u591A\u304F\u306E\u597D\u6210\u7E3E\u3092\u6B8B\u3057\u307E\u3057\u305F\u3002\n    \u30C6\u30A3\u30E0\u306F\u307E\u305F\u3001\u7406\u5B66\u7642\u6CD5\u58EB\u3068\u3057\u3066\u30D5\u30EB\u30BF\u30A4\u30E0\u3067\u50CD\u3044\u3066\u304A\u308A\u3001\u30A4\u30FC\u30B9\u30BF\u30F3\u30FB\u30B7\u30A8\u30E9\u5730\u57DF\u306E\u4F4F\u6C11\u3084\u3001\u5F7C\u306E\u3082\u3068\u3092\u8A2A\u308C\u308B\u30A2\u30B9\u30EA\u30FC\u30C8\u3078\u306E\u30B5\u30FC\u30D3\u30B9\u3092\u63D0\u4F9B\u3057\u3066\u3044\u307E\u3059\u3002\u5F7C\u304C\u5C06\u6765\u306B\u3064\u3044\u3066\u8A9E\u308B\u6642\u3001\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u3001\u30DE\u30A6\u30F3\u30C6\u30F3\u30B9\u30AD\u30FC\u3001\u30A2\u30EB\u30DA\u30F3\u30B9\u30AD\u30FC\u306E\u30C8\u30C3\u30D7\u30A2\u30B9\u30EA\u30FC\u30C8\u306B\u306A\u308B\u3053\u3068\u3092\u671B\u3093\u3067\u3044\u307E\u3059\u3002"
  },
  magda_boulet: {
    name: 'Magda Boulet',
    country: 'アメリカ',
    achievement: "2008\u5E74\u30AA\u30EA\u30F3\u30D4\u30C3\u30AF\u30DE\u30E9\u30BD\u30F3\u4E88\u9078\u7B2C2\u4F4D\n      \u30DE\u30E9\u30BD\u30F3\u81EA\u5DF1\u6700\u9AD8\u8A18\u93322:26:22\uFF082010\u5E74\uFF0C\u30ED\u30C3\u30C6\u30EB\u30C0\u30E0\uFF09\n      2015\u5E74Western States 100\u512A\u52DD\n      2015\u5E74\u5317\u7C73\u30A6\u30EB\u30C8\u30E9\u30E9\u30F3\u30CA\u30FC\u30AA\u30D6\u30B6\u30A4\u30E4\u30FC\n      2017\u5E74Western States\u7B2C2\u4F4D\n      2017 Terewara 102km\u7B2C2\u4F4D",
    desc: "Magda\u306F\u30DD\u30FC\u30E9\u30F3\u30C9\u3067\u80B2\u3061\u30012001\u5E74\u306B\u7C73\u56FD\u306B\u79FB\u4F4F\u3057\u3001\u540C\u3058\u5E74\u306B\u30A2\u30E1\u30EA\u30AB\u56FD\u7C4D\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u5F7C\u5973\u306F\u30AB\u30EA\u30D5\u30A9\u30EB\u30CB\u30A2\u5927\u5B66\u30D0\u30FC\u30AF\u30EC\u30FC\u6821\u3067\u30D2\u30E5\u30FC\u30DE\u30F3\u30D0\u30A4\u30AA\u30C0\u30A4\u30CA\u30DF\u30C3\u30AF\u306E\u5B66\u58EB\u53F7\u3092\u53D6\u5F97\u3057\u3001\u30AB\u30EA\u30D5\u30A9\u30EB\u30CB\u30A2\u5DDE\u7ACB\u5927\u5B66\u30D8\u30A4\u30EF\u30FC\u30C9\u6821\u3067\u904B\u52D5\u751F\u7406\u5B66\u306E\u4FEE\u58EB\u53F7\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\n    \u4F1D\u8AAC\u306EJack Daniels\u306E\u6307\u5C0E\u306E\u4E0B\u3001Magda\u306F\u30ED\u30FC\u30C9\u30E9\u30F3\u30CB\u30F3\u30B0\u3068\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u306E\u4E21\u65B9\u3067\u5927\u304D\u306A\u6210\u529F\u3092\u53CE\u3081\u307E\u3057\u305F\u3002\u5F7C\u5973\u306F2008\u5E74\u306E\u30AA\u30EA\u30F3\u30D4\u30C3\u30AF\u4E88\u9078\u3067\u7B2C2\u4F4D\u3092\u53D6\u5F97\u3057\u3001\u5317\u4EAC\u30AA\u30EA\u30F3\u30D4\u30C3\u30AF\u30DE\u30E9\u30BD\u30F3\u8A66\u5408\u306B\u51FA\u5834\u3057\u307E\u3057\u305F\u3002\n    2010\u5E74\u306E\u30ED\u30C3\u30C6\u30EB\u30C0\u30E0\u30DE\u30E9\u30BD\u30F3\u3067\u3001\u5F7C\u5973\u306F2:26:22\u306E\u81EA\u5DF1\u6700\u9AD8\u8A18\u9332\u3092\u4F5C\u308A\u307E\u3057\u305F\u3002\u3053\u308C\u306F\u3001\u30A2\u30E1\u30EA\u30AB\u306E\u5973\u6027\u30DE\u30E9\u30BD\u30F3\u306E\u6B74\u53F2\u306E\u4E2D\u3067\u307E\u306011\u4F4D\u306B\u30E9\u30F3\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n    2013\u5E74\u3001Magda\u306F\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u3068\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u30A2\u30B9\u30EA\u30FC\u30C8\u306B\u5909\u8EAB\u3057\u3001\u308F\u305A\u304B2\u5E74\u5F8C\u3001\u521D\u3081\u3066\u306E\u9577\u8DDD\u96E2\u30A4\u30D9\u30F3\u30C8\u3067\u3042\u308BWestern States100\u3067\u512A\u52DD\u3057\u307E\u3057\u305F\u3002\u5F7C\u5973\u306E\u5353\u8D8A\u3057\u305F\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u306F\u30012015\u5E74\u306E\u300C\u5317\u7C73\u30B9\u30FC\u30D1\u30FC\u30DE\u30E9\u30BD\u30F3\u30E9\u30F3\u30CA\u30FC\u30AA\u30D6\u30B6\u30A4\u30E4\u30FC\u300D\u306B\u9078\u51FA\u3055\u308C\u308B\u306E\u306B\u3082\u5F79\u7ACB\u3061\u307E\u3057\u305F\u3002\u30DE\u30B0\u30C0\u306F\u3001\u592B\u306E\u30EA\u30C3\u30C1\u30FC\u3068\u606F\u5B50\u306E\u30AA\u30FC\u30A6\u30A7\u30F3\u3068\u4E00\u7DD2\u306B\u30AB\u30EA\u30D5\u30A9\u30EB\u30CB\u30A2\u5DDE\u30AA\u30FC\u30AF\u30E9\u30F3\u30C9\u306B\u4F4F\u3093\u3067\u3044\u307E\u3059\u3002\u901A\u5E38\u3001\u5F7C\u5973\u306FGU EnergyLab\u3067\u50CD\u3044\u3066\u3044\u307E\u3059\u3002\u305D\u3053\u3067\u306F\u5F7C\u5973\u306E\u975E\u5E38\u306B\u30A4\u30F3\u30B9\u30D4\u30EC\u30FC\u30B7\u30E7\u30F3\u3092\u5F97\u305F\u88FD\u54C1\u3092\u898B\u3064\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  },
  sally_mcrae: {
    name: 'Sally McRae',
    country: 'アメリカ',
    achievement: "10\u56DE\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u512A\u52DD\n    20\u56DE\u8868\u5F70\u53F0\u306B\u4E0A\u304C\u308B\n    2\u56DEWestern States 100 Top 10",
    desc: "Sally McRae\u306F\u5922\u3084\u5192\u967A\u3092\u8FFD\u3044\u304B\u3051\u308B\u52C7\u6C17\u306E\u3042\u308B\u4EBA\u3067\u3059\u3002\u5F7C\u5973\u306F\u59BB\u3067\u3042\u308A\u30012\u4EBA\u306E\u5B50\u4F9B\u306E\u6BCD\u89AA\u3067\u3059\u3002\u305D\u3057\u3066\u4E16\u754C\u4E2D\u3067\u7AF6\u3046\u30D7\u30ED\u306E\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u3067\u3082\u3042\u308A\u307E\u3059\u3002\n    \u3055\u3089\u306B\u3001\u5F7C\u5973\u306F\u30D1\u30FC\u30C8\u30BF\u30A4\u30E0\u306E\u30B3\u30FC\u30C1\u3001\u30E9\u30A4\u30BF\u30FC\u3001\u30B9\u30D4\u30FC\u30AB\u30FC\u3067\u3082\u3042\u308A\u3001\u4ED6\u306E\u4EBA\u306B\u5145\u5B9F\u3057\u305F\u4EBA\u751F\u3092\u9001\u308B\u3088\u3046\u306B\u52E7\u3081\u3066\u3044\u307E\u3059\u3002"
  },
  hillary_allen: {
    name: 'Hillary Allen',
    country: 'アメリカ',
    achievement: "2018\u5E74 Cortina Trail race\uFF08\u30B3\u30EB\u30C6\u30A3\u30FC\u30CA\u30FB\u30C8\u30EC\u30A4\u30EB\uFF09\u512A\u52DD\n      2018\u5E74 TNF Endurance Challenge\uFF08TNF\u30A8\u30F3\u30C7\u30E5\u30E9\u30F3\u30B9\u30C1\u30E3\u30EC\u30F3\u30B8\uFF09\u30C1\u30EA80\u30AD\u30ED\u3000\u5927\u4F1A\u8A18\u9332\n      2017\u5E74 World Sky Running Ultra\uFF08\u30B9\u30AB\u30A4\u30E9\u30F3\u30CB\u30F3\u30B0\u4E16\u754C\u9078\u624B\u6A29\uFF092\u4F4D\n      2017\u5E74 Maderia Skyrace\uFF08\u30DE\u30C7\u30A4\u30E9\u30FB\u30B9\u30AB\u30A4\u30EC\u30FC\u30B9\uFF09\u5927\u4F1A\u8A18\u9332\n      2017\u5E74 Transvulcania\uFF08\u30C8\u30E9\u30F3\u30B9\u30D6\u30EB\u30AB\u30CB\u30A2\uFF093\u4F4D\n      2016\u5E74 \u7C73\u56FD\u5C71\u5CB3\u30CA\u30B7\u30E7\u30CA\u30EB\u30C1\u30FC\u30E0\u30E1\u30F3\u30D0\u30FC\n      2016\u5E74 Ultra Skyrunning World Series\uFF08\u30B9\u30AB\u30A4\u30E9\u30F3\u30CA\u30FC\u30FB\u30EF\u30FC\u30EB\u30C9\u30FB\u30B7\u30EA\u30FC\u30BA\uFF093\u4F4D\n      2016\u5E74 TNF Cortina Trail\uFF08TNF\u30B3\u30EB\u30C6\u30A3\u30FC\u30CA\u30FB\u30C8\u30EC\u30A4\u30EB\uFF09\u5927\u4F1A\u8A18\u9332\u9332\n      2015\u5E74 US Sky Running Ultra\uFF08\u30B9\u30AB\u30A4\u30E9\u30F3\u30CB\u30F3\u30B0\u7C73\u56FD\u30B7\u30EA\u30FC\u30BA\uFF09\u512A\u52DD\n      2015\u5E74 Speedgoat\uFF08\u30B9\u30D4\u30FC\u30C9\u30B4\u30FC\u30C8\uFF0950\u30AD\u30ED\u5927\u4F1A\u8A18\u9332",
    desc: "Hillary Allen\uFF08\u30D2\u30E9\u30EA\u30FC\u30FB\u30A2\u30EC\u30F3\uFF09\u304C\u300C\u30D2\u30EB\u30B4\u30FC\u30C8\u300D\u3068\u547C\u3070\u308C\u3066\u3044\u308B\u306E\u306B\u306F\u6839\u62E0\u304C\u3042\u308A\u3001\u305D\u308C\u306F\u5C71\u5730\u3001\u7279\u306B\u9AD8\u6240\u306B\u3064\u306A\u304C\u308B\u30C8\u30EC\u30A4\u30EB\u3067\u901F\u304F\u8D70\u308C\u308B\u3053\u3068\u3092\u305F\u3061\u307E\u3061\u8A3C\u660E\u3057\u305F\u304B\u3089\u3067\u3059\u3002\u30A2\u30EC\u30F3\u306F\u3001\u4EE5\u524D\u306F\u30C6\u30CB\u30B9\u9078\u624B\u3067\u3042\u308A\u3001\u9577\u8DDD\u96E2\u8D70\u306E\u7DF4\u7FD2\u3092\u59CB\u3081\u305F\u306E\u306F\u3001\u5927\u5B66\u9662\u751F\u306B\u306A\u3063\u3066\u304B\u3089\u306E\u3053\u3068\u3067\u3057\u305F\u3002\n    \u5F53\u6642\u795E\u7D4C\u79D1\u5B66\u306E\u5B66\u4F4D\u53D6\u5F97\u3092\u76EE\u6307\u3057\u3066\u52C9\u5F37\u4E2D\u3067\u3042\u3063\u305F\u5F7C\u5973\u306B\u306F\u3001\u8133\u3092\u30B7\u30E3\u30FC\u30D7\u306B\u4FDD\u3064\u65B9\u6CD5\u304C\u5FC5\u8981\u3067\u3057\u305F\u3002\u5730\u5143\u306E\u30E9\u30F3\u30CA\u30FC\u3068\u4E00\u7DD2\u306B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u59CB\u3081\u305F\u305D\u306E\u3068\u304D\u304B\u3089\u3001\u6B62\u307E\u308B\u3053\u3068\u306A\u304F\u3072\u305F\u3059\u3089\u7D9A\u3051\u307E\u3057\u305F\u3002\n    \u9577\u8DDD\u96E2\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3067\u982D\u89D2\u3092\u73FE\u3057\u3001\u8868\u5F70\u53F0\u306B\u4E0A\u304C\u308B\u3053\u3068\u306B\u306A\u308A\u307E\u3057\u305F\u3002\u305D\u308C\u4EE5\u964D\u3001\u4E16\u754C\u5404\u5730\u306E\u30EC\u30FC\u30B9\u3092\u8D70\u308A\u59CB\u3081\u3001\u5E38\u306B\u8868\u5F70\u53F0\u306B\u4E0A\u304C\u308A\u7D9A\u3051\u3001\u5927\u4F1A\u8A18\u9332\u3092\u6253\u3061\u7ACB\u3066\u3066\u3044\u307E\u3059\u3002\u3053\u306E\u3088\u3046\u306B\u512A\u308C\u305F\u6210\u7E3E\u3092\u3042\u3052\u3066\u3044\u308B\u306B\u3082\u304B\u304B\u308F\u3089\u305A\u3001\u5F7C\u5973\u306F\u5E38\u306B\u8B19\u905C\u3055\u3068\u30E6\u30FC\u30E2\u30A2\u3092\u6301\u3061\u7D9A\u3051\u3066\u3044\u307E\u3059\u3002"
  },
  sage_canaday: {
    name: 'セージ・カナデイ / Sage Canaday',
    country: 'アメリカ',
    // 这里用了特殊字符作为空格
    achievement: "\u30FBSpeedgoat 50km \u512A\u52DD3\u56DE\n    \u30FB100km\u30C8\u30EC\u30A4\u30EB\u3001\u30DE\u30A6\u30F3\u30C6\u30F3\u30C8\u30EC\u30A4\u30EB\u3001\u30C8\u30EC\u30A4\u30EB\n    \u3000\u30DE\u30E9\u30BD\u30F3\u5168\u7C73\u9078\u624B\u6A293\u51A0\n    \u30FBTarawera 100km \u512A\u52DD2\u56DE\n    \u30FBLake Sonoma 50mile \u512A\u52DD2\u56DE\n    \u30FBTNF 50\u30DE\u30A4\u30EB Endurance Challenge \u512A\u52DD",
    desc: "\u304B\u3064\u3066\u30ED\u30FC\u30C9\u30E9\u30F3\u30CA\u30FC\u3068\u3057\u3066\u4E94\u8F2A\u30DE\u30E9\u30BD\u30F3\u5168\u7C73\u9078\u8003\u4F1A\u306B2\u5EA6\u51FA\u5834\u3057\u305F\u30BB\u30FC\u30B8\u30FB\u30AB\u30CA\u30C7\u30A4\u306F\u30012012\u5E74\u306B\u7C73\u56FD\u30FB\u30B3\u30ED\u30E9\u30C9\u5DDE\u30DC\u30EB\u30C0\u30FC\u3078\u306E\u79FB\u4F4F\u5F8C\u306B\u3001\u5168\u7C73\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u9078\u624B\u6A29\u3067\u512A\u52DD\u3059\u308B\u306A\u3069\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u3068\u3057\u3066\u6D3B\u8E8D\u3057\u3066\u3044\u307E\u3059\u3002\u5C06\u6765\u7684\u306B\u306F\u4E16\u754C\u3067\u6700\u3082\u904E\u9177\u306A\u30DE\u30A6\u30F3\u30C6\u30F3\u30FB\u30B9\u30FC\u30D1\u30FC\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3078\u306E\u53C2\u52A0\u306B\u610F\u6B32\u3092\u898B\u305B\u3066\u3044\u307E\u3059\u3002"
  },
  cody_reed: {
    name: 'Cody Reed',
    country: 'アメリカ',
    achievement: "2014\u5E74 NCAA\u30AF\u30ED\u30B9\u30AB\u30F3\u30C8\u30EA\u30FC\u5168\u7C73\u5927\u4F1A \n      2014\u5E74\u30D3\u30C3\u30B0\u30B9\u30AB\u30A4\u30A4\u30F3\u30C9\u30A2\u30AB\u30F3\u30D5\u30A1\u30EC\u30F3\u30B9\u9078\u624B\u6A29\uFF08\u30D5\u30E9\u30C3\u30B0\u30B9\u30BF\u30C3\u30D5\u958B\u50AC\uFF093km 2\u4F4D \n      2016\u5E74 \u30BF\u30DE\u30EB\u30D1\u30D8\u30C3\u30C9\u30E9\u30F3\u30BA50k 1\u4F4D \n      2017\u5E74 Way Too Cool 1\u4F4D \n      2018\u5E74 \u30A6\u30A7\u30B9\u30BF\u30F3\u30B9\u30C6\u30A4\u30C4 7\u4F4D ",
    desc: "Cody Reed\uFF08\u30B3\u30C7\u30A3\u30FB\u30EA\u30FC\u30C9\uFF09\u306F\u3001\u30A2\u30EA\u30BE\u30CA\u5DDE\u30D5\u30E9\u30C3\u30B0\u30B9\u30BF\u30C3\u30D5\u5468\u8FBA\u306E\u5C71\u3005\u3084\u6E13\u8C37\u3067Coconino Cowboys\u3068\u5171\u306B\u751F\u6D3B\u3057\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3063\u3066\u3044\u307E\u3059\u3002\u5F7C\u306F\u4E2D\u5B66\u751F\u306E\u9803\u304B\u3089\u7AF6\u6280\u3068\u3057\u3066\u8D70\u3063\u3066\u3044\u307E\u3057\u305F\u304C\u3001Cody\u304C\u30C8\u30EC\u30A4\u30EB\u30EC\u30FC\u30B9\u306B\u6311\u6226\u3059\u308B\u3053\u3068\u3092\u6C7A\u3081\u305F\u306E\u306F2016\u5E74\u306E\u3053\u3068\u3067\u3001\u305D\u308C\u4EE5\u6765\u632F\u308A\u8FD4\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002Cody\u306F\u597D\u304D\u306A\u3053\u3068\u3092\u3057\u3066\u4E16\u754C\u4E2D\u3092\u65C5\u3057\u3001\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u306E\u7D20\u6674\u3089\u3057\u3055\u3092\u5E83\u3081\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3057\u305F\u3002"
  },
  harry_jones: {
    name: 'Harry Jones',
    country: 'イギリス',
    achievement: '',
    desc: "Harry\uFF08\u30CF\u30EA\u30FC\uFF09\u306F\u30B8\u30E5\u30CB\u30A2\u6642\u4EE3\u306B\u9678\u4E0A\u7AF6\u6280\u3092\u59CB\u3081\u3001\u3084\u304C\u3066\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u306E\u4E16\u754C\u3078\u3068\u79FB\u884C\u3057\u307E\u3057\u305F\u3002\u904E\u53BB2\u5E74\u9593\u306F\u4E3B\u306B100km\u306E\u8DDD\u96E2\u3092\u8D70\u308A\u3001Tarawera Ultramarathon\u3084Cappadocia Ultra-Trail, Ultra-Trail Australia\u30673\u4F4D\u306B\u306A\u308B\u306A\u3069\u3001\u6570\u3005\u306E\u56FD\u969B\u30EC\u30FC\u30B9\u3067\u8868\u5F70\u53F0\u306B\u4E0A\u304C\u3063\u3066\u3044\u308B\u3002\u4F59\u6687\u306B\u306F\u30E9\u30F3\u30CB\u30F3\u30B0\u30B3\u30FC\u30C1\u3084YouTuber\u3068\u3057\u3066\u3001\u4E16\u754C\u5404\u5730\u3067\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u3092\u8A18\u9332\u3057\u3066\u3044\u308B\u3002\u73FE\u5728\u306F\u30012019\u5E748\u6708\u306B\u958B\u50AC\u3055\u308C\u308BUTMB\u3067\u306E\u521D\u306E100\u30DE\u30A4\u30EB\u30EC\u30FC\u30B9\u3068\u3044\u3046\u6700\u5927\u306E\u30C1\u30E3\u30EC\u30F3\u30B8\u306B\u5411\u3051\u3066\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u4E2D\u3002"
  },
  zach_bitter: {
    name: 'ザック・ビター / Zach Bitter',
    country: 'アメリカ',
    achievement: "\u30FB100 mile / 12\u6642\u9593\u8D70\u4E16\u754C\u8A18\u9332\u4FDD\u6301\u8005\n    \u30FB2012\u5E74 / 2015\u5E74 50 mile\u5168\u7C73\u738B\u8005\n    \u30FB2014\u5E74100 mile\u5168\u7C73\u738B\u8005",
    desc: "\u30B6\u30C3\u30AF\u30FB\u30D3\u30BF\u30FC\u306F\u30A6\u30EB\u30C8\u30E9\u30A2\u30B9\u30EA\u30FC\u30C8 / \u30B3\u30FC\u30C1\u3067\u3059\u3002100\u30DE\u30A4\u30EB\uFF0811\u6642\u959319\u520613\u79D2\uFF09\u306812\u6642\u9593\u8D70\uFF08104.88\u30DE\u30A4\u30EB\uFF09\u306E\u4E16\u754C\u8A18\u9332\u4FDD\u6301\u8005\u3067\u3059\u3002\u30B6\u30C3\u30AF\u306FIAU100km\u4E16\u754C\u9078\u624B\u6A29\u306B\u5168\u7C73\u4EE3\u8868\u3068\u3057\u30663\u56DE\u51FA\u5834\u3059\u308B\u306A\u3069\u3001\u4E16\u754C\u5404\u5730\u306E\u30EC\u30FC\u30B9\u306B\u53C2\u52A0\u3057\u3066\u3044\u307E\u3059\u3002\u30ED\u30FC\u30C9 / \u30C8\u30E9\u30C3\u30AF\u30EC\u30FC\u30B9\u306E\u307B\u304B\u306B\u3001\u30B6\u30C3\u30AF\u306F\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u306B\u3082\u53C2\u52A0\u3057\u3066\u304A\u308A\u3001Javelina 100\u30DE\u30A4\u30EB\u3068San Diego 100\u30DE\u30A4\u30EB\u306E\u4E21\u30EC\u30FC\u30B9\u3067\u512A\u52DD\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  audrey_tanguy: {
    name: 'Audrey Tanguy',
    country: 'フランス',
    achievement: "2019\u5E74Lavaredo Ultra Trail\uFF08\u30E9\u30D0\u30EC\u30FC\u30C9\u30FB\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\uFF092\u4F4D\n      2019\u5E74MIUT Ultra Trail de Mad\xE8re\uFF08MIUT \u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\u30FB\u30C9\u30FB\u30DE\u30C7\u30FC\u30EB\uFF093\u4F4D\n      2019\u5E74TransJeju Cor\xE9e\uFF08\u30C8\u30E9\u30F3\u30B9\u30C1\u30A7\u30B8\u30E5\u30FB\u30B3\u30EC\uFF0950\u30AD\u30ED1\u4F4D\n      2018\uFF062019\u5E74Trace des Ducs de Savoie\uFF08TDS\uFF09\uFF0874\uFF091\u4F4D\n      2018\u5E7490 kms du Mont Blanc\uFF0890\u30AD\u30ED \u30C7\u30E5\u30FB\u30E2\u30F3\u30D6\u30E9\u30F3\uFF09\uFF0874\uFF092\u4F4D",
    desc: "\u30D5\u30E9\u30F3\u30B9\u30A2\u30EB\u30D7\u30B9\u306B\u4F4F\u3080Audrey Tanguy\uFF08\u30AA\u30FC\u30C9\u30EA\u30FC\u30FB\u30BF\u30F3\u30AE\u30FC\uFF09\u306F\u3001\u30E8\u30FC\u30ED\u30C3\u30D1\u3067\u3082\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u306E\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u3068\u3057\u3066\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u7A4D\u3093\u3067\u3044\u307E\u3059\u3002\n    \u5F7C\u5973\u306E\u30DE\u30E9\u30BD\u30F3\u30FB\u30C7\u30E5\u30FB\u30E2\u30F3\u30D6\u30E9\u30F3\u3068\u30E9\u30D0\u30EC\u30FC\u30C9\u30FB\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\u4E21\u65B9\u306E\u30B9\u30FC\u30D1\u30FC\u30C8\u30EC\u30A4\u30EB\u3067\u8868\u5F70\u53F0\u306B\u4E0A\u304C\u3063\u305F\u3053\u3068\u304C\u4EBA\u3005\u306E\u5370\u8C61\u306B\u5F37\u304F\u6B8B\u308A\u307E\u3057\u305F\u3002\u307E\u305F\u3001\u30DE\u30C7\u30A4\u30E9\u5CF6\u306E\u30A6\u30EB\u30C8\u30E9\u30FB\u30C8\u30EC\u30A4\u30EB\u3067\u3082\u9023\u7D9A2\u56DE\u8868\u5F70\u53F0\u306B\u4E0A\u3063\u3066\u3044\u307E\u3059\u3002\n    \u3053\u306E\u307B\u304B\u3001UTM\u2212TDS\u30672\u9023\u8987\u3082\u679C\u305F\u3057\u3066\u3044\u307E\u3059\u3002\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u306B\u98FD\u304F\u306A\u304D\u60C5\u71B1\u3092\u62B1\u304F\u30AA\u30FC\u30C9\u30EA\u30FC\u306F\u3001\u65B0\u305F\u306A\u5192\u967A\u306B\u6311\u307F\u306A\u304C\u3089\u3001\u81EA\u8EAB\u306E\u30BF\u30A4\u30C8\u30EB\u3092\u5B88\u308A\u7D9A\u3051\u305F\u3044\u3068\u8003\u3048\u3066\u3044\u307E\u3059\u3002"
  },
  scotty_hawker: {
    name: 'Scotty Hawker',
    country: 'ニュージーランド',
    achievement: "2019\u5E74\u9999\u6E2F100\u30005\u4F4D\n      2019\u5E74\u30AA\u30FC\u30B9\u30C8\u30E9\u30EA\u30A2Mt Solitary Ultra\uFF08\u30DE\u30A6\u30F3\u30C8\u30FB\u30BD\u30EA\u30BF\u30EA\u30FC\u30FB\u30A6\u30EB\u30C8\u30E9\uFF0945\u30AD\u30ED\u30001\u4F4D\n      2019\u5E74\u30EB\u30FC\u30DE\u30CB\u30A2Retezat Skyrace\uFF08\u30EC\u30C6\u30B6\u30C3\u30C8\u30FB\u30B9\u30AB\u30A4\u30EC\u30FC\u30B9\uFF09 28\u30AD\u30ED\u30003\u4F4D\n      2019\u5E74\u30A4\u30BF\u30EA\u30A2Lavaredo Ultra Dolomites\uFF08\u30E9\u30D0\u30EC\u30C9\u30FB\u30A6\u30EB\u30C8\u30E9\u30FB\u30C9\u30ED\u30DF\u30C6\uFF093\u4F4D\n      2019\u5E74\u30AA\u30FC\u30B9\u30C8\u30EA\u30A2Grossglockner Ultra Trail\uFF08\u30B0\u30ED\u30B9\u30B0\u30ED\u30C3\u30AF\u30CA\u30FC\u30FB\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\uFF0950\u30AD\u30ED\u30002\u4F4D\n      2019\u5E74\u30D5\u30E9\u30F3\u30B9UTMB\u30003\u4F4D\n      2019\u5E74\u30BF\u30A4Maesalong\uFF08\u30E1\u30FC\u30B5\u30ED\u30F3\uFF0910\u30AD\u30ED\u30001\u4F4D",
    desc: "Scotty Hawke\uFF08\u30B9\u30B3\u30C3\u30C6\u30A3\u30FC\u30FB\u30DB\u30FC\u30AF\uFF09\u306F\u3001\u30CB\u30E5\u30FC\u30B8\u30FC\u30E9\u30F3\u30C9\u306E\u30AF\u30E9\u30A4\u30B9\u30C8\u30C1\u30E3\u30FC\u30C1\u51FA\u8EAB\u306E\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u53CA\u3073\u30DE\u30E9\u30BD\u30F3\u9078\u624B\u3067\u3059\u30021\u5E74\u306E\u3046\u3061\u534A\u5E74\u9593\u306F\u59BB\u30683\u6B73\u306E\u5A18\u3068\u4E00\u7DD2\u306B\u30E8\u30FC\u30ED\u30C3\u30D1\u3092\u65C5\u3057\u3066\u3044\u307E\u3059\u3002\n    \u4E00\u5BB6\u306F\u65B0\u305F\u306A\u5730\u3092\u63A2\u7D22\u3059\u308B\u3053\u3068\u304C\u597D\u304D\u3067\u3001\u3053\u306E\u305F\u3081\u30B9\u30B3\u30C3\u30C6\u30A3\u306F\u4E16\u754C\u3067\u6700\u3082\u904E\u9177\u306A\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3084\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u306E\u30EC\u30FC\u30B9\u306B\u51FA\u5834\u3059\u308B\u6A5F\u4F1A\u304C\u3042\u308A\u307E\u3059\u30022019\u5E74\u3001\u30B9\u30B3\u30C3\u30C6\u30A3\u306F\u6709\u540D\u306AUTMB\u30673\u4F4D\u5165\u8CDE\u3092\u679C\u305F\u3057\u3001\u7D20\u6674\u3089\u3057\u3044\u30B7\u30FC\u30BA\u30F3\u3092\u7D42\u3048\u307E\u3057\u305F\u3002\n    2018\u5E74\u30B7\u30FC\u30BA\u30F3\u306E\u5927\u304D\u306A\u8A66\u7DF4\u3092\u7D4C\u3066\u3001\u30B9\u30DD\u30FC\u30C4\u3092\u307B\u307C\u8AE6\u3081\u306A\u3051\u308C\u3070\u306A\u3089\u306A\u304B\u3063\u305F\u30B9\u30B3\u30C3\u30C6\u30A3\u306B\u3068\u3063\u3066\u306F\u3001\u5F97\u96E3\u3044\u52DD\u5229\u3067\u3057\u305F\u3002\u30B9\u30B3\u30C3\u30C6\u30A3\u306B\u3068\u3063\u3066UTMB\u306E\u5B8C\u8D70\u306F\u30012020\u5E74\u306E\u30EC\u30FC\u30B9\u30B7\u30FC\u30BA\u30F3\u306B\u5411\u3051\u305F\u6E96\u5099\u306B\u304A\u3044\u3066\u3082\u5927\u304D\u306A\u81EA\u4FE1\u3068\u306A\u308A\u307E\u3057\u305F\u3002\u666E\u6BB5\u306F\u30B3\u30FC\u30C1\u3068\u3057\u3066\u3001\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3084\u30A6\u30EB\u30C8\u30E9\u30DE\u30E9\u30BD\u30F3\u306E\u30EC\u30FC\u30B9\u306B\u5411\u3051\u3066\u6E96\u5099\u3092\u3059\u308B\u4E16\u754C\u4E2D\u306E\u30A2\u30B9\u30EA\u30FC\u30C8\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u3059\u3002\n    \u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CB\u30F3\u30B0\u3067\u5F97\u305F\u77E5\u8B58\u3084\u7D4C\u9A13\u3092\u4ED6\u306E\u4EBA\u3068\u5171\u6709\u3059\u308B\u3053\u3068\u304C\u597D\u304D\u3067\u3001\u305D\u306E\u904E\u7A0B\u3067\u30B3\u30FC\u30C1\u3067\u3042\u308B\u3068\u540C\u6642\u306B\u30A2\u30B9\u30EA\u30FC\u30C8\u3067\u3042\u308B\u3053\u3068\u304C\u81EA\u5206\u306E\u4EBA\u751F\u306E\u30D0\u30E9\u30F3\u30B9\u3092\u4FDD\u3064\u306E\u306B\u5F79\u7ACB\u3063\u3066\u3044\u308B\u3053\u3068\u306B\u6C17\u3065\u3044\u305F\u306E\u3067\u3059\u3002"
  },
  tommy_caldwell: {
    name: 'トミー・コールドウェル \nTommy Caldwell',
    country: 'アメリカ',
    achievement: "\u30FB\u30A8\u30EB\u30AD\u30E3\u30D4\u30BF\u30F3\u30E8\u30BB\u30DF\u30C6\u306E\u30C9\u30FC\u30F3\u30A6\u30A9\u30FC\u30EB\u3092\u30D5\u30EA\u30FC\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3067\u521D\u767B\u9802\n    \u30FB\u30C7\u30A3\u30D8\u30C9\u30E9\u30EB\u30FB\u30A6\u30A9\u30FC\u30EB\u306E\u30D5\u30EA\u30FC\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u521D\u6311\u6226\n    \u30FB\u30CE\u30FC\u30BA\u309211\u6642\u9593\u3067\u30D5\u30EA\u30FC\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\n    \u30FB\u30CE\u30FC\u30BA\u306E\u30B9\u30D4\u30FC\u30C9\u8A18\u9332\uFF1A1\u6642\u959358\u5206\n    \u30FB\u30D1\u30BF\u30B4\u30CB\u30A2\u306E\u30D5\u30A3\u30C3\u30C4\u30ED\u30A4\u30C8\u30E9\u30D0\u30FC\u30B9\u3092\u521D\u767B\u6500",
    desc: "\u30C8\u30DF\u30FC\u30FB\u30B3\u30FC\u30EB\u30C9\u30A6\u30A7\u30EB\u306E\u6700\u521D\u306E\u767B\u9802\u306F\u3001\u304A\u305D\u3089\u304F3\u6B73\u306E\u6642\u3001\u4E21\u89AA\u304C\u5F7C\u306E\u6545\u90F7\u306E\u7C73\u56FD\u30FB\u30B3\u30ED\u30E9\u30C9\u5DDE\u30A8\u30B9\u30C6\u30B9\u30D1\u30FC\u30AF\u90CA\u5916\u306B\u3042\u308B\u30C4\u30A4\u30F3\u30AA\u30A6\u30EB\u30BA\u306E\u9802\u4E0A\u306B\u9023\u308C\u3066\u884C\u3063\u305F\u3068\u304D\u3067\u3057\u305F\u3002\u5E7C\u3044\u9803\u3001\u5BB6\u65CF\u3067\u6BCE\u5E74\u30E8\u30BB\u30DF\u30C6\u306B\u884C\u304D\u3001\u30E8\u30BB\u30DF\u30C6\u30D0\u30EC\u30FC\u306E\u5DE8\u5927\u306A\u82B1\u5D17\u5CA9\u306E\u58C1\u3068\u7121\u9650\u3068\u3082\u601D\u3048\u308B\u5192\u967A\u306E\u6A5F\u4F1A\u306B\u89E6\u308C\u308B\u3053\u3068\u3067\u3001\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3068\u5C71\u306B\u5BFE\u3059\u308B\u6DF1\u3044\u611B\u60C5\u3092\u80B2\u307F\u307E\u3057\u305F\u3002\n    \u305D\u308C\u4EE5\u964D\u306F\u7D06\u4F59\u66F2\u6298\u3092\u7D4C\u9A13\u3057\u307E\u3057\u305F\u304C\u3001\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3078\u306E\u611B\u60C5\u306F\u5909\u308F\u3089\u305A\u3001\u30B9\u30DD\u30FC\u30C4\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3067\u5927\u304D\u306A\u6210\u529F\u3092\u53CE\u3081\u305F\u5F8C\u306B\u30D3\u30C3\u30B0\u30A6\u30A9\u30FC\u30EB\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u306B\u8EE2\u5411\u3002\u30C8\u30E9\u30C3\u30C9\u3001\u30B9\u30D4\u30FC\u30C9\u3001\u30D5\u30EA\u30FC\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u306E\u4E16\u754C\u7684\u306A\u7B2C\u4E00\u4EBA\u8005\u3068\u3057\u3066\u6D3B\u8E8D\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  john_price: {
    name: 'John Price',
    country: 'カナダ',
    achievement: '',
    desc: "John Price\uFF08\u30B8\u30E7\u30F3\u30FB\u30D7\u30E9\u30A4\u30B9\uFF09\u306F\u5199\u771F\u5BB6\u3067\u3042\u308A\u3001\u30AF\u30E9\u30A4\u30DE\u30FC\u3067\u3082\u3042\u308A\u307E\u3059\u3002 \u3053\u306E4\u5E74\u9593\u3001\u5317\u7C73\u3001\u30D2\u30DE\u30E9\u30E4\u3001\u65E5\u672C\u306E\u7530\u820E\u3001\u4E2D\u56FD\u306E\u30A2\u30A4\u30B9\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3001\u30AB\u30CA\u30C7\u30A3\u30A2\u30F3\u30ED\u30C3\u30AD\u30FC\u306A\u3069\u3067\u30ED\u30C3\u30AF\u3001\u30A2\u30A4\u30B9\u3001\u30A2\u30EB\u30D1\u30A4\u30F3\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u3092\u7CBE\u529B\u7684\u306B\u884C\u3044\u3001\u5199\u771F\u3092\u64AE\u3063\u3066\u304D\u307E\u3057\u305F\u3002 \u73FE\u5728\u3001\u30A2\u30EB\u30D0\u30FC\u30BF\u5DDE\u30AD\u30E3\u30F3\u30E2\u30A2\u3092\u62E0\u70B9\u306B\u3001\u30D5\u30EA\u30FC\u30E9\u30F3\u30B9\u306E\u5192\u967A\u3001\u30E9\u30A4\u30D5\u30B9\u30BF\u30A4\u30EB\u3001\u98A8\u666F\u5199\u771F\u5BB6\u3068\u3057\u3066\u6D3B\u52D5\u3057\u3066\u3044\u308B\u3002"
  },
  luke_smithwick: {
    name: 'ルーク・スミスウィック \n Luke Smithwick',
    country: 'アメリカ',
    achievement: '',
    desc: "\u3042\u308B\u30B8\u30E3\u30FC\u30CA\u30EA\u30B9\u30C8\u306F\u3001COROS\u3068\u5951\u7D04\u3057\u305F\u30D7\u30ED\u30B9\u30AD\u30FC\u767B\u5C71\u5BB6 / \u30ED\u30C3\u30AF\u30AF\u30E9\u30A4\u30DE\u30FC\u306E\u3067\u3082\u3042\u308B\u30EB\u30FC\u30AF\u30FB\u30B9\u30DF\u30B9\u30A6\u30A3\u30C3\u30AF\u306B\u3064\u3044\u3066\u3001\u8FD1\u5E74\u30D2\u30DE\u30E9\u30E4\u3067\u6700\u3082\u610F\u6B32\u7684\u306B\u6D3B\u52D5\u3059\u308B\u767B\u5C71\u5BB6\u306E1\u4EBA\u3067\u3042\u308B\u3068\u7D76\u8CDB\u3057\u307E\u3057\u305F\u3002\n    \u904E\u53BB9\u5E74\u9593\u306773\u56DE\u306E\u30D2\u30DE\u30E9\u30E4\u9060\u5F81\u3092\u884C\u3044\u3001\u305D\u306E\u4E2D\u3067\u3082\u7279\u306B\u63A2\u691C\u7684\u306A\u30B9\u30AD\u30FC\u3084\u30ED\u30C3\u30AF\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u306B\u529B\u3092\u5165\u308C\u3066\u3044\u307E\u3059\u3002\u30C7\u30B6\u30A4\u30F3\u6027\u306B\u5BCC\u3093\u3060\u30DA\u30C0\u30EB\u5F0F\u306E\u7528\u5177\u3092\u4F7F\u3063\u3066\u3001\u30D2\u30DE\u30E9\u30E4\u306730\u4EE5\u4E0A\u3082\u306E\u30B9\u30AD\u30FC\u30B3\u30FC\u30B9\u306E\u521D\u6ED1\u308A\u3092\u9054\u6210\u3057\u3001\u4ED6\u8005\u306B\u306F\u306A\u3044\u8C4A\u5BCC\u306A\u77E5\u8B58\u3068\u30B9\u30AD\u30FC\u7D4C\u9A13\u3092\u84C4\u7A4D\u3057\u3066\u304D\u307E\u3057\u305F\u3002\n    \u5F7C\u306E\u5BB6\u306F\u7C73\u56FD\u30FB\u30A2\u30A4\u30C0\u30DB\u5DDE\u30C6\u30A3\u30C8\u30F3\u5C71\u8108\u3075\u3082\u3068\u306E\u30D3\u30AF\u30BF\u30FC\u306B\u3042\u308A\u307E\u3059\u3002 \u73FE\u5728\u3001COROS\u30A8\u30EA\u30FC\u30C8\u30A2\u30B9\u30EA\u30FC\u30C8\u30C1\u30FC\u30E0\u306B\u6240\u5C5E\u3057\u3001\u4ED6\u306E\u9078\u624B\u3068\u5171\u306B\u58EE\u5927\u306A\u8A08\u753B\u306E\u5B9F\u73FE\u3092\u76EE\u6307\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  hilaree_nelson: {
    name: 'Hilaree Nelson',
    country: 'アメリカ',
    achievement: '',
    desc: "Hilaree Nelson\uFF08\u30D2\u30E9\u30EA\u30FC\u30FB\u30CD\u30EB\u30BD\u30F3\uFF09\u306F\u3001\u63A2\u7D22\u3001\u5C71\u5CB3\u63A2\u691C\u3001\u30B9\u30AD\u30FC\u304C\u5927\u597D\u304D\u3067\u3001\u5730\u7403\u4E0A\u3067\u6700\u3082\u30A8\u30AD\u30BE\u30C1\u30C3\u30AF\u306A\u5C71\u8108\u63A2\u691C\u306B\u60C5\u71B1\u3092\u6CE8\u3044\u3067\u3044\u307E\u3059\u3002\u305D\u306E\u30AD\u30E3\u30EA\u30A2\u3092\u901A\u3058\u3066\u3001\u30B9\u30AD\u30FC\u767B\u5C71\u306E\u5206\u91CE\u3067\u6570\u591A\u304F\u306E\u300C\u521D\u300D\u3092\u9054\u6210\u3057\u3066\u3044\u307E\u3059\u3002\n    \u305D\u306E\u4E2D\u306B\u306F8000m\u5CF0\uFF08\u30A8\u30D9\u30EC\u30B9\u30C8\u3068\u30ED\u30FC\u30C4\u30A7\uFF092\u5EA7\u9023\u7D9A\u306E\u521D\u767B\u9802\u3001\u30D0\u30D5\u30A3\u30F3\u5CF6\u3067\u306E\u521D\u306E\u30B9\u30AD\u30FC\u4E0B\u5C71\u3001\u30A4\u30F3\u30C9\u306E\u30D1\u30D7\u30B9\u30E9\u5C71\u306B\u7C73\u56FD\u4EBA\u521D\u306E\u767B\u9802\u3068\u30B9\u30AD\u30FC\u4E0B\u5C71\u306A\u3069\u304C\u3042\u308A\u307E\u3059\u3002\u6700\u8FD1\u306E\u529F\u7E3E\u306F\u3001\u4E16\u754C\u7B2C4\u306E\u6700\u9AD8\u5CF0\u3067\u3042\u308B\u30ED\u30FC\u30C4\u30A7\u5C71\u3067\u306E\u521D\u306E\u30B9\u30AD\u30FC\u4E0B\u5C71\u3067\u3059\u3002\u300CProtect Our Winters\u300D\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30EA\u30FC\u30C0\u30FC\u3067\u3042\u308BThe North Face\uFF08\u30B6\u30FB\u30CE\u30FC\u30B9\u30FB\u30D5\u30A7\u30A4\u30B9\uFF09\u30B9\u30DD\u30FC\u30C4\u30C1\u30FC\u30E0\u306E\u30EA\u30FC\u30C0\u30FC\u3067\u3042\u308A\u3001\u5317\u6975\u570F\u56FD\u7ACB\u91CE\u751F\u52D5\u7269\u4FDD\u8B77\u533A\u306A\u3069\u306E\u539F\u751F\u5730\u57DF\u306E\u30B5\u30DD\u30FC\u30BF\u30FC\u3067\u3082\u3042\u308A\u307E\u3059\u3002\n    \u30D2\u30E9\u30EA\u30FC\u306F\u3001\u6B8B\u5B58\u3057\u3066\u3044\u308B\u539F\u751F\u5730\u57DF\u304C\u3001\u5730\u7403\u3084\u4EBA\u985E\u306E\u5FC3\u306E\u5E78\u798F\u306B\u3082\u91CD\u8981\u3060\u3068\u3044\u3046\u7406\u5FF5\u3092\u8CAB\u3044\u3066\u3044\u307E\u3059\u3002\u5148\u3054\u308D\u3001Men's Journal\uFF08\u30E1\u30F3\u30BA\u30B8\u30E3\u30FC\u30CA\u30EB\uFF09\u8A8C\u3067\u3001\u3053\u306E25\u5E74\u9593\u3067\u6700\u3082\u5192\u967A\u5FC3\u306E\u5F37\u3044\u5973\u6027\u306E\u4E00\u4EBA\u306B\u9078\u3070\u308C\u3001\u300E\u30CA\u30B7\u30E7\u30CA\u30EB\u30B8\u30AA\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u300F\u8A8C\u3067\u30822018\u5E74\u306EAdventurer of the Year\uFF08\u30A2\u30C9\u30D9\u30F3\u30C1\u30E3\u30FC\u30FB\u30AA\u30D6\u30FB\u30B6\u30FB\u30A4\u30E4\u30FC\uFF09\u3092\u53D7\u8CDE\u3057\u307E\u3057\u305F\u3002\n    \u4EBA\u3005\u306E\u60F3\u50CF\u529B\u3068\u60C5\u71B1\u3092\u304B\u304D\u305F\u3066\u308B\u3053\u3068\u304C\u3067\u304D\u308B\u3088\u3046\u306B\u3068\u306E\u9858\u3044\u3092\u8FBC\u3081\u3066\u3001\u5168\u7C73\u5404\u5730\u306E\u30B9\u30C6\u30FC\u30B8\u3067\u81EA\u8EAB\u306E\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u5171\u6709\u3057\u3001\u30B9\u30DD\u30FC\u30C4\u306B\u304A\u3044\u3066\u3057\u3066\u304D\u305F\u52AA\u529B\u306B\u3064\u3044\u3066\u4EBA\u3005\u306B\u4F1D\u3048\u3066\u3044\u307E\u3059\u3002\u30B3\u30ED\u30E9\u30C9\u5DDETelluride\uFF08\u30C6\u30EB\u30E9\u30A4\u30C9\uFF09\u306B\u4E00\u7DD2\u306B\u4F4F\u3080\u4E8C\u4EBA\u306E\u7537\u306E\u5B50\u306E\u6BCD\u89AA\u3067\u3082\u3042\u308B\u5F7C\u5973\u306F\u3001\u81EA\u5B85\u8FD1\u304F\u306E\u30B5\u30F3\u30D5\u30A1\u30F3\u5C71\u8108\u306B\u3001\u81EA\u5206\u306E\u5FC3\u306E\u5411\u304B\u3046\u5834\u6240\u3092\u898B\u3064\u3051\u305F\u306E\u3067\u3059\u3002"
  },
  jim_morrison: {
    name: 'Jim Morrison',
    country: 'アメリカ',
    achievement: '',
    desc: "Jim Morrison\uFF08\u30B8\u30E0\u30FB\u30E2\u30EA\u30BD\u30F3\uFF09\u306F2018\u5E74\u306B\u521D\u306E\u30ED\u30FC\u30C4\u30A7\u306E\u30B9\u30AD\u30FC\u4E0B\u5C71\u3092\u9054\u6210\u3057\u3001\u53F2\u4E0A\u6700\u9AD8\u306E\u30B9\u30AD\u30FC\u767B\u5C71\u5BB6\u306E\u4E00\u4EBA\u3068\u3057\u3066\u306E\u8A55\u4FA1\u3092\u78BA\u56FA\u305F\u308B\u3082\u306E\u306B\u3057\u307E\u3057\u305F\u3002\n    \u30ED\u30FC\u30C4\u30A7\u306E\u30B9\u30AD\u30FC\u4E0B\u5C71\u306F\u3001\u4E16\u754C\u3067\u3082\u6570\u5C11\u306A\u3044\u672A\u5F81\u670D\u306E\u30A2\u30EB\u30DA\u30F3\u30B9\u30AD\u30FC\u30B3\u30FC\u30B9\u306E\u4E00\u3064\u3067\u3059\u3002\u3053\u306E\u753B\u671F\u7684\u306A\u6210\u679C\u306B\u81F3\u308B\u307E\u3067\u306E\u6570\u5341\u5E74\u3001\u30E2\u30EA\u30BD\u30F3\u306F\u4E16\u754C\u4E2D\u3067\u81A8\u5927\u306A\u30B9\u30AD\u30FC\u7D4C\u9A13\u3092\u7A4D\u307F\u4E0A\u3052\u3066\u304D\u307E\u3057\u305F\u3002\n    \u30B7\u30E3\u30E2\u30CB\u30FC\u304B\u3089\u30A2\u30E9\u30B9\u30AB\u3001\u30A4\u30F3\u30C9\u306E\u30D2\u30DE\u30E9\u30E4\u307E\u3067\u3001\u4E16\u754C\u3067\u6700\u3082\u967A\u3057\u3044\u5C71\u306E\u3044\u304F\u3064\u304B\u306B\u767B\u308A\u3001\u96EA\u4E0A\u3092\u6ED1\u3063\u3066\u304D\u307E\u3057\u305F\u3002\n    \u305D\u306E\u4E2D\u306B\u306F\u3001\u30D1\u30D7\u30B9\u30E9\u5C71\u3067\u306E\u521D\u30B9\u30AD\u30FC\u4E0B\u5C71\u6210\u529F\u3001\u30C1\u30E7\u30FB\u30AA\u30E6\u30FC\u3067\u306E\u65B0\u30B9\u30AD\u30FC\u30B3\u30FC\u30B9\u6ED1\u8D70\u3001\u30A8\u30D9\u30EC\u30B9\u30C8\u9802\u4E0A\u304B\u3089\u306E\u30B9\u30AD\u30FC\u4E0B\u5C71\u3068\u4E2D\u8179\u30B9\u30AD\u30FC\u4E0B\u5C71\u306E\u6210\u529F\u306A\u3069\u304C\u3042\u308A\u307E\u3059\u3002\n    \u30E2\u30EA\u30BD\u30F3\u306F\u3001\u5C71\u4E0A\u3067\u7D20\u6674\u3089\u3057\u3044\u77AC\u9593\u3092\u7D4C\u9A13\u3059\u308B\u3060\u3051\u3067\u306A\u304F\u3001\u30BF\u30DB\u6E56\u3067\u9AD8\u7D1A\u4F4F\u5B85\u5EFA\u8A2D\u4E8B\u696D\u3092\u6240\u6709\u3001\u904B\u55B6\u3057\u3001\u5B9F\u696D\u5BB6\u3068\u3057\u3066\u3082\u6210\u529F\u3057\u3066\u3044\u307E\u3059\u3002\n    \u307E\u305F\u3001\u5730\u5143\u306E\u7A7A\u6E2F\u5730\u533A\u306E\u5F79\u54E1\u3068\u3057\u3066\u5730\u57DF\u793E\u4F1A\u306B\u8CA2\u732E\u3057\u3066\u3044\u308B\u307B\u304B\u3001\u975E\u55B6\u5229\u306E\u74B0\u5883\u56E3\u4F53\u300CProtect Our Winters\u300D\u306B\u3082\u7A4D\u6975\u7684\u306B\u95A2\u4E0E\u3057\u3066\u3044\u307E\u3059\u3002"
  },
  jason_antin: {
    name: 'Jason Antin',
    country: 'アメリカ',
    achievement: '',
    desc: "Jason Antin\uFF08\u30B8\u30A7\u30A4\u30BD\u30F3\u30FB\u30A2\u30F3\u30C6\u30A3\u30F3\uFF09\u306F\u30CB\u30E5\u30FC\u30A4\u30F3\u30B0\u30E9\u30F3\u30C9\u306E\u51FA\u8EAB\u3067\u3001\u73FE\u5728\u306F\u30B3\u30ED\u30E9\u30C9\u5DDE\u306B\u4F4F\u3093\u3067\u3044\u307E\u3059\u3002\u3059\u3079\u3066\u306E\u6642\u9593\u3092\u30EF\u30FC\u30AF\u30E9\u30A4\u30D5\u30D0\u30E9\u30F3\u30B9\u306E\u5B9F\u73FE\u306E\u305F\u3081\u306B\u8CBB\u3084\u3057\u3066\u3044\u307E\u3059\u3002\n    \u6570\u5C11\u306A\u3044\u30A2\u30A6\u30C8\u30C9\u30A2\u306B\u7279\u5316\u3057\u305F\u30B9\u30BF\u30FC\u30C8\u30A2\u30C3\u30D7\u4F01\u696D\u306E\u8A2D\u7ACB\u3092\u652F\u63F4\u3057\u3066\u3044\u308B\u307B\u304B\u3001\u6BCE\u5E74\u3001Alpenglow Mountain guides\uFF08\u30A2\u30EB\u30DA\u30F3\u30B0\u30ED\u30FC\u30FB\u30DE\u30A6\u30F3\u30C6\u30F3\u30FB\u30AC\u30A4\u30C9\uFF09\u3084Denver Mountain Guiding\uFF08\u30C7\u30F3\u30D0\u30FC\u30FB\u30DE\u30A6\u30F3\u30C6\u30F3\u30FB\u30AC\u30A4\u30C9\uFF09\u306E\u767B\u5C71\u6280\u8853\u6307\u5C0E\u306B\u591A\u304F\u306E\u6642\u9593\u3092\u5272\u3044\u3066\u3044\u307E\u3059\u3002\n    \u3053\u306E\u307B\u304B\u306B\u3082\u3001\u30B3\u30ED\u30E9\u30C9\u5DDE\u30DC\u30EB\u30C0\u30FC\u306B\u3042\u308B\u30A2\u30EB\u30DA\u30F3\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30BB\u30F3\u30BF\u30FC\u3067\u7B4B\u529B\u30FB\u4F53\u529B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306E\u30B3\u30FC\u30C1\u3092\u52D9\u3081\u3001\u30A2\u30B9\u30EA\u30FC\u30C8\u305F\u3061\u304C\u5C71\u3067\u906D\u9047\u3059\u308B\u3067\u3042\u308D\u3046\u8089\u4F53\u7684\u30FB\u7CBE\u795E\u7684\u306A\u53B3\u3057\u3044\u8A66\u7DF4\u306B\u5099\u3048\u3066\u4E8B\u524D\u306B\u6E96\u5099\u3057\u3066\u304A\u304F\u305F\u3081\u306E\u30B5\u30DD\u30FC\u30C8\u3092\u3057\u3066\u3044\u307E\u3059\u3002\n    \u4F59\u6687\u306B\u306F\u59BB\u306EJenny\uFF08\u30B8\u30A7\u30CB\u30FC\uFF09\u30683\u6B73\u306E\u5A18\u306EAvery\uFF08\u30A8\u30A4\u30D6\u30EA\u30FC\uFF09\u3068\u4E00\u7DD2\u306B\u3001\u30B3\u30ED\u30E9\u30C9\u5DDE\u306E\u30B4\u30FC\u30EB\u30C7\u30F3\u3067\u5BB6\u65CF\u306E\u6642\u9593\u3092\u697D\u3057\u307F\u3001\u307E\u305F\u3001\u5C71\u306E\u5CA9\u3084\u6C37\u3001\u96EA\u306E\u4E0A\u3092\u9AD8\u901F\u3067\u79FB\u52D5\u3059\u308B\u3053\u3068\u304C\u597D\u304D\u3067\u3059\u3002"
  },
  宮﨑喜美乃: {
    name: '宮﨑喜美乃 / Kimino Miyazaki',
    country: '日本',
    countryIcon: 'japan',
    achievement: "\u30FB2019\u5E74 Oman by UTMB 3\u4F4D\n    \u30FB2021\u5E74 LAKE BIWA 100 2\u4F4D\n    \u30FB2021\u5E74 Thailand by UTMB 2\u4F4D\n    \u30FB2022\u5E74 Ultra-Trail Mt.FUJI \u512A\u52DD",
    desc: "\u5BAE\u5D0E\u9078\u624B\u306F\u5144\u59C9\u306E\u5F71\u97FF\u3067\u8D70\u308B\u3053\u3068\u304C\u597D\u304D\u306B\u306A\u308A\u3001\u9AD8\u6821\u30FB\u5927\u5B66\u3067\u306F\u99C5\u4F1D\u306B\u53D6\u308A\u7D44\u307F\u5168\u56FD\u5927\u4F1A\u306B\u51FA\u5834\u3002\u9678\u4E0A\u7AF6\u6280\u306E\u4E00\u7DDA\u304B\u3089\u9000\u3044\u305F\u5F8C\u306F\u3001\u5927\u5B66\u9662\u6642\u4EE3\u306B\u5C02\u653B\u3057\u305F\u767B\u5C71\u306B\u3064\u3044\u3066\u306E\u904B\u52D5\u751F\u7406\u5B66\u7814\u7A76\u3092\u304D\u3063\u304B\u3051\u306B\u5C71\u306E\u9B45\u529B\u306B\u3068\u308A\u3064\u304B\u308C\u3066\u3044\u304D\u307E\u3059\u3002\n    \u73FE\u5728\u306F\u30D7\u30ED\u30C8\u30EC\u30A4\u30EB\u30E9\u30F3\u30CA\u30FC\u3068\u3057\u3066\u56FD\u5185\u5916\u306E\u30A6\u30EB\u30C8\u30E9\u30C8\u30EC\u30A4\u30EB\u30EC\u30FC\u30B9\u3067\u6D3B\u8E8D\u3002\u307E\u305F\u3001\u4E16\u754C\u6700\u9AD8\u9F62\u3067\u30A8\u30D9\u30EC\u30B9\u30C8\u3092\u767B\u9802\u3057\u305F\u4E09\u6D66\u96C4\u4E00\u90CE\u304C\u4EE3\u8868\u3092\u52D9\u3081\u308B\u30DF\u30A6\u30E9\u30FB\u30C9\u30EB\u30D5\u30A3\u30F3\u30BA\u306B\u3066\u3001\u767B\u5C71\u8005\u306B\u5411\u3051\u305F\u9AD8\u5C71\u75C5\u4E88\u9632\u306E\u305F\u3081\u306E\u4F4E\u9178\u7D20\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u6307\u5C0E\u3092\u884C\u3063\u3066\u3044\u307E\u3059\u3002"
  },
  近江竜之介: {
    name: '近江竜之介 / Ryunosuke Omi',
    country: '日本',
    countryIcon: 'japan',
    achievement: "\u30FBYouth Skyrunning World Championships 2018 U18 VK/SKY \u512A\u52DD\n    \u30FB2020\u5E74Skyrunning\u65E5\u672C\u9078\u624B\u6A29 VK\u90E8\u9580 \u512A\u52DD\n    \u30FB2021\u5E74Skyrunning\u65E5\u672C\u9078\u624B\u6A29 VK/SKY\u90E8\u9580 \u512A\u52DD\n    \u30FBYouth Skyrunning World Champs 2022U 23 VK \u512A\u52DD\n    \u30FBIZU TRAIL Journey 2022 69KM\u512A\u52DD",
    desc: "\u8FD1\u6C5F\u9078\u624B\u306F\u9AD8\u68211\u5E74\u751F\u306E\u82E5\u3055\u3067\u30012017\u5E74\u306E\u30B9\u30AB\u30A4\u30E9\u30F3\u30CB\u30F3\u30B0\u30A2\u30B8\u30A2\u9078\u624B\u6A29\u300C\u8535\u738B\u30B9\u30AB\u30A4\u30E9\u30F3\u30CB\u30F3\u30B0\u300D\u306B\u521D\u3081\u3066\u53C2\u52A0\u3057\u30664\u4F4D\u3068\u3044\u3046\u597D\u6210\u7E3E\u3092\u53CE\u3081\u307E\u3057\u305F\u3002\u305D\u306E\u5F8C\u306F\u300C\u8AB0\u3082\u304C\u8A8D\u3081\u308B\u300E\u4E16\u754C\u4E00\u300F\u306E\u79F0\u53F7\u3092\u7372\u308B\u300D\u3068\u3044\u3046\u76EE\u6A19\u3092\u63B2\u3052\u30012021\u5E74\u30B9\u30AB\u30A4\u30E9\u30F3\u30CB\u30F3\u30B0\u4E16\u754C\u9078\u624B\u6A29\u3067\u306F\u30B3\u30F3\u30D0\u30A4\u30F3\u30C9\uFF08\u8907\u5408\uFF09\u90E8\u9580\u30674\u4F4D\u306B\u5165\u308A\u307E\u3057\u305F\u3002\n    \u5F7C\u306E\u8CA0\u3051\u305A\u5ACC\u3044\u306A\u6027\u683C\u3001\u76EE\u6A19\u9054\u6210\u306E\u305F\u3081\u306B\u76EE\u306E\u524D\u306E\u8AB2\u984C\u3092\u3057\u3063\u304B\u308A\u3068\u3053\u306A\u3057\u3066\u7740\u5B9F\u306B\u300C\u5C71\u9802\u300D\u3092\u76EE\u6307\u3059\u59FF\u52E2\u306BCOROS\u306F\u6DF1\u3044\u611F\u9298\u3092\u53D7\u3051\u3001\u30A2\u30F3\u30D0\u30B5\u30C0\u30FC\u5951\u7D04\u3092\u7DE0\u7D50\u3057\u307E\u3057\u305F\u3002COROS\u306E\u30B9\u30DD\u30FC\u30C4\u30A6\u30A9\u30C3\u30C1\u306B\u5BFE\u3057\u3066\u3001\u5F7C\u306F\u6B21\u306E\u3088\u3046\u306B\u8868\u73FE\u3057\u3066\u3044\u307E\u3059\u3002\n    \u300C\u521D\u3081\u3066\u624B\u306B\u53D6\u3063\u305F\u6642\u306E\u7387\u76F4\u306A\u611F\u60F3\u306F\u8EFD\u3055\u306B\u9A5A\u304D\u307E\u3057\u305F\u3002\u81EA\u5206\u304C\u6C42\u3081\u3066\u3044\u305F\u3082\u306E\u306B\u51FA\u4F1A\u3048\u305F\u611F\u899A\u3067\u3057\u305F\u300D"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/retail.js
/* harmony default export */ const jp_retail = ({
  retailTitle: '取扱店舗'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/privacy.js
/* harmony default export */ const jp_privacy = ({
  privacyTitle: 'プライバシポリシー',
  title: 'プライバシポリシー',
  updateDate: '更新日：8/15/2020',
  updateDesc: '本プライバシーポリシーはCOROS Wearables Inc.（「COROS」または「当社」）がどのようにユーザーの情報を収集、使用、開示するかを説明するものです。これは、COROSの製品やウェブサイト、モバイルアプリを含むサービス（以下「サービス」）をユーザーが使用する際や、当社との相互交流で収集される情報に対して適用されます。もし、本プライバシーポリシーに疑問がございましたら japan@coros.com よりご連絡ください。',
  infoTitle: '情報収集',
  providedInfo: {
    title: 'ユーザーが当社に提供する情報',
    desc: '当社はサービスを通じて、またはその他の方法によってユーザーから得た情報を収集します。例えば、ユーザーのアカウント登録、プロフィール更新、ニュースレター登録、購入、カスタマーサポート、ワークアウト履歴、または別の方式で提供される情報などを指します。収集可能な情報の種類はユーザーの氏名、メールアドレス、郵送 / 請求先の住所、支払いに関する情報などの情報です。'
  },
  collectForService: {
    title: 'サービス使用時に収集する情報',
    desc: "\u30E6\u30FC\u30B6\u30FC\u304C\u30B5\u30FC\u30D3\u30B9\u3092\u4F7F\u7528\u3059\u308B\u969B\u306B\u3001\u4EE5\u4E0B\u306E\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u81EA\u52D5\u7684\u306B\u53CE\u96C6\u3057\u307E\u3059\u3002\n    \u25CF \u30ED\u30B0\u30D5\u30A1\u30A4\u30EB\uFF1A\u30E6\u30FC\u30B6\u30FC\u304C\u4F7F\u7528\u3059\u308B\u30D6\u30E9\u30A6\u30B6\u306E\u30BF\u30A4\u30D7\u3001\u30A2\u30AF\u30BB\u30B9\u6642\u9593\u3001\u95B2\u89A7\u30DA\u30FC\u30B8\u3001IP\u30A2\u30C9\u30EC\u30B9\u3001\u304A\u3088\u3073COROS\u30A6\u30A7\u30D6\u30B5\u30A4\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u524D\u306B\u8A2A\u308C\u305F\u30DA\u30FC\u30B8\u306A\u3069\u306E\u30ED\u30B0\u30D5\u30A1\u30A4\u30EB\u3092\u53CE\u96C6\u3057\u307E\u3059\u3002\n    \u25CF \u30C7\u30D0\u30A4\u30B9\u60C5\u5831\uFF1A\u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u304C\u30B5\u30FC\u30D3\u30B9\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u305F\u3081\u306EPC\u3001\u30E2\u30D0\u30A4\u30EB\u306B\u95A2\u3059\u308B\u60C5\u5831\u3092\u53CE\u96C6\u3057\u3001\u305D\u308C\u306B\u306F\u30CF\u30FC\u30C9\u30A6\u30A7\u30A2\u30E2\u30C7\u30EB\u3001\u30AA\u30DA\u30EC\u30FC\u30C6\u30A3\u30F3\u30B0\u30B7\u30B9\u30C6\u30E0\u3001\u30D0\u30FC\u30B8\u30E7\u30F3\u3001IMEI\u3001\u30E2\u30D0\u30A4\u30EB\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u60C5\u5831\u3092\u542B\u307F\u307E\u3059\u3002\n    \u25CF \u4F4D\u7F6E\u60C5\u5831\uFF1A\u5F53\u793E\u306FIP\u30A2\u30C9\u30EC\u30B9\u304B\u3089\u304A\u304A\u3088\u305D\u306E\u4F4D\u7F6E\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B\u306A\u3069\u3001\u69D8\u3005\u306A\u6280\u8853\u3092\u901A\u3058\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u4F4D\u7F6E\u60C5\u5831\u3092\u53CE\u96C6\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306E\u540C\u610F\u3092\u5F97\u3066\u3001\u5F53\u793E\u306F\u30E2\u30D0\u30A4\u30EB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u901A\u3058\u3066\u3088\u308A\u6B63\u78BA\u306A\u4F4D\u7F6E\u60C5\u5831\u3092\u5F97\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\n    \u25CF \u65E5\u5E38\u306E\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0 / \u904B\u52D5\u30C7\u30FC\u30BF\uFF1A\u30E6\u30FC\u30B6\u30FC\u306FCOROS\u30A2\u30D7\u30EA\u3092\u4F7F\u3063\u3066\u3001\u30C7\u30D0\u30A4\u30B9\uFF08\u30A6\u30A9\u30C3\u30C1\uFF09\u306E\u65E5\u5E38\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0 / \u904B\u52D5\u30C7\u30FC\u30BF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u3068\u3001\u30C7\u30FC\u30BF\u306F\u30B5\u30FC\u30D0\u30FC\u306B\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u4FDD\u5B58\u3055\u308C\u307E\u3059\u3002\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u305F\u30C7\u30FC\u30BF\u3068\u306F\u6B69\u6570\u3001\u30AB\u30ED\u30EA\u30FC\u3001\u5FC3\u62CD\u6570\u3001\u904B\u52D5\u6642\u9593\u306A\u3069\u306E\u904B\u52D5\u30C7\u30FC\u30BF\u3092\u6307\u3057\u307E\u3059\u3002\n    \u30A6\u30A9\u30C3\u30C1\u306EGPS\u30B9\u30A4\u30C3\u30C1\u3092\u30AA\u30D5\u306B\u3059\u308B\u3068\u3001\u904B\u52D5\u30C7\u30FC\u30BF\u306E\u8A18\u9332\u3084\u30B5\u30FC\u30D0\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306F\u884C\u308F\u308C\u307E\u305B\u3093\u3002\u30DE\u30C3\u30D4\u30F3\u30B0\u6A5F\u80FD\u3092\u4F7F\u7528\u3057\u3066\u3044\u308B\u5834\u5408\u3001\u4F4D\u7F6E\u60C5\u5831\u3092\u30DE\u30C3\u30D7\u306B\u9001\u3063\u3066\u30B5\u30FC\u30D3\u30B9\u30D7\u30ED\u30D0\u30A4\u30C0\u3092\u4F5C\u6210\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u4F4D\u7F6E\u3092\u30DE\u30C3\u30D4\u30F3\u30B0\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u3053\u308C\u3089\u306E\u30B5\u30D7\u30E9\u30A4\u30E4\u30FC\u306F\u3001\u898F\u5B9A\u306B\u3088\u308A\u4ED6\u306E\u76EE\u7684\u306E\u305F\u3081\u306B\u3053\u306E\u30C7\u30FC\u30BF\u3092\u5171\u6709\u307E\u305F\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\n    \u25CF COROS Training Hub\u60C5\u5831\uFF1ACOROS Training Hub\u3092\u4F7F\u7528\u3059\u308B\u306B\u306F\u3001COROS\u30A2\u30D7\u30EA\u3078\u306E\u30ED\u30B0\u30A4\u30F3\u60C5\u5831\u3092\u7528\u3044\u3066\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u307E\u305F\u3001\u30B3\u30FC\u30C1\u6A5F\u80FD\u306E\u7533\u8ACB\u3092\u901A\u904E\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306F\u3001Training Hub\u3092\u7528\u3044\u3066\u30C1\u30FC\u30E0\u3092\u4F5C\u6210\u3057\u3001\u62DB\u5F85\u30EA\u30F3\u30AF / QR\u30B3\u30FC\u30C9\u3067\u4ED6\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u30C1\u30FC\u30E0\u306B\u62DB\u5F85\u3067\u304D\u307E\u3059\u3002Training Hub\u306E\u30DE\u30A4\u30DA\u30FC\u30B8\u3067\u306F\u3001\u500B\u4EBA\u60C5\u5831\u3084\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u30C7\u30FC\u30BF\u3092\u975E\u8868\u793A\u306B\u3057\u305F\u308A\u30C1\u30FC\u30E0\u30E1\u30F3\u30D0\u30FC\u306B\u95B2\u89A7\u53EF\u3068\u3055\u305B\u308B\u3088\u3046\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u6A29\u9650\u304C\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002\n    Training Hub\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306E\u9032\u6357\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u3001\u30B3\u30FC\u30C1\u304C\u9078\u624B\u306E\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u30AB\u30EC\u30F3\u30C0\u30FC\u3092\u7DE8\u96C6\u3001\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u30C7\u30FC\u30BF\u3092\u95B2\u89A7\u3001\u30B3\u30E1\u30F3\u30C8\u3092\u6B8B\u3059\u305F\u3081\u306E\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u6A29\u9650\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059\u3002COROS\u306FTraining Hub\u5185\u3067\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u3084\u308A\u3068\u308A\u306E\u5185\u5BB9\u3084\u3001\u30E6\u30FC\u30B6\u30FC\uFF08\u30AA\u30F3\u30E9\u30A4\u30F3 / \u30AA\u30D5\u30E9\u30A4\u30F3\uFF09\u306E\u884C\u70BA\u306B\u3064\u3044\u3066\u8CAC\u4EFB\u3092\u8CA0\u3044\u307E\u305B\u3093\u3002\n    \u25CF COROS\u30A2\u30D7\u30EA\u3067\u306E\u30C7\u30FC\u30BF\u9001\u4FE1\u6A5F\u80FD\uFF1ACOROS\u30A2\u30D7\u30EA\u304C\u6B63\u3057\u304F\u6A5F\u80FD\u3057\u3066\u3044\u306A\u3044\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306F\u30A2\u30D7\u30EA\u304B\u3089\u4E0D\u5177\u5408\u5185\u5BB9\u306E\u30EC\u30DD\u30FC\u30C8\u3092\u5F53\u793E\u306E\u5206\u6790\u30C1\u30FC\u30E0\u306B\u9001\u4FE1\u3067\u304D\u307E\u3059\u3002\u3053\u306E\u30EC\u30DD\u30FC\u30C8\u306F\u533F\u540D\u3067\u3001\u500B\u4EBA\u60C5\u5831\u306F\u4E00\u5207\u542B\u307E\u308C\u307E\u305B\u3093\u3002\u307E\u305F\u3001\u30A2\u30D7\u30EA\u3067\u306F\u30E6\u30FC\u30B6\u30FC\u306E\u500B\u4EBA\u30C7\u30FC\u30BF\u3092\u533F\u540D\u3067\u53CE\u96C6\u3057\u3001\u3069\u306E\u6A5F\u80FD\u304C\u6700\u3082\u4EBA\u6C17\u304B\u3092\u958B\u767A\u8005\u306B\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF\u3059\u308B\u3053\u3068\u3067\u3001\u4ECA\u5F8C\u306E\u88FD\u54C1\u958B\u767A\u306E\u53C2\u8003\u3068\u306A\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\n    \u25CF Cookie\u3068\u4ED6\u306E\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u6280\u8853\u3067\u53CE\u96C6\u3055\u308C\u305F\u60C5\u5831\uFF1ACOROS\u306E\u30B5\u30FC\u30D3\u30B9\u30D7\u30ED\u30D0\u30A4\u30C0\u306F\u3001Cookie\u3068\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30D3\u30FC\u30B3\u30F3\u3092\u542B\u3080\u69D8\u3005\u306A\u6280\u8853\u3092\u4F7F\u7528\u3057\u3066\u60C5\u5831\u3092\u53CE\u96C6\u3057\u3066\u3044\u307E\u3059\u3002Cookie\u306F\u30CF\u30FC\u30C9\u30C7\u30A3\u30B9\u30AF\u30C9\u30E9\u30A4\u30D6\u3084\u30C7\u30D0\u30A4\u30B9\u30E1\u30E2\u30EA\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u308B\u5C0F\u578B\u306E\u30C7\u30FC\u30BF\u30D5\u30A1\u30A4\u30EB\u3067\u3042\u308A\u3001\u30A2\u30AF\u30BB\u30B9\u5C65\u6B74\u304B\u3089\u30E6\u30FC\u30B6\u30FC\u306E\u50BE\u5411\u3092\u5206\u6790\u3057\u3066\u30B5\u30FC\u30D3\u30B9\u3084\u30E6\u30FC\u30B6\u30FC\u4F53\u9A13\u306E\u6539\u5584\u306B\u7E4B\u304C\u308A\u307E\u3059\u3002\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30D3\u30FC\u30B3\u30F3\u306F\u96FB\u5B50\u5199\u771F\u3067\u3042\u308A\u3001\u5F53\u793E\u306E\u30B5\u30FC\u30D3\u30B9\u3084\u96FB\u5B50\u30E1\u30FC\u30EB\u306B\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002Cookie\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068\u3067\u3001\u30A2\u30AF\u30BB\u30B9\u56DE\u6570\u3084\u5229\u7528\u72B6\u6CC1\u7B49\u3092\u628A\u63E1\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  },
  collectFromOther: {
    title: 'その他情報源から取得する情報',
    desc: "\u5F53\u793E\u306F\u305D\u306E\u4ED6\u306E\u60C5\u5831\u6E90\u304B\u3089\u3082\u60C5\u5831\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u4F8B\u3048\u3070\u3001\u30E6\u30FC\u30B6\u30FC\u304CSNS\u3092\u4F7F\u7528\u3057\u3066\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u4F5C\u6210\u3059\u308B\u5834\u5408\u3001\u5F53\u793E\u306F\u305D\u308C\u3089\u306E\u30B5\u30FC\u30D3\u30B9\u306B\u3088\u3063\u3066\u6C7A\u3081\u3089\u308C\u305F\u6A29\u9650\u306B\u57FA\u3065\u3044\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u6C0F\u540D\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3001\u30D5\u30A9\u30ED\u30FC\u30EA\u30B9\u30C8\u306A\u3069\u306E\u60C5\u5831\u3092\u53CE\u96C6\u3057\u307E\u3059\u3002 \n    \u5F53\u793E\u306F\u30E6\u30FC\u30B6\u30FC\u306B\u95A2\u3057\u3066\u53D6\u5F97\u3059\u308B\u60C5\u5831\u3092\u3001\u4EE5\u4E0B\u306E\u60C5\u5831\u3068\u7D50\u3073\u4ED8\u3051\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n    \u25CF \u5F53\u793E\u306E\u30B5\u30FC\u30D3\u30B9\u306E\u63D0\u4F9B\u3001\u7DAD\u6301\u3001\u6539\u5584\u3001\u65B0\u88FD\u54C1\u3084\u30B5\u30FC\u30D3\u30B9\u306E\u958B\u767A\u3002\n    \u25CF \u30E6\u30FC\u30B6\u30FC\u304C\u8CFC\u5165\u3084\u8981\u6C42\u3057\u305F\u88FD\u54C1\u3001\u30B5\u30FC\u30D3\u30B9\u306E\u63D0\u4F9B\u3084\u4EA4\u4ED8\u3002\n    \u25CF \u901A\u77E5\u3001\u66F4\u65B0\u3001\u30A2\u30E9\u30FC\u30C8\u3001\u78BA\u8A8D\u3001\u30AB\u30B9\u30BF\u30DE\u30FC\u30B5\u30FC\u30D3\u30B9\u306A\u3069\u3001\u305D\u306E\u4ED6\u30B5\u30DD\u30FC\u30C8\u3084\u7BA1\u7406\u306B\u304B\u304B\u308F\u308B\u60C5\u5831\u306E\u901A\u77E5\u306E\u767A\u9001\u3002\n    \u25CF \u88FD\u54C1\u3001\u30B5\u30FC\u30D3\u30B9\u3001\u5272\u5F15\u3001\u8CA9\u58F2\u4FC3\u9032\u3001\u305D\u306E\u4ED6\u306E\u60C5\u5831\u306B\u3064\u3044\u3066\u306E\u30E6\u30FC\u30B6\u30FC\u3068\u306E\u30B3\u30DF\u30E5\u30CB\u30B1\u30FC\u30B7\u30E7\u30F3\u3002\n    \u25CF \u5F53\u793E\u306E\u30B5\u30FC\u30D3\u30B9\u306B\u95A2\u3059\u308B\u52D5\u5411\u3001\u5229\u7528\u72B6\u6CC1\u3068\u6D3B\u52D5\u306E\u30E2\u30CB\u30BF\u30EA\u30F3\u30B0\u3068\u5206\u6790\u3002\n    \u25CF \u8A50\u6B3A\u884C\u70BA / \u4E0D\u6B63\u884C\u70BA\u306E\u635C\u67FB\u3001\u8ABF\u67FB\u3001\u9632\u6B62\u3001\u307E\u305F\u3001\u5F53\u793E\u3084\u4ED6\u30E6\u30FC\u30B6\u30FC\u306E\u6A29\u5229\u3068\u8CA1\u7523\u306E\u4FDD\u8B77\u3002\n    \u25CF \u500B\u4EBA\u6700\u9069\u5316\u306B\u3088\u308B\u30B5\u30FC\u30D3\u30B9\u306E\u6539\u5584\u3068\u30E6\u30FC\u30B6\u30FC\u306E\u8208\u5473\u306B\u30DE\u30C3\u30C1\u30F3\u30B0\u3055\u305B\u305F\u5185\u5BB9\u3084\u6A5F\u80FD\u306E\u63D0\u4F9B\u3002"
  },
  sharingInfo: {
    title: '情報共有',
    desc: "\u5F53\u793E\u306F\u3001\u4EE5\u4E0B\u306E\u65B9\u6CD5\u3084\u30D7\u30E9\u30A4\u30D0\u30B7\u30FC\u30DD\u30EA\u30B7\u30FC\u306B\u8A18\u8F09\u3055\u308C\u305F\u65B9\u6CD5\u3067\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u5171\u6709\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\n    \u25CF \u5F53\u793E\u306F\u3001\u5F53\u793E\u306B\u4EE3\u308F\u3063\u3066\u30B5\u30FC\u30D3\u30B9\uFF08\u53D7\u6CE8\u306E\u5C65\u884C\u3084\u30E6\u30FC\u30B6\u30FC\u3078\u306E\u30E1\u30FC\u30EB\u9001\u4FE1\u306A\u3069\uFF09\u3092\u884C\u3046\u7B2C\u4E09\u8005\u3068\u500B\u4EBA\u30C7\u30FC\u30BF\u3092\u5171\u6709\u3057\u307E\u3059\u3002\n    \u25CF\u30E6\u30FC\u30B6\u30FC\u304CCOROS\u30A2\u30AB\u30A6\u30F3\u30C8\u3092Strava\u3001TrainingPeaks\u7B49\u306E\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30B5\u30FC\u30D3\u30B9\u306A\u3069\u306B\u63A5\u7D9A\u3057\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u30C7\u30FC\u30BF\u306F\u81EA\u52D5\u7684\u306B\u305D\u308C\u3089\u306E\u30B5\u30FC\u30D3\u30B9\u306B\u9001\u4FE1\u3055\u308C\u307E\u3059\u3002\u30E6\u30FC\u30B6\u30FC\u306F\u3044\u3064\u3067\u3082COROS\u30A2\u30D7\u30EA\u306E\u81EA\u52D5\u540C\u671F\u8A2D\u5B9A\u3092\u7121\u52B9\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u304C\u3001\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30B5\u30FC\u30D3\u30B9\u306B\u9001\u4FE1\u3055\u308C\u305F\u30C7\u30FC\u30BF\u306F\u3001\u305D\u306E\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u524A\u9664\u3055\u308C\u306A\u3044\u9650\u308A\u305D\u3053\u306B\u7559\u307E\u308A\u307E\u3059\u3002\n    \u25CF \u5F53\u793E\u306E\u30B5\u30FC\u30D3\u30B9\u306E\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u306B\u53C2\u52A0\u3059\u308B\u3068\u3001\u30B5\u30FC\u30D3\u30B9\u3092\u901A\u3058\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u540D\u3084\u500B\u4EBA\u60C5\u5831\u306A\u3069\u306E\u60C5\u5831\u304C\u516C\u958B\u3067\u304D\u307E\u3059\u3002\n    \u25CF \u6CD5\u57F7\u884C\u6A5F\u95A2\u3084\u305D\u306E\u4ED6\u306E\u6CD5\u7684\u4E8B\u9805\u3067\u5FC5\u8981\u306A\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u500B\u4EBA\u60C5\u5831\u3092\u5171\u6709\u3057\u307E\u3059\u3002\n    \u25CF \u30E6\u30FC\u30B6\u30FC\u306E\u884C\u52D5\u304C\u5F53\u793E\u306E\u30E6\u30FC\u30B6\u30FC\u5951\u7D04\u3084\u30DD\u30EA\u30B7\u30FC\u306B\u77DB\u76FE\u3057\u3066\u3044\u308B\u3068\u5F53\u793E\u304C\u5224\u65AD\u3057\u305F\u5834\u5408\u3001\u5F53\u793E\u3084\u4ED6\u8005\u306E\u6A29\u5229\u3001\u8CA1\u7523\u3001\u5B89\u5168\u3092\u4FDD\u8B77\u3059\u308B\u305F\u3081\u306B\u30E6\u30FC\u30B6\u30FC\u306E\u500B\u4EBA\u60C5\u5831\u3092\u516C\u958B\u3067\u304D\u307E\u3059\u3002\n    \u25CF \u4ED6\u306E\u4F1A\u793E\u3068\u4EFB\u610F\u306E\u5408\u4F75\u3067\u4F1A\u793E\u306E\u8CC7\u7523\u3092\u58F2\u5374\u3001\u878D\u8CC7\u3057\u305F\u308A\u3001\u5F53\u793E\u306E\u696D\u52D9\u306B\u95A2\u9023\u3057\u305F\u8CB7\u53CE\u3001\u307E\u305F\u306F\u305D\u306E\u5354\u8B70\u3055\u308C\u3066\u3044\u308B\u671F\u9593\u4E2D\u306B\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u500B\u4EBA\u60C5\u5831\u3092\u5171\u6709\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n    \u25CF \u5F53\u793E\u3068\u73FE\u5728 / \u5C06\u6765\u306E\u89AA\u4F1A\u793E\u3001\u5B50\u4F1A\u793E\u3001\u95A2\u9023\u4F1A\u793E\u3068\u306E\u9593\u3067\u6240\u6709\u6A29\u306B\u304A\u3044\u3066\u306E\u5354\u8B70\u3067\u30E6\u30FC\u30B6\u30FC\u306E\u500B\u4EBA\u60C5\u5831\u3092\u5171\u6709\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n    \u25CF \u30E6\u30FC\u30B6\u30FC\u306E\u540C\u610F\u3092\u5F97\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u6307\u5C0E\u306E\u969B\u306B\u500B\u4EBA\u60C5\u5831\u3092\u5171\u6709\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002"
  },
  advancedRawData: {
    title: 'ワークアウトに関するローデータ',
    desc: 'COROSデバイスにあるGPSデータ、心拍数、バッテリー性能などワークアウトに関するローデータはデバイスに保存されます。デバイスの不具合解決のためにカスタマーサポートに連絡する際は、COROSアプリからユーザーデバイスのローデータ送信を要求することがあり、ハードウェア故障による保証請求時の重要な判断材料となることがあります。'
  },
  socialSharingFeat: {
    title: 'SNSへのシェア機能',
    desc: '本サービスは、ユーザーが他のSNSで当社のサービスへのシェアすることを許可しています。ユーザーが利用するSNSのシェア機能によってユーザーと交流のある人や一般の人たちに情報を共有できます。ソーシャル共有機能に関するデータ収集・処理の目的と範囲に関しては、これらの機能を提供する会社のプライバシーポリシーをご参照下さい。'
  },
  ad: {
    title: '第三者が提供する分析と広告サービス',
    desc: "\u5F53\u793E\u306F\u3001\u7B2C\u4E09\u8005\u3092\u4F7F\u3063\u3066COROS\u30A6\u30A7\u30D6\u30B5\u30A4\u30C8\u3068\u30AA\u30F3\u30E9\u30A4\u30F3\u30B5\u30FC\u30D3\u30B9\u306E\u5206\u6790\u3068\u5E83\u544A\u30B5\u30FC\u30D3\u30B9\u3092\u63D0\u4F9B\u3059\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u308C\u3089\u306E\u4F1A\u793E\u306FCookie\u3001\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30D3\u30FC\u30B3\u30F3\u3001IMEI\u3001\u304A\u3088\u3073\u4ED6\u306E\u6280\u8853\u3092\u4F7F\u7528\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306EIP\u30A2\u30C9\u30EC\u30B9\u3001\u30A6\u30A7\u30D6\u30D6\u30E9\u30A6\u30B6\u3001\u30E2\u30D0\u30A4\u30EB\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u60C5\u5831\u3001\u30A2\u30AF\u30BB\u30B9\u5148\u3001\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u95B2\u89A7\u6642\u9593\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3067\u306E\u30EA\u30F3\u30AF\u30A2\u30AF\u30BB\u30B9\u3084\u8EE2\u63DB\u60C5\u5831\u3092\u542B\u3081\u3001\u30E6\u30FC\u30B6\u30FC\u304C\u4F7F\u7528\u3057\u305F\u30B5\u30FC\u30D3\u30B9\u3084\u4ED6\u306E\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u3001\u30AA\u30F3\u30E9\u30A4\u30F3\u30B5\u30FC\u30D3\u30B9\u306B\u95A2\u3059\u308B\u60C5\u5831\u3092\u53CE\u96C6\u3067\u304D\u307E\u3059\u3002\n    COROS\u3068\u4ED6\u306E\u4F1A\u793E\u306F\u3053\u306E\u60C5\u5831\u3092\u57FA\u306B\u5229\u7528\u72B6\u6CC1\u3092\u5206\u6790\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u8208\u5473\u306B\u57FA\u3065\u3044\u305F\u5E83\u544A\u3068\u5185\u5BB9\u3092\u8868\u793A\u3057\u307E\u3059\u3002\u5E83\u544A\u3092\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u3067\u95B2\u89A7\u3057\u306A\u3044\u65B9\u6CD5\u306E\u9078\u629E\u3092\u542B\u3081\u3001\u5E83\u544A\u306B\u95A2\u3059\u308B\u60C5\u5831\u306B\u3064\u3044\u3066\u306F www.aboutads.info/choices \u306E\u30A6\u30A7\u30D6\u30B5\u30A4\u30C8\u3092\u3054\u53C2\u7167\u4E0B\u3055\u3044\u3002\u30E6\u30FC\u30B6\u30FC\u306E\u30E2\u30D0\u30A4\u30EB\u30C7\u30D0\u30A4\u30B9\u306F\u3001\u95A2\u5FC3\u306B\u57FA\u3065\u304F\u5E83\u544A\u3092\u8868\u793A\u3059\u308B\u305F\u3081\u3001\u30A2\u30D7\u30EA\u3067\u53CE\u96C6\u3055\u308C\u308B\u60C5\u5831\u306E\u5236\u9650\u6A5F\u80FD\u3092\u542B\u3080\u3053\u3068\u304C\u53EF\u80FD\u3067\u3059\u3002"
  },
  deleteAccount: {
    title: 'アカウントの削除',
    desc: '個人データを含むCOROSアカウントを削除したい場合は japan@coros.com までご連絡ください。'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/tradeIn.js
/* harmony default export */ const jp_tradeIn = ({
  pageTitle: 'TRADE IN APPLICATION',
  pageDesc: "Trade in a working GPS watch from any brand including COROS for up to a $100 credit towards your new COROS watch purchase. Each trade-in eligible watch applies to only one new watch purchase.\n\nOnce the trade-in unit has been shipped to us, it is unable to be returned or refunded if you change your mind.",
  residentsDescNotify: "The program is currently available for residents in the United States only. ",
  residentsDesc: "The program is currently available for US residents only. ",
  nextSteps: ['Our team will review your information and provide an estimate value by email.', 'If you choose to accept the offer, place your new watch order with the original price.', 'Ship the trade in unit with prepaid shipping label provided by COROS, along with your order email confirmation.', 'We will refund the value of your trade in to your order once we receive your shipment.', "This offer can't be combined with other price discounts.", 'Enjoy your newly upgraded COROS watch!'],
  howItWorks: ['Submit information', 'Receive an offer with value', 'Place an order for the new watch and ship your trade in watch', 'Get a refund when we receive your trade in watch'],
  notifyButton: 'NOTIFY ME',
  notifyPlaceholder: 'NOTIFY WHEN AVAILABLE'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/apex.js
/* harmony default export */ const jp_apex = ({
  accessories: 'ACCESSORIES',
  battery_life: {
    title: 'Ultra-Durable\nBattery Life',
    desc: "Make constantly charging your watch a thing of the past. With APEX, you will have a watch that is built to last above and beyond your workout. In UltraMax setting, the battery is carefully\n        engineered to last up to 100 hours using GPS. While using normal mode will yield up to 35 hours, and regular usage up to 30 days."
  },
  'Built in Premium': {
    title: 'Built in Premium',
    desc: "Transitioning from the workplace to training is easy with the APEX's intelligent build and design. With finish options including titanium alloy and stainless steel bezel alongside a sapphire\n        glass face for extreme protection, you are prepared for any and every environment."
  },
  'Simplicity at its Finest': {
    title: 'Simplicity at its Finest',
    desc: "Changing screens and using devices can be overwhelming with traditional buttons, especially in the middle of a workout. With the digital dial, you can easily navigate through the APEX,\n        allowing you to focus on the important things like finishing your run or prepping your next set."
  },
  'Training Efficiency Without Injury': {
    title: 'Train Smarter With EvoLab',
    desc: "Unique metrics to track critical aspects of your training. Creating a comprehensive picture of your training to help you perform to the very best of your ability. Tired from a recent training session? View your Fatigue and Recovery metrics to see if recent workout stress is within our recommended ranges. Preparing for a race but unsure how to estimate the impact of training or fitness? Utilize our predictive tools within COROS Training Hub to estimate your Base Fitness and Training Load measurements, allowing you to peak at just the right time."
  },
  'Navigation Track': {
    title: 'Navigation Track',
    desc: "Equipped with track and navigation features, APEX can be your best tool when you need directions the most. Routes are uploaded and displayed on grid as a bread crumb trail with real time\n        information on heading and elevation and alerts to help you get back on course."
  },
  'Smart Learning Stride Length': {
    title: 'Smart Learning Stride Length',
    desc: "Introducing COROS' very own, Intelligent Stride Algorithm. This unique algorithm embodies machine learning at its core to record your personal range of motion while running. This will\n        build your very own stride model that will be used for indoor running or areas of weak GPS signal (such as tunnels)."
  },
  gpsAbilities: ['Learn Running Habits\nDuring Normal GPS', 'Estimate Running Distance And\nTrack When GPS Is Weak Or Lost'],
  'Your Complete Training Guide': {
    title: 'Your Complete Training Guide',
    desc: "Based on a unique algorithm with lactate threshold, VO2 Max and HR, the COROS Trainer dials-in your running training every day. Using your personal historical data along with metrics from\n      your latest activity, such as pace, distance and HR - COROS Trainer will calculate a perceived effort and recommend a time for full recovery."
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: "With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or\n      Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training\n      partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and\n      onto your watch. With the new training mode, your best efforts are well within your reach."
  },
  'Stay on Track': {
    title: 'Stay on Track',
    desc: "A standard track is 400m, so why can\u2019t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts\n      are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the\n      track \u2013 just like how you run on it."
  },
  pod: 'Working with COROS Performance Optimization Device (POD), APEX is able to provide advanced running metrics in real time, including power and form data to help turn you into a smarter and more efficient runner.',
  podLinkText: 'Check out COROS POD',
  battery: {
    size46: {
      normal: "35 Hours Normal\n            GPS Mode",
      ultra: "70 Hours\n            UltraMax GPS Mode",
      regular: "30 Days\n            Regular Use"
    },
    size42: {
      normal: "25 Hours Normal\n            GPS Mode",
      ultra: "60 Hours\n            UltraMax GPS Mode",
      regular: "24 Days\n            Regular Use"
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/apex2.js
/* harmony default export */ const jp_apex2 = ({
  apex2title: 'COROS APEX 2/2 Pro',
  title: 'COROS APEX 2/2 Pro GPS Outdoor Watch',
  desc: 'トレイルランニングなど長距離とスピードを求める方向け',
  apex2Accessories: 'APEX 2アクセサリー',
  apex2proAccessories: 'APEX 2 Proアクセサリー',
  productTitle: '大自然への\n冒険のために',
  productDesc1: "\u30A2\u30A6\u30C8\u30C9\u30A2\u30B9\u30DD\u30FC\u30C4\u30A6\u30A9\u30C3\u30C1\u306EAPEX 2 / APEX 2 Pro\u306F\u3001\n  \u30CF\u30FC\u30C9\u306A\u6C17\u8C61\u6761\u4EF6\u3084\u5730\u5F62\u3067\u306E\u4F7F\u7528\u3092\u60F3\u5B9A\u3057\u3066\u8A2D\u8A08\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n  ",
  productDesc2: "\u9811\u4E08\u306A\u672C\u4F53\u3001\u6539\u826F\u3055\u308C\u305FGPS\u30A2\u30F3\u30C6\u30CA\u6280\u8853\u3001\u9032\u5316\u3057\u305F\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u3001\n  \u6B21\u4E16\u4EE3\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u3001\u30D0\u30C3\u30C6\u30EA\u30FC\u5BFF\u547D\u304C\u524D\u30E2\u30C7\u30EB\u306E\u7D041.8\u500D\u306A\u3069\u3001\n  \u5927\u81EA\u7136\u306E\u4E2D\u3067\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u5F37\u529B\u306A\u30A2\u30A4\u30C6\u30E0\u3067\u3059\u3002\n  \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u304C\u3088\u308A\u30B9\u30DE\u30FC\u30C8\u306B\u9577\u304F\u7D9A\u3051\u3089\u308C\u307E\u3059\u3002",
  productDescMobile1: "\u30A2\u30A6\u30C8\u30C9\u30A2\u30B9\u30DD\u30FC\u30C4\u30A6\u30A9\u30C3\u30C1\u306EAPEX 2 / APEX 2 Pro\u306F\u3001\u30CF\u30FC\u30C9\u306A\u6C17\u8C61\u6761\u4EF6\u3084\u5730\u5F62\u3067\u306E\u4F7F\u7528\u3092\u60F3\u5B9A\u3057\u3066\u8A2D\u8A08\u3055\u308C\u3066\u3044\u307E\u3059\u3002",
  productDescMobile2: "\u9811\u4E08\u306A\u672C\u4F53\u3001\u6539\u826F\u3055\u308C\u305FGPS\u30A2\u30F3\u30C6\u30CA\u6280\u8853\u3001\u9032\u5316\u3057\u305F\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u3001\u6B21\u4E16\u4EE3\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u3001\u30D0\u30C3\u30C6\u30EA\u30FC\u5BFF\u547D\u304C\u524D\u30E2\u30C7\u30EB\u306E\u7D041.8\u500D\u306A\u3069\u3001\u5927\u81EA\u7136\u306E\u4E2D\u3067\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u5F37\u529B\u306A\u30A2\u30A4\u30C6\u30E0\u3067\u3059\u3002\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u304C\u3088\u308A\u30B9\u30DE\u30FC\u30C8\u306B\u9577\u304F\u7D9A\u3051\u3089\u308C\u307E\u3059\u3002",
  explorationTitle: '冒険の限界に挑む',
  explorationDesc: "\u7A76\u6975\u306E\u30A2\u30A6\u30C8\u30C9\u30A2\u30B9\u30DD\u30FC\u30C4\u30A6\u30A9\u30C3\u30C1\u306F\u3001\u8010\u4E45\u6027\u3068\u6A5F\u80FD\u6027\u3092\u517C\u306D\u5099\u3048\u3066\u3044\u307E\u3059\u3002\n  \u3053\u306E\u30D0\u30E9\u30F3\u30B9\u3092\u6700\u9069\u5316\u3059\u308B\u305F\u3081\u3001COROS\u306F\u7D30\u90E8\u306E\u8A2D\u8A08\u3092\u5165\u5FF5\u306B\u884C\u3044\u307E\u3057\u305F\u3002\n  APEX 2 / APEX 2 Pro\u304C\u3042\u306A\u305F\u306E\u6700\u5F37\u306E\u30D1\u30FC\u30C8\u30CA\u30FC\u3068\u3057\u3066\u9577\u304F\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002",
  designLabel1: "PVD\u30B3\u30FC\u30C6\u30A3\u30F3\u30B0\n  \u30B0\u30EC\u30FC\u30C95\u30C1\u30BF\u30F3\n  \u5408\u91D1\u306E\u30D9\u30BC\u30EB",
  designLabel2: "\u624B\u888B\u7740\u7528\u307E\u307E\n  \u64CD\u4F5C\u3067\u304D\u308B\n  \u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB",
  designLabel3: "\u50B7\u3064\u304D\u306B\u304F\u3044\n  \u30B5\u30D5\u30A1\u30A4\u30A2\u30AC\u30E9\u30B9",
  explorationDescMobile: "\u7A76\u6975\u306E\u30A2\u30A6\u30C8\u30C9\u30A2\u30B9\u30DD\u30FC\u30C4\u30A6\u30A9\u30C3\u30C1\u306F\u3001\u8010\u4E45\u6027\u3068\u6A5F\u80FD\u6027\u4E21\u65B9\u3092\u5099\u3048\u3066\u3044\u307E\u3059\u3002\u3053\u306E\u30D0\u30E9\u30F3\u30B9\u3092\u6700\u9069\u306A\u3082\u306E\u306B\u3059\u308B\u305F\u3081\u3001\u79C1\u9054\u306F\u7D30\u90E8\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u306B\u307E\u3067\u6C17\u3092\u4ED8\u3051\u3066\u3044\u307E\u3059\u3002APEX 2\u3068APEX 2 Pro\u304C\u6700\u5F37\u306E\u30D1\u30FC\u30C8\u30CA\u30FC\u306B\u306A\u308A\u3001\u3042\u306A\u305F\u306B\u9577\u304F\u5BC4\u308A\u6DFB\u3044\u307E\u3059\u3002",
  designTitle: '頑丈な設計',
  designDesc: "\u50B7\u3064\u304D\u306B\u304F\u3044\u30B5\u30D5\u30A1\u30A4\u30A2\u30AC\u30E9\u30B9\u306E\u30B9\u30AF\u30EA\u30FC\u30F3\u3068\u3001PVD\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u30B0\u30EC\u30FC\u30C95\u30C1\u30BF\u30F3\u5408\u91D1\u306E\u30D9\u30BC\u30EB\n  \u304C\u5185\u8535\u3055\u308C\u3066\u3044\u308B\u96FB\u5B50\u90E8\u54C1\u3092\u4FDD\u8B77\u3057\u3066\u304A\u308A\u3001\u8010\u50B7\u6027\u304C\u524D\u30E2\u30C7\u30EB\u304B\u30892\u500D\u5411\u4E0A\u3057\u3066\u3044\u307E\u3059\u3002",
  designDescMobile: "\u50B7\u3064\u304D\u306B\u304F\u3044\u30B5\u30D5\u30A1\u30A4\u30A2\u30AC\u30E9\u30B9\u306E\u30B9\u30AF\u30EA\u30FC\u30F3\u3068\u3001PVD\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u30B0\u30EC\u30FC\u30C95\u30C1\u30BF\u30F3\u5408\u91D1\u306E\u30D9\u30BC\u30EB\u304C\u5185\u8535\u3055\u308C\u3066\u3044\u308B\u96FB\u5B50\u90E8\u54C1\u3092\u4FDD\u8B77\u3057\u3066\u304A\u308A\u3001\u8010\u50B7\u6027\u304C\u524D\u30E2\u30C7\u30EB\u304B\u30892\u500D\u5411\u4E0A\u3057\u3066\u3044\u307E\u3059\u3002",
  temperatureResistanTitle: '厳しい環境温度に',
  temperatureResistanDesc: '-20℃〜50℃の環境下でも問題なく動作。\nどんな天候、どんな場所での冒険でもサポートします。',
  temperatureResistanDescMobile: "-20\u2103\u301C50\u2103\u306E\u74B0\u5883\u4E0B\u3067\u3082\u554F\u984C\u306A\u304F\u52D5\u4F5C\u3002\n  \u3069\u3093\u306A\u5929\u5019\u3001\u3069\u3093\u306A\u5834\u6240\u3067\u306E\u5192\u967A\n  \u3067\u3082\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002",
  temperatureResistanLower: -20,
  temperatureResistanUpper: 50,
  temperatureUnit: '℃',
  waterproofTitle: '5ATMの防水',
  waterproofDesc: "\u305F\u3068\u3048\u96E8\u3001\u96EA\u3001\u6CE5\u6C34\u306A\u3069\u304C\u672C\u4F53\u306B\u304B\u304B\u3063\u3066\u3082\u3001\n  \u30A6\u30A9\u30C3\u30C1\u306E\u6A5F\u80FD\u306F\u4F55\u3082\u640D\u306A\u308F\u308C\u307E\u305B\u3093\u30025ATM\n  \u306E\u9632\u6C34\u6027\u80FD\u3092\u6301\u3061\u3001\u6C34\u6DF150m\u307E\u3067\u306E\u6C34\u5727\u306B\u8010\u3048\n  \u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  waterproofDescMobile: "\u305F\u3068\u3048\u96E8\u3001\u96EA\u3001\u6CE5\u6C34\u306A\u3069\u304C\u672C\u4F53\u306B\u304B\u304B\u3063\u3066\u3082\u3001\n  \u30A6\u30A9\u30C3\u30C1\u306E\u6A5F\u80FD\u306F\u4F55\u3082\u640D\u306A\u308F\u308C\u307E\u305B\u3093\u30025ATM\u306E\n  \u9632\u6C34\u6027\u80FD\u3092\u6301\u3061\u3001\u6C34\u6DF150m\u307E\u3067\u306E\u6C34\u5727\u306B\u8010\u3048\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  dialTitle: '使いやすいダイヤル',
  dialDesc: "COROS\u72EC\u81EA\u306E\u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u306F\u64CD\u4F5C\u304C\u975E\u5E38\u306B\u7C21\u5358\u3002\u624B\u888B\u3092\u7740\u7528\u3057\u305F\u307E\u307E\n  \u3067\u3082\u30A6\u30A9\u30C3\u30C1\u64CD\u4F5C\u304C\u53EF\u80FD\u306A\u306E\u3067\u3001\u30C7\u30FC\u30BF\u3092\u3059\u3050\u306B\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
  dialDescMobile: "COROS\u72EC\u81EA\u306E\u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u306F\u64CD\u4F5C\u304C\u975E\u5E38\u306B\u7C21\u5358\u3002\u624B\u888B\u3092\u7740\u7528\u3057\u305F\u307E\u307E\u3067\u3082\u30A6\u30A9\u30C3\u30C1\u64CD\u4F5C\u304C\u53EF\u80FD\u306A\u306E\u3067\u3001\u30C7\u30FC\u30BF\u3092\u3059\u3050\u306B\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
  batteryTitle: '進化し続けるバッテリー',
  batteryDesc: "\u6700\u65B0\u306E\u885B\u661F\u4FE1\u53F7\u30B7\u30B9\u30C6\u30E0\u8A2D\u8A08\u306B\u3088\u308B\u7701\u30A8\u30CD\u5316\u304B\u3089\u3001\n  \u524D\u30E2\u30C7\u30EB\u3088\u308A1.8\u500D\u306EGPS\u30D0\u30C3\u30C6\u30EA\u30FC\u30E9\u30A4\u30D5\u3092\u5B9F\u73FE\u3057\u307E\u3057\u305F\u3002\n  APEX 2\u306F40\u6642\u9593\u3001APEX 2 Pro\u306F66\u6642\u9593\u306E\u30D5\u30EBGPS\u30D0\u30C3\u30C6\u30EA\u30FC\u99C6\u52D5\u304C\u53EF\u80FD\u3067\u3059\u3002",
  batteryDescKeyword: 'です',
  batteryDescMobile: "\u6700\u65B0\u306E\u885B\u661F\u4FE1\u53F7\u30B7\u30B9\u30C6\u30E0\u8A2D\u8A08\u306B\u3088\u308B\u7701\u30A8\u30CD\u5316\u304B\u3089\u3001\u524D\u30E2\u30C7\u30EB\u3088\u308A1.8\u500D\u306EGPS\u30D0\u30C3\u30C6\u30EA\u30FC\u30E9\u30A4\u30D5\u3092\u5B9F\u73FE\u3057\u307E\u3057\u305F\u3002APEX 2\u306F40\u6642\u9593\u3001APEX 2 Pro\u306F66\u6642\u9593\u306E\u30D5\u30EBGPS\u30D0\u30C3\u30C6\u30EA\u30FC\u99C6\u52D5\u304C\u53EF\u80FD\u3067\u3059\u3002",
  batteryDescMobileKeyword: 'です',
  batteryCompareImprove: 'Up to',
  batteryCompareImproveTitle: 'Longer GPS battery life',
  navTitle: "\u30A2\u30A6\u30C8\u30C9\u30A2\u3067\u5FC3\u914D\u306A\u304F\u306E\n  \u30CA\u30D3\u6A5F\u80FD",
  navDesc: "APEX 2 / APEX 2 Pro\u306F\u3001\u88CF\u5C71\u306E\u30C8\u30EC\u30A4\u30EB\u30A2\u30C9\u30D9\u30F3\u30C1\u30E3\u30FC\u304B\u3089\u6C37\u6CB3\u306E\u5C71\u3005\u3078\u306E\u767B\u6500\u307E\u3067\u3001\n  \u3055\u307E\u3056\u307E\u306A\u30B7\u30FC\u30F3\u3067\u6D3B\u8E8D\u3057\u307E\u3059\u3002\u512A\u308C\u305F\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u3092\u642D\u8F09\u3057\u3066\u304A\u308A\u3001\u5927\u81EA\u7136\u3067\n  \u306E\u73FE\u5728\u5730\u78BA\u8A8D\u306F\u3082\u3061\u308D\u3093\u3001\u6B63\u78BA\u306A\u30EB\u30FC\u30C8\u3092\u628A\u63E1\u3059\u308B\u3053\u3068\u3067\u9053\u306B\u8FF7\u3046\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002",
  navDescMobile: "APEX 2 / APEX 2 Pro\u306F\u3001\u88CF\u5C71\u306E\u30C8\u30EC\n  \u30A4\u30EB\u30A2\u30C9\u30D9\u30F3\u30C1\u30E3\u30FC\u304B\u3089\u6C37\u6CB3\u306E\u5C71\u3005\u3078\u306E\n  \u767B\u6500\u307E\u3067\u3001\u3055\u307E\u3056\u307E\u306A\u30B7\u30FC\u30F3\u3067\u6D3B\u8E8D\u3057\u307E\n  \u3059\u3002\u512A\u308C\u305F\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u3092\u642D\u8F09\u3057\n  \u3066\u304A\u308A\u3001\u5927\u81EA\u7136\u3067\u306E\u73FE\u5728\u5730\u78BA\u8A8D\u306F\u3082\u3061\u308D\n  \u3093\u3001\u6B63\u78BA\u306A\u30EB\u30FC\u30C8\u3092\u628A\u63E1\u3059\u308B\u3053\u3068\u3067\u9053\u306B\n  \u8FF7\u3046\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002",
  gpsTitle: '高いGPS精度',
  gpsTitleMobile: "\u30EC\u30D9\u30EB\u30A2\u30C3\u30D7\u306E\n  \u9AD8\u7CBE\u5EA6GPS",
  gpsDesc: "\u524D\u30E2\u30C7\u30EB\u304B\u3089\u6027\u80FD\u304C50\uFF05\u5411\u4E0A\u3057\u305F\u30A2\u30F3\u30C6\u30CA\u6280\u8853\u306B\n  \u5168\u885B\u661FGNSS\u30C1\u30C3\u30D7\u3092\u52A0\u3048\u3001APEX 2\u306F5\u3064\u306E\u4E3B\u8981\n  \u885B\u661F\u30B7\u30B9\u30C6\u30E0\u304B\u3089\u306E\u53D7\u4FE1\u3067\u6B63\u78BA\u306A\u30C7\u30FC\u30BF\u3092\u63D0\u4F9B\u3057\n  \u307E\u3059\u3002\u3055\u3089\u306B\u3001APEX 2 Pro\u306F\u6700\u65B0\u306E2\u5468\u6CE2\u6280\u8853\n  \u3092\u642D\u8F09\u3057\u3001\u9AD8\u5C64\u5EFA\u7BC9\u7269\u306E\u9593\u3084\u5C71\u306E\u5965\u6DF1\u304F\u3001\u5CA9\u58C1\u6CBF\n  \u3044\u306A\u3069\u6700\u3082\u53D7\u4FE1\u304C\u56F0\u96E3\u306A\u5834\u6240\u3067\u3082\u8FFD\u8DE1\u3059\u308B\u3053\u3068\u304C\n  \u3067\u304D\u307E\u3059\u3002",
  gpsDescMobile: "\u524D\u30E2\u30C7\u30EB\u304B\u3089\u6027\u80FD\u304C50\uFF05\u5411\u4E0A\n  \u3057\u305F\u30A2\u30F3\u30C6\u30CA\u6280\u8853\u306B\u5168\u885B\u661F\n  GNSS\u30C1\u30C3\u30D7\u3092\u52A0\u3048\u3001APEX 2\n  \u306F5\u3064\u306E\u4E3B\u8981\u885B\u661F\u30B7\u30B9\u30C6\u30E0\n  \u304B\u3089\u306E\u53D7\u4FE1\u3067\u6B63\u78BA\u306A\u30C7\u30FC\u30BF\n  \u3092\u63D0\u4F9B\u3057\u307E\u3059\u3002\u3055\u3089\u306B\u3001\n  APEX 2 Pro\u306F\u6700\u65B0\u306E2\u5468\n  \u6CE2\u6280\u8853\u3092\u642D\u8F09\u3057\u3001\u9AD8\u5C64\u5EFA\u7BC9\u7269\u306E\n  \u9593\u3084\u5C71\u306E\u5965\u6DF1\u304F\u3001\u5CA9\u58C1\u6CBF\u3044\u306A\u3069\n  \u6700\u3082\u53D7\u4FE1\u304C\u56F0\u96E3\u306A\u5834\u6240\u3067\u3082\u8FFD\u8DE1\n  \u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  outdoorNavTitle: '迷わないナビゲーション',
  outdoorNavDesc: "\u30B0\u30ED\u30FC\u30D0\u30EB\u30AA\u30D5\u30E9\u30A4\u30F3\u5730\u5F62\u56F3\u3068\u7B49\u9AD8\u7DDA\u56F3\uFF08Topo Map\uFF09\u3092\u7121\u6599\u3067\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3059\u308B\u3068\u3001\n  \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u3002\u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u3067\u5730\u56F3\u306E\u62E1\u5927\u30FB\u7E2E\u5C0F\u3001\u30BF\u30C3\u30C1\n  \u30B9\u30AF\u30EA\u30FC\u30F3\u306E\u30B9\u30EF\u30A4\u30D7\u64CD\u4F5C\u3067\u5730\u56F3\u4E0A\u306E\u79FB\u52D5\u304C\u53EF\u80FD\u3067\u3059\u3002\n  \u96C6\u4E2D\u529B\u306E\u7DAD\u6301\u3001\u30B9\u30C8\u30EC\u30B9\u30D5\u30EA\u30FC\u306E\u30A2\u30A6\u30C8\u30C9\u30A2\u30E9\u30A4\u30D5\u306E\u305F\u3081\u306BAPEX 2 / APEX 2 Pro\u306F\n  \u4EE5\u4E0B\u306E\u6A5F\u80FD\u3092\u642D\u8F09\u3057\u3066\u3044\u307E\u3059\u3002",
  outdoorNavDescMobile: "\u30B0\u30ED\u30FC\u30D0\u30EB\u30AA\u30D5\u30E9\u30A4\u30F3\u5730\u5F62\u56F3\u3068\u7B49\u9AD8\u7DDA\u56F3\n  \uFF08Topo Map\uFF09\u3092\u7121\u6599\u3067\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3059\u308B\u3068\u3001\n  \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u3002\n  \u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u3067\u5730\u56F3\u306E\u62E1\u5927\u30FB\u7E2E\u5C0F\u3001\n  \u30BF\u30C3\u30C1\u30B9\u30AF\u30EA\u30FC\u30F3\u306E\u30B9\u30EF\u30A4\u30D7\u64CD\u4F5C\u3067\u5730\u56F3\n  \u4E0A\u306E\u79FB\u52D5\u304C\u53EF\u80FD\u3067\u3059\u3002\n  \u96C6\u4E2D\u529B\u306E\u7DAD\u6301\u3001\u30B9\u30C8\u30EC\u30B9\u30D5\u30EA\u30FC\u306E\u30A2\u30A6\u30C8\u30C9\u30A2\n  \u30E9\u30A4\u30D5\u306E\u305F\u3081\u306BAPEX 2 / APEX 2 Pro\u306F\n  \u4EE5\u4E0B\u306E\u6A5F\u80FD\u3092\u642D\u8F09\u3057\u3066\u3044\u307E\u3059\u3002",
  outdoorNavLabel1: "\u65E5\u306E\u51FA / \u65E5\u306E\u5165\u308A\u306E\u6642\u9593",
  outdoorNavLabel2: "\u6A19\u9AD8",
  outdoorNavLabel3: "\u76EE\u7684\u5730\u307E\u3067\u306E\u8DDD\u96E2",
  outdoorNavLabel4: "\u96E2\u8131\u30A2\u30E9\u30FC\u30C8",
  outdoorNavLabel5: "\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8",
  outdoorNavLabel6: "\u6B63\u78BA\u306AGPS\u5EA7\u6A19",
  outdoorNavScene1: "\u65E5\u306E\u51FA\uFF1A\u65E5\u5DEE\u3057\u304C\u51FA\u308B\u524D\u306B\u65E5\u713C\u3051\u6B62\u3081\u3092\u5857\u308B\n  \u65E5\u306E\u5165\u308A\uFF1A\u6697\u304F\u306A\u308B\u524D\u306B\u79FB\u52D5\u3059\u308B\u306A\u3069\u3001\u4E8B\u524D\u306B\u8A08\u753B\u3067\u304D\u307E\u3059\u3002",
  outdoorNavScene2: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u524D\u3084\u9014\u4E2D\u3067\u30B3\u30FC\u30B9\u306E\u9AD8\u4F4E\u5DEE\u304C\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
  outdoorNavScene3: "\u6B21\u306E\u30C1\u30A7\u30C3\u30AF\u30DD\u30A4\u30F3\u30C8\u3084\u6700\u7D42\u76EE\u7684\u5730\u307E\u3067\u306E\u8DDD\u96E2\u3092\u78BA\u8A8D\u3059\u308B\u3053\u3068\u3067\u3001\u30E2\u30C1\u30D9\u30FC\u30B7\u30E7\u30F3\u30A2\u30C3\u30D7\u3084\u5B89\u5168\u306A\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002",
  outdoorNavScene4: "\u30EB\u30FC\u30C8\u304B\u3089\u5916\u308C\u305F\u969B\u306B\u30A2\u30E9\u30FC\u30C8\u304C\u9CF4\u308B\u6A5F\u80FD\u3002\u5143\u306E\u30B3\u30FC\u30B9\u306B\u623B\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  outdoorNavScene5: "\u7D66\u6C34\u3084\u30AE\u30A2\u3092\u7F6E\u304F\u306A\u3069\u3001\u30A8\u30A4\u30C9\u30B9\u30C6\u30FC\u30B7\u30E7\u30F3\u3068\u3057\u3066\u306E\u91CD\u8981\u306A\u5834\u6240\u3092\u8A2D\u5B9A\u3057\u3066\u30CA\u30D3\u30B2\u30FC\u30C8\u3057\u307E\u3059\u3002",
  outdoorNavScene6: "GPS\u4E0A\u306E\u73FE\u5728\u5730\u3001\u6C17\u5727\u3001\u63A8\u5B9A\u6A19\u9AD8\u304C\u8868\u793A\u3067\u304D\u307E\u3059\u3002",
  plan: "\u5F85\u671B\u306E\u30EB\u30FC\u30C8\u4F5C\u6210\u6A5F\u80FD",
  // 这个 planDesc 好像没有使用？
  planDesc: "\u5229\u7528\u53EF\u80FD\u306A\u30C8\u30EC\u30A4\u30EB\u3084\u9053\u8DEF\u306B\u57FA\u3065\u3044\u3066\u306E\u6700\u9069\u306A\u7D4C\u8DEF\u306E\u9078\u629E\u3001\u8DDD\u96E2\u3084\u6A19\u9AD8\u3092\u78BA\u8A8D\u3057\u3066\u30EB\u30FC\u30C8\u306E\u4FDD\u5B58\u3001COROS\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u8EE2\u9001\u3001\u53CB\u4EBA\u3068\u306E\u5171\u6709\u304C\u53EF\u80FD\u3067\u3059\u3002\u307E\u305F\u3001Strava\u3084Komoot\u306A\u3069\u306E\u4EBA\u6C17\u306E\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30A2\u30D7\u30EA\u3068\u306E\u4E92\u63DB\u6027\u304C\u3042\u308A\u307E\u3059\u3002",
  planDesc1: "\n  \u5229\u7528\u53EF\u80FD\u306A\u30C8\u30EC\u30A4\u30EB\u3084\u9053\u8DEF\u306B\u57FA\u3065\u3044\u3066\u306E\u6700\u9069\u306A\u7D4C\u8DEF\u306E\u9078\u629E\u3001\u8DDD\u96E2\u3084\u6A19\n  \u9AD8\u3092\u78BA\u8A8D\u3057\u3066\u30EB\u30FC\u30C8\u306E\u4FDD\u5B58\u3001COROS\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u8EE2\u9001\u3001\u53CB\u4EBA\u3068\u306E\u5171\u6709\n  \u304C\u53EF\u80FD\u3067\u3059\u3002",
  planDesc2: "\u307E\u305F\u3001Strava\u3084Komoot\u306A\u3069\u306E\u4EBA\u6C17\u306E\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30A2\u30D7\u30EA\u3068\u306E\u4E92\u63DB\n  \u6027\u304C\u3042\u308A\u307E\u3059\u3002",
  planDescMobile: "\u5229\u7528\u53EF\u80FD\u306A\u30C8\u30EC\u30A4\u30EB\u3084\u9053\u8DEF\u306B\u57FA\u3065\u3044\u3066\u306E\u6700\u9069\u306A\u7D4C\u8DEF\u306E\u9078\u629E\u3001\u8DDD\u96E2\u3084\u6A19\u9AD8\u3092\u78BA\u8A8D\u3057\u3066\u30EB\u30FC\u30C8\u306E\u4FDD\u5B58\u3001COROS\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u8EE2\u9001\u3001\u53CB\u4EBA\u3068\u306E\u5171\u6709\u304C\u53EF\u80FD\u3067\u3059\u3002\u307E\u305F\u3001Strava\u3084Komoot\u306A\u3069\u306E\u4EBA\u6C17\u306E\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30A2\u30D7\u30EA\u3068\u306E\u4E92\u63DB\u6027\u304C\u3042\u308A\u307E\u3059\u3002",
  planDescMobile1: "\u5229\u7528\u53EF\u80FD\u306A\u30C8\u30EC\u30A4\u30EB\u3084\u9053\u8DEF\u306B\u57FA\u3065\u3044\u3066\u306E\u6700\u9069\u306A\u7D4C\u8DEF\u306E\u9078\u629E\u3001\u8DDD\u96E2\u3084\u6A19\u9AD8\u3092\u78BA\u8A8D\u3057\u3066\u30EB\u30FC\u30C8\u306E\u4FDD\u5B58\u3001COROS\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u8EE2\u9001\u3001\u53CB\u4EBA\u3068\u306E\u5171\u6709\u304C\u53EF\u80FD\u3067\u3059\u3002",
  planDescMobile2: "\u307E\u305F\u3001Strava\u3084Komoot\u306A\u3069\u306E\u4EBA\u6C17\u306E\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30A2\u30D7\u30EA\u3068\u306E\u4E92\u63DB\u6027\u304C\u3042\u308A\u307E\u3059\u3002",
  prepareTitle: "\u5B89\u5168\u306B\u697D\u3057\u3080\u305F\u3081\u306B",
  prepareTitleMobile: "\u5B89\u5168\u306B\u697D\u3057\u3080\u305F\u3081\u306B",
  prepareDesc: "\u7F8E\u3057\u3044\u81EA\u7136\u306B\u306F\u3001\u30EA\u30B9\u30AF\u3082\u3064\u304D\u3082\u306E\u3067\u3059\u3002 \u8352\u5929\u3001\u9AD8\u5C71\u75C5\u3001\u6697\u95C7\u3001\u8131\u6C34\u75C7\u72B6\u306A\u3069\u3001\u3053\u308C\u3089\u306F\u3059\u3079\n  \u3066\u5927\u81EA\u7136\u3092\u5192\u967A\u3059\u308B\u969B\u306B\u8D77\u3053\u308A\u3046\u308B\u73FE\u5B9F\u3067\u3059\u3002 APEX 2\u3068APEX 2 Pro\u306F\u3001\u3042\u3089\u3086\u308B\u72B6\u6CC1\u306B\u5BFE\n  \u5FDC\u3057\u3001 \u5B89\u5168\u306B\u76EE\u6A19\u307E\u3067\u306E\u5230\u9054\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002",
  prepareDescMobile: "\u7F8E\u3057\u3044\u81EA\u7136\u306B\u306F\u3001\u30EA\u30B9\u30AF\u3082\u3064\u304D\u3082\u306E\u3067\u3059\u3002\u8352\u5929\u3001\u9AD8\u5C71\u75C5\u3001\u6697\u95C7\u3001\u8131\u6C34\u75C7\u72B6\u306A\u3069\u3001\u3053\u308C\u3089\u306F\u3059\u3079\u3066\u5927\u81EA\u7136\u3092\u5192\u967A\u3059\u308B\u969B\u306B\u8D77\u3053\u308A\u3046\u308B\u73FE\u5B9F\u3067\u3059\u3002\nAPEX 2\u3068APEX 2 Pro\u306F\u3001\u3042\u3089\u3086\u308B\u72B6\u6CC1\u306B\u5BFE\u5FDC\u3057\u3001\u5B89\u5168\u306B\u76EE\u6A19\u307E\u3067\u306E\u5230\u9054\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002",
  nutritionAlert: "\u88DC\u7D66\n  \u30A2\u30E9\u30FC\u30C8",
  sunMovements: "\u65E5\u306E\u51FA / \n  \u65E5\u306E\u5165\u308A",
  stormAlert: "\u30B9\u30C8\u30FC\u30E0\n  \u30A2\u30E9\u30FC\u30C8",
  cameraControl: "\u30AB\u30E1\u30E9\n  \u30B3\u30F3\u30C8\u30ED\u30FC\u30EB",
  altitudeMode: "\u6A19\u9AD8\n  \u30E2\u30FC\u30C9",
  nightMode: "\u30CA\u30A4\u30C8\n  \u30E2\u30FC\u30C9",
  fitnessTitle: "\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u3067\n\u6700\u9AD8\u306E\u81EA\u5206\u306B",
  fitnessDesc: "APEX 2 / APEX 2 Pro\u306F\u3001\u30B9\u30DD\u30FC\u30C4\u30B5\u30A4\u30A8\u30F3\u30B9\u30B7\u30B9\u30C6\u30E0\u3067\u3042\u308BCOROS EvoLab\u3068\u306E\n  \u7D44\u307F\u5408\u308F\u305B\u3067\u30E6\u30FC\u30B6\u30FC\u306E\u76EE\u6A19\u9054\u6210\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u4E16\u754C\u4E2D\u306E\u30A2\u30B9\u30EA\u30FC\u30C8\u304B\u3089\u652F\u6301\u3055\u308C\u308B\n  \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\u30F3\u304C\u4F53\u529B\u3065\u304F\u308A\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3001\u5927\u81EA\u7136\u306E\u4E2D\u3067\u8E8D\u52D5\u3059\u308B\u305F\u3081\u306E\n  \u6E96\u5099\u3092\u6574\u3048\u3066\u304F\u308C\u308B\u3067\u3057\u3087\u3046\u3002",
  fitnessDescMobile: "APEX 2 / APEX 2 Pro\u306F\u3001\u30B9\u30DD\u30FC\u30C4\u30B5\u30A4\u30A8\u30F3\u30B9\n  \u30B7\u30B9\u30C6\u30E0\u3067\u3042\u308BCOROS EvoLab\u3068\u306E\u7D44\u307F\u5408\u308F\u305B\n  \u3067\u30E6\u30FC\u30B6\u30FC\u306E\u76EE\u6A19\u9054\u6210\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\n  \u4E16\u754C\u4E2D\u306E\u30A2\u30B9\u30EA\u30FC\u30C8\u304B\u3089\u652F\u6301\u3055\u308C\u308B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n  \u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\u30F3\u304C\u4F53\u529B\u3065\u304F\u308A\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3001\u5927\u81EA\n  \u7136\u306E\u4E2D\u3067\u8E8D\u52D5\u3059\u308B\u305F\u3081\u306E\u6E96\u5099\u3092\u6574\u3048\u3066\u304F\u308C\u308B\n  \u3067\u3057\u3087\u3046\u3002",
  sensorTitle: "\u6700\u9AD8\u30EC\u30D9\u30EB\u306E\u5149\u5B66\u5F0F\n  \u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC",
  sensorDesc: "\u5FC3\u62CD\u6E2C\u5B9A\u306E\u7CBE\u5EA6\u304C\u9AD8\u3051\u308C\u3070\u9AD8\u3044\u307B\u3069\u3001\u30C7\u30FC\u30BF\u3092\u3088\u308A\u6D3B\u7528\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002APEX 2 / APEX 2 Pro\u306B\u642D\u8F09\u3055\u308C\u305F\u65B0\u958B\u767A\u306E\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u3001\u9AD8\u5EA6\u306A\u4FE1\u53F7\u30CE\u30A4\u30BA\u9664\u53BB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306B\u3088\u3063\u3066\u65B0\u305F\u306A\u30EC\u30D9\u30EB\u306E\u5FC3\u62CD\u6E2C\u5B9A\u7CBE\u5EA6\u3092\u5B9F\u73FE\u3057\u307E\u3059\u3002\u5CE1\u8C37\u9593\u306E\u30B9\u30D4\u30FC\u30C7\u30A3\u306A\u79FB\u52D5\u6642\u3001\u30C6\u30F3\u30C8\u306E\u56DE\u5FA9\u6642\u3067\u3082\u5FC3\u62CD\u6E2C\u5B9A\u3092\u9003\u3055\u305A\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u8A18\u9332\u3057\u307E\u3059\u3002",
  sensorDescMobile: "\u5FC3\u62CD\u6E2C\u5B9A\u306E\u7CBE\u5EA6\u304C\u9AD8\u3051\u308C\u3070\u9AD8\u3044\u307B\u3069\u3001\u30C7\u30FC\u30BF\u3092\u3088\u308A\u6D3B\u7528\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002APEX 2 / APEX 2 Pro\u306B\u642D\u8F09\u3055\u308C\u305F\u65B0\u958B\u767A\u306E\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u3001\u9AD8\u5EA6\u306A\u4FE1\u53F7\u30CE\u30A4\u30BA\u9664\u53BB\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306B\u3088\u3063\u3066\u65B0\u305F\u306A\u30EC\u30D9\u30EB\u306E\u5FC3\u62CD\u6E2C\u5B9A\u7CBE\u5EA6\u3092\u5B9F\u73FE\u3057\u307E\u3059\u3002\u5CE1\u8C37\u9593\u306E\u30B9\u30D4\u30FC\u30C7\u30A3\u306A\u79FB\u52D5\u6642\u3001\u30C6\u30F3\u30C8\u306E\u56DE\u5FA9\u6642\u3067\u3082\u5FC3\u62CD\u6E2C\u5B9A\u3092\u9003\u3055\u305A\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u8A18\u9332\u3057\u307E\u3059\u3002",
  trackRecoverTitle: "\u30EA\u30AB\u30D0\u30EA\u30FC\u306E\u8FFD\u8DE1",
  trackRecoverDesc: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u5F8C\u306F\u4F11\u990A\u304C\u5FC5\u8981\u3067\u3059\u3002APEX 2 / APEX 2 Pro\u306F\u7761\u7720\u30B5\u30A4\u30AF\u30EB\u306E\u91CD\u8981\u6BB5\u968E\u3067\u3042\u308B\u6D45\u3044 / \u6DF1\u3044\u6DF1\u7761\u7720\u3001\u30EC\u30E0\u7761\u7720\u306E\u5272\u5408\u3068\u3044\u3063\u305F\u7761\u7720\u306E\u8CEA\u3092\u30E2\u30CB\u30BF\u30FC\u3057\u307E\u3059\u3002\u8D77\u5E8A\u5F8C\u306F\u5FC3\u62CD\u5909\u52D5\uFF08HRV\uFF09\u3092\u6E2C\u5B9A\u3057\u3001\u305D\u306E\u6642\u306E\u75B2\u52B4\u72B6\u614B\u304C\u3069\u308C\u3050\u3089\u3044\u304B\u3092\u63A8\u6E2C\u3057\u307E\u3059\u3002\n  \u9AD8\u5730\u306E\u6EDE\u5728\u6642\u306B\u306F\u6A19\u9AD8\u30E2\u30FC\u30C9\u3092\u30AA\u30F3\u306B\u3059\u308B\u3068\u8840\u4E2D\u9178\u7D20\u6FC3\u5EA6\uFF08SpO2\uFF09\u3092\u624B\u52D5\u3067\u30C1\u30A7\u30C3\u30AF\u3057\u3001\u9AD8\u5730\u3078\u306E\u9069\u5FDC\u5EA6\u3092\u8A55\u4FA1\u3057\u307E\u3059\u3002",
  trackRecoverDescMobile: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u5F8C\u306F\u4F11\u990A\u304C\u5FC5\u8981\u3067\u3059\u3002APEX 2 / APEX 2 Pro\u306F\u7761\u7720\u30B5\u30A4\u30AF\u30EB\u306E\u91CD\u8981\u6BB5\u968E\u3067\u3042\u308B\u6D45\u3044 / \u6DF1\u3044\u6DF1\u7761\u7720\u3001\u30EC\u30E0\u7761\u7720\u306E\u5272\u5408\u3068\u3044\u3063\u305F\u7761\u7720\u306E\u8CEA\u3092\u30E2\u30CB\u30BF\u30FC\u3057\u307E\u3059\u3002\u8D77\u5E8A\u5F8C\u306F\u5FC3\u62CD\u5909\u52D5\uFF08HRV\uFF09\u3092\u6E2C\u5B9A\u3057\u3001\u305D\u306E\u6642\u306E\u75B2\u52B4\u72B6\u614B\u304C\u3069\u308C\u3050\u3089\u3044\u304B\u3092\u63A8\u6E2C\u3057\u307E\u3059\u3002\u9AD8\u5730\u306E\u6EDE\u5728\u6642\u306B\u306F\u6A19\u9AD8\u30E2\u30FC\u30C9\u3092\u30AA\u30F3\u306B\u3059\u308B\u3068\u8840\u4E2D\u9178\u7D20\u6FC3\u5EA6\uFF08SpO2\uFF09\u3092\u624B\u52D5\u3067\u30C1\u30A7\u30C3\u30AF\u3057\u3001\u9AD8\u5730\u3078\u306E\u9069\u5FDC\u5EA6\u3092\u8A55\u4FA1\u3057\u307E\u3059\u3002",
  trainingSolutionTitle: "\u512A\u308C\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\u30F3",
  trainingSolutionTitleMobile: "\u512A\u308C\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n\u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\u30F3",
  trainingSolutionDesc: "COROS\u304C\u8A87\u308B\u30B9\u30DD\u30FC\u30C4\u30B5\u30A4\u30A8\u30F3\u30B9\u30B7\u30B9\u30C6\u30E0\u306EEvoLab\u3068\u3001\u30C7\u30FC\u30BF\u5206\u6790\u30C4\u30FC\u30EB\u306E\n  Training Hub\u304C\u3053\u308C\u307E\u3067\u306B\u6570\u3005\u306E\u8A18\u9332\u9054\u6210\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u304D\u307E\u3057\u305F\u3002\n  \u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u306E\u30DE\u30E9\u30BD\u30F3\u4E16\u754C\u65B0\u8A18\u9332\u3001\u30AD\u30EA\u30A2\u30F3\u30FB\u30B8\u30E7\u30EB\u30CD\u306EUTMB\u30B3\u30FC\u30B9\u65B0\u8A18\u9332\u3001\n  24\u6642\u9593\u3001100mile\u306A\u3069\u591A\u304F\u306E\u30A6\u30EB\u30C8\u30E9\u30E9\u30F3\u30CB\u30F3\u30B0\u306E\u8A18\u9332\u9054\u6210\u3002\n  APEX 2 / APEX 2 Pro\u3092\u4F7F\u3063\u3066\u3001\u30D7\u30ED\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u3088\u3046\u306B\u512A\u308C\n  \u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30A4\u30F3\u30B5\u30A4\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u3059\u3002",
  trainingSolutionDescMobile: "COROS\u304C\u8A87\u308B\u30B9\u30DD\u30FC\u30C4\u30B5\u30A4\u30A8\u30F3\u30B9\u30B7\u30B9\u30C6\u30E0\u306EEvoLab\u3068\u3001\u30C7\u30FC\u30BF\u5206\u6790\u30C4\u30FC\u30EB\u306ETraining Hub\u304C\u3053\u308C\u307E\u3067\u306B\u6570\u3005\u306E\u8A18\u9332\u9054\u6210\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u304D\u307E\u3057\u305F\u3002\u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u306E\u30DE\u30E9\u30BD\u30F3\u4E16\u754C\u65B0\u8A18\u9332\u3001\u30AD\u30EA\u30A2\u30F3\u30FB\u30B8\u30E7\u30EB\u30CD\u306EUTMB\u30B3\u30FC\u30B9\u65B0\u8A18\u9332\u300124\u6642\u9593\u3001100\u30DE\u30A4\u30EB\u306A\u3069\u591A\u304F\u306E\u30A6\u30EB\u30C8\u30E9\u30E9\u30F3\u30CB\u30F3\u30B0\u306E\u8A18\u9332\u9054\u6210\u3002\n  APEX 2 / APEX 2 Pro\u3092\u4F7F\u3063\u3066\u3001\u30D7\u30ED\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u3088\u3046\u306B\u512A\u308C\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30A4\u30F3\u30B5\u30A4\u30C8\u306B\n  \u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u3059\u3002",
  traninghubTitle: "\u4F53\u7CFB\u7684\u306A\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n  \u30D7\u30E9\u30F3\u4F5C\u6210",
  traninghubDesc: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3092\u4F5C\u6210\u3057\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u7D99\u7D9A\u3059\u308B\n  \u3053\u3068\u3067\u305D\u306E\u52B9\u679C\u304C\u6301\u7D9A\u7684\u306B\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\n  COROS\u5951\u7D04\u9078\u624B\u306E\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8 / \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u304C\n  \u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3067\u304D\u308B\u307B\u304B\u3001\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3084PC\u3067\u81EA\u5206\u306E\n  \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u304C\u4F5C\u308C\u307E\u3059\u3002\n  \u307E\u305F\u3001Training Hub\u3092\u901A\u3058\u3066\u30B3\u30FC\u30C1\u304C\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u3092\u5171\u6709\n  \u3057\u3066\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u540C\u671F\u304C\u53EF\u80FD\u3067\u3059\u3002",
  traninghubDescMobile: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3092\u4F5C\u6210\u3057\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u7D99\u7D9A\u3059\u308B\u3053\u3068\u3067\u305D\u306E\u52B9\u679C\u304C\u6301\u7D9A\u7684\u306B\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\n  COROS\u5951\u7D04\u9078\u624B\u306E\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8 / \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u304C\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3067\u304D\u308B\u307B\u304B\u3001\u30B9\u30DE\u30FC\u30C8\u30D5\u30A9\u30F3\u3084PC\u3067\u81EA\u5206\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u304C\u4F5C\u308C\u307E\u3059\u3002\u307E\u305F\u3001Training Hub\u3092\u901A\u3058\u3066\u30B3\u30FC\u30C1\u304C\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u3092\u5171\u6709\u3057\u3066\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u540C\u671F\u304C\u53EF\u80FD\u3067\u3059\u3002",
  trainingLabel1: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30B9\u30C6\u30FC\u30BF\u30B9",
  trainingLabel2: "\u30EC\u30FC\u30B9\u4E88\u6E2C",
  trainingLabel3: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u8CA0\u8377",
  trainingLabel4: "\u51FA\u529B\u30DA\u30FC\u30B9",
  trainingLabel5: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u7126\u70B9",
  trainingLabel6: "\u30EA\u30AB\u30D0\u30EA\u30FC\u30BF\u30A4\u30DE\u30FC",
  trainingDesc1: "\u6700\u8FD1\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306B\u5BFE\u3059\u308B\u8EAB\u4F53\u306E\u53CD\u5FDC\u306B\u3064\u3044\u3066\u3001\u75B2\u52B4\u5EA6\u3084\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u306B\u95A2\u3059\u308B\u60C5\u5831\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
  trainingDesc2: "\u30EC\u30FC\u30B9\u3067\u3069\u306E\u7A0B\u5EA6\u306E\u30DA\u30FC\u30B9\u3067\u8D70\u308C\u308B\u3092\u63A8\u5B9A\u3057\u3001\u305D\u308C\u306B\u5FDC\u3058\u3066\u76EE\u6A19\u30DA\u30FC\u30B9\u3092\u8A08\u753B\u3067\u304D\u307E\u3059\u3002",
  trainingDesc3: "\u904E\u53BB1\u9031\u9593\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u8CA0\u8377\u3092\u628A\u63E1\u3057\u3001\u63A8\u5968\u30BE\u30FC\u30F3\u306B\u5165\u3063\u3066\u3044\u308B\u304B\u3069\u3046\u304B\u3092\u30C1\u30A7\u30C3\u30AF\u3057\u307E\u3059\u3002",
  trainingDesc4: "\u5742\u306E\u591A\u3044\u5834\u6240\u3067\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u3067\u3001\u6B63\u78BA\u306A\u8ABF\u6574\u30DA\u30FC\u30B9\u3092\u7BA1\u7406\u3057\u3001\u30B9\u30DE\u30FC\u30C8\u306A\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u3092\u5B9F\u73FE\u3057\u307E\u3059\u3002",
  trainingDesc5: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306E\u8CA0\u8377\u3068\u5F37\u5EA6\u306B\u57FA\u3065\u304D\u3001\u30E9\u30F3\u30CB\u30F3\u30B0\u306E\u4E3B\u306A\u6539\u5584\u70B9\u3092\u307E\u3068\u3081\u307E\u3059\u3002",
  trainingDesc6: "\u5B8C\u5168\u56DE\u5FA9\u307E\u3067\u306B\u5FC5\u8981\u306A\u6642\u9593\u3084\u3001\u7C21\u5358\u306A\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u53C8\u306F\u30CF\u30FC\u30C9\u306A\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u958B\u59CB\u3059\u308B\u306E\u306B\u5FC5\u8981\u306A\u6642\u9593\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
  repsTrackTitle: "\u7B4B\u30C8\u30EC\u304C\u3088\u308A\u7C21\u5358\u306B",
  repsTrackDesc: "\u7B4B\u30C8\u30EC\u306E\u56DE\u6570\u3084\u30BB\u30C3\u30C8\u6570\u3092\u30A6\u30A9\u30C3\u30C1\u304C\u81EA\u52D5\u7684\u306B\u8A18\u9332\u3057\u307E\u3059\u3002\n  200\u4EE5\u4E0A\u306E\u30A8\u30AF\u30B5\u30B5\u30A4\u30BA\u30E9\u30A4\u30D6\u30E9\u30EA\u30FC\u304B\u3089\u3001\u30AA\u30EA\u30B8\u30CA\u30EB\u306E\n  \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u4F5C\u6210\u304C\u53EF\u80FD\u3002\u3055\u3089\u306B\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u5185\u5BB9\u3092\u53CB\u4EBA\n  \u3068\u5171\u6709\u3059\u308B\u306A\u3069\u3001\u697D\u3057\u304F\u30E9\u30A4\u30D0\u30EB\u305F\u3061\u3068\u5207\u78CB\u7422\u78E8\u3067\u304D\u307E\u3059\u3002",
  repsTrackDescMobile: "\u7B4B\u30C8\u30EC\u306E\u56DE\u6570\u3084\u30BB\u30C3\u30C8\u6570\u3092\u30A6\u30A9\u30C3\u30C1\u304C\u81EA\u52D5\u7684\u306B\u8A18\u9332\u3057\u307E\u3059\u3002200\u4EE5\u4E0A\u306E\u30A8\u30AF\u30B5\u30B5\u30A4\u30BA\u30E9\u30A4\u30D6\u30E9\u30EA\u30FC\u304B\u3089\u3001\u30AA\u30EA\u30B8\u30CA\u30EB\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u4F5C\u6210\u304C\u53EF\u80FD\u3002\u3055\u3089\u306B\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u5185\u5BB9\u3092\u53CB\u4EBA\u3068\u5171\u6709\u3059\u308B\u306A\u3069\u3001\u697D\u3057\u304F\u30E9\u30A4\u30D0\u30EB\u305F\u3061\u3068\u5207\u78CB\u7422\u78E8\u3067\u304D\u307E\u3059\u3002",
  packagelist: [{
    name: 'COROS APEX 2/2 Pro',
    num: 1
  }, {
    name: '充電ケーブル',
    num: 1
  }, {
    name: 'ナイロンバンド',
    num: 1
  }],
  comingSoon: 'COMING SOON',
  filterDifferentDialog: {
    intro: 'APEX 2とAPEX 2 Proは、多くの類似したスペックを備わっていますが、以下の違いがあります。',
    list1: ['COROS APEX 2は', '1.2インチの画面、フルGPSモードで45時間持続します。', '1.2インチの画面、フルGPSモードで45時間持続します。'],
    list2: ['COROS APEX 2 Proは、', '1.3インチ画面、フルGPSモードで75時間持続します。より大きな画面、より長い稼働時間に加え精度を高める二周波チップを備えています'],
    link: ['比較表より', '全てのスペックを', '確認できます']
  },
  dustyPinkDesc: "\u591C\u660E\u3051\u3084\u5915\u66AE\u308C\u6642\u30C8\u30EC\u30A4\u30EB\u4E0A\u306F\u3042\u305F\u308A\u4E00\u9762\u3001\u831C\u8272\u306B\u5909\u308F\u308A\u307E\u3059\u3002\u305D\n  \u306E\u6642\u9593\u306F\u307E\u308B\u3067\u9B54\u6CD5\u306B\u304B\u3051\u3089\u308C\u305F\u3088\u3046\u306A\u7F8E\u3057\u304F\u611F\u52D5\u7684\u306A\u3072\u3068\u6642\u3002\u305D\n  \u3093\u306A\u81EA\u7136\u754C\u3067\u6700\u3082\u611F\u52D5\u7684\u306A\u8272\u306E\u4E00\u3064\u306B\u656C\u610F\u3092\u8868\u3057\u3066\u4F5C\u3063\u305F\u30AB\u30E9\u30FC\n  \u304CAPEX 2 Dusty Pink\u3067\u3059\u3002",
  gobiDescs: ["\u4E7E\u71E5\u3057\u305F\u571F\u5730\u3001\u53B3\u3057\u3044\u5730\u5F62\u3001\u305D\u3057\u3066\u904E\u9177\u306A\u6761\u4EF6\u3067\u77E5\u3089\u308C\n    \u308B\u5E83\u5927\u306A\u30B4\u30D3\u7802\u6F20\u3092\u30A4\u30E1\u30FC\u30B8\u3057\u305F\u65B0\u3057\u3044\u9650\u5B9A\u30E2\u30C7\u30EB\u304C\u767B\u5834\u3067\u3059\u3002", "\u5148\u9032\u7684\u306A\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u300175\u6642\u9593\u306B\u3082\u53CA\u3076\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u306E\u9577\u6642\u9593\u30D0\u30C3\u30C6\u30EA\u30FC\u3001\u9811\u4E08\u306A\u8010\u4E45\u6027\u306A\u3069\u3001\n    COROS APEX 2 Pro Gobi\u306F\u3001\u52C7\u6562\u306B\u3082\u3053\u306E\u904E\u9177\u306A\u5730\u306B\u8DB3\u3092\u8E0F\u307F\u5165\u308C\u308B\u5192\u967A\u5BB6\u305F\u3061\u306E\u305F\u3081\u306B\u8A2D\u8A08\u3057\u307E\u3057\u305F\u3002\n    \u5168\u4E16\u754C\u30671500\u53F0\u306E\u6570\u91CF\u9650\u5B9A\u8CA9\u58F2\u306E\u305F\u3081\u3001\u7802\u6F20\u306E\u7802\u304C\u6D88\u3048\u3066\u3057\u307E\u3046\u3088\u3046\u306B\u9650\u5B9A\u6570\u304C\u7121\u304F\u306A\u308B\u524D\u306B\u624B\u306B\u5165\u308C\u3066\u304F\u3060\u3055\u3044\u3002"],
  gobiDescsMobile: ["\u4E7E\u71E5\u3057\u305F\u571F\u5730\u3001\u53B3\u3057\u3044\u5730\u5F62\u3001\u305D\u3057\u3066\u904E\u9177\u306A\u6761\u4EF6\u3067\u77E5\u3089\u308C\u308B\u5E83\u5927\u306A\n    \u30B4\u30D3\u7802\u6F20\u3092\u30A4\u30E1\u30FC\u30B8\u3057\u305F\u65B0\u3057\u3044\u9650\u5B9A\u30E2\u30C7\u30EB\u304C\u767B\u5834\u3067\u3059\u3002 ", "\u5148\u9032\u7684\u306A\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u300175\u6642\u9593\u306B\u3082\u53CA\u3076\u30C8\u30C3\u30D7\u30AF\u30E9\u30B9\u306E\u9577\n    \u6642\u9593\u30D0\u30C3\u30C6\u30EA\u30FC\u3001\u9811\u4E08\u306A\u8010\u4E45\u6027\u306A\u3069\u3001COROS APEX 2 Pro Gobi\n    \u306F\u3001\u52C7\u6562\u306B\u3082\u3053\u306E\u904E\u9177\u306A\u5730\u306B\u8DB3\u3092\u8E0F\u307F\u5165\u308C\u308B\u5192\u967A\u5BB6\u305F\u3061\u306E\u305F\u3081\u306B\n    \u8A2D\u8A08\u3057\u307E\u3057\u305F\u3002", "\u5168\u4E16\u754C\u30671500\u53F0\u306E\u6570\u91CF\u9650\u5B9A\u8CA9\u58F2\u306E\u305F\u3081\u3001\u7802\u6F20\u306E\u7802\u304C\u6D88\u3048\u3066\u3057\u307E\n    \u3046\u3088\u3046\u306B\u9650\u5B9A\u6570\u304C\u7121\u304F\u306A\u308B\u524D\u306B\u624B\u306B\u5165\u308C\u3066\u304F\u3060\u3055\u3044\u3002"]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pod.js
/* harmony default export */ const jp_pod = ({
  title: 'COROS POD',
  desc: 'データ取得と解析のためのコンパニオンデバイスです。',
  performanceTitle: 'Performance Optimization Device',
  performanceDesc: 'Can you ever have enough data? We didn’t think so, which is why we created the COROS Performance Optimization Device aka the COROS POD. The COROS POD provides all of the advanced running analytics you crave complementing your COROS GPS Watch to help keep you healthy and fit.',
  useDemo: 'The COROS POD is easy to use, simply shake to activate, pair with your watch or the COROS app and clip on vertically to your waist in the center of your back.',
  features: [{
    title: 'Left/Right balance',
    desc: 'We would all love to have an even 50/50 split between our left and right legs, however for many reasons, this is less typical than you would think. Knowing which side of your body you tend to favor can help you identify potential injuries before they occur and can be useful in correcting your running form.'
  }, {
    title: 'Stride Ratio',
    desc: "Stride Ratio is your Stride Height divided by your Stride Length. Let’s find the ideal ratio to make sure you aren’t jumping up and down or trying to enter a long jump competition. An ideal Stride Ratio ensures that you are using your body's energy to propel yourself forward as efficiently as possible. "
  }, {
    title: 'Stride Height',
    desc: 'Also known as vertical oscillation, stride height measures how high your body lifts off the ground during your running stride. Why does this matter? While it is important to make sure you are pushing off the ground, you also want to make sure more of your energy is used to move your forward rather than up in the air. Too low or too high can indicate opportunities for improvement – let’s find your sweet spot.'
  }, {
    title: 'Ground Time',
    desc: 'The key difference between running and walking is that when running, there is a period of time that both feet are off the ground. The more time your feet are on the ground, the less time you are moving forward. An efficient stride spends enough time on the ground to power up for the next stride and not a millisecond more. '
  }, {
    title: 'Form Power',
    desc: 'What’s Form Power – this is essentially the amount of power wasted due to inefficiencies in your running form. Just like ground contact time above, the lower the number, the better and more efficient the runner. Be sure to see how your form power changes as your body fatigues during a run as breakdowns in form are likely to occur. So remember, better efficiency = less wasted energy = lower form power.  '
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pod2.js
/* harmony default export */ const jp_pod2 = ({
  title: 'COROS POD 2 - Run Beyond GPS',
  desc: '更なる高精度を求める方向け',
  shopify_product_extra_desc_1: '日本不预售',
  shopify_product_extra_desc_2: 'ウォッチとの互換性についてはスペックシートをご確認ください。',
  name: 'COROS POD 2',
  subtitle: 'GPSの限界を超えるランニングの実現',
  subtitleMobile: 'GPSの限界を超える\nランニングの実現',
  product_detail: '軽量で防水性に優れたCOROS POD 2は、専用クリップでシューズや腰に装着した状態でCOROSのウォッチと接続すると、これまでになかった高精度のランニングデータが確認できます。\n最適化されたセンサーと高度なアルゴリズムによって、リアルタイムでのデータが把握できるため、常に正確な情報を確認しながらトレーニングやレースを終えることができます。',
  product_detailMobile: "\u8EFD\u91CF\u3067\u9632\u6C34\u6027\u306B\u512A\u308C\u305FCOROS POD 2\u306F\u3001\u5C02\u7528\n    \u30AF\u30EA\u30C3\u30D7\u3067\u30B7\u30E5\u30FC\u30BA\u3084\u8170\u306B\u88C5\u7740\u3057\u305F\u72B6\u614B\u3067\n    COROS\u306E\u30A6\u30A9\u30C3\u30C1\u3068\u63A5\u7D9A\u3059\u308B\u3068\u3001\u3053\u308C\u307E\u3067\u306B\n    \u306A\u304B\u3063\u305F\u9AD8\u7CBE\u5EA6\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u30C7\u30FC\u30BF\u304C\u78BA\u8A8D\u3067\u304D\n    \u307E\u3059\u3002\n    \u6700\u9069\u5316\u3055\u308C\u305F\u30BB\u30F3\u30B5\u30FC\u3068\u9AD8\u5EA6\u306A\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306B\n    \u3088\u3063\u3066\u3001\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u3067\u306E\u30C7\u30FC\u30BF\u304C\u628A\u63E1\u3067\u304D\u308B\n    \u305F\u3081\u3001\u5E38\u306B\u6B63\u78BA\u306A\u60C5\u5831\u3092\u78BA\u8A8D\u3057\u306A\u304C\u3089\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u3092\u7D42\u3048\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  problem: '今抱える問題',
  problem_desc: 'GPS技術は非常に素晴らしいですが、完全なものではありません。',
  problem_desc_mobile: 'GPS技術は非常に素晴らしいですが、\n完全なものではありません。',
  problem_scene1: '衛星データは特に高層ビル\n群や山間部で受信が遅延します。',
  problem_scene2: 'ペース表示までに最大10秒の遅延が発生することがあります。',
  problem_scene2_mobile: '室内でのランニングを正確に計測できません。',
  problem_scene3: '室内のランニングを正しく計測できません。',
  solution: '我々のソリューション',
  solution_desc: 'COROS POD 2は、GPSウォッチの従来の課題であったGPS信号の弱さ、データ受信の遅延、衛星の乱れといった問題を解決します。脚部からの動きを検知することでデータ精度を向上させ、リアルタイムペースをすぐに知ることでより効率的なトレーニングをサポートします。',
  solution_descMobile: 'COROS POD 2は、GPSウォッチの従来の課題であったGPS信号の弱さ、データ受信の遅延、衛星の乱れといった問題を解決します。\n脚部からの動きを検知することでデータ精度を向上させ、リアルタイムペースをすぐに知ることでより効率的なトレーニングをサポートします。',
  more: '',
  more1: '',
  more2: '',
  more3: '',
  more4: '',
  sensitive: '瞬時に得られる\nリアルタイムペース',
  datalag: 'データ遅延が解消',
  datalag_desc: 'COROS POD 2に搭載された高性能の加速度センサーによって脚部から走行データを取得し、ウォッチ画面により正確なリアルタイムペースを表示します。ペースアラート内蔵のCOROS POD 2とCOROSのウォッチをペアリングすると、手首のセンサーに基づいたウォッチの最大10秒のGPS遅延に対してほぼリアルタイムでペースが定まり、GPS遅延を気にすることがなくなります。',
  accurate: '屋内ではより高精度',
  accurate_subtitle: '室内ランニングのデータがより正確に',
  accurate_desc: "\u5BA4\u5185\u74B0\u5883\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u306B\u304A\u3044\u3066\u3082\u6B63\u78BA\u306A\u8D70\u884C\u8DDD\u96E2\u3092\u6E2C\u5B9A\n    \u3057\u307E\u3059\u3002\u8D70\u884C\u4E2D\u306E\u811A\u90E8\u306E\u52D5\u304D\u30923\u6B21\u5143\uFF083D\uFF09\u30D7\u30ED\u30C3\u30C8\u3059\u308B\n    \u3053\u3068\u3067\u30B9\u30C8\u30E9\u30A4\u30C9\u9577\u306E\u88DC\u6B63\u5024\u3092\u7B97\u51FA\u3057\u3001\u30C8\u30EC\u30C3\u30C9\u30DF\u30EB\u3084\n    \u5BA4\u5185\u30C8\u30E9\u30C3\u30AF\u3067\u306E\u8D70\u884C\u8DDD\u96E2\u3082\u7B97\u51FA\u3002\u51AC\u5834\u3084\u60AA\u5929\u5019\u6642\u306E\u5BA4\u5185\n    \u30E9\u30F3\u30CB\u30F3\u30B0\u306B\u304A\u3044\u3066\u6700\u9069\u306A\u30D1\u30FC\u30C8\u30CA\u30FC\u3068\u306A\u308A\u307E\u3059\u3002",
  accurate_descMobile: "\u5BA4\u5185\u74B0\u5883\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u306B\u304A\u3044\u3066\u3082\u6B63\u78BA\u306A\u8D70\u884C\u8DDD\u96E2\n  \u3092\u6E2C\u5B9A\u3057\u307E\u3059\u3002\u8D70\u884C\u4E2D\u306E\u811A\u90E8\u306E\u52D5\u304D\u30923\u6B21\u5143\n  \uFF083D\uFF09\u30D7\u30ED\u30C3\u30C8\u3059\u308B\u3053\u3068\u3067\u30B9\u30C8\u30E9\u30A4\u30C9\u9577\u306E\u88DC\u6B63\n  \u5024\u3092\u7B97\u51FA\u3057\u3001\u30C8\u30EC\u30C3\u30C9\u30DF\u30EB\u3084\u5BA4\u5185\u30C8\u30E9\u30C3\u30AF\u3067\u306E\u8D70\n  \u884C\u8DDD\u96E2\u3082\u7B97\u51FA\u3002\u51AC\u5834\u3084\u60AA\u5929\u5019\u6642\u306E\u5BA4\u5185\u30E9\u30F3\u30CB\u30F3\u30B0\n  \u306B\u304A\u3044\u3066\u6700\u9069\u306A\u30D1\u30FC\u30C8\u30CA\u30FC\u3068\u306A\u308A\u307E\u3059\u3002",
  consistent: '都市部でより安定',
  gps: 'GPS信号が弱い時の補正',
  gps_desc: 'トンネルや高層ビル群の一帯を走る時などは、GPS受信の遅延でウォッチ画面のペースや走行距離のデータがズレることがあります。様々な内部センサーから収集したデータによってCOROS POD 2は、GPSの乱れを自動修正してペース表示の上下動・ばらつきを抑えます。',
  precise: '山間部でより正確',
  comprehensive_metric: '坂道での総合的な指標の提供',
  comprehensive_metric_desc: "\u5168\u3066\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u30B3\u30FC\u30B9\u304C\u30D5\u30E9\u30C3\u30C8\u30B3\u30FC\u30B9\u3068\u3044\u3046\u308F\u3051\u3067\u306F\n    \u3042\u308A\u307E\u305B\u3093\u3002\u51FA\u529B\u30DA\u30FC\u30B9\u3068\u306F\u3001\u8D77\u4F0F\u306E\u3042\u308B\u9053\u3092\u3069\u308C\u3060\u3051\u306E\n    \u52AA\u529B\u611F\u3067\u8D70\u884C\u3057\u305F\u304B\u304C\u308F\u304B\u308B\u6307\u6A19\u3067\u3059\u3002\n    \u6A19\u6E96\u7684\u306AGPS\u30A6\u30A9\u30C3\u30C1\u3068\u6BD4\u8F03\u3057\u3066\u30015\u500D\u306EGPS\u53CD\u5FDC\u6027\u3092\u6301\u3064\n    COROS POD 2\u3092\u4F7F\u7528\u3059\u308C\u3070\u3001\u8D70\u884C\u4E2D\u306E\u77AC\u6642\u306E\u5224\u65AD\u3084\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n    \u7D42\u4E86\u6642\u306E\u7DCF\u5408\u7684\u306A\u5206\u6790\u304C\u53EF\u80FD\u3067\u3059\u3002",
  comprehensive_metric_descMobile: "\u5168\u3066\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u30B3\u30FC\u30B9\u304C\u30D5\u30E9\u30C3\u30C8\u30B3\u30FC\u30B9\u3068\u3044\u3046\n  \u308F\u3051\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u51FA\u529B\u30DA\u30FC\u30B9\u3068\u306F\u3001\u8D77\u4F0F\u306E\u3042\n  \u308B\u9053\u3092\u3069\u308C\u3060\u3051\u306E\u52AA\u529B\u611F\u3067\u8D70\u884C\u3057\u305F\u304B\u304C\u308F\u304B\u308B\u6307\n  \u6A19\u3067\u3059\u3002\u6A19\u6E96\u7684\u306AGPS\u30A6\u30A9\u30C3\u30C1\u3068\u6BD4\u8F03\u3057\u3066\u30015\u500D\n  \u306EGPS\u53CD\u5FDC\u6027\u3092\u6301\u3064COROS POD 2\u3092\u4F7F\u7528\u3059\u308C\u3070\u3001\u8D70\u884C\u4E2D\n  \u306E\u77AC\u6642\u306E\u5224\u65AD\u3084\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u7D42\u4E86\u6642\u306E\u7DCF\u5408\u7684\u306A\u5206\n  \u6790\u304C\u53EF\u80FD\u3067\u3059\u3002",
  learn_effort_pace: '出力ペースについて詳細を確認',
  beyond_gps: 'BEYOND GPS',
  beyond_gps_desc: "COROS POD 2\u306F\u8EFD\u91CF\u304B\u3064\u3001\u6D17\u7DF4\u3055\u308C\u305F\u30C7\u30B6\u30A4\u30F3\u3067\u64CD\u4F5C\u3082\u7C21\u5358\u3002\n  \u9577\u6642\u9593\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u306B\u5BFE\u5FDC\u3057\u3001\u63A5\u5730\u6642\u9593\u3084\u5DE6\u53F3\u30D0\u30E9\u30F3\u30B9\u306A\u3069\u9AD8\u7CBE\u5EA6\u306E\n  \u30E9\u30F3\u30CB\u30F3\u30B0\u30E1\u30C8\u30EA\u30AF\u30B9\u3092\u63D0\u4F9B\u3057\u307E\u3059\u3002",
  even: 'EVEN',
  even1: '',
  running_insights: '詳細なランニング指標',
  beyound_gps_desc1: "COROS POD 2\u306F\u3001\u30B7\u30E5\u30FC\u30BA\u3084\u8170\u306B\u88C5\u7740\n  \u3057\u305F\u4F4D\u7F6E\u3092\u81EA\u52D5\u306B\u691C\u51FA\u3067\u304D\u3001\u8C4A\u5BCC\u306A\n  \u30E9\u30F3\u30CB\u30F3\u30B0\u6307\u6A19\u3092\u5F97\u3089\u308C\u307E\u3059\u3002",
  stride_height: '上下動',
  balance: 'L/R バランス',
  ground_contact_time: '接地時間 ',
  stride_ratio: '上下動比',
  monitor: '',
  temperature: '環境温度を検知',
  monitor_desc: "COROS POD 2\u306F\u30E9\u30F3\u30CB\u30F3\u30B0\u4E2D\u306E\u6C17\u6E29\u3092\u8A18\u9332\u3057\u307E\u3059\u3002\n  \u8D70\u884C\u4E2D\u306E\u6691\u3055/\u5BD2\u3055\u3092\u6B63\u78BA\u306B\u628A\u63E1\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u7570\u306A\u308B\u6C17\u5019\n  \u3084\u5B63\u7BC0\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3046\u969B\u306B\u3001\u30E9\u30F3\u30CB\u30F3\u30B0\u30C7\u30FC\u30BF\u3092\u3088\u308A\n  \u7D30\u304B\u304F\u5206\u6790\u3067\u304D\u307E\u3059\u3002",
  monitor_descMobile: "COROS POD 2\u306F\u30E9\u30F3\u30CB\u30F3\u30B0\u4E2D\u306E\u6C17\u6E29\u3092\u8A18\u9332\u3057\u307E\u3059\u3002\u8D70\u884C\u4E2D\u306E\u6691\u3055/\u5BD2\u3055\u3092\u6B63\u78BA\u306B\u628A\u63E1\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u7570\u306A\u308B\u6C17\u5019\u3084\u5B63\u7BC0\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u884C\u3046\u969B\u306B\u3001\n  \u30E9\u30F3\u30CB\u30F3\u30B0\u30C7\u30FC\u30BF\u3092\u3088\u308A\u7D30\u304B\u304F\u5206\u6790\u3067\u304D\u307E\u3059\u3002",
  battery: '',
  battery_1: '圧倒的なバッテリー稼働時間',
  battery_desc: "COROS POD 2\u306B\u306F25\u6642\u9593\u306E\u9023\u7D9A\u4F7F\u7528\u304C\u53EF\u80FD\u306A\u30ED\u30F3\u30B0\u30D0\u30C3\u30C6\u30EA\u30FC\u304C\n    \u642D\u8F09\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u3055\u3089\u306B\u3001COROS POD 2\u306E\u30D5\u30EB\u5145\u96FB\u304C5\u56DE\u884C\u3048\u308B\n    \u30DD\u30FC\u30BF\u30D6\u30EB\u5145\u96FB\u30C9\u30C3\u30AF\u3092\u5229\u7528\u3059\u308C\u3070\u3001\u9577\u671F\u306E\u5916\u51FA\u4E2D\u3067\u3082\n    \u30D0\u30C3\u30C6\u30EA\u30FC\u6B8B\u91CF\u3092\u5FC3\u914D\u3059\u308B\u3053\u3068\u306F\u306A\u3044\u3067\u3057\u3087\u3046\u3002",
  battery_descMobile: "COROS POD 2\u306B\u306F25\u6642\u9593\u306E\u9023\u7D9A\u4F7F\u7528\u304C\u53EF\u80FD\u306A\u30ED\u30F3\u30B0\n  \u30D0\u30C3\u30C6\u30EA\u30FC\u304C\u642D\u8F09\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u3055\u3089\u306B\u3001COROS POD 2\u306E\u30D5\u30EB\u5145\u96FB\u304C5\u56DE\u884C\u3048\u308B\u30DD\u30FC\u30BF\u30D6\u30EB\u5145\u96FB\u30C9\u30C3\u30AF\u3092\u5229\u7528\u3059\u308C\u3070\u3001\u9577\u671F\u306E\u5916\u51FA\u4E2D\u3067\u3082\u30D0\u30C3\u30C6\u30EA\u30FC\u6B8B\u91CF\u3092\u5FC3\u914D\u3059\u308B\u3053\u3068\u306F\u306A\u3044\u3067\u3057\u3087\u3046\u3002",
  continuous_running: '25時間連続使用が可能',
  total_running: "25\u6642\u9593\u306E\u9023\u7D9A\u4F7F\u7528\xD7\u5145\u96FB\u30C9\u30C3\u30AF\u306E\u30D0\u30C3\u30C6\u30EA\u30FC\u5145\u96FB5\u56DE\uFF1D\n  \u6700\u5927150\u6642\u9593\u9023\u7D9A\u7A3C\u50CD",
  total_runningMobile: "28\u6642\u9593\u306E\u9023\u7D9A\u4F7F\u7528\xD7\u5145\u96FB\u30C9\u30C3\u30AF\u306E\u30D0\u30C3\u30C6\u30EA\u30FC\u5145\u96FB5\u56DE\uFF1D\u6700\u5927150\u6642\u9593\u9023\u7D9A\u7A3C\u50CD",
  lightweight: '軽量',
  and: 'かつ',
  weatherproof: '高い耐久性',
  light_waterproof_desc: "\u91CD\u3055\u306F\u308F\u305A\u304B5.6g\u3068\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u4E2D\u306B\u88C5\u7740\u3057\u3066\u3044\u308B\n    \u4E8B\u3092\u5FD8\u308C\u308B\u3050\u3089\u3044\u306E\u8EFD\u3055\u3067\u3059\u3002\n    \u30ED\u30FC\u30C9\u3067\u3082\u5C71\u3067\u3082COROS POD 2\u306F\u6C37\u70B9\u4E0B\u304B\u3089\u9AD8\u6E29\u307E\u3067\uFF08-10\xB0C\uFF5E60\xB0C\uFF09\n     \u306E\u52D5\u4F5C\u304C\u53EF\u80FD\u3067\u30013ATM\u306E\u9632\u6C34\u6027\u3082\u5099\u3048\u3066\u3044\u307E\u3059\u3002",
  light_waterproof_descMobile: "\u91CD\u3055\u306F\u308F\u305A\u304B5.6g\u3068\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3084\u30EC\u30FC\u30B9\u4E2D\u306B\u88C5\u7740\u3057\u3066\u3044\u308B\u4E8B\u3092\u5FD8\u308C\u308B\u3050\u3089\u3044\u306E\u8EFD\u3055\u3067\u3059\u3002\n\u30ED\u30FC\u30C9\u3067\u3082\u5C71\u3067\u3082COROS POD 2\u306F\u6C37\u70B9\u4E0B\u304B\u3089\u9AD8\u6E29\u307E\u3067\uFF08-10\xB0C\uFF5E60\xB0C\uFF09\u306E\u52D5\u4F5C\u304C\u53EF\u80FD\u3067\u30013ATM\u306E\u9632\u6C34\u6027\u3082\u5099\u3048\u3066\u3044\u307E\u3059\u3002",
  setup: '装着が簡単にできる',
  setup_desc: 'COROS POD 2はシューズや腰に簡単に装着できます。また、使用していない時は待機状態となってバッテリーを保ちます。',
  setup_descMobile: "COROS POD 2\u306F\u30B7\u30E5\u30FC\u30BA\u3084\u8170\u306B\u7C21\u5358\u306B\u88C5\u7740\u3067\u304D\u307E\u3059\u3002\n  \u307E\u305F\u3001\u4F7F\u7528\u3057\u3066\u3044\u306A\u3044\u6642\u306F\u5F85\u6A5F\u72B6\u614B\u3068\u306A\u3063\u3066\n  \u30D0\u30C3\u30C6\u30EA\u30FC\u3092\u4FDD\u3061\u307E\u3059\u3002",
  pair: 'PAIR',
  pair_desc: 'COROS POD 2をCOROSアプリに追加し、\nウォッチと自動的にペアリングします。',
  clip: 'CLIP',
  clip_desc: 'シューズや腰に装着。走った後、\nシューズにつけたままでもOKです。',
  go: 'GO',
  go_desc: 'ランモードを開始して瞬時にリアルタイムの指標を確認することができます。',
  // 这里 in_the_box 被用到了 apex2 页面，改回使用英语的
  // in_the_box: 'COROS POD 2 付属品',
  in_the_box_desc: 'COROS POD 2にはシューズ装着用クリップ、シリコン製の腰部装着用クリップ、ポータブル充電ドック、充電ケーブル、キャリーケースが付属されています。',
  faq: 'FAQ',
  faq_list1: [{
    ask: 'COROSウォッチを持っていないのですが、COROS POD 2は使えますか？',
    ans: 'COROS POD 2はCOROSウォッチとのみペアリングすることで使用できます。'
  }, {
    ask: 'COROS POD 2はパワーを測れますか？',
    ans: 'COROS POD 2はパワーではなく似たような指標として出力ペースが測定できます。出力ペースを見れば、ユーザーのパーソナルデータがより簡単に理解できます。'
  }, {
    ask: 'COROS POD 2はどのようにトレーニング効果を向上させますか？',
    ans: 'COROS POD 2はより正確なデータを提供することで、ワークアウト後のトレーニング分析に役立ちます。Training Hubで表示されたデータから自分の長所 / 短所を把握することができ、課題を克服するためのトレーニングを積み重ねるとパフォーマンスが向上していきます。'
  }, {
    ask: 'COROS POD 2はレース中に活用できますか？',
    ans: '例えばレース中に出力ペースを確認することで、コースの起伏に対してどれぐらい消耗するかの予測を立てやすくなります。また、リアルタイムで得られた正確なペースは、各々の最適なペース配分にも役立ちます。'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/ek.js
/* harmony default export */ const jp_ek = ({
  title: 'COROS PACE 2 | Eliud Kipchoge Edition',
  keywords: 'COROS PACE 2 | The lightest GPS watch - packs a punch',
  description: 'COROS PACE 2 is the lightest GPS watch on the market and the perfect training partner for athletes aiming for a new personal best.',
  ekaccessories: 'SHOP PACE 2 ACCESSORIES',
  ektitle: 'COROS PACE 2 Eliud Kipchoge Edition',
  content1c: 'The greatest marathon runner of all time – there has never been a runner quite like Eliud Kipchoge. He has all the accolades one can hope to achieve over the 26.22 mile/42.195 km distance. The first human to dip under 2 hours for the marathon, the world record holder, Olympic Gold Medalist and winner of the Berlin, London, and Chicago marathons.',
  content1tit: '1:59:40',
  content2tit: 'NO HUMAN \n IS LIMITED',
  content2c: 'Eliud\'s mantra is "No Human is Limited" and with COROS, we Explore Perfection. Together, we set out to celebrate this spirit with a signature watch bundle that features Eliud\'s favorite COROS technology – The special edition COROS PACE 2 Eliud Kipchoge Edition , and the COROS POD. When you wear the EK Signature Edition PACE 2, we hope that you will be inspired by Eliud and will push yourself to train a little harder, and race a little faster.',
  content3tit: 'THE ELIUD KIPCHOGE PACE 2',
  content3c: 'Unlike the traditional PACE 2, the Eliud Kipchoge edition features red and green accents inspired by the flag Eliud\'s native Kenya. The watch also showcases a white bezel with a red digital dial and green lap/back button.',
  content4tit: 'ONE-OF-A-KIND BANDS',
  content4c: 'The Eliud Kipchoge PACE 2 Edition is equipped with both silicone and nylon wrist bands, which like the watch body feature a white base with red and green accents.',
  content5tit: 'BETTER DATA FOR\nBETTER RUNNING',
  content5c: 'To train with the same focus as Eliud Kipchoge, requires you to collect the same data as Eliud and that means utilizing his favorite accessory – the COROS POD. The POD (Performance Optimization Device) offers you and Eliud advanced metrics including:',
  'content5-icon-1-text': 'Stride Ratio',
  'content5-icon-1-text-sub': '(Height to Length)',
  'content5-icon-2-text': 'Ground',
  'content5-icon-2-text-sub': 'Contact Time',
  'content5-icon-3-text': 'Form',
  'content5-icon-3-text-sub': 'Power',
  'content5-icon-4-text': 'Left/Right',
  'content5-icon-4-text-sub': 'Balance',
  'content5-icon-5-text': 'Stride',
  'content5-icon-5-text-sub': 'Height',
  content5info: 'Using the POD in tandem with the PACE 2 will help you further optimize your training as you chase your goals.',
  content6tit: 'Train like the\nG.O.A.T. with EvoLab',
  content6c: 'When you use EvoLab, Eliud is always by your side. EvoLab provides each user with a unique marathon level score of 0 – 100. Did you know that Eliud’s sub 2-hour marathon is the model for the max score of 100? Now you can see how you and your training partners stack up against the greatest marathoner of all time. Even if you are not quite ready to break the 2-hour barrier, be sure to check out the all-new race predictor to see how you’re ready to perform at your next 5k, 10k, half marathon or Eliud’s favorite – marathon.',
  content7tit: 'Limited Special Edition',
  content7c: 'Eliud may be an Olympic Gold Medalist in the Marathon now, but his first senior-level gold medal came in the 5,000m at the 2003 World Championships in Paris. To honor this, COROS is making just 5,000 units of the COROS PACE 2 Eliud Kipchoge Edition!'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/vertix2.js
/* harmony default export */ const jp_vertix2 = ({
  title: 'COROS VERTIX 2 GPS Watch',
  keywords: 'keywords',
  description: '登山、ハイキングなどアウトドアアドベンチャーに最適',
  vertix2title: 'COROS VERTIX 2',
  vertix2accessories: 'アクセサリー',
  content1c: '冒険とは「刺激的な体験」ともいえます。COROSのアドベンチャーウォッチであるVERTIX 2は、イノベーションを駆使して想像を超える進化をもたらし、ユーザーの新しい挑戦を可能にします。あなたの冒険がどこへ向かおうとも、VERTIX 2がその一歩一歩に寄り添います。',
  content2tit: '次世代通信へようこそ',
  content2c: 'VERTIX 2は、主要5衛星システム（GPS、GLONASS、Galileo、QZSS、Beidou）と同時に通信することが可能です。さらに、これまで航空機器にしか搭載されていなかった二周波衛星通信を搭載し、より高速で良好な信号が得られるようになりました。',
  content2desc: '',
  content3tit: 'よりスムーズな\n動作へ',
  content3c: 'パワーアップした回路とプロセッサーを搭載し、より快適で高速なCOROSウォッチの動作を可能としました。\nこれによって、VERTIX 2は前モデルから20％以上の動作の高速化を遂げました。',
  content4tit: '大きく鮮明な画面',
  content4c: '1.4インチの画面は解像度が16%高まったことで視認性が高くなっています。また、1つのページに最大8つの情報を表示することができ、アクティビティ中に必要な情報をより多く取得できるようになりました。',
  'performance-improvement-1': '1.4 in',
  'performance-improvement-2': '16%',
  content5tit: '',
  content5c: '',
  content6tit: 'モンスター級の\nロングバッテリー',
  content6c: "COROS\u30A6\u30A9\u30C3\u30C1\u306E\u7D20\u6674\u3089\u3057\u3044\u30D0\u30C3\u30C6\u30EA\u30FC\u52B9\u7387\n    \u3092\u3055\u3089\u306B\u5411\u4E0A\u3055\u305B\u308B\u3068\u3069\u3046\u306A\u308B\u304B\uFF1F\n    GPS\u30A6\u30A9\u30C3\u30C1\u53F2\u4E0A\u306E\u6700\u9577\u30D0\u30C3\u30C6\u30EA\u30FC\u3068\u3057\u3066\u541B\u81E8\n    \u3059\u308BVERTIX 2\u3092\u898B\u308C\u3070\u4E00\u76EE\u77AD\u7136\u3067\u3059\u3002127\u6642\u9593\n    \u306E\u30D5\u30EBGPS\u30C8\u30E9\u30C3\u30AD\u30F3\u30B0\u306839\u65E5\u9593\u306E\u901A\u5E38\u4F7F\u7528\u3068\n    \u3001\u524D\u30E2\u30C7\u30EB\u306E2\u500D\u4EE5\u4E0A\u306E\u30D0\u30C3\u30C6\u30EA\u30FC\u5BFF\u547D\u3092\u5B9F\u73FE\u3002\n    \u3042\u306A\u305F\u306E\u6700\u3082\u9577\u304F\u3001\u30BF\u30D5\u306A\u5192\u967A\u306E\u305F\u3081\u306B\u306F\n    VERTIX 2\u304C\u5FC5\u8981\u3067\u3057\u3087\u3046\u3002",
  content6cKeyword: '実現',
  content7tit: 'さらなる冒険のための\n第一歩',
  content7c: 'COROS.comから無料ダウンロードできるグローバルオフライン地形図と等高線図（Topo Map）、そしてこの2つのハイブリッドマップの利用が可能です。デジタルダイヤルで地図の拡大・縮小、タッチスクリーンのスワイプ操作で地図上の移動が可能です。',
  content8tit: 'リカバリーを\nマネジメントする',
  content8c: "VERTIX 2\u306F\u5FC3\u62CD\u5909\u52D5\uFF08HRV\uFF09\u30C6\u30B9\u30C8\u3092\u624B\u9996\n    \u3067\u884C\u3046\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002HRV\u306F\u3001\u30B9\u30C8\u30EC\u30B9\u306B\n    \u5BFE\u3059\u308B\u8EAB\u4F53\u306E\u53CD\u5FDC\u3068\u56DE\u5FA9\u80FD\u529B\u3092\u6E2C\u5B9A\u3059\u308B\u305F\u3081\n    \u306E\u7406\u60F3\u7684\u306A\u6307\u6A19\u3067\u3059\u3002\u6E2C\u5B9A\u306B\u3088\u3063\u3066\u5F97\u3089\u308C\u305F\n    HRV\u3092\u57FA\u306B\u3001\u308F\u304B\u308A\u3084\u3059\u3044\u6570\u5024\u306B\u5909\u63DB\u3057\u307E\u3059\u3002",
  content9tit: '待望の音楽機能',
  content9c: '32GBの容量があるVERTIX 2は、より多くのデータやワークアウト、ルート、そしてCOROSウォッチ待望の音楽ファイルの保存も可能に。また、Wi-fi機能を追加してさらに可能性を広げました。',
  content10tit: 'カメラコントロール機能',
  content10c: 'Insta360™ （One X2、One R、GO2）とGoPro（HERO9、10）アクションカメラを持っているユーザーは、GPSウォッチでカメラがコントロールできるようになり、ベストショットのためのカメラの遠隔操作が可能です。',
  content11tit: '専用カラビナ',
  content11c: 'COROSアスリートのクライマー、トミー・コールドウェルのビッグウォールミッションのように、手首にウォッチを装着していない状況でもデータの記録が必要な場合は、COROSの専用カラビナをご利用ください。ウォッチのフレームをロックし、ハーネスや他のギアに挟むためのクライマーや冒険家にとって必須のアクセサリーです。',
  content12tit: 'COROSエコシステム',
  content12c: 'VERTIX 2は上記の機能以外にも、COROSが誇る優れた機能を備えています。',
  learnmore: '詳細確認',
  speedleft1: 'モデル',
  speedright1: ['COROS VERTIX 2 GPS Adventure Watch'],
  speedleft2: 'ディスプレイサイズ',
  speedright2: ['1.4 インチ'],
  speedleft3: '解像度',
  speedright3: ['280 x 280 (64 解像度)'],
  speedleft4: 'ディスプレイ種類',
  speedright4: ['タッチパネル方式常時点灯型メモリーLCD'],
  speedleft5: '画面材質',
  speedright5: ['サファイアガラス'],
  speedleft6: 'カバー材質',
  speedright6: ['グレード5チタン合金PVDコーティング'],
  speedleft7: 'カバー材質',
  speedright7: ['チタン合金PVDコーティング'],
  speedleft8: 'ウォッチバンド',
  speedright8: ['26mm Quick Fit バンド'],
  speedleft9: 'バンド材質',
  speedright9: ['シリコン/ナイロン'],
  speedleft10: 'サイズ',
  speedright10: ['50.3 x 50.3 x 15.7mm'],
  speedleft11: '重量（シリコンバンド装着時）',
  speedright11: ['89g'],
  speedleft12: '稼働時間',
  speedright12: ['標準フルGPS(GPS /QZSS):140時間', '標準フルGPS(GPS /QZSS)＋音楽:35時間', '全システムオン(GPS/QZSS+GLONASS+Galileo+BeiDou)90時間', '全システムオン(GPS/QZSS+GLONASS+Galileo+BeiDou)＋音楽： 30時間', '全システムオン(GPS/QZSS+GLONASS+Galileo+BeiDou)＋二周波: 50時間', 'UltraMaxモード: 240時間', '日常使用'],
  speedleft13: 'ワイヤレス接続',
  speedright13: ['Bluetooth® 5.0 Dual Mode, Wi-Fi®'],
  speedleft14: 'アクセサリー接続',
  speedright14: ['Bluetooth®'],
  speedleft15: 'メモリー',
  speedright15: ['32GB'],
  speedleft16: '衛星チップセット',
  speedright16: ['全衛星システム二周波GNSSチップセット'],
  speedleft17: 'センサー',
  speedright17: ['光学式パルスオキシメーター', '光学式心拍数計', 'ECGセンサー', '気圧高度計', '加速度センサー', 'コンパス', 'ジャイロセンサー', '温度計'],
  speedleft18: '防水性能',
  speedright18: ['10 ATM'],
  speedleft19: '使用温度',
  speedright19: ['-22°F to 122°F (-30°C to 50°C)'],
  speedleft20: '保管温度',
  speedright20: ['-22°F to 140°F (-30°C to 60°C)'],
  speedleft21: '充電時間',
  speedright21: ['約2時間'],
  speedleft22: 'マップ/ナビゲーション',
  speedright22: ['オフライングローバル地形図', 'タッチスクリーンとデジタルダイヤル対応の階層リンクナビゲーション', 'チェックポイント', 'スタートに戻る', '標高の詳細', '目的地までの距離', 'GPS/MGRS座標', 'ストームアラート'],
  speedleft23: '音楽対応',
  speedright23: ['内部ストレージとBluetoothヘッドフォンストリーミングでオフラインコンテンツに対応'],
  speedleft24: '音楽フォーマット',
  speedright24: ['MP3'],
  speedleft25: '対応ワークアウト',
  speedright25: ['ボート、ローイングマシン'],
  features: {
    category: 'カテゴリ',
    categoryVal: ['機能'],
    activityAlert: 'アクティビティアラート',
    activityAlertVal: ['ケイデンスアラート', '距離アラート', '標高差アラート', '心拍数アラート', '補給アラート', 'ペースアラート', 'パワーアラート', 'スピードアラート', '歩数アラート'],
    blt: 'Bluetoothアクセサリー',
    bltVal: ['アクションカメラ(GoPro, Insta360)', 'バイクトレーナー', '心拍数放送', 'Concept2ローイングマシン', 'CORE体温計', 'COROS POD', '心拍ベルト', 'パワーメーター', 'ケイデンススピードセンサー', 'Stryd'],
    dailyAlert: '日常アラート',
    dailyAlertVal: ['活動カロリー＆運動時間目標', '標高アラート', 'ストームアラート', 'トレーニングプラン'],
    fitness: 'EvoLab - 一般的なフィットネス',
    fitnessVal: ['4週間の負荷強度分布', '7日間の総負荷', 'ベースフィットネス', '疲労具合', '刺激', 'リカバリータイマー＆アドバイス', 'トレーニング効果', 'トレーニング負荷'],
    roadRuning: 'EvoLab -ロードランニング',
    roadRuningVal: ['ランニングレベル', 'パフォーマンス予測', 'ランニングパフォーマンス', 'ランニングVO2 Max', '乳酸閾値心拍数', '乳酸閾値ペース', 'トレーニングの焦点'],
    nav: 'ナビ設定',
    navVal: ['スタートに戻る', 'チェックポイント', '標高詳細', 'ハイブリッド地図レイヤー', '地形図レイヤー', '等高線地図レイヤー', 'コース離脱アラート', 'タッチスクリーン対応の階層リンクナビゲーション'],
    satellite: '衛星システム',
    satelliteVal: ['全システム(GPS/QZSS+GLONASS+Galileo+BeiDou)＋二周波オン', '全システム(GPS/QZSS+GLONASS+Galileo+BeiDou)オン', '標準GPS', 'GPS衛星の位置情報', '位置フォーマット - MGRS/GPS', '衛星信号'],
    sensors: 'センサー',
    sensorsVal: ['コンパス', '加速度センサー', '全衛星システム二周波GNSS', '気圧高度計', 'ECGセンサー', 'ジャイロセンサー', '温度計', '手首式心拍計', '手首式パルスオキシメーター'],
    system: 'システム',
    systemVal: ['アラーム、ストップウォッチ、タイマー', 'オートロック', 'バックライト（ボタン／ジェスチャー）', 'バッテリー使用レポート＆予測', 'デジタルダイヤル位置のカスタマイズ', 'デジタルダイヤル', 'HRV指標', 'ライトキーショートカット', 'メトロノーム', '音楽', 'ナイトモード', 'Wi-Fi'],
    lang: 'システム言語',
    langVal: ['Deutsch, English, Español, Français, Italiano, Polski, Português, Pусский, ภาษาไทย, 한국어, ⽇本語, 简体中文, 繁体中文'],
    widget: '日常機能',
    widgetVal: ['消費カロリー', '気圧', '標高', '運動時間', '累計上った階段数', '心拍数', 'EvoLabの主要な指標', '睡眠トラッキング', 'スマートな通知', '歩数', '日の出/日没', '温度', 'トレーニングプラン'],
    workoutFeats: 'ワークアウト機能',
    workoutFeatsVal: ['オートポーズ', 'オートスクロール', '背景色（ホワイト/ブラック）', 'インターバルトレーニング', 'データページのカスタマイズ', 'メッセージ＆着信の通知', '後で再開', 'タッチスクロール', 'UltraMax', 'バーチャルラン', '手首式ランニングパワー'],
    swim: 'スイミング/オープンウォーター',
    swimVal: ['泳ぎ方の検知'],
    skiTouring: 'スキーツーリング',
    skiTouringVal: ['上昇/下降検知'],
    snowboard: 'スキー/スノーボード',
    snowboardVal: ['上昇/下降検知'],
    strength: '筋トレ',
    strengthVal: ['繰り返し検知'],
    trackRun: 'トラックラン',
    trackRunVal: ['トラック検知'],
    workoutMode: 'ワークアウトモード',
    workoutModeVal: ['バイク', 'フラットウォーター', '屋外有酸素', '室内有酸素', 'ハイキング', '屋内バイク', 'ローイングマシン', 'トレッドミル', '登山', 'マルチスポーツ', 'マルチピッチ', 'オープンウォーター', 'スイミング', 'ボート', 'ラン', 'スキー', 'スキーツーリング', 'スノーボード', 'スピードサーフィン', '筋トレ', 'トラックラン', 'トレイルラン', 'トレーニング（構造化プログラム）', 'トレーニングプラン', 'トライアスロン', 'ウォーキング', 'ホワイトウォーター', 'ウィンドサーフィン', 'XCスキー']
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/map.js
/* harmony default export */ const jp_map = ({
  maptitle: 'マップダウンロード',
  mapsubheader: '地域選択',
  mapdownloadentireregion: '全地域をダウンロードする',
  mapwelcome: 'COROSマップのダウンロードページへようこそ。このページでは、等高線図（Topo）と地形図を無料でダウンロードすることができます。',
  mapdownload_instruction: '地形図や等高線図（Topo Map）をダウンロードするには、以下の手順で行ってください。',
  mapdownload_instruction_list1: '- 下の地域選択ツールを使ってSHIFTボタンを押しながら、マウス / カーソルで目標地域を囲むようにドラッグしてください。',
  mapdownload_instruction_list2: '- ご希望の地域を選択してダウンロードボタンを押すと、その地域の地形図や等高線図がダウンロードでき、マップの容量も表示されます。',
  mapdownload_tips: "* \u30B9\u30C8\u30EC\u30FC\u30B8\u5BB9\u91CF\u306F\u6B21\u306E\u901A\u308A\u3067\u3059\u3002\n  APEX Pro / VERTIX\uFF1A4GB\u3001APEX 2\uFF1A8GB\u3001APEX 2 Pro / VERTIX 2\uFF1A32GB",
  mapdownload_message: 'ダウンロードスタート後、ポップアップウィンドウを閉じて進捗状況も確認できます。',
  mapdownload_instruction_mobile: 'このページからマップをダウンロードするには、デスクトップのコンピュータをご利用ください。',
  maplandscope_introduction: '地形図は、道路、主要道路網、自然、水路などの情報を提供しています。国境や行政区、レストランやガソリンスタンド、店舗、学校などの施設情報は含まれていません。',
  maptopo_introduction: '等高線図には自然物や人工物の地理的位置と標高が記載されています。等高線によって山、谷、平野など土地の形状を表しています。',
  maph4: '以下の表からダウンロードする地域を選択してください。',
  maph5: 'インストール方法',
  mapl1: 'ダウンロードする前に、ハードディスクに十分な空き容量があることをご確認ください。',
  mapl2: 'ダウンロードしたファイルをハードディスクに解凍してください。',
  mapl3: 'マップフォルダをウォッチにコピーしてください。',
  mapl4: 'see:',
  maph6: '地形図',
  mapt3: 'ファイル転送の推定時間：',
  maph7: '等高線図',
  mapt4: 'ファイル転送の推定時間：',
  mapconditions: '©OpenStreetMap 利用規約',
  mapconditions_1: 'このマップは、コミュニティが作成した©OpenStreetMap（OSM）データベースを使用しています。この地図の使用は、エンドユーザーライセンス契約（EULA）の条件ではなく、©OpenStreetMapの以下の条件に従うものとします。',
  mapconditions_2: 'OpenStreetMapデータは、©OpenStreetMapの貢献者の著作物であり、Open Database Licenseに従います。OpenStreetMapデータの個々のコンテンツに対するいかなる権利も、Database Content Licenseの下でライセンスされます。',
  maph9: 'データ範囲',
  mapt7: 'この地図は、道路やトレイルネットワーク、水路、自然地形のみを記録されています。国境、行政区域、店舗、レストラン、駐車場などの施設は含まれていません。',
  maph10: '警告',
  mapt8: '©COROSは、©OpenStreetMapのマップをフォーマットし、スタイルを整えるだけです。©COROSは、©OpenStreetMap製品の地図データの正確さや完全性を保証するものではありません。お客様は、ご自身の責任において使用することに同意するものとします。',
  mapt9: 'お客様は、マッピングデータの使用に関する全責任とリスクを負うことになります。また、マッピングデータの正確性、完全性、信頼性、有用性など、マッピングデータに関連して、明示的、暗示的を問わず、いかなる表明や保証をするものではありません。したがって、©COROSは、お客様がマッピングデータを使用することによって生じるいかなる損害やクレームに対しても、直接的か間接的かを問わず、一切の責任を負わないものとします。',
  mapt10: '©COROS のマップは、あくまでも参考用であり、方向、距離、位置、地形などの正確な計測を必要とする目的には使用しないでください。',
  mapt11: '時間',
  mapcopyright: '© 2021 | COROS Wearables Inc.',
  mapregion: '地域',
  mapgeomap: '地形図',
  downloadprocess: 'ファイルの生成',
  shiftPress: '目標地域を選択：SHIFTボタンを押しながら、マウス / カーソルで目標地域を囲むようにドラッグしてください。',
  mapcontours: '等高線図（Topo）',
  maplanguage: '言語',
  mapcn: '中国語',
  mapen: '英語',
  africa: 'Africa',
  antarctica: 'Antarctica',
  asia: 'Asia',
  asia1: 'Asia - 1',
  asia2: 'Asia - 2',
  asia3: 'Asia - 3',
  asia4: 'Asia - 4',
  'north-america1': 'North America - 1',
  'north-america2': 'North America - 2',
  'australia-oceania': 'Oceania',
  'central-america': 'Central America',
  europe: 'Europe',
  'north-america': 'North America',
  'south-america': 'South America',
  maplocaldown: 'ダウンロード',
  mapdownloadbutton: 'マップをダウンロード',
  maphelplink: 'インストール方法',
  mapdownloadtitle: '以下のマップをダウンロード',
  mapmacoshelp: 'MacOSを使用する方へ',
  mapwinhelp: 'Windowsを使用する方へ',
  macostitle: 'インボート手順',
  macost1: '1. zipファイルを選択して解凍してください。そうすると、ファイルがハードディスクやデスクトップ上のフォルダ（例：Asia3_map.）に保存されます。',
  macost2: '2. ウォッチとパソコンを充電ケーブルで接続し、 時計がパソコンに認識されるまで待ちます。\n※数分経ってもパソコンに認識されない場合は、再起動してみてください。',
  macost3: '3. ディスクマーク（VERTIX 2）を選択し、ウォッチのルートディレクトリを開きます。ウォッチのディレクトリに「map」と「Music」の2つのフォルダが既にインストールされました。（下図参照）。',
  macost4: '4. 「option」キーを押しながら、ダウンロードした「map」フォルダ（ラベル：map）をCOROSウォッチのルートディレクトリにドラッグしてください。Asia1_landscapeを例にすると、下の写真をご覧ください。',
  macost5: 'プロンプトが表示されたら、ポップアップダイアログで「マージ」を選択し、コピーが完了するのを待ちます。',
  macoscautions: '以下のをご覧ください：',
  macosc1: '1. ウォッチのデフォルトの[map]ディレクトリを置き換えないようにするには、以下の手順で行ってください。地図ディレクトリにアクセスしてコピーする場合、キーボードの「option」キーを押しながらドラッグしてコピーしてください。お使いのコンピュータのオペレーティングシステムによっては、「停止、置き換え、またはマージ」を求めるポップアップボックスが表示される場合があります。このポップアップが表示された場合は、「マージ」を選択してください。「置き換え」を選択すると、ウォッチの「map」ディレクトリにあるオリジナルの地図ファイルが削除されますので、選択しないでください。',
  macosc2: '2. インターネットの速度やダウンロードのサイズにより、マップファイルが時計のハードディスクに転送されるまでにかなりの時間がかかる場合があります。また、コンピュータが電源に接続されていることを確認してください。',
  macosc3: '3.[map]ディレクトリが時計のルートディレクトリに置かれていることを確認し、インストールに問題が発生するため、ファイル名を変更しないようにしてください。',
  windowstitle: 'インボート手順',
  windowst1: '1. zipファイルを選択して解凍してください。そうすると、ファイルがハードディスクやデスクトップ上のフォルダ（例： North_America_Contour）に保存されます。',
  windowst2: '2. ウォッチとパソコンを充電ケーブルで接続し、タスクバーから「ファイルエクスプローラー」（File Explorer）を選択し、左ペインから「このPC」を選択します。これで、COROSウォッチがハードディスクとして表示されることを確認できます。',
  windowst3: '3. ステップ1で解凍したディレクトリ/地図ファイルを（デスクトップまたはファイル内に）見つけ、[map]ディレクトリ上で右クリックし、「送信」メニューをクリックし、「VERTIX 2」を選択して、ファイル転送が終了するのを待ちます。',
  windowscautions: '以下のをご覧ください：',
  windowsc1: '1. ウォッチのデフォルトの[map]ディレクトリを置き換えないよう、プロンプトが表示されたら、ポップアップボックスで「マージ」を選択してください。「置き換え」を選択すると、ウォッチの「map」ディレクトリにあるオリジナルの地図ファイルが削除されますので、選択しないでください。',
  windowsc2: '2. インターネットの速度やダウンロードのサイズにより、マップファイルが時計のハードディスクに転送されるまでにかなりの時間がかかる場合があります。また、コンピュータが電源に接続されていることを確認してください。',
  windowsc3: '3.[map]ディレクトリが時計のルートディレクトリに置かれていることを確認し、インストールに問題が発生するため、ファイル名を変更しないようにしてください。',
  updatedAt: '更新時間：{updateTime}',
  A3000: 'Select the firmware and update (update to the latest version is recommended)',
  A3001: '{version} and above',
  A3002: 'Other firmware updates',
  A3003: 'How to check your watch firmware version',
  A3004: 'Check the firmware version in COROS APP> Profile > Device page'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/trainingHub.js
/* harmony default export */ const jp_trainingHub = ({
  title: 'COROS Training Hub',
  keywords: 'トレーニング、分析、アスリート、コーチ、競技、パフォーマンス、コミュニケーション、持久力、フィットネス、疲労、マラソン、トライアスロン',
  description: 'COROSユーザー向けに無料でデータ分析・コーチングするプラットフォームです。',
  desc: 'COROS EvoLabのシステムに基づいて構築されたデータ分析ツールのCOROS Training Hubは、最高レベルのトレーニングを行うための分析機能を無料で提供します。Training Hubにログインすると自分のデータベースにアクセスでき、過去と現在の指標の分析、コーチとのコミュニケーション、トレーニングプランの作成、チームへの参加や管理などを行うことができます。',
  visualize: {
    title: '過去を理解する\n現在を分析する\n未来を創造する\n',
    desc: "Training Hub\u3067\u5168\u3066\u306E\u30C7\u30FC\u30BF\u3092\u53EF\u8996\u5316\u3057\u3001\n    \u6B21\u306A\u308B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u4F5C\u6210\u306E\u305F\u3081\u306B\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u52B9\u7387\u3092\u6700\u5927\u5316\u3055\u305B\u3001\u76EE\u6A19\u9054\n    \u6210\u306B\u7E4B\u3052\u307E\u3057\u3087\u3046\u3002"
  },
  plans: {
    title: 'トレーニングプランの\n作成',
    desc: "\u69D8\u3005\u306A\u30C7\u30FC\u30BF\u5206\u6790\u3092\u57FA\u306B\u8AB2\u984C\u3092\u660E\u78BA\u306B\u3057\u3066\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n    \u30D7\u30E9\u30F3\u3092\u4F5C\u6210\u3057\u307E\u3057\u3087\u3046\u3002\u30A4\u30F3\u30BF\u30FC\u30D0\u30EB\u3084\u30C6\u30F3\u30DD\u8D70\u306A\u3069\n    \u304A\u6C17\u306B\u5165\u308A\u306E\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u3084\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u767B\u9332\u3059\u308B\u3068\n    \u3001\u30DE\u30A6\u30B9\u3092\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3060\u3051\u3067\u30AB\u30EC\u30F3\u30C0\u30FC\u306B\u8CBC\u308A\u4ED8\u3051\u308B\n    \u3053\u3068\u304C\u3067\u304D\u3001\u7C21\u5358\u306B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3092\u4F5C\u6210\u3059\u308B\u3053\u3068\n    \u304C\u3067\u304D\u307E\u3059\u3002",
    descMobile: "\u69D8\u3005\u306A\u30C7\u30FC\u30BF\u5206\u6790\u3092\u57FA\u306B\u8AB2\u984C\u3092\u660E\u78BA\u306B\u3057\u3066\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u3092\u4F5C\u6210\u3057\u307E\u3057\u3087\u3046\u3002\n    \u30A4\u30F3\u30BF\u30FC\u30D0\u30EB\u3084\u30C6\u30F3\u30DD\u8D70\u306A\u3069\u304A\u6C17\u306B\u5165\u308A\u306E\n    \u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u3084\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u767B\u9332\u3059\u308B\u3068\u3001\n    \u30DE\u30A6\u30B9\u3092\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u3060\u3051\u3067\u30AB\u30EC\u30F3\u30C0\u30FC\u306B\u8CBC\n    \u308A\u4ED8\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u7C21\u5358\u306B\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n    \u30D7\u30E9\u30F3\u3092\u4F5C\u6210\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  },
  interact: {
    title: 'オンライン上の\nコミュニケーション',
    desc: "\n    \u30AA\u30F3\u30E9\u30A4\u30F3\u4E0A\u3067\u4F5C\u6210\u3057\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3 / \n    \u30E1\u30CB\u30E5\u30FC\u3092COROS\u30A2\u30D7\u30EA\u3084\u30A6\u30A9\u30C3\u30C1\u3078\u306E\u540C\u671F\u304C\n    \u53EF\u80FD\u3002\u307E\u305F\u3001\u30E1\u30C3\u30BB\u30FC\u30B8\u6A5F\u80FD\u3092\u4F7F\u3063\u3066\u30B3\u30FC\u30C1\u3068\n    \u30AA\u30F3\u30E9\u30A4\u30F3\u4E0A\u3067\u30B3\u30DF\u30E5\u30CB\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u53D6\u308B\u3053\u3068\n    \u3082\u3067\u304D\u307E\u3059\u3002"
  },
  team: {
    title: 'チームでトレーニング',
    desc: "Training Hub\u3092\u901A\u3057\u3066\u3001\u30C1\u30FC\u30E0\u3084\u30D0\u30FC\u30C1\u30E3\u30EB\n    \u30E9\u30F3\u30CB\u30F3\u30B0\u30B0\u30EB\u30FC\u30D7\u306A\u3069\u306E\u5168\u4F53\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n    \u72B6\u6CC1\u3092\u78BA\u8A8D\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u3001\u30E2\u30C1\u30D9\u30FC\u30B7\u30E7\u30F3\u3001\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u7BA1\u7406\u3001\u30C1\u30FC\u30E0\u30EF\u30FC\u30AF\u3092\u9AD8\u3081\u308B\u3053\u3068\n    \u306B\u7E4B\u304C\u308A\u307E\u3059\u3002"
  },
  knowMore: {
    title: 'Training Hubをさらに知る',
    desc: "COROS SUPPORT\u3067\u306FTraining Hub\u306B\u3064\u3044\u3066\u306E\u3055\u3089\u306A\u308B\u8A73\u7D30\u3092\u77E5\u308B\u3053\u3068\u304C\n    \u3067\u304D\u307E\u3059\u3002\u30B3\u30FC\u30C1\u304C\u4EE5\u4E0B\u306E\u300C\u30B3\u30FC\u30C1\u767B\u9332\u300D\u304B\u3089\u7533\u8ACB\u3059\u308B\u3068\u3001COROS\u30B9\u30DD\u30FC\u30C4\u79D1\n    \u5B66\u30C1\u30FC\u30E0\u306E\u5BE9\u67FB\u3092\u7D4C\u3066Training Hub\u306E\u30B3\u30FC\u30C1\u6A5F\u80FD\u304C\u5229\u7528\u304C\u53EF\u80FD\u3068\u306A\u3063\u3066\u30C1\u30FC\u30E0\u4F5C\n    \u6210\u3001\u30A2\u30B9\u30EA\u30FC\u30C8\u7BA1\u7406\u3001\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u4F5C\u6210\u7B49\u306E\u6A5F\u80FD\u3092\u4F7F\u3046\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  },
  coachSignup: 'コーチ登録',
  athleteSignup: 'アスリート登録',
  login: 'ログイン',
  privacy: 'プライバシーポリシー',
  readPrivacy: '読まして、同意します。',
  forgot: 'パスワードを忘れました。',
  rememderMe: 'パスワードを記憶させます。',
  loginFailed: 'メールアドレスまたはパスワードが無効です。',
  notOpen: 'サービスがまだ開始してないです。',
  email: 'Eメール',
  password: 'パスワード',
  welcomeBack: 'お帰りなさい！',
  launch: 'アプリを起動する',
  logOut: 'ログアウト',
  agreeNotify: 'まず、プライバシーポリシーと利用規約をお読みいただき、ご確認ください。'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/declarationOfConformity.js
/* harmony default export */ const jp_declarationOfConformity = ({
  apex46: 'COROS APEX 46mm',
  apex42: 'COROS APEX 42mm',
  safeSound: 'COROS SafeSound'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/getApp.js
/* harmony default export */ const jp_getApp = ({
  title: 'アプリをダウンロード',
  desc: '全ての人のためのフィットネスアプリ',
  subDesc: 'COROSアプリは、COROSを体験に欠かせないものです。\nアプリでデバイスを管理して、データを同期して詳細なパフォーマンス分析することができます。',
  appExamples: [{
    title: '身体の状態確認',
    text: '心拍数、活動消費量、睡眠などに関するデータを毎日確認することができます。'
  }, {
    title: 'ルートを作成する',
    text: 'ナビゲーションツールで新しい冒険を始め、ルートをウォッチに簡単に同期できます。'
  }, {
    title: '自分の目標設定',
    text: 'ランニングレベル、レース予測機能、疲労管理などのツールを使ってスマートにトレーニングができます。'
  }, {
    title: '未来のプラン作成',
    text: 'ワークアウト / トレーニングプランの作成や修正、共有ができます。'
  }, {
    title: '走行ルートの確認',
    text: 'アクティビティ指標、GPSルート、ワークアウトの傾向を確認できます。'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/apexPro.js
/* harmony default export */ const jp_apexPro = ({
  name: 'COROS APEX Pro',
  accessories: 'ACCESSORIES',
  trailTested: {
    title: "Trail Tested\nAthlete Approved",
    desc: 'Titanium frame, Sapphire glass screen and 100m waterproof rating provide ultimate durability. At just 59g including the watch band, you can take the APEX Pro on just about any adventure you can dream of.'
  },
  battery: {
    desc: 'The APEX Pro offers 40 hours of full GPS battery life – a 14% increase over the original APEX. Now you can get through that Mountain 100 miler without having to debate about switching into Ultra Max Mode.'
  },
  mountainGuide: {
    title: 'A Mountain Guide on Your Wrist',
    desc: '24/7 blood oxygen monitoring with Altitude Mode, APEX Pro follows the VERTIX as the only watches to provide hourly acclimatization evaluations. Your watch will let you know when you should keep climbing, or when you should head back down to a lower altitude.'
  },
  touchFeat: {
    title: 'The Navigation Experience',
    desc: 'Now supports offline mapping, and includes: Landscape, Topo and Hybrid modes. By using touch screen and the digital dial, users can explore our new mapping function. You can track your path over maps. This is a completely revamped navigation experience on your wrist.',
    videos: ['How to use basic navigation features', 'How to use advanced navigation features', 'How to use checkpoint during navigation']
  },
  trainingMode: {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: 'With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and onto your watch. With the new training mode, your best efforts are well within your reach.'
  },
  nightMode: {
    title: 'Light up the Night’s Sky',
    desc: 'Night Mode – a new always on mode for nighttime activities. While manual options still remain for quick bursts of the backlight, Night Mode, leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark, but dim enough to maintain superior battery performance throughout your run or ride even needed all night long. Don’t worry, it turns off automatically when you finish you workout, or at sunrise.'
  },
  stayTrack: {
    title: 'Stay on Track',
    desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run on it.'
  },
  batteryDetails: {
    duration: ['Up to', '14% longer', 'battery life'],
    subDesc: "Built for\n    the Long\u2026er Run"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/accessories.js
/* harmony default export */ const jp_accessories = ({
  title: 'アクセサリー',
  buy: '今すぐ購入',
  'vertix2-nylon-band': 'COROS VERTIX 2ナイロンバンド',
  'vertix2-silicone-band': 'COROS VERTIX 2シリコンバンド',
  // 'pod': 'COROS POD',
  'vertix-charging-cable': 'COROS APEX/VERTIX 専用充電ケーブル',
  'keychain-watch-charger': 'COROS専用キーホルダータイプ充電ケーブル',
  'vertix-nylon-band': 'COROS VERTIXナイロンバンド',
  'vertix-silicone-band': 'COROS VERTIXシリコンバンド',
  'charging-cable': 'COROS専用充電ケーブル',
  'apex-pro-nylon-band': 'COROS APEX 46mm/APEX Proナイロンバンド',
  'apex-pro-silicone-band': 'COROS APEX 46mm/APEX Proシリコンバンド',
  'pace2-nylon-band': 'COROS APEX 42mm/PACE 2ナイロンバンド',
  'pace2-silicone-band': 'COROS APEX 42mm/PACE 2シリコンバンド',
  hrm: 'COROS心拍センサー',
  detailPageDesc: '素敵なCOROSアクセサリーを手に入れましょう。',
  sortOptions: {
    priceLowToHigh: '価格の低い順',
    priceHighToLow: '価格の高い順',
    manual: 'おすすめの商品'
  },
  selectProductType: '対応アクセサリーの表示',
  tips4noProductType: 'お使いのCOROS製品を上部で選択してください。',
  selectAccessoryType: 'アクセサリーのタイプ',
  resetFilter: 'リセット',
  sortBy: '並べ替え',
  filters: 'フィルター',
  confirmFilter: '確認'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/specs.js
/* harmony default export */ const jp_specs = ({
  model: '番号',
  navigation: 'ナビゲーション',
  sensors: 'センサー',
  batteryLife: '稼働時間',
  supportedWorkouts: '対応ワークアウトモード',
  yes: 'Yes',
  comparePageTitle: 'ウォッチ比較',
  comparePlaceholder: '比較するウォッチを選択してください',
  'FULL WATCH COMPARISON': '全てのウォッチ比較',
  'Hide Duplicated Details': '同じところを非表示にします',
  compareLabel: {
    'Size and Weight': 'サイズと重量',
    Dimensions: 'サイズ',
    'POD Dimensions': 'サイズ',
    Weight: '重量',
    Display: 'ディスプレイ',
    'Display Size': 'サイズ',
    'Display Resolution': '解像度',
    'Display Type': '種類',
    Materials: '材質',
    'Screen Material': '画面材質',
    'Bezel Material': 'ベゼル材質',
    'Cover Material': 'カバー材質',
    'Band Material': 'バンド材質',
    'Watch Band': 'ウォッチバンド',
    Width: '幅',
    'Installation Type': '装着タイプ',
    Design: 'デザイン',
    Button: 'ボタン',
    Connectivity: '接続',
    Phone: '携帯電話接続',
    Accessories: 'アクセサリー接続',
    'Data Sync': 'データ送信',
    Durability: '耐久性',
    'Water Resistance': '防水性能',
    'Working Temperature': '使用温度',
    'Storage Temperature': '保管温度',
    Battery: 'バッテリー',
    'UltraMax GPS Mode': 'Ultra Max GPSモード',
    'Standard Full GPS': '標準フルGPS\n(GPS /QZSS)',
    'All Systems On': '全システムオン\n(GPS、GLONASS、Galileo、 Beidou、QZSS)',
    'All Systems + Dual Frequency On': '二周波オン\n(GPS、GLONASS、Galileo、 Beidou、QZSS)',
    'Daily Use': '日常使用',
    'Charging Time': '充電時間',
    'Geo Location': 'ジオロケーション',
    'Satellite Systems': '衛星システム',
    'GNSS Chipset': 'GNSSチップス',
    Navigation: 'ナビケーション',
    'Map Layer': 'マップレイヤー',
    'Additional Features': 'その他の機能',
    'Data Tracking': '日常トラッキング',
    Sensors: 'センサー',
    'Training Features': 'トレーニング機能',
    'Daily Features': '日常機能',
    '3rd Party Integration': 'サードーパーティー',
    'System Languages': 'システム言語',
    'Supported Activity Modes': '対応ワークアウト',
    Run: 'ラン',
    Mountain: '山',
    Bike: 'バイク',
    Water: '水',
    Winter: '冬',
    Cardio: '有酸素',
    Special: 'その他',
    Compatibility: '互換性',
    'Supported Devices': '対応デバイス',
    'Features & Metrics': '機能＆指標',
    'Charging Dock Capacity': '充電ドックの稼働時間',
    'Charging Dock Cable': '充電ドックケーブル',
    'Activity Mode': 'ワークアウトモード',
    'Standby Mode': '待機モード',
    'COROS App': 'COROS App',
    'COROS Watch': 'COROS Watch',
    'Case Material': 'ケース材質',
    'Foot Clip Material': 'クリップ材質（足部）',
    'Waist Clip Material': 'クリップ材質（腰部）',
    'Weight - COROS POD 2': '重量 - COROS POD 2',
    'Weight - Charging Dock': '重量 - 充電ドック',
    'Standard Full GPS With Music': 'Standard Full GPS With Music',
    'All Systems On With Music': 'All Systems On With Music',
    'Dual Frequency With Music': 'Dual Frequency With Music',
    Fit: 'バンド',
    'Hrm Dimensions': 'サイズ',
    'Hrm Weight - Case Only': '重量 - センサーのみ',
    'Hrm Weight - Case + Band': '重量 - センサー＋バンド',
    'Hrm Band Material': 'バンド材質',
    'Hrm Optical Heart Rate Hardware': '光学式心拍センサーハードウェア',
    'Hrm Band Circumference': '腕周り',
    'Hrm Wearing Position': '装着位置',
    'Hrm Wireless Connection': '接 続',
    'Hrm Supported Devices': '対応デバイス',
    'Hrm Data Sync': 'データ送信',
    'Hrm Water Resistance': '防水性',
    'Hrm Working Temperature': '使用温度',
    'Hrm Storage Temperature': '保管温度',
    'Hrm Charging Temperature': '充電温度',
    'Hrm Activity Mode': '連続稼働',
    'Hrm Standby Mode': '待機時間',
    'Hrm Battery Capacity': '容量',
    'Hrm Charging Time': '充電時間の目安',
    'Hrm Charging Cable': '充電ケーブル',
    'Internal Memory': '内蔵メモリ',
    'Activity Memory': 'アクティビティメモリ',
    'Compatible Apps': '対応アプリ',
    'Display Language': 'システム言語',
    Memory: 'メモリー',
    Climb: 'クライミング',
    batteryDesc: '最終更新日：2024年2月5日',
    'Dura Dimensions': 'サイズ',
    'Dura Weight - Device': '重量 - 本体',
    'Dura Weight - Mount': '重量 - マウント',
    'Dura Display Size': 'サイズ',
    'Dura Display Resolution': '解像度',
    'Dura Display Type': '種類',
    'Dura Screen': 'ディスプレイ',
    'Dura Body': '本体',
    'Dura Mount': 'マウント',
    'Dura Length': '長さ',
    'Dura Compatible Handlebars': '対応可能なハンドルバー',
    'Dura Button': 'ボタン',
    'Dura Phone': 'スマートフォンとの接続',
    'Dura Accessories': 'アクセサリーの接続',
    'Dura Accessory Types': '対応アクセサリー',
    'Dura Data Sync': 'データ同期',
    'Dura Water & Dust Resistance': '防塵・防水',
    'Dura Working Temperature': '使用温度',
    'Dura Storage Temperature': '保管温度',
    'Dura All Systems On': '全システムモード\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Dura All Systems + Dual Frequency On': '二周波全システムモード\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Dura Solar Efficiency': 'ソーラー機能',
    'Dura Charging Time': '充電時間',
    'Dura Internal Memory': '内蔵メモリ',
    'Dura Activity Memory': 'アクティビティメモリ',
    'Dura Satellite Systems': '衛星システム',
    'Dura GNSS Chipset': 'GNSSチップス',
    'Dura Map Layer': 'マップレイヤー',
    'Dura Additional Features': 'その他の機能',
    'Dura Sensors': 'センサー',
    'Dura Training Features': 'トレーニング機能',
    'Dura Safety Features': '防犯/その他の機能',
    'Dura Compatible Apps': '対応アプリ',
    'Dura Display Language': 'システム言語',
    'Dura Outdoor': 'アウトドア',
    'Dura Electric': '電動',
    'Dura Indoor': 'インドア',
    'Dura Size and Weight': 'サイズと重量',
    'Dura Display': 'ディスプレイ',
    'Dura Materials': '材質',
    'Dura Out-Front Handlebar Mount': 'アウトフロントマウント',
    'Dura Design': 'デザイン',
    'Dura Connectivity': '接続',
    'Dura Durability': '耐久性',
    'Dura Battery': 'バッテリー',
    'Dura Memory': 'メモリー',
    'Dura Geo Location': 'ジオロケーション',
    'Dura Navigation': 'ナビゲーション',
    'Dura Data Tracking': '日常トラッキング',
    'Dura 3rd Party Integration': 'サードーパーティー',
    'Dura System Languages': 'システム言語',
    'Dura Supported Activity Modes': 'アクティビティモード',
    'Size - Nylon': 'サイズ - ナイロン',
    'Size - Silicone': 'サイズ - シリコン'
  },
  apexPro: {
    displaySizeVal: '1.2 型240 x 240 (64色)',
    displayType: 'タッチパネル方式 常時点灯型メモリーLCD\n',
    displayMaterialVal: 'サファイアガラス\n',
    bezelVal: 'チタン合金',
    coverVal: 'アルミニウム',
    strapVal: 'シリコン',
    sensorsVal: '光学式パルス\nオキシメーター\n    光学式心拍数計\n    気圧高度計\n    加速度センサー\n    コンパス\n    ジャイロセンサー\n    温度計',
    waterResistanceVal: '10ATM (100 メートル/328 フィート)',
    workingTemp: '−10°C ～ 60°C',
    storageTempVal: '−20°C ～ 70°C',
    chargingVal: '2時間未満',
    batteryLifeVal: '日常使用：30日間\n    標準フルモード：40時間\n    UltraMax GPSモード：100時間',
    workoutsVal: 'ラン、インドアラン、トレイルラン、トラックラン、ハイキング、登山、バイク、屋内バイク、スイミング、オーブンウォーター、トライアスロン、室内有酸素、屋外有酸素、スキー、スノーボード、XCスキー、スキーツーリング、マルチスポーツ、筋トレ、トレーニング、スピードサーフィン、ウィンドサーフィン、ホワイトウォーター、フラットウォーター、ボート、ローイングマシン、ウォーキング、縄跳び'
  },
  comparsion: {
    pace3: {
      dimensionsVal: '41.9 x 41.9 x 11.7mm',
      weightVal: ['39g\nシリコンバンド装着時', '30g\nナイロンバンド装着時'],
      displaySizeVal: '1.2 型',
      displayResolutionVal: '240 x 240\n64色',
      displayTypeVal: 'タッチパネル方式常時点灯型メモリーLCD',
      screenMaterialVal: 'ミネラルガラス',
      bezelMaterialVal: '繊維強化ポリマー',
      coverMaterialVal: '繊維強化ポリマー',
      bandMaterialVal: 'シリコン/ナイロン',
      widthVal: '22mm',
      sizeNylonVal: '135mm - 205mm (レギュラー)|||150mm - 235mm (ロング)',
      sizeSiliconeVal: '130mm - 215mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['デジタルダイヤル', 'バックボタン', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nダイビングには適用しません',
      workingTemperatureVal: '-20°C ～ 50°C',
      storageTemperatureVal: '-20°C ～ 60°C',
      standardFullGpsVal: ['38時間', '10時間\n＋オフライン音楽'],
      allSystemsOnVal: ['25時間', '9時間\n＋オフライン音楽'],
      allSystemsDualFrequencyOnVal: ['15時間', '7時間\n＋オフライン音楽'],
      dailyUseVal: ['17日間\n日常使用と睡眠トラッキング', '15日間（ストレス測定含む）\n日中のストレスレベルのモニタリング'],
      chargingTimeVal: '2時間未満',
      internalMemoryVal: '4GB',
      activityMemoryVal: '1200時間\n屋外活動による推定値',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: '全システム二周波',
      mapLayerVal: ['ルート軌跡表示', '—'],
      additionalFeaturesVal: ['チェックポイント', 'スタートに戻る', 'コース離脱アラート', 'タッチパネル'],
      sensorsVal: ['光学式心拍計\nタトゥーの上には使用できない場合があります', '気圧高度計', '加速度センサー', 'ジャイロセンサー', 'コンパス', '体温計\nトレーニング中の体温測定対応（対応アクセサリー使用時）', '光学式パルス\nオキシメーター', '—'],
      trainingFeaturesVal: ['出力ペース\nランニング自分の努力を表示するパーソナライズメトリクスです', 'EvoLab\nリカバリー、疲労、トレーニング負荷、レース予測、VO2max、閾値ゾーン、その他の指標', '運動アラート\nケイデンス、距離、ペース、心拍数、パワー、その他の指標', 'インターバルトレーニングの基礎・応用', '計画したワークアウト', 'トレーニングプラン', 'ランニングレベル', '安静時心拍数', '水中での心拍測定', 'アクションカメラコントロール\nGoProとInsta360の一部モデルに対応', 'バーチャルペーサー', 'バーチャルラン', 'ランニングフォームテスト\nCOROS POD/POD 2の装着が必要です', '標高モード\n高所における血中酸素濃度（SpO2）監視と体力の評価', 'タッチスクロール\nトレーニング中にデータページをスワイプしてスクロール', '画面ミラーリング'],
      dailyFeaturesVal: ['ストレス', 'ヘルススナップショット', 'メッセージ/着信通知\nトレーニング中に日常機能', '睡眠\nREMトラッキング', 'アラーム', 'タイマー', 'ストップウォッチ', '日常アラート\n消費カロリー、運動時間、ストーム、その他のアラート', 'ファームウェア更新可能\nWi-FiとCOROS appで', '携帯を探す', '時計を探す', 'バックライト常時点灯モード', 'HRV指標', '音楽\nBluetooth対応ヘッドセットでオフラインの音楽を聞ける'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\n全リストはこちら',
      displayLanguageVal: '英語、簡体字中国語、繁体字中国語、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      runVal: ['ラン', 'トレッドミル', 'トラックラン', 'トレイルラン'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['バイク', '屋内バイク'],
      waterVal: ['オープンウォーター', 'スイミング', 'フラットウォーター', 'ボート', '—', '—', '—'],
      winterVal: ['スキー', 'スノーボード', 'XCスキー', '—'],
      cardioVal: ['屋外有酸素', '室内有酸素', 'ハイキング', 'ローイングマシン', 'ウォーキング', '縄跳び'],
      specialVal: ['トライアスロン', 'マルチスポーツ', '筋トレ', 'トレーニングセット', 'トレーニングプラン']
    },
    vertix2: {
      dimensionsVal: '50.3 x 50.3 x 15.7mm',
      weightVal: ['89g\nシリコンバンド装着時', '72g\nナイロンバンド装着時'],
      displaySizeVal: '1.4 型',
      displayResolutionVal: '280 x 280\n64色',
      displayTypeVal: 'タッチパネル方式常時点灯型メモリーLCD',
      screenMaterialVal: 'サファイアガラス',
      bezelMaterialVal: 'グレード 5 チタン合金 PVD コーティング',
      coverMaterialVal: 'グレード 5 チタン合金',
      bandMaterialVal: 'シリコン',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['デジタルダイヤル\n大きいボタン&耐久性の向上', 'バックボタン', 'バックライトボタン'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '10 ATM\nダイビングには適用しません',
      workingTemperatureVal: '-30°C ～ 50°C',
      storageTemperatureVal: '-30°C ～ 60°C',
      standardFullGpsVal: ['127時間', '32時間\n＋オフライン音楽'],
      allSystemsOnVal: ['89時間', '29時間\n＋オフライン音楽'],
      allSystemsDualFrequencyOnVal: ['49時間', '23時間\n＋オフライン音楽'],
      dailyUseVal: ['43日間\n日常使用と睡眠トラッキング', '39日間（ストレス測定含む）\n日中のストレスレベルのモニタリング'],
      chargingTimeVal: '2時間未満',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200時間\n屋外活動による推定値',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: '全システム二周波',
      mapLayerVal: ['地形図\nグローバルマップをダンロード可能', 'Topo\n地域マップをダンロード可能'],
      additionalFeaturesVal: ['チェックポイント', 'スタートに戻る', 'コース離脱アラート', 'タッチパネルマップコントロール'],
      sensorsVal: ['光学式心拍計\nタトゥーの上には使用できない場合があります', '気圧高度計', '加速度センサー', 'ジャイロセンサー', 'コンパス', '体温計\nトレーニング中の体温測定対応（対応アクセサリー使用時）', '光学式パルス\nオキシメーター', 'ECGセンサー'],
      trainingFeaturesVal: ['出力ペース\nランニング自分の努力を表示するパーソナライズメトリクスです', 'EvoLab\nリカバリー、疲労、トレーニング負荷、レース予測、VO2max、閾値ゾーン、その他の指標', '運動アラート\nケイデンス、距離、ペース、心拍数、パワー、その他の指標', 'インターバルトレーニングの基礎・応用', '計画したワークアウト', 'トレーニングプラン', 'ランニングレベル', '安静時心拍数', '水中での心拍測定', 'アクションカメラコントロール\nGoProとInsta360の一部モデルに対応', 'バーチャルペーサー', 'バーチャルラン', 'ランニングフォームテスト\nCOROS POD/POD 2の装着が必要です', '標高モード\n高所における血中酸素濃度（SpO2）監視と体力の評価', 'タッチスクロール\nトレーニング中にデータページをスワイプしてスクロール', '画面ミラーリング'],
      dailyFeaturesVal: ['ストレス', 'ヘルススナップショット', 'メッセージ/着信通知\nトレーニング中に日常機能', '睡眠\nREMトラッキング', 'アラーム', 'タイマー', 'ストップウォッチ', '日常アラート\n消費カロリー、運動時間、ストーム、その他のアラート', 'ファームウェア更新可能\nWi-FiとCOROS appで', '携帯を探す', '時計を探す', 'バックライト常時点灯モード', 'HRV指標', '音楽\nBluetooth対応ヘッドセットでオフラインの音楽を聞ける'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\n全リストはこちら',
      displayLanguageVal: '英語、簡体字中国語、繁体字中国語、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      runVal: ['ラン', 'トレッドミル', 'トラックラン', 'トレイルラン'],
      climbVal: ['アウトドアクライミング\nマルチピッチやビッグウォールクライミングのためのトラッキング強化', '室内クライミング\nトップロープ、ボルダリングに対応し、ルート/フォールの自動カウントが可能', '登山', 'ボルダリング'],
      bikeVal: ['バイク', '屋内バイク'],
      waterVal: ['オープンウォーター', 'スイミング', 'フラットウォーター', 'ボート', 'ホワイトウォーター', 'スピードサーフィン', 'ウィンドサーフィン'],
      winterVal: ['スキー', 'スノーボード', 'XCスキー', 'スキーツーリング'],
      cardioVal: ['屋外有酸素', '室内有酸素', 'ハイキング', 'ローイングマシン', 'ウォーキング', '縄跳び'],
      specialVal: ['トライアスロン', 'マルチスポーツ', '筋トレ', 'トレーニングセット', 'トレーニングプラン']
    },
    vertix2s: {
      dimensionsVal: '50.3 x 50.3 x 16mm',
      weightVal: ['87g\nシリコンバンド装着時', '70g\nナイロンバンド装着時'],
      displaySizeVal: '1.4 型',
      displayResolutionVal: '280 x 280\n64色',
      displayTypeVal: 'タッチパネル方式常時点灯型メモリーLCD',
      screenMaterialVal: 'サファイアガラス',
      bezelMaterialVal: 'グレード 5 チタン合金 PVD コーティング',
      coverMaterialVal: 'グレード 5 チタン合金',
      bandMaterialVal: 'シリコン',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['デジタルダイヤル\n大きいボタン&耐久性の向上', 'バックボタン', 'バックライトボタン'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '10 ATM\nダイビングには適用しません',
      workingTemperatureVal: '-30°C ～ 50°C',
      storageTemperatureVal: '-30°C ～ 60°C',
      standardFullGpsVal: ['118時間', '32時間\n＋オフライン音楽'],
      allSystemsOnVal: ['73時間', '27時間\n＋オフライン音楽'],
      allSystemsDualFrequencyOnVal: ['43時間', '22時間\n＋オフライン音楽'],
      dailyUseVal: ['40日間\n日常使用と睡眠トラッキング', '36日間（ストレス測定含む）\n日中のストレスレベルのモニタリング'],
      chargingTimeVal: '2時間未満',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200時間\n屋外活動による推定値',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: '全システム二周波',
      mapLayerVal: ['地形図\nグローバルマップをダンロード可能', 'Topo\n地域マップをダンロード可能'],
      additionalFeaturesVal: ['チェックポイント', 'スタートに戻る', 'コース離脱アラート', 'タッチパネルマップコントロール'],
      sensorsVal: ['光学式心拍計\nタトゥーの上には使用できない場合があります', '気圧高度計', '加速度センサー', 'ジャイロセンサー', 'コンパス', '体温計\nトレーニング中の体温測定対応（対応アクセサリー使用時）', '光学式パルス\nオキシメーター', 'ECGセンサー'],
      trainingFeaturesVal: ['出力ペース\nランニング自分の努力を表示するパーソナライズメトリクスです', 'EvoLab\nリカバリー、疲労、トレーニング負荷、レース予測、VO2max、閾値ゾーン、その他の指標', '運動アラート\nケイデンス、距離、ペース、心拍数、パワー、その他の指標', 'インターバルトレーニングの基礎・応用', '計画したワークアウト', 'トレーニングプラン', 'ランニングレベル', '安静時心拍数', '水中での心拍測定', 'アクションカメラコントロール\nGoProとInsta360の一部モデルに対応', 'バーチャルペーサー', 'バーチャルラン', 'ランニングフォームテスト\nCOROS POD/POD 2の装着が必要です', '標高モード\n高所における血中酸素濃度（SpO2）監視と体力の評価', 'タッチスクロール\nトレーニング中にデータページをスワイプしてスクロール', '画面ミラーリング'],
      dailyFeaturesVal: ['ストレス', 'ヘルススナップショット', 'メッセージ/着信通知\nトレーニング中に日常機能', '睡眠\nREMトラッキング', 'アラーム', 'タイマー', 'ストップウォッチ', '日常アラート\n消費カロリー、運動時間、ストーム、その他のアラート', 'ファームウェア更新可能\nWi-FiとCOROS appで', '携帯を探す', '時計を探す', 'バックライト常時点灯モード', 'HRV指標', '音楽\nBluetooth対応ヘッドセットでオフラインの音楽を聞ける'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\n全リストはこちら',
      displayLanguageVal: '英語、簡体字中国語、繁体字中国語、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      runVal: ['ラン', 'トレッドミル', 'トラックラン', 'トレイルラン'],
      climbVal: ['アウトドアクライミング\nマルチピッチやビッグウォールクライミングのためのトラッキング強化', '室内クライミング\nトップロープ、ボルダリングに対応し、ルート/フォールの自動カウントが可能', '登山', 'ボルダリング'],
      bikeVal: ['バイク', '屋内バイク'],
      waterVal: ['オープンウォーター', 'スイミング', 'フラットウォーター', 'ボート', 'ホワイトウォーター', 'スピードサーフィン', 'ウィンドサーフィン'],
      winterVal: ['スキー', 'スノーボード', 'XCスキー', 'スキーツーリング'],
      cardioVal: ['屋外有酸素', '室内有酸素', 'ハイキング', 'ローイングマシン', 'ウォーキング', '縄跳び'],
      specialVal: ['トライアスロン', 'マルチスポーツ', '筋トレ', 'トレーニングセット', 'トレーニングプラン']
    },
    pace2: {
      dimensionsVal: '42 x 42 x 11.7mm',
      weightVal: ['35g-36g\nシリコンバンド装着時', '29g-30g\nナイロンバンド装着時'],
      displaySizeVal: '1.2 型',
      displayResolutionVal: '240 x 240\n64 色',
      displayTypeVal: '常時点灯型 メモリーLCD',
      screenMaterialVal: 'ミネラルガラス',
      bezelMaterialVal: '繊維強化ポリマー',
      coverMaterialVal: '繊維強化ポリマー',
      bandMaterialVal: 'シリコン/ナイロン',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['デジタルダイヤル', 'バックボタン', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'COROS App',
      waterResistanceVal: '5 ATM\nダイビングには適用しません',
      workingTemperatureVal: '−20°C ～ 60°C',
      storageTemperatureVal: '−20°C ～ 65°C',
      standardFullGpsVal: ['27時間\nGPS /QZSS使用時', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14日間\n日常使用と睡眠トラッキング', '11日間（ストレス測定含む）\n日中のストレスレベルのモニタリング'],
      chargingTimeVal: '2時間未満',
      internalMemoryVal: '—',
      activityMemoryVal: '200時間\n屋外活動による推定値',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: '単周波',
      mapLayerVal: ['ルート軌跡表示', '—'],
      additionalFeaturesVal: ['チェックポイント', 'スタートに戻る', 'コース離脱アラート', '—'],
      sensorsVal: ['光学式心拍計\nタトゥーの上には使用できない場合があります', '気圧高度計', '加速度センサー', 'ジャイロセンサー', 'コンパス', '体温計\nトレーニング中の体温測定対応（対応アクセサリー使用時）', '—', '—'],
      trainingFeaturesVal: ['出力ペース\nランニング自分の努力を表示するパーソナライズメトリクスです', 'EvoLab\nリカバリー、疲労、トレーニング負荷、レース予測、VO2max、閾値ゾーン、その他の指標', '運動アラート\nケイデンス、距離、ペース、心拍数、パワー、その他の指標', 'インターバルトレーニングの基礎・応用', '計画したワークアウト', 'トレーニングプラン', 'ランニングレベル', '安静時心拍数', '水中での心拍測定', 'アクションカメラコントロール\nGoProとInsta360の一部モデルに対応', 'バーチャルペーサー', 'バーチャルラン', 'ランニングフォームテスト\nCOROS POD/POD 2の装着が必要です', '—', '—', '画面ミラーリング'],
      dailyFeaturesVal: ['ストレス', 'ヘルススナップショット', 'メッセージ/着信通知\nトレーニング中に日常機能', '睡眠\nREMトラッキング', 'アラーム', 'タイマー', 'ストップウォッチ', '日常アラート\n消費カロリー、運動時間、ストーム、その他のアラート', 'ファームウェア更新可能\nCOROS appで', '携帯を探す', '時計を探す', 'バックライト常時点灯モード', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\n全リストはこちら',
      displayLanguageVal: '英語、簡体字中国語、繁体字中国語、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      runVal: ['ラン', 'トレッドミル', 'トラックラン', '—'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['バイク', '屋内バイク'],
      waterVal: ['オープンウォーター', 'スイミング', 'フラットウォーター', 'ボート', '—', '—', '—'],
      winterVal: ['—', '—', '—', '—'],
      cardioVal: ['屋外有酸素', '室内有酸素', 'ハイキング', 'ローイングマシン', 'ウォーキング', '縄跳び'],
      specialVal: ['トライアスロン', 'マルチスポーツ', '筋トレ', 'トレーニングセット', 'トレーニングプラン']
    },
    pod2: {
      podDimensionsVal: '27.1 x 33.9 x 8.6mm',
      weightCorosPod2Val: '5.6g\n本体のみ',
      weightChargingDockVal: '17.6g',
      caseMaterialVal: '繊維強化ポリマー\nCOROS POD 2本体と充電ドック',
      footClipMaterialVal: '繊維強化ポリマー',
      waistClipMaterialVal: 'シリコン',
      corosAppVal: 'Bluetooth',
      corosWatchVal: 'Bluetooth',
      dataSyncVal: 'リアルタイムでデータをCOROSウォッチに送信',
      waterResistanceVal: '3 ATM\n      COROS POD 2本体のみ（充電ドック非対応）',
      workingTemperatureVal: '-10°C 〜 60°C',
      storageTemperatureVal: '−20°C ～ 70°C',
      activityModeVal: '25時間\n      充電ドックに併用で最大150時間連続稼働',
      standbyModeVal: '40日間',
      chargingTimeVal: '2時間未満\n      POD ２と充電ドック',
      chargingDockCapacityVal: '5回フル充電',
      chargingDockCableVal: 'USB Type-C',
      sensorsVal: ['気圧高度計', '体温計', '地磁気', '加速度センサー', 'ジャイロセンサー'],
      supportedDevicesVal: ['COROS PACE 1以外の全モデルに対応\n      COROS APEX 42mm/46mmが後程対応可能', 'KIPRUN GPS 500/GPS 900'],
      featuresMetricsVal: ['GPSトラック補正\n        ラン/トラックラン', '距離\n        ラン/トラックラン/トレッドミル', 'ペース\n        ラン/トラックラン/トレッドミル', '出力ペース\n        ラン/トレイルラン', 'ピッチ\n        ラン/トラックラン/トレイルラン/トレッドミル', 'ストライド幅\n        ラン/トラックラン/トレッドミル', '温度\n        ラン/トラックラン/トレイルラン/トレッドミル', '獲得標高/下降\n        ラン/トレイルラン', '標高\n        ラン/トレイルラン', '傾斜度\n        ラン/トレイルラン', 'L/R バランス\n        ラン/トラックラン/トレイルラン/トレッドミル', '接地時間\n        ラン/トラックラン/トレイルラン/トレッドミル', '上下動\n        ラン/トラックラン/トレイルラン/トレッドミル', '上下動比\n        ラン/トラックラン/トレイルラン/トレッドミル']
    },
    apex2: {
      dimensionsVal: '43.0 x 42.8 x 12.8mm',
      weightVal: ['53g\nシリコンバンド装着時', '42g\nナイロンバンド装着時'],
      displaySizeVal: '1.2 型',
      displayResolutionVal: '240 x 240\n64 色',
      displayTypeVal: 'タッチパネル方式常時点灯型メモリーLCD',
      screenMaterialVal: 'サファイアガラス',
      bezelMaterialVal: 'グレード 5 チタン合金 PVD コーティング',
      coverMaterialVal: 'チタン合金',
      bandMaterialVal: 'ナイロン',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['デジタルダイヤル', 'バックボタン', 'バックライトボタン'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nダイビングには適用しません',
      workingTemperatureVal: '-20°C ～ 50°C',
      storageTemperatureVal: '−20°C ～ 60°C',
      standardFullGpsVal: ['40時間', '10時間\n＋オフライン音楽'],
      allSystemsOnVal: ['25時間', '9時間\n＋オフライン音楽'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14日間\n日常使用と睡眠トラッキング', '13日間（ストレス測定含む）\n日中のストレスレベルのモニタリング'],
      chargingTimeVal: '2時間未満',
      internalMemoryVal: '8GB',
      activityMemoryVal: '1200時間\n屋外活動による推定値',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: '全システム単周波',
      mapLayerVal: ['地形図\nグローバルマップをダンロード可能', 'Topo\n地域マップをダンロード可能'],
      additionalFeaturesVal: ['チェックポイント', 'スタートに戻る', 'コース離脱アラート', 'タッチパネルマップコントロール'],
      sensorsVal: ['光学式心拍計\nタトゥーの上には使用できない場合があります', '気圧高度計', '加速度センサー', 'ジャイロセンサー', 'コンパス', '体温計\nトレーニング中の体温測定対応（対応アクセサリー使用時）', '光学式パルス\nオキシメーター', 'ECGセンサー'],
      trainingFeaturesVal: ['出力ペース\nランニング自分の努力を表示するパーソナライズメトリクスです', 'EvoLab\nリカバリー、疲労、トレーニング負荷、レース予測、VO2max、閾値ゾーン、その他の指標', '運動アラート\nケイデンス、距離、ペース、心拍数、パワー、その他の指標', 'インターバルトレーニングの基礎・応用', '計画したワークアウト', 'トレーニングプラン', 'ランニングレベル', '安静時心拍数', '水中での心拍測定', 'アクションカメラコントロール\nGoProとInsta360の一部モデルに対応', 'バーチャルペーサー', 'バーチャルラン', 'ランニングフォームテスト\nCOROS POD/POD 2の装着が必要です', '標高モード\n高所における血中酸素濃度（SpO2）監視と体力の評価', 'タッチスクロール\nトレーニング中にデータページをスワイプしてスクロール', '画面ミラーリング'],
      dailyFeaturesVal: ['ストレス', 'ヘルススナップショット', 'メッセージ/着信通知\nトレーニング中に日常機能', '睡眠\nREMトラッキング', 'アラーム', 'タイマー', 'ストップウォッチ', '日常アラート\n消費カロリー、運動時間、ストーム、その他のアラート', 'ファームウェア更新可能\nWi-FiとCOROS appで', '携帯を探す', '時計を探す', 'バックライト常時点灯モード', 'HRV指標', '音楽\nBluetooth対応ヘッドセットでオフラインの音楽を聞ける'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\n全リストはこちら',
      displayLanguageVal: '英語、簡体字中国語、繁体字中国語、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      runVal: ['ラン', 'トレッドミル', 'トラックラン', 'トレイルラン'],
      climbVal: ['—', '室内クライミング\nトップロープ、ボルダリングに対応し、ルート/フォールの自動カウントが可能', '登山', 'ボルダリング'],
      bikeVal: ['バイク', '屋内バイク'],
      waterVal: ['オープンウォーター', 'スイミング', 'フラットウォーター', 'ボート', 'ホワイトウォーター', 'スピードサーフィン', 'ウィンドサーフィン'],
      winterVal: ['スキー', 'スノーボード', 'XCスキー', 'スキーツーリング'],
      cardioVal: ['屋外有酸素', '室内有酸素', 'ハイキング', 'ローイングマシン', 'ウォーキング', '縄跳び'],
      specialVal: ['トライアスロン', 'マルチスポーツ', '筋トレ', 'トレーニングセット', 'トレーニングプラン']
    },
    apex2pro: {
      dimensionsVal: '46.1 x 46.5 x 14mm',
      weightVal: ['66g\nシリコンバンド装着時', '53g\nナイロンバンド装着時'],
      displaySizeVal: '1.3 型',
      displayResolutionVal: '260 x 260\n64 色',
      displayTypeVal: 'タッチパネル方式常時点灯型メモリーLCD',
      screenMaterialVal: 'サファイアガラス',
      bezelMaterialVal: 'グレード 5 チタン合金 PVD コーティング',
      coverMaterialVal: 'チタン合金',
      bandMaterialVal: 'シリコン/ナイロン',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (レギュラー)|||130mm - 195mm (ショート)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Quick Release',
      buttonVal: ['デジタルダイヤル', 'バックボタン', 'バックライトボタン'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / COROS App',
      waterResistanceVal: '5 ATM\nダイビングには適用しません',
      workingTemperatureVal: '-20°C ～ 50°C',
      storageTemperatureVal: '−20°C ～ 60°C',
      standardFullGpsVal: ['66時間', '18時間\n＋オフライン音楽'],
      allSystemsOnVal: ['41時間', '15時間\n＋オフライン音楽'],
      allSystemsDualFrequencyOnVal: ['24時間', '12時間\n＋オフライン音楽'],
      dailyUseVal: ['24日間\n日常使用と睡眠トラッキング', '21日間（ストレス測定含む）\n日中のストレスレベルのモニタリング'],
      chargingTimeVal: '2時間未満',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200時間\n屋外活動による推定値',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: '全システム二周波',
      mapLayerVal: ['地形図\nグローバルマップをダンロード可能', 'Topo\n地域マップをダンロード可能'],
      additionalFeaturesVal: ['チェックポイント', 'スタートに戻る', 'コース離脱アラート', 'タッチパネルマップコントロール'],
      sensorsVal: ['光学式心拍計\nタトゥーの上には使用できない場合があります', '気圧高度計', '加速度センサー', 'ジャイロセンサー', 'コンパス', '体温計\nトレーニング中の体温測定対応（対応アクセサリー使用時）', '光学式パルス\nオキシメーター', 'ECGセンサー'],
      trainingFeaturesVal: ['出力ペース\nランニング自分の努力を表示するパーソナライズメトリクスです', 'EvoLab\nリカバリー、疲労、トレーニング負荷、レース予測、VO2max、閾値ゾーン、その他の指標', '運動アラート\nケイデンス、距離、ペース、心拍数、パワー、その他の指標', 'インターバルトレーニングの基礎・応用', '計画したワークアウト', 'トレーニングプラン', 'ランニングレベル', '安静時心拍数', '水中での心拍測定', 'アクションカメラコントロール\nGoProとInsta360の一部モデルに対応', 'バーチャルペーサー', 'バーチャルラン', 'ランニングフォームテスト\nCOROS POD/POD 2の装着が必要です', '標高モード\n高所における血中酸素濃度（SpO2）監視と体力の評価', 'タッチスクロール\nトレーニング中にデータページをスワイプしてスクロール', '画面ミラーリング'],
      dailyFeaturesVal: ['ストレス', 'ヘルススナップショット', 'メッセージ/着信通知\nトレーニング中に日常機能', '睡眠\nREMトラッキング', 'アラーム', 'タイマー', 'ストップウォッチ', '日常アラート\n消費カロリー、運動時間、ストーム、その他のアラート', 'ファームウェア更新可能\nWi-FiとCOROS appで', '携帯を探す', '時計を探す', 'バックライト常時点灯モード', 'HRV指標', '音楽\nBluetooth対応ヘッドセットでオフラインの音楽を聞ける'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\n全リストはこちら',
      displayLanguageVal: '英語、簡体字中国語、繁体字中国語、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      runVal: ['ラン', 'トレッドミル', 'トラックラン', 'トレイルラン'],
      climbVal: ['アウトドアクライミング\nマルチピッチやビッグウォールクライミングのためのトラッキング強化', '室内クライミング\nトップロープ、ボルダリングに対応し、ルート/フォールの自動カウントが可能', '登山', 'ボルダリング'],
      bikeVal: ['バイク', '屋内バイク'],
      waterVal: ['オープンウォーター', 'スイミング', 'フラットウォーター', 'ボート', 'ホワイトウォーター', 'スピードサーフィン', 'ウィンドサーフィン'],
      winterVal: ['スキー', 'スノーボード', 'XCスキー', 'スキーツーリング'],
      cardioVal: ['屋外有酸素', '室内有酸素', 'ハイキング', 'ローイングマシン', 'ウォーキング', '縄跳び'],
      specialVal: ['トライアスロン', 'マルチスポーツ', '筋トレ', 'トレーニングセット', 'トレーニングプラン']
    },
    hrm: {
      hrmDimensionsVal: '42.5 x 28.4 x 9.1mm',
      hrmWeightCaseOnlyVal: '9.7g',
      hrmWeightCaseBandVal: '19g',
      hrmBandMaterialVal: 'ポリエステル、ナイロン、スパンデックス',
      hrmOpticalHeartRateHardwareVal: 'LEDライト５つと光検出器４つ',
      hrmBandCircumferenceVal: '180 ~ 320mm',
      hrmWearingPositionVal: '上腕（推奨）、前腕',
      hrmWirelessConnectionVal: 'Bluetooth',
      hrmSupportedDevicesVal: '心拍数データを受信するBluetooth対応機器\n最大3台同時接続に対応',
      hrmDataSyncVal: 'リアルタイムの\n心拍数データ\n',
      hrmWaterResistanceVal: '3 ATM',
      hrmWorkingTemperatureVal: '-20°C to 50°C',
      hrmStorageTemperatureVal: '-20°C to 60°C',
      hrmChargingTemperatureVal: '0°C to 45°C',
      hrmActivityModeVal: '38時間',
      hrmStandbyModeVal: '80日間',
      hrmBatteryCapacityVal: '55 mAh',
      hrmChargingTimeVal: '2時間未満',
      hrmChargingCableVal: 'USB Type-A\nマグネット式'
    },
    dura: {
      duraDimensionsVal: '99.5 x 60.8 x 15.7mm\n本体のみ',
      duraWeightDeviceVal: '102g',
      duraWeightMountVal: '53g',
      duraDisplaySizeVal: '2.7インチ',
      duraDisplayResolutionVal: '400 x 240ピクセル',
      duraDisplayTypeVal: '反射型MIP',
      duraScreenVal: '高耐久性複合ガラス',
      duraBodyVal: '繊維強化ポリマー',
      duraMountVal: '繊維強化ポリマー',
      duraLengthVal: '70mm\n（ハンドルバーの中心からマウントの先端まで）',
      duraCompatibleHandlebarsVal: '25.4mm もしくは 31.8mm',
      duraButtonVal: ['デジタルダイヤル', 'バックボタン'],
      duraPhoneVal: 'Bluetooth',
      duraAccessoriesVal: 'ANT+ / Bluetooth\nBluetoothで最大12個の外部アクセサリーと同時に接続可能',
      duraAccessoryTypesVal: '心拍センサー、パワーメーター、トレーナー、スピードセンサー、ケイデンスセンサー、Garmin Variaバイクレーダー、e-バイクギア、SRAM/Shimano電動シフトシステム\n全リストはこちら',
      duraDataSyncVal: 'Wi-Fi / COROS APP',
      duraWaterDustResistanceVal: 'IP67',
      duraWorkingTemperatureVal: '−20℃ to 60℃',
      duraStorageTemperatureVal: '−30℃ to 70℃',
      duraAllSystemsOnVal: '120時間\nソーラー充電なし',
      duraAllSystemsDualFrequencyOnVal: '70時間\nソーラー充電なし',
      duraSolarEfficiencyVal: '直射日光1時間のソーラー充電で\n最大2時間の稼働時間を延長',
      duraChargingTimeVal: '15 ℃~ 45 ℃の環境で約2時間|||0 ℃~ 15 ℃ の環境で約4時間\n上記の範囲外環境では充電を行わないでください',
      duraInternalMemoryVal: '32GB',
      duraActivityMemoryVal: '1200時間分\n屋外活動による推定値',
      duraSatelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      duraGnssChipsetVal: '全システム二周波（L1 + L5）',
      duraMapLayerVal: '地形図\nグローバルマップ搭載',
      duraAdditionalFeaturesVal: ['位置情報', 'スタートに戻る', 'ルート離脱アラート', 'タッチでマップ操作', 'ターンバイターン', 'COROSアプリ経由での\nスマートなルート調整', 'クライムの詳細'],
      duraSensorsVal: ['気圧高度計', '加速度計', 'ジャイロセンサー', 'コンパス', '温度計'],
      duraTrainingFeaturesVal: ['トレーニング管理\nトレーニング負荷、ベースフィットネス、負荷インパクト', 'トレーニング負荷の推奨域', 'FTPテスト', 'リカバリー間隔', 'アクティビティアラート\nケイデンス、距離、心拍数、パワーなど', 'ワークアウト作成', 'トレーニングプラン作成', 'タッチパネルでのスクロール\nアクティビティ中にスワイプでのデータページ切替'],
      duraSafetyFeaturesVal: ['グループトラッキング\nCOROSアプリとの接続が必要', '緊急連絡機能\nCOROSアプリとの接続が必要', '盗難防止アラート\nCOROSアプリとの接続が必要'],
      duraCompatibleAppsVal: 'Strava, Komoot, Ride with GPS, TrainingPeaks, Relive, Final Surge, Decathlon, Adidas Running, Nike Run Club, など',
      duraDisplayLanguageVal: '英語、中国語（簡体/繁体）、ドイツ語、スペイン語、フランス語、ポーランド語、タイ語、日本語、韓国語、ポルトガル語、イタリア語、ロシア語',
      duraOutdoorVal: ['ロード', 'グラベル', 'マウンテン（MTB）'],
      duraElectricVal: ['e-バイク', 'e-マウンテンバイク（e-MTB）'],
      duraIndoorVal: 'インドア'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/evolab.js
/* harmony default export */ const jp_evolab = ({
  title: 'COROS EvoLab',
  desc: 'フィットネス、疲労、パフォーマンスを評価するためのスポーツサイエンスプラットフォームです。',
  pages: [{
    title: 'COROS EvoLab',
    desc: ["\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306F\u30E6\u30FC\u30B6\u30FC\u306E\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u306B\u3069\u306E\u3088\u3046\u306A\u5F71\u97FF\n        \u3092\u4E0E\u3048\u307E\u3059\u304B\uFF1F\n        COROS EvoLab\u306F\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u3084\u30EA\u30AB\u30D0\u30EA\u30FC\n        \u306A\u3069\u3092\u8A55\u4FA1\u3057\u3001\u6700\u9AD8\u30AF\u30E9\u30B9\u306E\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u5206\u6790\u3092\u63D0\u4F9B\u3057\u307E\n        \u3059\u3002EvoLab\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306F\u3001\u5168\u3066\u306ECOROS\u30E6\u30FC\u30B6\u30FC\n        \u304C\u7121\u6599\u3067\u5229\u7528\u3067\u304D\u307E\u3059\u3002\n        \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30B7\u30FC\u30BA\u30F3\u3092\u901A\u3058\u3066\u306E\u7DCF\u5408\u7684\u306A\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u306B\n        \u7126\u70B9\u3092\u5F53\u3066\u3001\u7279\u306B\u30ED\u30FC\u30C9 / \u30C8\u30E9\u30C3\u30AF\u30A2\u30B9\u30EA\u30FC\u30C8\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\n        \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u3092\u6E2C\u5B9A\u3059\u308B\u305F\u3081\u306E\u6A5F\u80FD\u3092\u8FFD\u52A0\u3057\u3066\u3044\u307E\u3059\u3002"]
  }, {
    title: 'トレーニング負荷',
    desc: ['GPSウォッチは、アクティビティやワークアウトが身体に与える影響をリアルタイムで表示します。アクティビティの強度と時間によってトレーニング負荷の数値が0から増加します。ウォッチのトレーニング記録ごとにトレーニング負荷を比較し、今日のトレーニングが過去の同様のアクティビティと比較してどうなのかが確認できます。']
  }, {
    title: 'トレーニング効果',
    desc: ['トレーニングは、2つの主要なカテゴリーである「有酸素運動」と「無酸素運動」に分けられます。この2つのカテゴリーを分ける基準は乳酸閾値です。EvoLabは有酸素運動と無酸素運動の効果をウォッチでリアルタイムに0から5の数値で表示します。']
  }, {
    title: 'ベースフィットネスと\n短期負荷',
    desc: ["\u4ECA\u65E5\u3001\u826F\u3044\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u3057\u305F\u304B\u3089\u3068\u3044\u3063\u3066\u3001\u660E\u65E5\u306B\n        \u81EA\u5DF1\u30D9\u30B9\u30C8\u3092\u66F4\u65B0\u3067\u304D\u308B\u308F\u3051\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u540C\u69D8\u306B\u3001\n        1\u56DE\u306E\u60AA\u3044\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u304C\u7D20\u6674\u3089\u3057\u3044\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306E\n        \u7A4D\u307F\u91CD\u306D\u3092\u5D29\u3059\u306B\u306F\u81F3\u308A\u307E\u305B\u3093\u3002EvoLab\u306F\u3001\u30E6\u30FC\u30B6\u30FC\n        \u306E\u77ED\u671F\u8CA0\u8377\uFF08\u904E\u53BB7\u65E5\u9593\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\uFF09\u304A\u3088\u3073\u3001\n        \u30D9\u30FC\u30B9\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\uFF08\u904E\u53BB6\u9031\u9593\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\uFF09\u3092\n        \u8A55\u4FA1\u3057\u307E\u3059\u3002\n        \u307E\u305F\u3001GPS\u30A6\u30A9\u30C3\u30C1\u306F\u30E6\u30FC\u30B6\u30FC\u306E\u8A18\u9332\u306B\u57FA\u3065\u3044\u3066\u3001\n        \u6700\u9AD8\u306E\u7D50\u679C\u3092\u5F97\u308B\u305F\u3081\u306E7\u65E5\u9593\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u8CA0\u8377\u306E\n        \u9069\u6B63\u7BC4\u56F2\u3092\u8868\u793A\u3057\u307E\u3059\u3002"]
  }, {
    title: '疲労具合',
    desc: ['アスリートによって、トレーニング負荷に対する反応は異なります。例えばエリウド・キプチョゲにとって1週間に100km走ることはイージーですが、多くの人にとってはハードな量ともいえます。トレーニング負荷が体にかかった後、基礎体力を一時的に低下させるものを「疲労」と呼びます。疲労は体を疲れさせますが同時に体を強くします。これこそがトレーニングのサイクルです。EvoLabは0から100の疲労具合を表示し、あなたのスコアを5つのゾーンに分類します。レースの準備できましたか？最適ゾーンからパフォーマンスゾーンへ、そしてテーパリングと呼ばれる調整過程を経てレースに臨めるとベストです。']
  }, {
    title: 'ランニングに\n特化した機能',
    desc: ['• EvoLabはユーザーの現在のマラソンに向けた状態を評価してスコアを提供します。', '• EvoLabは直近のワークアウトが総合的にフィットネスを向上させているかどうかを計算します。', '• EvoLabはトレーニングのどの部分を優先的に行っているかを表示するために、ワークアウトを分類しています。']
  }, {
    title: 'ランニングレベル',
    desc: ["\u30EC\u30FC\u30B9\u306F\u673A\u4E0A\u3084\u30A2\u30D7\u30EA\u3067\u306F\u518D\u73FE\u3067\u304D\u307E\u305B\u3093\u304C\u3001\n        EvoLab\u306F0\u304B\u3089100\u306E\u30B9\u30B3\u30A2\u3067\u30DE\u30E9\u30BD\u30F3\u30E9\u30F3\u30CA\u30FC\n        \u3068\u3057\u3066\u306E\u30EC\u30D9\u30EB\u3092\u793A\u3057\u307E\u3059\u3002\n        \u3053\u306E\u6307\u6A19\u306F42.195km\u306E\u8DDD\u96E2\u306B\u57FA\u3065\u3044\u3066\u3044\u307E\u3059\u304C\n        \uFF08\u30B9\u30B3\u30A2\u304C100\u306E\u5834\u5408\u306F2\u6642\u959300\u520600\u79D2\u30DE\u30E9\u30BD\u30F3\n        \u306B\u76F8\u5F53\u3057\u307E\u3059\uFF01\uFF09\u3042\u306A\u305F\u306E\u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u5168\u822C\u306E\n        \u30D0\u30ED\u30E1\u30FC\u30BF\u30FC\u3068\u3057\u3066\u3082\u5F79\u7ACB\u3061\u307E\u3059\u3002"]
  }, {
    title: 'ランニング\nパフォーマンス',
    desc: ['もっとダイナミックな指標を見たい方は、80％から120％で表示されるランニングパフォーマンスの数値を見れば、今日のランニングがユーザーのフィットネスと比較してどうなのかがわかります。睡眠、回復、栄養、ストレス、天候など様々な要因がランニングに影響します。100％以上のスコアが連続していけばフィットネスが向上していると考えてよいでしょう。']
  }, {
    title: 'パフォーマンス予測',
    desc: ["5km\u300110km\u3001\u30CF\u30FC\u30D5\u30DE\u30E9\u30BD\u30F3\u3001\u30DE\u30E9\u30BD\u30F3\u306E\u3044\u305A\u308C\u306E\n        \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3057\u3066\u3044\u308B\u5834\u5408\u3067\u3082\u3001EvoLab\u306F\u30EC\u30FC\u30B9\u5168\n        \u4F53\u306E\u4E88\u6E2C\u3068\u30EC\u30FC\u30B9\u30DA\u30FC\u30B9\u3092GPS\u30A6\u30A9\u30C3\u30C1\u306B\u76F4\u63A5\u8868\u793A\n        \u3057\u307E\u3059\u3002\n        \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u304C\u7279\u5B9A\u306E\u8DDD\u96E2\u3092\u76EE\u6A19\u3068\u3059\u308B\u3088\u3046\u306B\u30011\u56DE\n        \u306E\u30E9\u30F3\u306F\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u4E88\u6E2C\u306B\u5F71\u97FF\u3092\u4E0E\u3048\u3001\u307E\u305F\u5225\u306E\n        \u30E9\u30F3\u306F\u5F71\u97FF\u3092\u4E0E\u3048\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002"]
  }, {
    title: 'トレーニング焦点',
    desc: ['全てのランニングが同じではありません。EvoLabは心拍数、ペース、その他ウォッチから得られた様々なトレーニング指標を使用して、最も影響を受けたトレーニングのタイプを正確に教えてくれます。これは、あなたが行ったランニングのタイプではなく、どのようなトレーニングの取り組みが改善できるかの可能性が高いかを示していますので、ご注意ください。']
  }, {
    title: '高精度のデータ分析',
    desc: ['EvoLabはフィットネス指標とその傾向を確認するための見やすいツールを提供します。COROSアプリからマイページにアクセスすると、時間の経過と共にどのように改善されるかがわかります。また、季節ごとのフィットネス傾向もわかりやすく表示されるので、自分のピークを見つけて最高のパフォーマンスを発揮することができます。']
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/convos.js
/* harmony default export */ const jp_convos = ({
  eps: [{
    title: 'EMMA BATES-2021年アメリカ女子マラソン最速記録保持者',
    mobileTitle: 'マラソン女子ランナー、2021年',
    desc: 'この新星は、シカゴマラソンで2位に入賞し、2021年にアメリカ人女子マラソン最速タイム（2:24:20）を打ち立てました。COROSの社員Danが Emmaと彼女の記録的な走りについて語り、ランニング界で最もドキドキするアスリートをより深い了解しました。',
    title4highlights: '主な経歴',
    highlights: ['2021年最速マラソンー米国女子選手', '2021年シカゴマラソンー米国選手1位', '2019年シカゴマラソンー米国選手1位', '2019年全米マラソン優勝', '2014年NCAA D1 10000m優勝', 'NCAA D1全米ベストラインナップ12回'],
    shopDesc: "SHOP EMMA'S GPS WATCH\nCOROS APEX 42mm"
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/login.js
/* harmony default export */ const jp_login = ({
  loginTitle: 'ユーザーログイン',
  Email: 'メールアドレス',
  password: 'パスワード',
  signIn: 'サインイン',
  createAccount: 'アカウントを作成',
  forgotYourPassword: 'パスワードを忘れた場合',
  DownloadPlugin: 'Chromeプラグインをダウンロードする',
  sendEmai: 'パスワードをリセットするためのリンクがメールに届きます。',
  forgot: 'パスワードを忘れた場合',
  submit: '送信',
  newPassword: '新しいバスワード',
  newPasswordTips: '新しいパスワードを入力してください。',
  newPasswordNext: '次へ',
  shortPasswordTips: 'パスワードは8～20文字で入力してください。',
  //Please enter password with 6-20 characters
  invalidStr: 'パスワードは数字と文字の両方を含む必要があります。',
  resetSuccTitle: '成功！',
  resetFailedTitle: 'リセット失敗',
  resetSuccDesc: 'ありがとうございます!新しいパスワードをリセットしました。では、CTHを楽しんでください！',
  resetFailedDesc: 'チェックコードが無効です。',
  accountNotExist: 'このメールは登録されていません。',
  login: 'ログイン'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/datalist.js
/* harmony default export */ const jp_datalist = ({
  title: 'Workout History',
  desc: ' workouts in total',
  total: 'All',
  run: 'Run',
  runOutdoor: 'Run',
  indoorRun: 'Indoor Run',
  trailRun: 'Trail Run',
  runMountaineer: 'Mtn Climb',
  hike: 'Hike',
  trackRun: 'Track Run',
  bike: 'Bike',
  indoorBike: 'Indoor Bike',
  swim: 'Swim',
  swimPool: 'Pool Swim',
  swimOpen: 'Open Water',
  triathlon: 'Triathlon',
  cardio: 'Cardio',
  aerobicOutdoor: 'GPS Cardio',
  aerobicIndoor: 'Gym Cardio',
  ski: 'Skiing',
  skiItem: 'Ski',
  skiSnowboard: 'Snowboard',
  skiMountaineering: 'Ski Touring',
  skiCrosscountry: 'XC Ski',
  multisport: 'Multisport',
  logOut: 'ログアウト',
  columnLabel: {
    title: 'Title',
    distance: 'Distance',
    averagePace: 'Average Pace',
    device: 'Device',
    date: 'Date',
    workout: 'Workout'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/yourproduct.js
/* harmony default export */ const jp_yourproduct = ({
  yourProducts: 'マイデバイス',
  product: 'デバイス',
  productID: '6桁のデバイスID',
  warrantyPeriod: '保証期間',
  expiration: '保証期間の終期',
  workoutHistory: 'ワークアウトリスト',
  accountDetail: 'アカウント情報',
  serialNumber: 'シリアル番号'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/events.js
/* harmony default export */ const jp_events = ({
  title: 'COROS新製品発表会',
  keywords: 'COROS新製品発表会 - 2021年8月17日',
  description: 'COROS新製品発表会 - 2021年8月17日',
  tittext1: 'COROS新製品発表会',
  titdate: '2021年8月17日',
  aftertit: '今回発表した内容は以下の通りです。',
  aftervertix2tit: 'COROS VERTIX 2',
  aftervertix2subtit: 'GPS Adventure Watch',
  afterpace2tit: 'COROS PACE 2',
  afterpace2titsub: 'GPS Sport Watch <br> Eliud Kipchoge Edition'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/athleteNames.js
/* harmony default export */ const athleteNames = ({
  申加升: 'Shen Jiasheng',
  'Audrey Tanguy': 'Audrey Tanguy',
  'Harry Jones': 'Harry Jones',
  'Sally McRae': 'Sally McRae',
  岩出玲亚: '岩出玲亜',
  'Camille Herron': 'Camille Herron',
  'Hayden Hawks': 'Hayden Hawks',
  'Scotty Hawker': 'Scotty Hawker',
  曹茉婕: 'Cao MoJie ',
  'Cody Reed': 'Cody Reed',
  'Hillary Allen': 'Hillary Allen',
  'Tim Tollefson': 'Tim Tollefson',
  李再冉: 'Li ZaiRan ',
  'Coree Woltering': 'Coree Woltering',
  'Jason Antin': 'Jason Antin',
  'Tommy Caldwell': 'Tommy Caldwell',
  李宗利: 'Li ZongLi ',
  'Desiree Linden': 'Desiree Linden',
  'John Kelly': 'John Kelly',
  'Zach Bitter': 'Zach Bitter',
  杨嵩: 'Yang Song',
  'Eliud Kipchoge': 'Eliud Kipchoge',
  'Kilian Jornet': 'Kilian Jornet',
  于红岩: 'Yu HongYan',
  // 赵家驹: 'Zhao JiaJu',
  'Emelie Forsberg': 'Emelie Forsberg',
  'Luke Smithwick': 'Luke Smithwick',
  何亮亮: 'He LiangLiang',
  近江龙之介: '近江竜之介',
  'Emily Infeld': 'Emily Infeld',
  'Magda Boulet': 'Magda Boulet',
  吴宣霞: 'Wu XuanXia',
  邓荣华: 'Deng RongHua',
  'Emma Bates': 'Emma Bates',
  'Parker Stinson': 'Parker Stinson',
  四郎多吉: 'Silanduoji',
  陈朝江: 'Chen ChaoJiang',
  'Emma Coburn': 'Emma Coburn',
  'Reed Fischer': 'Reed Fischer',
  孙晓阳: 'Sun XiaoYang',
  顾冰: 'Gu Bing',
  'Grayson Murphy': 'Grayson Murphy',
  'Sage Canaday': 'Sage Canaday',
  宮﨑喜美乃: '宮﨑喜美乃'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/shop.js
/* harmony default export */ const jp_shop = ({
  chooseAdditionalBands: 'バンドを追加する',
  chooseBandMaterial: 'バンド材質',
  chooseSize: 'ウォッチサイズを選択してください。',
  chooseColor: 'カラー',
  chooseAccessories: 'アクセサリー',
  // outOfStock: '在庫切れ', 改用 home.outOfStock
  add2Bag: 'カートに追加する',
  total: '合計',
  overview: '詳細',
  skipForNow: 'スキップ',
  pace2: {
    difference: '何が違うのでしょうか？',
    silicone1: 'シリコンバンド',
    silicone2: '耐久性、速乾性に優れ、お手入れも簡単です。長い時間つけても、水中でもトレーニングに集中できます。',
    nylon1: 'ナイロンバンド',
    nylon2: '超軽量で通気性がよく、細かく調整することができます。フィット感や心拍の正確に追求する方におすすめです。'
  },
  whichModelIsRightForYou: 'どのモデルが合うのでしょうか？',
  details: '詳細',
  price: '商品価格',
  quantity: '数量',
  subtotal: '小計',
  remove: '削除',
  shipping: '配送について',
  taxes: '税金について',
  estimatedTotal: '見積価格',
  checkOut: 'チェックアウト',
  frequentlyBoughtTogether: 'よく一緒にご購入されるもの',
  shoppingBag: 'カート',
  bagPageTitle: 'カート - COROS',
  moreGoodStuffIsComingSoon: 'Coming Soon',
  added: '追加',
  calAtCheckout: 'チェックアウト時に計算されます。',
  bagEmpty: 'カートに商品はありません。',
  chooseModel: 'モデル',
  thanksgivingPrompt: '40,000円以上のお買い上げで、COROSワークアウトバッグをプレゼント。キャンペーン中は物流量の増加に伴い、発送が通常よりも遅れる場合があります。',
  thanksgivingPromotionDetails: {
    title: 'COROSワークアウトバッグを追加',
    subTitles: ['40,000円以上のお買い上げでキャンペーンに適応されます。', 'キャンペーンは12月1日までですが、バッグの在庫がなくなり次第終了となります。', '他のキャンペーンとの併用はできません。']
  },
  thanksgivingPromptBanner: {
    title: "\u671F\u9593\u9650\u5B9A\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3",
    subTitles: ["40,000\u5186\u4EE5\u4E0A\u306E\u304A\u8CB7\u3044\u4E0A\u3052\u3067\u3001\u3053\u306E\u30BF\u30D5\u3067\u30B9\u30BF\u30A4\n      \u30EA\u30C3\u30B7\u30E5\u306A\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u30D0\u30C3\u30B0\u3092\u30D7\u30EC\u30BC\u30F3\u30C8\u3002", "\u671F\u9593\u306F12\u67081\u65E5\u307E\u3067\u3067\u3059\u304C\u3001\n      \u30D0\u30C3\u30B0\u306E\u5728\u5EAB\u304C\u306A\u304F\u306A\u308A\u6B21\u7B2C\u7D42\u4E86\u3068\u306A\u308A\u307E\u3059\u3002"],
    shortDescs: ['Holiday Offer']
  },
  chargerPromotion: {
    title: "\u516C\u5F0F\u30B5\u30A4\u30C8\u9650\u5B9A\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3",
    subTitles: "\u25CF COROS \u30A6\u30A9\u30C3\u30C1\u3068\u30AD\u30FC\u30DB\u30EB\u30C0\u30FC\u5145\u96FB\u30B1\u30FC\u30D6\u30EB\u3092\u30AB\u30FC\u30C8\u306B\u5165\u308C\u308B\u3068\u3001\u5145\u96FB\u30B1\u30FC\u30D6\u30EB\u3092\u7121\u6599\u30B2\u30C3\u30C8\n      \u25CF \u5728\u5EAB\u304C\u306A\u304F\u306A\u308A\u6B21\u7B2C\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u7D42\u4E86\n      \u25CF \u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\u671F\u9593\uFF1A8\u670810\u65E5\uFF08\u571F\uFF09\uFF5E8\u670818\u65E5\uFF08\u65E5\uFF09"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/coaches.js
/* harmony default export */ const jp_coaches = ({
  subTitle: ['POWERFUL', 'FREE', 'EASY'],
  intro: "COROS Training Hub\u306F\u3001COROS\u30A6\u30A9\u30C3\u30C1\u3092\u4F7F\u7528\u3059\u308B\n  \u9078\u624B\u3084\u30C1\u30FC\u30E0\u3092\u30DE\u30CD\u30B8\u30E1\u30F3\u30C8\u3059\u308B\u30B3\u30FC\u30C1\u306E\u305F\u3081\u306E\u7121\u6599\n                  \u306E\u30C7\u30FC\u30BF\u5206\u6790\u30C4\u30FC\u30EB\u3067\u3059\u3002",
  features: {
    title: '主な機能',
    list: {
      'team-view': {
        title: 'チーム/メンバーの一覧',
        list: ['パフォーマンス指標の並べ替え', '即時フィードバックが可能', 'メンバーのデータを比較できる'],
        desc: 'Training Hubはチーム / グループの選手たちを共通のプラットフォームに集約して、競技レベルや能力別にグループ分けすることができます。',
        coach: 'ヴァウェルコーチ（ファルコンユースAAU） ',
        btn: 'ファルコンユースチームの事例紹介\n（英語）'
      },
      drag: {
        title: 'ドラッグ＆ドロップ',
        list: ['ワークアウトやプランの作成 / 保存', 'プランライブラリの管理とアクセス', 'メンバーやチームにプランを共有'],
        desc: '選手にドラッグ＆ドロップすることですぐにプランを共有でき、時間短縮に繋がります。',
        coach: 'ウォリックコーチ（ドレイク大学S&Cコーチ）',
        btn: 'ドレイク大学の事例紹介（英語）'
      },
      optimize: {
        title: '選手のフィットネスを最適化',
        list: ['パフォーマンスのピークとリカバリーを最大化', 'チームパフォーマンスの前年比をモニター', '重要なレース前のテーパリング'],
        desc: '選手のフィットネスが適切か、もしくは過負荷なのかがすぐわかります。',
        coach: 'トリスタン・ホーグコーチ（エンデューロキン）',
        btn: 'エンデューロキンの事例紹介（英語）'
      },
      workouts: {
        title: 'ウォッチでワークアウトを確認',
        list: ["\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u30EA\u30B9\u30C8\u304B\u3089\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\n        \u30AB\u30EC\u30F3\u30C0\u30FC\u306B\u30C9\u30ED\u30C3\u30D7", "\u4F5C\u6210\u3057\u305F\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u5185\u5BB9\u3092\u30A6\u30A9\u30C3\u30C1\n          \u306B\u540C\u671F", "\u30DC\u30BF\u30F3\u3092\u62BC\u3057\u3066\u540C\u671F\u3057\u305F\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\n          \u3092\u3059\u3050\u306B\u958B\u59CB"]
      },
      communicate: {
        title: 'メンバーとの\nコミュニケーション',
        list: ['アプリ内でのメッセージ機能', 'メッセージ既読の通知機能']
      }
    }
  },
  clickArea: {
    coachSignup: {
      title: 'コーチ登録',
      desc: 'Training Hubをチームに導入したい、またはオンラインコーチングで使用したい場合は、以下のフォームから申請を行ってください。'
    },
    teamSales: {
      title: 'チームでの購入',
      desc: "\u30C1\u30FC\u30E0\u3067\u306E\u8CFC\u5165\u306F\u30C1\u30FC\u30E0\u3084\u30B0\u30EB\u30FC\u30D7\u5168\u4F53\u306B\n      Training Hub\u3092\u3044\u3061\u65E9\u304F\u5C0E\u5165\u3059\u308B\u305F\u3081\u306E\u6709\n      \u52B9\u306A\u624B\u6BB5\u3067\u3059\u3002\u5927\u898F\u6A21\u30C1\u30FC\u30E0\u3084\u30B0\u30EB\u30FC\u30D7\u3067\n      \u3054\u6CE8\u6587\u3092\u304A\u8003\u3048\u306E\u5834\u5408\u306F\u3001\u4EE5\u4E0B\u306E\u30D5\u30A9\u30FC\u30E0\n      \u306B\u3054\u8A18\u5165\u304F\u3060\u3055\u3044\u3002"
    },
    loanerProgram: {
      title: '貸出プログラム',
      desc: '貸出プログラムは、チームやグループがTraining Hubのチーム機能の利用開始をするためのプログラムです。下記よりご登録いただき、4週間のトライアルをご利用ください。4週間後、ウォッチの購入、または返却をすることができます。'
    }
  },
  form: {
    requiredMessage: 'この欄は必須項目です。',
    emailMessage: '有効なメールアドレスを入力してください。',
    placeholder: 'ご回答',
    noWatch: '私はCOROSウォッチを持っていません。',
    labels: {
      fullname: 'お名前を教えてください。',
      email: 'メールアドレスを教えてください。',
      account: 'COROSに登録されたアカウントのメールアドレスを教えてください。',
      teamName: 'チーム名を教えてください。',
      teamSize: 'チームの人数を教えてください。',
      role: 'チームでの役割を教えてください。',
      yearsCoaching: 'コーチング歴を教えてください、',
      platform: '今どのようなコーチングプラットフォームをお使いでしょうか？',
      location: '今どの国に住んでいますか？',
      interestedProducts: 'COROSのどのモデルに興味がありますか？',
      channel: 'このプログラムをどのようにお知りになりましたか？',
      additional: 'その他',
      phone: '携帯電話の番号を教えてください？',
      watch: '今どのモデルのCOROSウォッチをお使いですか？',
      athletesCount: '何人を指導していますか？',
      coachingWebsite: 'コーチングサイトを教えてください。',
      credentials: 'コーチの資格を記載してください。',
      watchRequestCount: 'ご希望の時計本数を教えてください。'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/careers.js
/* harmony default export */ const jp_careers = ({
  pageTitle: '加入COROS',
  desc: "\u6211\u4EEC\u8BDA\u631A\u6B22\u8FCE\u4F18\u79C0\u7684\u4F60\u4EEC\u52A0\u5165\uFF0CCOROS \u79C9\u6301\u7740\u6210\u4E3A\u6700\u4F18\u79C0\u7684\u8FD0\u52A8\u79D1\u6280\u516C\u53F8\uFF0C\u901A\u8FC7\u6570\u636E \u6280\u672F\u63A8\u52A8\u8FD0\u52A8\u8BAD\u7EC3\u53D8\u9769\u7684\u613F\u666F\uFF0C\u5E0C\u671B\u4E0E\u5927\u5BB6\u4E00\u8D77\u575A\u6301\u957F\u671F\u3001\u7406\u6027\u3001\u5766\u8BDA\u3001\u8BDA\u4FE1\u3001\u521B\u65B0\u3001 \u6210\u957F\u7684\u4EF7\u503C\u89C2\uFF0C\u5EFA\u7ACB\u7B26\u5408 COROS\n  \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002\u5BF9\u4EC0\u4E48\u662F\u201CCOROS \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u201D\u611F\u5174\u8DA3?\u521A\u597D\uFF0C\u6211\u4EEC\u4E5F\u5BF9\u4F18\u79C0\u7684\u4F60\u611F\u5174\u8DA3\u3002",
  visionTitle: '使命与投递简历：',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/ek-giveaway.js
/* harmony default export */ const jp_ek_giveaway = ({
  seo: {
    title: 'Win a COROS PACE 2 GPS Watch Eliud Kipchoge Edition!',
    desc: 'ランニンググッズを入手するチャンスに応募してください。当選者は5月1日に決定します。'
  },
  intro: {
    title: '史上最強のマラソンランナーのように走ろう！',
    desc: "\u771F\u306E\u30C1\u30E3\u30F3\u30D4\u30AA\u30F3\u306E\u3088\u3046\u306B\u723D\u5FEB\u306A\u8D70\u308A\u3092\u4F53\u9A13\u3057\u307E\u3057\u3087\u3046\uFF01\n    \u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u304C4\u670817\u65E5\u306E\u30DC\u30B9\u30C8\u30F3\u30DE\u30E9\u30BD\u30F3\u306B\u51FA\u5834\u3057\u307E\u3059\u3002\u6B8B\u3059\u306F\u3001\u30DC\u30B9\u30C8\u30F3\u3068\u30CB\u30E5\u30FC\u30E8\u30FC\u30AF\u30B7\u30C6\u30A3\u306E\u5236\u8987\u3060\u3051\u3068\u306A\u3063\u305F\u3001\u30A8\u30EA\u30A6\u30C9\u306E\u30A2\u30DC\u30C3\u30C8\u30EF\u30FC\u30EB\u30C9\u30DE\u30E9\u30BD\u30F3\u30E1\u30B8\u30E3\u30FC\u30BA\u5168\u5236\u8987\u306B\u5411\u3051\u3066\u3001\u9650\u5B9A\u88FD\u54C1 \u201CCOROS PACE 2 Eliud Kipchoge Edition\u201D\u306E\u6700\u7D42\u5728\u5EAB\u5206\u3092\u30D7\u30EC\u30BC\u30F3\u30C8\u3057\u307E\u3059\u3002\n    \n    \u3053\u306E\u9650\u5B9A\u88FD\u54C1\u306F\u30A8\u30EA\u30A6\u30C9\u304C\u3053\u308C\u307E\u3067\u4F55\u767E\u6642\u9593\u3082\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3067\u7740\u7528\u3057\u3066\u304A\u308A\u30012021\u5E74\u306E\u6771\u4EAC\u4E94\u8F2A\u3067\u306E\u4E94\u8F2A\u9023\u8987\u3084\u30012022\u5E74\u30D9\u30EB\u30EA\u30F3\u3067\u306E\u4E16\u754C\u8A18\u9332\u6A39\u7ACB\u306A\u3069\u3001\u4E16\u754C\u4E2D\u306ECOROS\u30E6\u30FC\u30B6\u30FC\u306B\u300CNo Human Is Limited\u300D\u306E\u30D5\u30EC\u30FC\u30BA\u3092\u60F3\u8D77\u3055\u305B\u308B\u3082\u306E\u3067\u3059\u3002\n    \n    \u3053\u306E\u30E9\u30F3\u30CB\u30F3\u30B0\u306E\u6B74\u53F2\u3092\u8A18\u5FF5\u3059\u308B\u305F\u3081\u3001\u30A8\u30EA\u30A6\u30C9\u306E\u6240\u5C5E\u30C1\u30FC\u30E0\u3067\u3042\u308BNN Running Team\u3068\u306E\u5354\u529B\u306B\u3088\u3063\u3066\u3001\u7D20\u6674\u3089\u3057\u3044\u30E9\u30F3\u30CB\u30F3\u30B0\u30B0\u30C3\u30BA\u3092\u3053\u306E\u5EA6\u3001\u7686\u69D8\u306B\u3054\u63D0\u4F9B\u3067\u304D\u308B\u3053\u3068\u306B\u306A\u308A\u307E\u3057\u305F\uFF01"
  },
  text2: "\u30FBCOROS PACE 2 Eliud Kipchoge Edition\n  \u30FB\u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u76F4\u7B46\u30B5\u30A4\u30F3\u5165\u308ANN Running Team \u30B7\u30F3\u30B0\u30EC\u30C3\u30C8\n  \u30FB\u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u76F4\u7B46\u30B5\u30A4\u30F3\u5165\u308ANN Running Team \u7D66\u6C34\u30DC\u30C8\u30EB\n  \u30FB\u30A8\u30EA\u30A6\u30C9\u30FB\u30AD\u30D7\u30C1\u30E7\u30B2\u76F4\u7B46\u30B5\u30A4\u30F3\u5165\u308ANN Running Team\u30D6\u30C3\u30AF",
  form: {
    title: "\u4E00\u523B\u3082\u65E9\u304F\u624B\u306B\u5165\u308C\u307E\u3057\u3087\u3046\uFF01",
    desc: 'メールアドレス登録だけでこの豪華なプレゼントに応募できます！'
  },
  notice: "*\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u767B\u9332\u3067\u4ECA\u56DE\u306E\u30D7\u30EC\u30BC\u30F3\u30C8\u4F01\u753B\u306B\u53C2\u52A0\u3067\u304D\u307E\u3059\u304C\u3001\u4ECA\u5F8C\u306ECOROS\u3068NN Running Team\u304B\u3089\u306E\u30E1\u30FC\u30EB\u30DE\u30AC\u30B8\u30F3\u306E\u53D7\u4FE1\u306B\u540C\u610F\u3059\u308B\u3053\u3068\u3068\u306A\u308A\u307E\u3059\u3002\u304A\u5BA2\u69D8\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u3001\u3053\u308C\u3089\u306E\u4F01\u696D\u306E\u88FD\u54C1\u3084\u30B5\u30FC\u30D3\u30B9\u306E\u30DE\u30FC\u30B1\u30C6\u30A3\u30F3\u30B0\u3092\u76EE\u7684\u3068\u3057\u304A\u308A\u3001\u3053\u308C\u3089\u306E\u4F01\u696D\u3068\u5171\u6709\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u30E1\u30FC\u30EB\u30DE\u30AC\u30B8\u30F3\u306E\u914D\u4FE1\u505C\u6B62\u3092\u5E0C\u671B\u3055\u308C\u308B\u5834\u5408\u306F\u3001\u30E1\u30FC\u30EB\u30DE\u30AC\u30B8\u30F3\u306B\u8A18\u8F09\u3055\u308C\u3066\u3044\u308B\u6307\u793A\u306B\u5F93\u3063\u3066\u3001\u3044\u3064\u3067\u3082\u914D\u4FE1\u505C\u6B62\u3092\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
  emailPlaceholder1: 'ご回答',
  emailPlaceholder2: '本イベントは終了致しました。',
  emailError1: '有効なメールアドレスを入力してください。',
  emailError2: 'メールアドレスは必須です。',
  submittedError: '新しいフォームを送信する場合は、ページを更新してください。',
  successMsg: 'ご回答が記録されました。'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/app3-langdingpage.js
/* harmony default export */ const jp_app3_langdingpage = ({
  title: 'COROSアプリ史上最大のアップデート',
  seo: {
    title: 'COROS2023年4月のアップデート',
    desc: '最新のアップデートには多くの機能を追加され、トレーニングやCOROSウォッチをより良い体験できます！'
  },
  intro: "2023\u5E744\u6708\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3067\u306F\u3001\u30A2\u30D7\u30EA\u306E\u30C7\u30B6\u30A4\u30F3\u3092\u4E00\u65B0\u3057\u307E\u3057\u305F\u3002\u65B0\u6A5F\u80FD\u306E\u63A2\u691C\u30DA\u30FC\u30B8\u304B\u3089\u3001\u6539\u826F\u3055\u308C\u305F\n    \u30E9\u30F3\u30CB\u30F3\u30B0\u30EC\u30D9\u30EB\u306E\u8A55\u4FA1\u30B7\u30B9\u30C6\u30E0\u3001EvoLab\u3001\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3084\u5730\u56F3\u6A5F\u80FD\u306A\u3069\u3001COROS\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\n    \u30F3\u5168\u4F53\u3092\u5927\u5E45\u306B\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u3057\u307E\u3057\u305F\u3002\u76EE\u6A19\u9054\u6210\u306E\u305F\u3081\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3067\u3082\u3001\u30A2\u30A6\u30C8\u30C9\u30A2\u306E\u63A2\u691C\u3067\u3082\u3001COROS\n    \u306EGPS\u30A6\u30A9\u30C3\u30C1\u306F\u3055\u3089\u306B\u9032\u5316\u3057\u307E\u3057\u305F\u3002",
  progress: {
    title: '新しい\nホーム画面',
    desc: 'トレーニングは進歩の継続です。アプリを開くと全く新しいホーム画面、最近のアクティビティ、睡眠データ、トレーニングステータスなどにすぐにアクセスでき、目標達成に向けての優先順位をつけるのに役立ちます。また、最も必要な情報の優先表示のカスタマイズも可能です。',
    deepData: {
      title: 'パーソナルデータの分析',
      desc: 'ホーム画面に表示される各項目をタップすると、詳細データやこれまでの推移を見ることができます。'
    }
  },
  optimize: {
    title: 'トレーニングの最適化',
    desc: 'ベースフィットネスなどのパーソナルデータを確認することで、新しいCOROSアプリでは次の練習計画のマネジメントをサポートします。',
    status: {
      title: 'トレーニング\nステータス',
      desc: 'ベースフィットネスと負荷インパクトのそれぞれの数値の組み合わせからトレーニングステータスの数値が導き出されますが、フィットネスの向上 / 低下、疲労具合の推移を簡単に確認することができます。',
      list: [{
        title: '過剰',
        desc: 'トレーニング負荷が高く、オーバートレーニングやケガのリスクがあります。'
      }, {
        title: '良好',
        desc: '推奨されたトレーニング負荷はベースフィットネスが向上、長期的な効果があります。'
      }, {
        title: '維持',
        desc: '適度なトレーニング負荷でベースフィットネスを維持しています。'
      }, {
        title: '再構築',
        desc: '徐々にハードなトレーニングへの適応力を高めています。'
      }, {
        title: 'リカバリー',
        desc: 'ハードなトレーニングのためにエネルギーを蓄えています。'
      }, {
        title: '練習不足',
        desc: 'ベースフィットネスが急速に低下しています。'
      }]
    },
    weekly: {
      title: '週間\nトレーニング負荷',
      desc: '多くのアスリートが週単位でワークアウトを計画し、怪我をしないように、もしくは調子の状況などトレーニング負荷の推移を即座に把握できます。また、月単位、年単位で長期的な目標に対するトラッキングすることも設定できます。'
    },
    enhanced: {
      title: '充実した\nカレンダー機能',
      list: [{
        title: 'トレーニングカレンダーの確認',
        desc: '予定している週間のトレーニングが簡単に確認できます。'
      }, {
        title: '新しいトレーニングの作成',
        desc: 'カレンダーをタップして、新しいトレーニングを追加することができます。'
      }, {
        title: 'トレーニングの編集・調整',
        desc: 'たとえ外出先でも、ドラッグ＆ドロップで簡単にトレーニングスケジュールの調整が可能です。'
      }]
    },
    running: {
      title: "\u30E9\u30F3\u30CB\u30F3\u30B0\n      \u30EC\u30D9\u30EB",
      desc: 'ランナーは個々で競技力が異なります。一新したランニングレベルの評価システムは、以下の4つの重要なランニング能力に基づいて構成されています：有酸素レベル、乳酸閾値レベル、スピード持久力、スプリント'
    }
  },
  navigation: {
    title: '使いやすくなったナビ機能',
    desc: '新しい場所や道に行く時、COROSの新しいナビゲーションツールは、あなたが道に迷わないようにサポートします。',
    subtitle: '探検ページ',
    subdesc: 'シンプルかつ直感的な探検ページで、ランニングもサイクリングでもルート検索、距離や標高の確認やウォッチとの同期が可能です。',
    list: [{
      title: '簡単なマップ操作',
      desc: '選択したポイントを結ぶルート作成や、マニュアルによる直線のルート作成など、地図をスライドさせながらルートが簡単に作成できます。'
    }, {
      title: 'ランニング or ライド',
      desc: '探検ページには、ランニングも自転車でのライドも両方のオプションが用意されています。お好きなスタイルでお気に入りのルートを探してみてください。'
    }, {
      title: 'ルートの編集',
      desc: 'ルートの任意の部分を消しゴムでこすることで、ルートの削除・編集ができます。'
    }],
    locations: {
      title: 'ロケーション ＆\n チェックポイント',
      list: [{
        title: 'ルート作成',
        desc: '場所を検索して、目的地までのルートを自動生成。'
      }, {
        title: 'アイコンのカスタマイズ',
        desc: 'アイコンをカスタマイズして場所を保存できます。'
      }, {
        title: 'チェックポイント',
        desc: '新規 / 既存ルートにチェックポイントを追加することができます。'
      }]
    },
    manage: {
      title: 'ルート＆お気に入り地点の管理',
      desc: '探検ページの「コレクション」内では、保存したルートやお気に入り地点が選択できます。',
      list: ['保存したルートは、距離、獲得標高が一覧で表示されます。', '保存したお気に入り地点は、カスタムアイコン、地域、標高一覧で表示されます。', 'タイプ、距離、地域、ソースに基づくフィルタが適用できます。']
    },
    onWirst: {
      title: "\u30A6\u30A9\u30C3\u30C1\u306B\n      \u540C\u671F\u3057\u3088\u3046",
      desc: 'ルートナビ機能対応の*COROSウォッチに、保存したルートを同期させると、ノンストレスのルートナビが体験できます。デジタルダイヤルで地図の拡大・縮小、**タッチスクリーンで地図上の移動が可能です。',
      note1: '*COROS PACE 1とKIPRUN 500はルートナビ機能非対応。また、PACE 2は最新のファームウェアにアップデートして、ルートナビ機能をご利用ください。',
      note2: '**PACE 2はタッチスクリーン操作に非対応。'
    }
  },
  more: {
    title: 'その他のアップデート',
    list: [{
      title: 'PACE 2のルートナビ機能',
      desc: 'PACE 2で「パンくずリスト」（ルート軌跡表示機能）を使用してのナビゲーションに対応しました。'
    }, {
      title: '睡眠トラッキング',
      desc: '睡眠データの内訳が新しくなり、自分の睡眠状態がよりわかりやすくなりました。'
    }, {
      title: 'リカバリー',
      desc: '長期的な回復傾向の表示と推奨回復時間を追加しました。'
    }, {
      title: 'オフラインマップの管理',
      desc: 'アプリから直接、*COROSウォッチのマップを簡単にダウンロード・削除できます。',
      note: '*Wi-Fi対応COROSウォッチのみ使用可能'
    }, {
      title: 'ランニングレベルテスト',
      desc: '新機能の「ランニングレベルテスト」は、あなたの現在のランニングレベルを知る、あるいは再確認するためです。'
    }, {
      title: 'アプリでのお問い合わせ',
      desc: 'アプリから直接、製品サポートについてのお問い合わせができるようになりました。'
    }]
  },
  footer: {
    title: 'まずは、テストしてみましょう',
    // desc: '下のリンクから、いち早く2023年4月最新のベータ版の最新機能を体験してみましょう！',
    btn: '今すぐアップデート'
  },
  header: {
    desc: '以下をクリックして、COROSベータ版をご利用いただけます。(4月25日から)',
    note: '正式リリースはベータ版公開の数週間後となります'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pace2-2023.js
/* harmony default export */ const jp_pace2_2023 = ({
  intro: {
    title: "COROS\u6700\u8EFD\u91CF\u30E2\u30C7\u30EB\n    \u4E14\u3064\u6700\u9AD8\u306A\u6A5F\u80FD",
    desc: ['COROS PACE 2はあらゆるレベルやフィールドのアスリートにとって究極のトレーニングパートナーです。その軽さだけではなく最高のトレーニング機能、最大30時間稼働のGPSモードで十分なバッテリー稼働時間を確保します。PACE 2を手に入れたら、COROSのトレーニングソリューションも手に入れることができます。', 'COROS EvoLabは、あなたの走行データを分析して価値ある指標に変換します。さらに、COROS Training Hubはより詳細な分析やトレーニング管理機能を提供します。', 'COROSのアプリは日常のトレーニングとデバイスを管理することができ、マンツーマンの指導が必要な場合、COROSのコーチングチームと連絡を取り合うことも可能です。']
  },
  theLightestGpsWatch: {
    title: "\u9A5A\u304F\u307B\u3069\u306E\n    \u8EFD\u3055",
    desc: "COROS\u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u88C5\u7740\u6642\u306B\u91CD\u91CF\u309230g\u4EE5\u5185\u306B\n    \u6291\u3048\u307E\u3057\u305F\u3002\u88C5\u7740\u3057\u3066\u3044\u308B\u3053\u3068\u3092\u5FD8\u308C\u308B\u3088\u3046\u306A\n    \u8EFD\u3055\u3067\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306B\u96C6\u4E2D\u3067\u304D\u307E\u3059\u3002",
    descMobile: "COROS\u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\n    \u88C5\u7740\u6642\u306B\u91CD\u91CF\u309230g\u4EE5\n    \u5185\u306B\u6291\u3048\u307E\u3057\u305F\u3002\u88C5\u7740\n    \u3057\u3066\u3044\u308B\u3053\u3068\u3092\n    \u5FD8\u308C\u308B\u3088\u3046\u306A\u8EFD\u3055\u3067\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u306B\n    \u96C6\u4E2D\u3067\u304D\u307E\u3059\u3002"
  },
  fingertipSimplicity: {
    title: "\u6307\u5148\u3067\u306E\n    \u30B7\u30F3\u30D7\u30EB\u306A\u64CD\u4F5C",
    desc: "\u30B7\u30F3\u30D7\u30EB\u3067\u76F4\u611F\u7684\u306B\u64CD\u4F5C\u3067\u304D\u308B\u3088\u3046\u306B\u8A2D\u8A08\u3055\u308C\u305F\u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u306F\u3001\n    \u6307\u4E00\u672C\u3067\u7D20\u65E9\u304F\u6B63\u78BA\u306A\u64CD\u4F5C\u304C\u53EF\u80FD\u3067\u3059\u3002",
    descMobile: "\u30B7\u30F3\u30D7\u30EB\u3067\u76F4\u611F\u7684\u306B\u64CD\u4F5C\u3067\u304D\u308B\u3088\u3046\u306B\u8A2D\u8A08\u3055\u308C\n    \u305F\u30C7\u30B8\u30BF\u30EB\u30C0\u30A4\u30E4\u30EB\u306F\u3001\u6307\u4E00\u672C\u3067\u7D20\u65E9\u304F\u6B63\u78BA\u306A\n    \u64CD\u4F5C\u304C\u53EF\u80FD\u3067\u3059\u3002"
  },
  builtForTheLongHaul: {
    title: '長時間稼働',
    desc: "\u7A3C\u50CD\u6642\u9593\u304C\u9577\u3044\u3053\u3068\u3067\u3001\u5145\u96FB\u56DE\u6570\u3082\u5C11\u306A\u3044\u3002",
    left: {
      upto: '最大',
      num: '30',
      unit: '時間',
      words: 'GPS、気圧計、心拍測定をフル使用'
    },
    right: {
      upto: '最大',
      num: '20',
      unit: '日間',
      words: '週1回のトレーニング、毎日の睡眠モニタリング'
    }
  },
  perfectForRunners: {
    title: 'ランニングに最適',
    desc: ['ランニングレベルテストで自分のレベルを把握することで、自分に必要なトレーニングによりフォーカスできます。', "\u5F93\u6765\u306EGPS\u642D\u8F09\u7AEF\u672B\u3067\u306F\u30C8\u30E9\u30C3\u30AF\u3092\u8D70\u308B\u3068\u3001\n      \u30C7\u30FC\u30BF\u306B\u30BA\u30EC\u304C\u751F\u3058\u3066\u3044\u307E\u3057\u305F\u3002PACE 2\u306E\n      \u30C8\u30E9\u30C3\u30AF\u30E2\u30FC\u30C9\u3067\u306F\u3001GPS\u3092\u88DC\u6B63\u3057\u3066\u8AA4\u5DEE\u3092\n      \u6700\u5C0F\u9650\u306B\u6291\u3048\u308B\u3053\u3068\u3092\u5B9F\u73FE\u3057\u307E\u3057\u305F\u3002", "COROS POD 2\u3068\u7D44\u307F\u5408\u308F\u305B\u3066\u4F7F\u7528\u3059\u308B\u3068\u63A5\n      \u5730\u6642\u9593\u3001\u5DE6\u53F3\u5DEE\u3001\u4E0A\u4E0B\u52D5\u7B49\u306E\u30C7\u30FC\u30BF\u3092\u6E2C\u5B9A\u3059\n      \u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\n      \u30C8\u30EC\u30C3\u30C9\u30DF\u30EB\u3084\u5BA4\u5185\u30C8\u30E9\u30C3\u30AF\u306A\u3069GPS\u304C\u5C4A\u304B\n      \u306A\u3044\u5BA4\u5185\u30E9\u30F3\u30CB\u30F3\u30B0\u3067\u3082\u8D70\u884C\u30C7\u30FC\u30BF\u3092\u8A18\u9332\n      \u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"],
    title2: 'トラックランモード'
  },
  navigationMadeEasy: {
    title: "\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u304C\n    \u7C21\u5358\u306B",
    desc: "\u65B0\u3057\u3044\u8857\u306B\u884C\u304F\u6642\u3084\u99D0\u8ECA\u5834\u306B\u623B\u308B\u6642\u306A\u3069\u3001COROS\u306E\n    \u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u304C\u65B0\u3057\u3044\u30EB\u30FC\u30C8\u3092\u4F5C\u6210\u3057\u3001\u6B63\u78BA\n    \u306A\u9053\u6848\u5185\u304C\u53EF\u80FD\u3067\u3059\u3002",
    descMobile: "\u65B0\u3057\u3044\u8857\u306B\u884C\u304F\u6642\u3084\u99D0\u8ECA\u5834\u306B\u623B\u308B\u6642\u306A\u3069\u3001COROS\u306E\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u6A5F\u80FD\u304C\u65B0\u3057\u3044\u30EB\u30FC\u30C8\u3092\u4F5C\u6210\u3057\u3001\u6B63\u78BA\u306A\u9053\u6848\u5185\u304C\u53EF\u80FD\u3067\u3059\u3002"
  },
  nightMode: {
    title: 'ナイトモード',
    desc: "\u6697\u3044\u3068\u3053\u308D\u3067\u30D0\u30C3\u30C6\u30EA\u30FC\u3092\u7BC0\u7D04\u3057\u306A\u304C\u3089\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30C7\u30FC\u30BF\u3092\u78BA\u8A8D\u3067\u304D\u3001\u76EE\u306B\u3082\n    \u512A\u3057\u3044\u30E2\u30FC\u30C9\u3067\u3059\u3002"
  },
  customizableActivityScreens: {
    title: "\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u753B\u9762\u304C\n    \u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u53EF\u80FD",
    desc: "\u5404\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u306E\u30EC\u30A4\u30A2\u30A6\u30C8\u306F\u7DE8\u96C6\u3067\u304D\u307E\u3059\u3002\n    \u307E\u305F\u3001\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30A2\u30E9\u30FC\u30C8\u306E\u8A2D\u5B9A\u3082\u3067\u304D\u307E\u3059\u3002"
  },
  multisportActivityTracking: {
    title: "\u30DE\u30EB\u30C1\u30B9\u30DD\u30FC\u30C4\n    \u30C8\u30E9\u30C3\u30AD\u30F3\u30B0",
    desc: "\u6C34\u6CF3\u3001\u7E04\u8DF3\u3073\u306A\u3069\u5168\u3066\u306E\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\n    \u30E2\u30FC\u30C9\u306B\u304A\u3044\u3066\u6B63\u78BA\u306A\u6307\u6A19\u3092\u63D0\u4F9B\u3057\u307E\u3059\u3002"
  },
  evoLabInsights: {
    title: "EvoLab Insight",
    desc: "COROS EvoLab\u306F\u30B9\u30DD\u30FC\u30C4\u79D1\u5B66\u306B\u57FA\u3065\u3044\u305F\n    COROS\u72EC\u81EA\u306E\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3067\u3059\u3002\n    PACE 2\u3067\u5B9F\u6E2C\u3057\u305F\u8D70\u884C\u30C7\u30FC\u30BF\u3092\u5206\u6790\u3057\u3066\u3001\n    \u76EE\u6A19\u9054\u6210\u306E\u305F\u3081\u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u3092\u6700\u9069\u5316\n    \u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  },
  runningFitness: {
    title: "\u30E9\u30F3\u30CB\u30F3\u30B0\n    \u30EC\u30D9\u30EB",
    desc: 'それぞれのランナーには長所短所があります。それらを理解しつつ、トレーニングを継続していくことが大事です。'
  },
  trainingStatus: {
    title: 'トレーニング状態',
    desc: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u72B6\u614B\u306E\u6570\u5024\u3092\u78BA\u8A8D\u3059\u308B\u3053\u3068\u3067\u3001\n    \u30D5\u30A3\u30C3\u30C8\u30CD\u30B9\u304C\u5411\u4E0A\u30FB\u4F4E\u4E0B\u3057\u3066\u3044\u308B\u304B\u3092\n        \u628A\u63E1\u3067\u304D\u3001\u75B2\u52B4\u306E\u7BA1\u7406\u304C\u3067\u304D\u307E\u3059\u3002",
    descMobile: 'トレーニング状態の数値を確認することで、\nフィットネスが向上・低下しているかを把握でき、疲労の管理ができます。'
  },
  trainingLoad: {
    title: 'トレーニング負荷',
    desc: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u304C\u4E0D\u8DB3 \u2022 \u30AA\u30FC\u30D0\u30FC\u3057\u3066\u3044\u308B\u304B\u3092\n    \u30E2\u30CB\u30BF\u30EA\u30F3\u30B0\u3057\u307E\u3059\u3002"
  },
  recoveryTimer: {
    title: "\u30EA\u30AB\u30D0\u30EA\u30FC\n    \u6642\u9593",
    desc: '怪我の予防、体のケアのためのリカバリー時間を算出します。'
  },
  racePredictor: {
    title: 'レース予測',
    desc: '5km〜マラソンまで、現在のパフォーマンスに基づく予測タイムを提供します。'
  },
  advancedTrainingTools: "\u6700\u5148\u7AEF\u306E\n  \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30C4\u30FC\u30EB",
  trainingHub: {
    title: 'Training Hub',
    desc: "\u8D70\u884C\u30C7\u30FC\u30BF\u3092\u3088\u308A\u8A73\u7D30\u306B\u5206\u6790\u3057\u3066\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n    \u30D7\u30E9\u30F3\u3092\u4F5C\u6210 \u2022 \u7BA1\u7406\u3067\u304D\u307E\u3059\u3002\n    \u30B3\u30FC\u30C1\u3068\u8FC5\u901F\u306B\u30B3\u30DF\u30E5\u30CB\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u53D6\u308B\u3053\u3068\n    \u304C\u3067\u304D\u307E\u3059\u3002"
  },
  corosCoaches: {
    title: "COROS COACHES",
    desc: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u6307\u5C0E\u304C\u6B32\u3057\u3044\u5834\u5408\u306F\u3001\u30E6\u30FC\u30B6\u30FC\n    \u306E\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30C7\u30FC\u30BF\u306B\u57FA\u3065\u3044\u3066COROS\n    \u30B3\u30FC\u30C1\u30F3\u30B0\u30C1\u30FC\u30E0\u304B\u3089\u30EF\u30F3\u30C4\u30FC\u30DE\u30F3\u306E\u30B5\u30DD\u30FC\u30C8\n    \u304C\u53D7\u3051\u3089\u308C\u307E\u3059\u3002\n    \uFF08\u73FE\u6642\u70B9\u3067\u82F1\u8A9E\u306E\u307F\u306E\u30B5\u30DD\u30FC\u30C8\uFF09"
  },
  evenMoreFeatures: 'さらなる機能',
  enhancedSleepMonitoring: {
    title: "\u7761\u7720\n    \u30E2\u30CB\u30BF\u30EA\u30F3\u30B0",
    desc: '良いトレーニングには、良い睡眠をとることが不可欠です。睡眠ステージの内訳を見れば、良い睡眠がとれているかが一目瞭然です。',
    descMobile: '良いトレーニングには、良い睡眠をとることが不可欠です。睡眠ステージの内訳を見れば、良い睡眠がとれているかが一目瞭然です。'
  },
  flexibleTrainingCalendar: {
    title: "\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\n    \u7BA1\u7406",
    desc: 'トレーニングプランをウォッチに同期することで、外出先でもトレーニングプランが簡単に確認・管理できます。',
    descMobile: 'トレーニングプランをウォッチに同期することで、外出先でもトレーニングプランが簡単に確認・管理できます。'
  },
  personalizedWorkoutBuilder: {
    title: "\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u30E1\u30CB\u30E5\u30FC\n    \u4F5C\u6210",
    desc: "\u30E9\u30F3\u3001\u30D0\u30A4\u30AF\u3001\u6C34\u6CF3\u3001\u7B4B\u30C8\u30EC\u304B\u3089\n    \u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u9078\u629E\u3057\u3066\u3001\u5F37\u5EA6\n    \u3068\u91CF\u3092\u8A2D\u5B9A\u3057\u3066\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\n    \u30E1\u30CB\u30E5\u30FC\u306E\u4F5C\u6210\u304C\u3067\u304D\u307E\u3059\u3002",
    descMobile: "\u30E9\u30F3\u3001\u30D0\u30A4\u30AF\u3001\u6C34\u6CF3\u3001\u7B4B\u30C8\u30EC\u304B\u3089\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u9078\u629E\u3057\u3066\u3001\u5F37\u5EA6\u3068\u91CF\u3092\u8A2D\u5B9A\u3057\u3066\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u30E1\u30CB\u30E5\u30FC\u306E\u4F5C\u6210\u304C\u3067\u304D\u307E\u3059\u3002"
  },
  preDesignedWorkoutsPlans: {
    title: "\u7121\u6599\u306A\n    \u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3",
    desc: "COROS\u306E\u30A8\u30EA\u30FC\u30C8\u30A2\u30B9\u30EA\u30FC\u30C8\u3084\n    \u30B3\u30FC\u30C1\u304C\u4F5C\u6210\u3057\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\n    \u30D7\u30E9\u30F3\u304C\u7121\u6599\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3067\u304D\n    \u307E\u3059\u3002\u30A6\u30A9\u30C3\u30C1\u306B\u540C\u671F\u3057\u3066\u30D7\u30ED\n    \u304B\u3089\u5B66\u3076\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
    descMobile: "COROS\u306E\u30A8\u30EA\u30FC\u30C8\u30A2\u30B9\u30EA\u30FC\u30C8\u3084\u30B3\u30FC\u30C1\u304C\u4F5C\u6210\u3057\u305F\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u30D7\u30E9\u30F3\u304C\u7121\u6599\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3067\u304D\u307E\u3059\u3002\u30A6\u30A9\u30C3\u30C1\u306B\u540C\u671F\u3057\u3066\u30D7\u30ED\u304B\u3089\u5B66\u3076\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/stories.js
/* harmony default export */ const jp_stories = ({
  // TODO: todo_xjf
  homeTitle: 'COROS Stories',
  viewAllStories: '全ての記事を読む',
  learnMore: '詳細',
  searchCorosStories: 'COROS記事を検索',
  search: '検索',
  viewMoreStories: 'もっと読みたい',
  shareThisStory: 'シェアする',
  by: 'By',
  minRead: '読む時間：約{0}分間',
  resultsFound: '{0} 検索結果'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/hrm.js
/* harmony default export */ const jp_hrm = ({
  share: 'COROS心拍センサー',
  shareText: '腕から高精度のデータ、快適な着け心地',
  menu: 'COROS心拍センサー',
  homeWatch: '心拍センサー',
  homeWatchDesc: "\u8155\u304B\u3089\u9AD8\u7CBE\u5EA6\u306E\u30C7\u30FC\u30BF\u3001\n  \u5FEB\u9069\u306A\u7740\u3051\u5FC3\u5730",
  precise: '高精度のデータ\n快適な着け心地',
  intro: "COROS\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u3001\u5404Bluetooth\u5BFE\u5FDC\u30C7\u30D0\u30A4\u30B9\u3068\u306E\u4E92\u63DB\u6027\u304C\u3042\u308A\u307E\u3059\u3002\n  \u9AD8\u7CBE\u5EA6\u306E\u5FC3\u62CD\u6E2C\u5B9A\u3092\u63D0\u4F9B\u3057\u3001\u7D0438\u6642\u9593\u306E\u9023\u7D9A\u7A3C\u50CD\u6642\u9593\u3067\u96FB\u6C60\u5207\u308C\u306E\u5FC3\u914D\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
  intro_mobile: "COROS\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u3001\u5404Bluetooth\u5BFE\u5FDC\u30C7\u30D0\u30A4\u30B9\n  \u3068\u306E\u4E92\u63DB\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u9AD8\u7CBE\u5EA6\u306E\u5FC3\u62CD\u6E2C\u5B9A\u3092\u63D0\u4F9B\n  \u3057\u3001\u7D0438\u6642\u9593\u306E\u9023\u7D9A\u7A3C\u50CD\u6642\u9593\u3067\u96FB\u6C60\u5207\u308C\u306E\u5FC3\u914D\u304C\n  \u3042\u308A\u307E\u305B\u3093\u3002",
  easyToWear: '簡単に装着\n運動に集中',
  sleek: '洗練されたデザイン＆快適性',
  sleekText: "COROS\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u30BD\u30D5\u30C8\u306A\u30D0\u30F3\u30C9\u751F\u5730\u3092\u4F7F\u7528\u3057\u3066\u3044\u307E\u3059\u3002\u524D\u8155\u307E\u305F\u306F\u4E0A\u8155\u306B\u56FA\u5B9A\u3059\u308B\u3060\u3051\u306A\u306E\u3067\u3001\u80F8\u90E8\u3078\u306E\n  \u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306E\u88C5\u7740\u3088\u308A\u3082\u7C21\u5358\u3002\u8584\u578B\u30C7\u30B6\u30A4\u30F3\u306A\u306E\u3067\u3001\u8863\u670D\u3084\u30B8\u30E0\u306E\u5668\u5177\u306A\u3069\u3078\u306E\u5F15\u3063\u304B\u304B\u308A\u3092\u9632\u304E\u3001\u88C5\u7740\u3057\u3066\u3044\n  \u308B\u3053\u3068\u3092\u5FD8\u308C\u308B\u307B\u3069\u306E\u5FEB\u9069\u6027\u3067\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u306B\u96C6\u4E2D\u3067\u304D\u307E\u3059\u3002",
  sleekText_mobile: "COROS\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u30BD\u30D5\u30C8\u306A\u30D0\u30F3\u30C9\u751F\u5730\u3092\u4F7F\u7528\n    \u3057\u3066\u3044\u307E\u3059\u3002\u524D\u8155\u307E\u305F\u306F\u4E0A\u8155\u306B\u56FA\u5B9A\u3059\u308B\u3060\u3051\u306A\u306E\n    \u3067\u3001\u80F8\u90E8\u3078\u306E\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306E\u88C5\u7740\u3088\u308A\u3082\u7C21\u5358\u3002\u8584\n    \u578B\u30C7\u30B6\u30A4\u30F3\u306A\u306E\u3067\u3001\u8863\u670D\u3084\u30B8\u30E0\u306E\u5668\u5177\u306A\u3069\u3078\u306E\n    \u5F15\u3063\u304B\u304B\u308A\u3092\u9632\u304E\u3001\u88C5\u7740\u3057\u3066\u3044\u308B\u3053\u3068\u3092\u5FD8\u308C\u308B\u307B\n    \u3069\u306E\u5FEB\u9069\u6027\u3067\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u306B\u96C6\u4E2D\u3067\u304D\u307E\u3059\u3002",
  flexible: 'フィット感を調節可能',
  flexibleText: 'バックルをスライドして最適な位置に調整可能です。マジックテープタイプなので洗濯時でも簡単に取り外せます。',
  accuracy: '高精度の心拍測定\nセンサーの保護で長持ち',
  sensor: '最新のセンサー',
  sensorText: "\u6700\u65B0\u306E\u30DE\u30EB\u30C1\u30C1\u30E3\u30F3\u30CD\u30EB\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u304C\u9AD8\u7CBE\u5EA6\u306E\u5FC3\u62CD\u6E2C\u5B9A\n    \u3092\u5B9F\u73FE\u3057\u307E\u3059\u3002\u6D17\u7DF4\u3055\u308C\u305F\u30DC\u30C7\u30A3\u306B\u53CE\u3081\u3089\u308C\u305F\u50B7\u304C\u3064\u304D\u306B\u304F\u304F\u4FDD\n    \u8B77\u3055\u308C\u305F\u30BB\u30F3\u30B5\u30FC\u304C\u3001\u4FE1\u983C\u6027\u306E\u9AD8\u3044\u6B63\u78BA\u306A\u5FC3\u62CD\u30C7\u30FC\u30BF\u3092\u65E5\u5E38\u7684\u306B\n    \u63D0\u4F9B\u3057\u307E\u3059\u3002",
  sensorText_mobile: "\u6700\u65B0\u306E\u30DE\u30EB\u30C1\u30C1\u30E3\u30F3\u30CD\u30EB\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u304C\u9AD8\u7CBE\u5EA6\u306E\u5FC3\u62CD\u6E2C\u5B9A \u3092\u5B9F\u73FE\u3057\u307E\u3059\u3002\u6D17\u7DF4\u3055\u308C\u305F\u30DC\u30C7\u30A3\u306B\u53CE\u3081\u3089\u308C\u305F\u50B7\u304C\u3064\u304D\u306B\u304F\u304F\u4FDD \u8B77\u3055\u308C\u305F\u30BB\u30F3\u30B5\u30FC\u304C\u3001\u4FE1\u983C\u6027\u306E\u9AD8\u3044\u6B63\u78BA\u306A\u5FC3\u62CD\u30C7\u30FC\u30BF\u3092\u65E5\u5E38\u7684\u306B \u63D0\u4F9B\u3057\u307E\u3059\u3002",
  band: '優秀なバンド',
  bandText: "\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u3092\u76AE\u819A\u306B\u3057\u3063\u304B\u308A\u56FA\u5B9A\u3059\u308B\u3053\u3068\u3067\u9AD8\u7CBE\u5EA6\u6E2C\u5B9A\u304C\n  \u6A5F\u80FD\u3057\u307E\u3059\u3002COROS\u306E\u30D0\u30F3\u30C9\u306F\u3001\u5916\u5149\u304C\u5165\u3089\u306A\u3044\u3088\u3046\u30BB\u30F3\u30B5\u30FC\u304C\u8155\n  \u306B\u3074\u3063\u305F\u308A\u3068\u5BC6\u7740\u3059\u308B\u3088\u3046\u306B\u8A2D\u8A08\u3055\u308C\u3066\u3044\u307E\u3059\u3002",
  bandText_mobile: '光学式心拍センサーを皮膚にしっかり固定することで高精度測定が機能します。COROSのバンドは、外光が入らないようセンサーが腕にぴったりと密着するように設計されています。',
  noButtons: 'ボタンがないので\nイライラしない',
  power: '驚異的な稼働時間',
  powerText: "COROS\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F1\u56DE\u306E\u30D5\u30EB\u5145\u96FB\u3067\n  38\u6642\u9593\u306E\u7A3C\u50CD\u6642\u9593\u3001\u4E0D\u4F7F\u7528\u6642\u306F100\u65E5\u9593\n  \u96FB\u6E90\u304C\u5207\u308C\u307E\u305B\u3093\u3002COROS\u30A6\u30A9\u30C3\u30C1\u307E\u305F\n  \u306F\u30A2\u30D7\u30EA\u3067\u30D0\u30C3\u30C6\u30EA\u30FC\u6B8B\u91CF\u304C\u78BA\u8A8D\u3067\u304D\u3001\n  \u30DE\u30B0\u30CD\u30C3\u30C8\u578B\u306E\u30B1\u30FC\u30D6\u30EB\u3067\u7C21\u5358\u306B\u5145\u96FB\u304C\n  \u3067\u304D\u307E\u3059\u3002",
  detection: '装着検知機能',
  detectionText: "COROS\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u81EA\u52D5\u88C5\u7740\u691C\u77E5\u6A5F\u80FD\u304C\n  \u3042\u308A\u3001\u88C5\u7740\u72B6\u6CC1\u3067\u81EA\u52D5\u306E\u96FB\u6E90\u30AA\u30F3/\u30AA\u30D5\u304C\u3067\n  \u304D\u307E\u3059\u3002\u30EF\u30FC\u30AF\u30A2\u30A6\u30C8\u958B\u59CB\u6642\u306B\u30DA\u30A2\u30EA\u30F3\u30B0\n  \u3057\u305F\u30C7\u30D0\u30A4\u30B9\u306B\u81EA\u52D5\u7684\u306B\u63A5\u7D9A\u3067\u304D\u307E\u3059\u3002",
  connections: '他デバイスと接続可能',
  connectionsText: "COROS\u30A6\u30A9\u30C3\u30C1\u4EE5\u5916\u306EBluetooth\u5BFE\u5FDC\u306E\u30A4\u30F3\u30C9\u30A2\n  \u30C8\u30EC\u30FC\u30CA\u30FC\u3084\u30B5\u30A4\u30AF\u30EB\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u30FC\u306A\u3069\u3001\u6700\n  \u59273\u53F0\u306E\u30C7\u30D0\u30A4\u30B9\u3068\u540C\u6642\u306B\u30DA\u30A2\u30EA\u30F3\u30B0\u3059\u308B\u3053\u3068\n  \u304C\u3067\u304D\u307E\u3059\u3002",
  connectionsText_mobile: "COROS\u30A6\u30A9\u30C3\u30C1\u4EE5\u5916\u306EBluetooth\u5BFE\u5FDC\u306E\u30A4\u30F3\u30C9\u30A2\n  \u30C8\u30EC\u30FC\u30CA\u30FC\u3084\u30B5\u30A4\u30AF\u30EB\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u30FC\u306A\u3069\u3001\u6700\n  \u59273\u53F0\u306E\u30C7\u30D0\u30A4\u30B9\u3068\u540C\u6642\u306B\u30DA\u30A2\u30EA\u30F3\u30B0\u3059\u308B\u3053\u3068\u304C\n  \u3067\u304D\u307E\u3059\u3002",
  why: 'なぜ腕に装着するのか？',
  whyText: "\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u3001\u5149\u3092\u4F7F\u3063\u3066\u76AE\u819A\u306E\u4E0B\u306B\u3042\u308B\u6BDB\u7D30\u8840\u7BA1\u306E\u8840\u6D41\u3092\u6E2C\u5B9A\u3057\u307E\u3059\u3002\u30A6\u30A9\u30C3\u30C1\u306F\n    \u624B\u9996\u3078\u306E\u88C5\u7740\u304C\u6700\u3082\u9069\u3057\u3066\u3044\u307E\u3059\u304C\u3001\u5FC3\u62CD\u6E2C\u5B9A\u306E\u7CBE\u5EA6\u306B\u307E\u3060\u8AB2\u984C\u304C\u6B8B\u3063\u3066\u3044\u307E\u3059\u3002\u7279\u306B\u4E0A\u8155\u306B\n    \u306F\u6700\u9069\u306A\u8840\u6D41\u304C\u3042\u308A\u3001\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u3092\u4E0A\u8155\u306B\u88C5\u7740\u3059\u308B\u3053\u3068\u3067\u3001\u80F8\u90E8\u3068\u540C\u3058\u304F\u4FE1\u983C\u3067\u304D\u308B\u30C7\u30FC\u30BF\n    \u304C\u53D6\u5F97\u3067\u304D\u307E\u3059\u3002\n    \u203B\u5FC3\u62CD\u6E2C\u5B9A\u306E\u7CBE\u5EA6\u304C\u9AD8\u3044\u4E0A\u8155\u3078\u306E\u88C5\u7740\u3092\u63A8\u5968\u3057\u307E\u3059\u304C\u3001\u524D\u8155\u3078\u306E\u88C5\u7740\u3067\u3082OK\u3067\u3059\u3002",
  whyText_mobile: "\u5149\u5B66\u5F0F\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u306F\u3001\u5149\u3092\u4F7F\u3063\u3066\u76AE\u819A\u306E\u4E0B\u306B\u3042\u308B\n    \u6BDB\u7D30\u8840\u7BA1\u306E\u8840\u6D41\u3092\u6E2C\u5B9A\u3057\u307E\u3059\u3002\u30A6\u30A9\u30C3\u30C1\u306F\u624B\u9996\u3078\u306E\n    \u88C5\u7740\u304C\u6700\u3082\u9069\u3057\u3066\u3044\u307E\u3059\u304C\u3001\u5FC3\u62CD\u6E2C\u5B9A\u306E\u7CBE\u5EA6\u306B\u307E\u3060\n    \u8AB2\u984C\u304C\u6B8B\u3063\u3066\u3044\u307E\u3059\u3002\u7279\u306B\u4E0A\u8155\u306B\u306F\u6700\u9069\u306A\u8840\u6D41\u304C\u3042\n    \u308A\u3001\u5FC3\u62CD\u30BB\u30F3\u30B5\u30FC\u3092\u4E0A\u8155\u306B\u88C5\u7740\u3059\u308B\u3053\u3068\u3067\u3001\u80F8\u90E8\u3068\n    \u540C\u3058\u304F\u4FE1\u983C\u3067\u304D\u308B\u30C7\u30FC\u30BF\u304C\u53D6\u5F97\u3067\u304D\u307E\u3059\u3002\n    \u203B\u5FC3\u62CD\u6E2C\u5B9A\u306E\u7CBE\u5EA6\u304C\u9AD8\u3044\u4E0A\u8155\u3078\u306E\u88C5\u7740\u3092\u63A8\u5968\u3057\u307E\u3059\n    \u304C\u3001\u524D\u8155\u3078\u306E\u88C5\u7740\u3067\u3082OK\u3067\u3059\u3002",
  box: "WHAT'S IN THE BOX"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/chamonix.js
/* harmony default export */ const jp_chamonix = ({
  menuTitle: 'COROS in Chamonix',
  shareTitle: 'COROS IN CHAMONIX | 8月28日～9月3日',
  shareDesc: 'シャモニーでCOROSトップアスリートと開催するイベントのご参加を心待ちにしております。また、Ultra-Trail Village Expoのブースで最新製品もご体験ください。',
  bannerTitle: 'COROS IN CHAMONIX',
  bannerTitleText: '8月28日～9月3日',
  intro: 'トレイルランの聖地シャモニーで、COROSがUTMB® 2023の期間中にトップアスリートとの交流イベントを行います。以下からイベントへの参加申込を行うことができます。\nまた、 Ultra-Trail Village Expo内のブースでもこれらのイベントへの申込みが可能です。さらに、ブースでは数量限定発売のAPEX 2 Proを展示予定です。\nぜひご参加ください。',
  scheduleTitle: 'イベントスケジュール',
  scheduleDesc: 'イベントはおもに、フィニッシュエリアに近い La Folie Douce ホテルで開催されます。参加人数が限られていますので、参加希望の方はお早めにお申し込みください。',
  scheduleDescLink: 'La Folie Douce',
  courseTitle: 'コースのGPXファイル',
  courseDesc: 'シャモニーでレースに参加される方は、以下よりコースのGPXファイルが簡単にダウンロードできます。',
  openWithCorosApp: 'COROSアプリで開く',
  downloadGpxFile: 'GPXファイルをダウンロード',
  boothTitle: 'ようこそ、COROS\nブースへ',
  boothDesc: 'COROSブースでは、COROSチームのスタッフがお客様のご質問にできるだけお答えします。また、新発売される限定カラーのAPEX 2 Proが先行購入できます。',
  whoTitle: "WHO'S RACING?",
  whoDesc: '以下の世界中のCOROSアスリートが、それぞれのレースに出場します。',
  register: '申し込む'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/chamonix_edition.js
/* harmony default export */ const jp_chamonix_edition = ({
  shareTitle: 'COROS APEX 2 Pro GPS Outdoor Watch Chamonix Edition',
  shareDesc: 'トレイルランニングなど長距離の活動とレースのようなスピードを求める方に最適',
  productName: 'COROS APEX 2 Pro Chamonix',
  mobileProductName: 'COROS APEX 2 Pro Chamonix',
  title: 'APEX 2 Pro\nCHAMONIX EDITION',
  intro: 'アウトドアでの山岳トレーニングを通じて自分のランニングレベルを向上させるには、シャモニーほど象徴的な場所はないでしょう。シャモニーはトレイルランの精神的な故郷であり、モンブランへの玄関口ともいえます。このAPEX 2 Pro Chamonix Editionは、地球上で最もトレイルランのトレーニングに最適な場所からインスパイアを受けて生まれました。',
  introMobile: 'アウトドアでの山岳トレーニングを通じて\n自分のランニングレベルを向上させるには、\nシャモニーほど象徴的な場所はないでしょう。\n\nシャモニーはトレイルランの精神的な故郷で\nあり、モンブランへの玄関口ともいえます。\nこのAPEX 2 Pro Chamonix Editionは、地球上で\n最もトレイルランのトレーニングに最適な場所\nからインスパイアを受けて生まれました。',
  limited: '数量限定発売',
  limitedText: '世界3000台限定',
  alpine: 'アルペンカラーからの着想',
  alpineText: 'ブルーとグレーのカラーは、モンブランの高地と岩と氷河が融合し、突き抜けるような空のカラーと相まっています。',
  alpineMobile: 'アルペンカラーからの着想',
  alpineMobileText: 'ブルーとグレーのカラーは、モンブランの高地と岩と氷河が融合し、突き抜けるような空のカラーと相まっています。',
  mont: 'モンブランの実績',
  montText: 'COROSユーザーはシャモニーですでに100万メートル以上の獲\n得標高を記録しています。APEX 2 Proは最新のテクノロジーを\n採用し、革新的な機能かつ長いバッテリー稼働時間があなたの\n期待に応えるでしょう。',
  montMobile: 'モンブランの実績',
  montMobileText: 'COROSユーザーはシャモニーで\nすでに100万メートル以上の獲得\n標高を記録しています。\nAPEX 2 Proは最新のテクノロジー\nを採用し、革新的な機能かつ長い\nバッテリー稼働時間があなたの期\n待に応えるでしょう。',
  reach: '頂点を目指す',
  reachText: 'APEX 2 Proは、あらゆる地形で性能を発揮するように設計されており革新的な\nテクノロジーが搭載されています。耐久性に優れているだけでなく、再設計さ\nれたアンテナ、次世代光学式心拍センサー、長い稼働時間など、あなたの\nランニングをサポートします。',
  reachMobile: '頂点を目指す',
  reachMobileText: 'APEX 2 Proは、あらゆる地形で性能を発揮する\nように設計されており革新的なテクノロジーが\n搭載されています。耐久性に優れているだけで\nなく、再設計されたアンテナ、次世代光学式心\n拍センサー、長い稼働時間など、あなたの\nランニングをサポートします。',
  noMatter: '何時でも十分な\n準備が必要',
  noMatterText: 'アウトドアにおいての美しさにはリスクも伴います。荒天、高山病、暗闇、脱水症状など、これらは山岳で活動する時によく発生する状況です。APEX 2 Pro Chamonix Editionは、どんな状況にも対応できるよう設計されており、あなたが山頂を目指す間、安全の確保と情報の提供をサポートします。',
  noMatterMobile: '何時でも十分な\n 準備が必要',
  noMatterMobileText: 'アウトドアにおいての美しさにはリスクも伴います。荒天、高山病、暗闇、脱水症状など、これらは山岳で活動する時によく発生する状況です。APEX 2 Pro Chamonix Editionは、どんな状況にも対応できるよう設計されており、あなたが山頂を目指す間、安全の確保と情報の提供をサポートします。',
  findYour: 'ルートを把握する',
  findYourText: 'COROSグローバルオフラインマッピング、チェックポイント、ルート作成機能な\nどを通じて、どんな場所でも安心で重要なナビゲーション情報にアクセスできま\nす。APEX 2 Pro Chamonix Editionのデジタルダイヤルを回して簡単に地図の拡\n大・縮小ができ、タッチスクリーン式のため指でのドラッグ操作もできます。',
  findYourMobile: 'ルートを把握する',
  findYourMobileText: 'COROSグローバルオフラインマッピング、\nチェックポイント、ルート作成機能などを\n通じて、どんな場所でも安心で重要なナビ\nゲーション情報にアクセスできます。\nAPEX 2 Pro Chamonix Editionのデジタル\nダイヤルを回して簡単に地図の拡大・縮小\nができ、タッチスクリーン式のため指での\nドラッグ操作もできます。',
  box: 'WHAT’S IN THE BOX',
  cable: '充電ケーブル',
  nylonWatchBand: 'ナイロンバンド',
  shopAllColors: 'Shop All Colors',
  recommandedProduct: 'アクセサリーを選択してください。'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pace3.js
/* harmony default export */ const jp_pace3 = ({
  productName: 'COROS PACE 3 GPS Sport Watch',
  productNameShort: 'COROS PACE 3',
  trainingPlansAndWorkoutsLinks1WordPc: '',
  intro: '妥協のない\n超軽量モデル',
  introText: 'GPSウォッチの業界最軽量を謳った前作のPACE 2から、あらゆる面が改良されたPACE 3は、引き続き軽量かつ快適。そして、先進的なテクノロジーを搭載しており高精度のデータを提供します。また、業界をリードするCOROSのトレーニングソフトウェアを搭載しており、トレーニングとリカバリーの両面からトラッキング、モニタリングが可能です。COROS PACE 3はあなたの可能性を引き上げます。',
  goTheDistance: 'もっと遠くその先へ',
  goTheDistanceText: 'PACE 3はより長く使えるように前作よりバージョンアップ。充電時間を最小限に抑え、バッテリー容量を拡大するように設計されました。充電頻度も減らせ、頻繁に電池残量の心配をする必要はありません。',
  batteryAfter: '10時間のGPS\n使用後のバッテリー',
  batteryAfterFootnote: 'テリー',
  t247Comfort: 'いつでも快適\nかつ超軽量',
  t247ComfortText: 'PACE 3は洗練されたボティを持ちつつも超軽量。装着中も気になる事がなく、昼夜を問わず一日中快適に着用できます。',
  followYourOwnPath: '最軽量モデルでナビ搭載',
  followYourOwnPathText: 'COROSのナビゲーション機能を活用して、迷うことなく仲間と駆け抜けよう！',
  nextGenerationGps: '次世代\nGPS技術',
  nextGenerationGpsText: '再設計されてオプションのデュアル周波数を備えた衛星チップは、ニューヨークやシカゴのような高層ビル群が立ち並ぶ大都市においてもGPSデータより正確に取得できます。',
  lookGood: 'スタイルごとに\n機能性を選ぶ',
  lookGoodText: '手首とウォッチとの相性は人それぞれです。PACE 3には高品質かつスタイリッシュな\nシリコンバンドとナイロンバンドの2種類からお好みのバンドが選べます。',
  lookGoodFeatures1: ['シリコン', '速乾性', 'お手入れ簡単', '耐久性'],
  lookGoodFeatures2: ['ナイロン', '通気性', '軽量性', '快適性'],
  accurateActivityModes: '正確かつ幅広い\nアクティビティ\nモード',
  accurateActivityModesText: 'PACE 3はラン、バイク、スイム、筋トレ、トレイルラン、スキーなど幅広いアクティビティモードで正確なデータを提供します。',
  routePlanningMadeEasy: '簡単なルート作成',
  routePlanningMadeEasyText: 'COROSアプリのルートページで目的地を設定して自分好みのルートを簡単に作成でき、PACE 3にすぐに同期できます。',
  neverMissABeat: '高精度の心拍数',
  neverMissABeatText: '睡眠データの測定、SpO2、トレーニング時の強度など、PACE 3に搭載されている\n次世代光学式心拍センサーは、手首から得られる高精度のデータを提供します。',
  neverMissABeatFeatures: ['5つのLEDライト', '4つの光検出器', '保護用ガラス', '光学式パルスオキシメーター'],
  trainingDoesntEndAtBedtime: 'リカバリーは\nトレーニングの\n一部',
  trainingDoesntEndAtBedtimeText: '快適さ、正確なセンサー、優れたバッテリー寿命だけではなく、PACE 3はあなたの睡眠データをモニタリングするのに最適です。',
  trainingDoesntEndAtBedtimeFeatures: '覚醒、レム睡眠、浅い睡眠、深い睡眠の睡眠データのモニタリング',
  trainingDoesntEndAtBedtimeFeatures2: '安静時心拍数も正確に測定可能',
  alwaysSeeTheBrightSide: '常に明るい画面',
  alwaysSeeTheBrightSideFeatures: ['強い日差しの状況下でも視認性が良い半透明ディスプレイ', '1.2インチ常時点灯ミネラルガラスディスプレイ', '直感的な操作が可能なタッチスクリーン', 'ナイトモードを活用すれば暗いところでも見やすい'],
  sweatSwimShower: 'シャワー\n水泳\n汗',
  sweatSwimShowerText: 'PACE 3は5ATMの防水性能を備えており、\n水に濡れても問題無しです。',
  moreThanAWatch: 'あなたのトレーニング\nをさらにサポート',
  moreThanAWatchText: 'PACE 3を使い始めると、COROSのトレーニングシステムを無料で\n利用することができます。',
  trainingPlansAndWorkouts: 'トレーニングプラン',
  trainingPlansAndWorkoutsText: '5kmからウルトラマラソンまで、あなたの目標達成に役立つトレーニングプランやワークアウトメニューを無料でダウンロード可能。（英語のみ）',
  corosCoaches: 'COROSコーチ',
  corosCoachesText: 'コーチからのアドバイスを参考にしましょう。エキスパートな\nコーチたちがあなたを個別指導します。（英語のみ）',
  trainingHub: 'TRAINING HUB',
  trainingHubText: 'COROSが開発に注力している先進的なトレーニング分析ツールです。\nエリウド・キプチョゲが所属するNN RUNNING TEAMも採用して、\nトレーニングデータを通じてコーチと直接のコミュニケーションが\nできます。',
  beyondYourTraining: 'トレーニング以外の便利な機能',
  beyondYourTrainingText: 'Strava、Nike Run Club、Apple Healthなどのフィットネスアプリとの同期が可能。メールや電話の着信通知設定のカスタマイズ。スマートフォンが見つからない時に便利な「携帯を探す」機能。GoProやInsta360といったアクションカメラのウォッチでの操縦機能。',
  whatsInTheBox: 'WHAT’S IN THE BOX',
  chargingCable: '充電ケーブル',
  watchBand: 'バンド',
  shareTitle: 'COROS PACE 3 GPS Sport Watch',
  shareDesc: 'ランニングやトライアスロンなどスピードを求める方向け。',
  homeProductPageDesc: 'ランニングやトライアスロン\nなどスピードを求める方向け',
  watchInfoHeader: 'GPS SPORT WATCH',
  weight: '重量（ナイロンバンド装着）',
  width: '厚さ',
  inStandardGpsMode: '*標準フルGPS',
  trainingPlansAndWorkoutsLinks1Word: '',
  trainingPlansAndWorkoutsLinks2Word: '',
  corosCoachesLinksWord: '',
  trainingPlansAndWorkoutsLinks1Link: '',
  trainingPlansAndWorkoutsLinks2Link: '',
  corosCoachesLinksLink: '',
  mobile_intro: '妥協のない\n超軽量モデル',
  mobile_introText: 'GPSウォッチの業界最軽量を謳った前作のPACE 2から、あらゆる面が改良されたPACE 3は、引き続き軽量かつ快適。そして、先進的なテクノロジーを搭載しており高精度のデータを提供します。また、業界をリードするCOROSのトレーニングソフトウェアを搭載しており、トレーニングとリカバリーの両面からトラッキング、モニタリングが可能です。COROS PACE 3はあなたの可能性を引き上げます。',
  mobile_goTheDistance: 'もっと遠くその先へ',
  mobile_goTheDistanceText: 'PACE 3はより長く使えるように前作よりバージョンアップ。充電時間を最小限に抑え、バッテリー容量を拡大するように設計されました。充電頻度も減らせ、頻繁に電池残量の心配をする必要はありません。',
  mobile_batteryAfter: '10時間のGPS\n使用後のバッテリー',
  mobile_batteryAfterFootnote: 'テリー',
  mobile_t247Comfort: 'いつでも快適\nかつ超軽量',
  mobile_t247ComfortText: 'PACE 3は洗練されたボティを持ちつつも超軽量。装着中も気になる事がなく、昼夜を問わず一日中快適に着用できます。',
  mobile_followYourOwnPath: '最軽量モデルでナビ搭載',
  mobile_followYourOwnPathText: 'COROSのナビゲーション機能を活用して、迷うことなく仲間と駆け抜けよう！',
  mobile_nextGenerationGps: '次世代GPS技術',
  mobile_nextGenerationGpsText: '再設計されてオプションのデュアル周波数を備えた衛星チップは、ニューヨークやシカゴのような高層ビル群が立ち並ぶ大都市においてもGPSデータより正確に取得できます。',
  mobile_lookGood: 'スタイルごとに機能性を選ぶ',
  mobile_lookGoodText: '手首とウォッチとの相性は人それぞれです。PACE 3には高品質かつスタイリッシュなシリコンバンドとナイロンバンドの2種類からお好みのバンドが選べます。',
  mobile_lookGoodFeatures1: ['シリコン', '速乾性', 'お手入れ簡単', '耐久性'],
  mobile_lookGoodFeatures2: ['ナイロン', '通気性', '軽量性', '快適性'],
  mobile_accurateActivityModes: '正確かつ幅広い\nアクティビティモード',
  mobile_accurateActivityModesText: 'PACE 3はラン、バイク、スイム、筋トレ、トレイルラン、スキーなど幅広いアクティビティモードで正確なデータを提供します。',
  mobile_routePlanningMadeEasy: '簡単なルート作成',
  mobile_routePlanningMadeEasyText: 'COROSアプリのルートページで目的地を設定して自分好みのルートを簡単に作成でき、PACE 3にすぐに同期できます。',
  mobile_neverMissABeat: '高精度の心拍数',
  mobile_neverMissABeatText: '睡眠データの測定、SpO2、トレーニング時の強度など、PACE 3に搭載されている次世代光学式心拍センサーは、手首から得られる高精度のデータを提供します。',
  mobile_neverMissABeatFeatures: ['5つのLEDライト', '4つの光検出器', '保護用ガラス', '光学式パルスオキシメーター'],
  mobile_trainingDoesntEndAtBedtime: 'リカバリーは\nトレーニングの一部',
  mobile_trainingDoesntEndAtBedtimeText: '快適さ、正確なセンサー、優れたバッテリー寿命だけではなく、PACE 3はあなたの睡眠データをモニタリングするのに最適です。',
  mobile_trainingDoesntEndAtBedtimeFeatures: '覚醒、レム睡眠、浅い睡眠、深い睡眠の睡眠データのモニタリング',
  mobile_trainingDoesntEndAtBedtimeFeatures2: '安静時心拍数も正確に測定可能',
  mobile_alwaysSeeTheBrightSide: '常に明るい画面',
  mobile_alwaysSeeTheBrightSideFeatures: ['強い日差しの状況下でも視認性が良い半透明ディスプレイ', '1.2インチ常時点灯ミネラルガラスディスプレイ', '直感的な操作が可能なタッチスクリーン', 'ナイトモードを活用すれば暗いところでも見やすい'],
  mobile_sweatSwimShower: 'シャワー、水泳、汗',
  mobile_sweatSwimShowerText: 'PACE 3は5ATMの防水性能を備えており、水に濡れても問題無しです。',
  mobile_moreThanAWatch: 'あなたのトレーニングをさらにサポート',
  mobile_moreThanAWatchText: 'PACE 3を使い始めると、COROSのトレーニングシステムを無料で利用することができます。',
  mobile_trainingPlansAndWorkouts: 'トレーニングプラン',
  mobile_trainingPlansAndWorkoutsText: '5kmからウルトラマラソンまで、あなたの目標達成に役立つトレーニングプランやワークアウトメニューを無料でダウンロード可能。（英語のみ）',
  mobile_corosCoaches: 'COROSコーチ',
  mobile_corosCoachesText: 'コーチからのアドバイスを参考にしましょう。エキスパートなコーチたちがあなたを個別指導します。（英語のみ）',
  mobile_trainingHub: 'TRAINING HUB',
  mobile_trainingHubText: 'COROSが開発に注力している先進的なトレーニング分析ツールです。エリウド・キプチョゲが所属するNN RUNNING TEAMも採用して、トレーニングデータを通じてコーチと直接のコミュニケーションができます。',
  mobile_beyondYourTraining: 'トレーニング以外の便利な機能',
  mobile_beyondYourTrainingText: 'Strava、Nike Run Club、Apple Healthなどのフィットネスアプリとの同期が可能。メールや電話の着信通知設定のカスタマイズ。スマートフォンが見つからない時に便利な「携帯を探す」機能。GoProやInsta360といったアクションカメラのウォッチでの操縦機能。',
  mobile_weight: '重量',
  mobile_width: '厚さ',
  mobile_inStandardGpsMode: '*標準フルGPS'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pace3_ek.js
/* harmony default export */ const jp_pace3_ek = ({
  introText: 'ランニングの世界において、エリウド・キプチョゲは「マラソンの絶対王者」と言われています。\n彼は数多くの記録を打ち立て、次の世代のランナーたちの新たな基準を作りました。\n今回、COROSはエリウド・キプチョゲの伝説的な実績や彼が掲げる夢を祝福するために\nCOROS PACE 3の限定モデルを作りました。',
  dream: 'エリウドの夢',
  dreamText: '走るスピードの速さに関係なく、ランニングが\nもたらす良い効果をエリウドは信じています。\n健康や幸福感を高めるだけでなく、ランニング\nは私たちの人生を豊かにし、私たちの距離感を\n縮めることができます。どこにいても、\nA RUNNING WORLD（ランニングワールド）に\nいることで、より良い世界を実現することがで\nきます。',
  words: ['ランニングワールドは健康的な世界です。', 'ランニングワールドは豊かな世界です。', 'ランニングワールドは平和な世界です。', 'ランニングワールドは楽しい世界です。', '私の夢は、このランニングワールドを実現することです。'],
  inspiredByHome: '「HOME」に\nインスパイアされた',
  inspiredByHomeText: 'エリウドがいつもトレーニングを行っている、彼が「家」と呼ぶ場所に\n敬意を示し、ケニアの国旗の配色や伝統的なジオメトリックなデザイン\nとなっています。',
  trainLikeAPro: 'プロアスリート\nのような\nトレーニング',
  trainLikeAProText: 'COROS PACE 3 Eliud Kipchoge Editionを使用\nすると、COROSのトレーニングソリューショ\nンが全て無料で利用可能です。COROSは多く\nの機能とハードウェアの仕様。\nまるで、エリウドといったエリートアスリー\nトが世界記録を破るように、あなたををサポ\nートします。',
  clickToLearnMore: 'COROS PACE 3の詳細について',
  yourBestTrainingPartner: 'あなたのベストなトレーニング\nパートナー',
  iconsText: ['超軽量', 'ロングバッテリー', '高精度のGPS', '豊富な\nアクティビティモード　', '先進的なセンサー', 'トレーニングを\nフルサポート'],
  limitedRelease: '限定発売',
  limitedReleaseText: 'COROS PACE 3 Eliud Kipchoge Editionはワールドワイドな限定生産商品です。エリウドのように、\nあなたの腕にこの歴史の一部を残したい場合は、お早めにお買い求めください。',
  mobile_introText: 'ランニングの世界において、エリウド・キプチョゲは「マラソンの絶対王者」と言われています。彼は数多くの記録を打ち立て、次の世代のランナーたちの新たな基準を作りました。今回、COROSはエリウド・キプチョゲの伝説的な実績や彼が掲げる夢を祝福するためにCOROS PACE 3の限定モデルを作りました。',
  mobile_dream: 'エリウドの夢',
  mobile_dreamText: '走るスピードの速さに関係なく、ランニングがもたらす良い効果をエリウドは信じています。健康や幸福感を高めるだけでなく、ランニングは私たちの人生を豊かにし、私たちの距離感を縮めることができます。どこにいても、A RUNNING WORLD（ランニングワールド）にいることで、より良い世界を実現することができます。',
  mobile_words: ['ランニングワールドは健康的な世界です。', 'ランニングワールドは豊かな世界です。', 'ランニングワールドは平和な世界です。', 'ランニングワールドは楽しい世界です。', '私の夢は、このランニングワールドを実現することです。'],
  mobile_inspiredByHome: '「HOME」に\nインスパイアされた',
  mobile_inspiredByHomeText: 'エリウドがいつもトレーニングを行っている、\n彼が「家」と呼ぶ場所に敬意を示し、ケニア\nの国旗の配色や伝統的なジオメトリックな\nデザインとなっています。',
  mobile_trainLikeAPro: 'プロアスリートのようなトレーニング',
  mobile_trainLikeAProText: 'COROS PACE 3 EK Editionを使用すると、COROSのトレーニングソリューションが全て無料で利用可能です。COROSは多くの機能とハードウェアの仕様。まるで、エリウドといったエリートアスリートが世界記録を破るように、あなたををサポートします。',
  mobile_clickToLearnMore: 'COROS PACE 3の詳細について',
  mobile_yourBestTrainingPartner: 'あなたのベスト\nなトレーニング\nパートナー',
  mobile_iconsText: ['超軽量', 'ロングバッテリー', '高精度のGPS', '豊富な\nアクティビティ', '先進的なセンサー', 'トレーニングを\nフルサポート'],
  mobile_limitedRelease: '限定発売',
  mobile_limitedReleaseText: 'COROS PACE 3 Eliud Kipchoge Editionはワールドワイドな限定生産商品です。エリウドのように、あなたの腕にこの歴史の一部を残したい場合は、お早めにお買い求めください。',
  shareTitle: 'COROS PACE 3 GPS Sport Watch Eliud Kipchoge Edition',
  shareDesc: 'ランニングやトライアスロンなどスピードを求める方向け。',
  productNameShort: 'COROS PACE 3 EK',
  productMenuTitle: 'COROS PACE 3 Eliud Kipchoge Edition'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/pod2_2024.js
/* harmony default export */ const jp_pod2_2024 = ({
  intro: 'GPSの限界を超える\nランニングの実現',
  introText: '軽量かつ防水に優れたCOROS POD 2 は、脚部や体の動きを\nもとに高精度のランニング指標を提供するセンサーです。 \nCOROSウォッチに接続して、リアルタイムペースの把握、\n練習後のトレーニング評価、ランニングフォーム分析など、\n走行中や練習後に最適な情報を得ることができます。',
  allAboutAccuracy: '精度がより向上',
  allAboutAccuracyText: 'COROS POD 2はGPSウォッチの従来の課題であったGPS信号の弱さやデータ受信の遅延、衛星の乱れといった問題を解決します。\n脚部の動きを検知することでデータの精度を向上させ、リアルタイムペースをすぐに把握することで、\nより効率的なトレーニングをサポートします。',
  sensitiveInstantPace: '瞬時に得られる\nリアルタイムペース',
  sensitiveInstantPaceText: 'COROS POD 2に搭載された高性能の加速度\nセンサーによって脚部から走行データを取得\nし、ウォッチの画面により正確なリアルタイ\nムペースを表示します。ペースアラート内蔵\nのCOROS POD 2とCOROSウォッチを接続す\nると、手首のセンサーに基づいたウォッチ\nの最大10秒のGPS遅延に対してほぼリアルタ\nイムでペースが定まり、GPS遅延を気にする\nことがなくなります。',
  accurateIndoorData: '室内では\nより高精度',
  accurateIndoorDataText: 'GPSのテクノロジーは通常、トレッドミルで\nのランニングに適応しないので、走行距離や\nペースを正確に反映できるウォッチはありま\nせん。COROS POD 2 は走行中の脚部の動き\nを3次元(3D)プロットすることでストライド\n長の補正値を算出し、トレッドミルや室内\nトラックでの走行距離も算出するので、こ\nの問題を解決します。',
  preciseOnTheHills: '山間部でも\nより正確',
  preciseOnTheHillsText: '出力ペースはCOROS独自の指標で、坂道での\nランニング時の努力度を平地であればどれぐ\nらいのペースなのか、という指標で可視化し\nます。COROS POD 2からCOROSウォッチに\nリアルタイムで出力ペースといったデータ\nを共有することで、ランニングデータをよ\nり高精度にします。\n※出力ペースについてはこちらでご参照くだ\nさい。',
  preciseOnTheHillsTextLinkText: 'こちら',
  preciseOnTheHillsTextLink: 'https://jp.coros.com/stories/coros-metrics1/c/%E5%87%BA%E5%8A%9B%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E3%83%91%E3%83%BC%E3%82%BD%E3%83%8A%E3%83%A9%E3%82%A4%E3%82%BA%E5%8C%96%E3%81%95%E3%82%8C%E3%82%8B',
  understandYourRunningForm: '自分のランニング\nフォームを確認',
  understandYourRunningFormText: 'あなたはピッチ / ストライド走法どちらですか？\nCOROS POD 2を腰に付けて走ると、ランニングフォー\nムの簡単なテストを行うことができます。このテスト\n結果をもとに走技術を磨き、ランニングエコノミーの\n向上を目指しましょう。\n※ランニングフォームテストの詳細についてはこちらで\nご参照ください。',
  understandYourRunningFormTextLinkText: 'こちら',
  understandYourRunningFormTextLink: 'https://support.coros.com/hc/en-us/articles/22933404044564-Running-Form-Test',
  monitorOutsideTemperature: 'その場所の温度を検知',
  monitorOutsideTemperatureText: 'COROS POD 2はランニング中の気温を記録します。走行\n中の暑さ/寒さを正確に把握することができ、異なる気候\nや季節でトレーニングを行う際に、ランニングデータを\nより細かく分析できます。',
  simpleSecure: '安全で簡単な操作',
  simpleSecureText: 'COROS POD 2は軽量かつ、洗練されたデザインで操作も簡単。\n長時間のランニングにも対応し、接地時間や左右差など高精度のランニング指標を提供します。',
  longBatteryLife: '圧倒的なバッテリー\n稼働時間',
  longBatteryLifeText: 'COROS POD 2には25時間の連続使用が可能なロングバッテリ\nーが搭載されています。\nさらに、COROS POD 2のフル充電が5回行えるポータブル充電\nドックを利用すれば、長期の外出中でも バッテリー残量を心\n配することはないでしょう。',
  data1: '25',
  data1Unit: '時間',
  data1Text: '本体のみ',
  data2: '150',
  data2Unit: '時間',
  data2Text: 'ドックを含め',
  lightweightWeatherproof: '軽量かつ高い耐久性',
  lightweightWeatherproofText: '重さはわずか5.6gと、トレーニングやレース中に装着している 事を忘れるぐらいの軽さです。 \nロードでも山でもCOROS POD 2は氷点下から高温まで（-10°C～60°C） の動作が可能で、3ATMの防水性も備えています。',
  data3: '5.6',
  data3Unit: 'ｇ',
  data3Text: 'COROS POD２の重量',
  data4: '3',
  data4Unit: 'ATM',
  data4Text: '防水性能',
  setupMadeEasy: '簡単に装着できる',
  setupMadeEasyText: 'COROS POD 2はシューズや腰に簡単に装着できます。\nまた、使用していない時は待機状態となってバッテリーを保ちます。',
  pair: 'PAIR',
  pairText: 'COROS POD 2をCOROSアプリ\nに追加し、ウォッチと自動的\nにペアリングします。',
  clip: 'CLIP',
  clipText: 'シューズや腰に装着。走った後、\nシューズにつけたままでもOKです。',
  go: 'GO',
  goText: 'ランモードを開始して瞬時にリアル\nタイムの指標を確認することができ\nます。',
  box: "WHAT'S IN THE BOX",
  boxText: 'COROS POD 2にはシューズ装着用クリップ、シリコン製の腰部装着用\nクリップ、ポータブル充電ドック、充電ケーブル、キャリーケースが\n付属されます。',
  generalFaQs: 'COROS POD 2について',
  generalFaQsLink: 'https://faq.coros.com/help/d/POD%202/faq/63d4ff84248d6696be61572e?locale=ja-JP',
  runningFormTestFaQs: 'ランニングフォームテストについて',
  runningFormTestFaQsLink: 'https://support.coros.com/hc/en-us/articles/22933404044564-Running-Form-Test',
  frequentlyAskedQuestions: 'よくある質問',
  mobile_intro: 'GPSの限界を超える\nランニングの実現',
  mobile_introText: '軽量かつ防水に優れたCOROS POD 2 は、\n脚部や体の動きを基に高精度のランニング指標を提供\nするセンサーです。\nCOROSウォッチに接続して、リアルタイムペースの把握、練習後のトレーニング評価、ランニングフォーム分析など、走行中や練習後に最適な情報を得ることができます。',
  mobile_allAboutAccuracy: '精度の高さが重要',
  mobile_allAboutAccuracyText: 'COROS POD 2はGPSウォッチの従来の課題であった\nGPS信号の弱さやデータ受信の遅延、衛星の乱れと\nいった問題を解決します。\n脚部の動きを検知することでデータの精度を向上させ、\nリアルタイムペースをすぐに把握することで、より効\n率的なトレーニングをサポートします。',
  mobile_sensitiveInstantPace: '瞬時に得られる\nリアルタイムペース',
  mobile_sensitiveInstantPaceText: 'COROS POD 2に搭載された高性能の加速度センサーによ\nって脚部から走行データを取得し、ウォッチ画面により\n正確なリアルタイムペースを表示します。\nペースアラート内蔵のCOROS POD 2とCOROSのウォッ\nチを接続すると、手首のセンサーに基づいたウォッチ\nの最大10秒のGPS遅延に対してほぼリアルタイムでペ\nースが定まり、GPS遅延を気にすることがなくなります。',
  mobile_accurateIndoorData: '室内ではより高精度',
  mobile_accurateIndoorDataText: 'GPSのテクノロジーは通常、トレッドミルでのランニングに適応しないので、走行距離やペースを正確に反映できるウォッチはありません。\nCOROS POD 2 は走行中の脚部の動きを3次元（3D）プロットすることでストライド長の補正値を算出し、トレッドミルや室内トラックでの走行距離も算出するので、この問題を解決します。',
  mobile_preciseOnTheHills: '山間部でもより正確',
  mobile_preciseOnTheHillsText: '出力ペースはCOROS独自の指標で、坂道でのランニング時の努力度を平地であればどれぐらいのペースなのか、という指標で可視化します。\nCOROS POD 2からCOROSウォッチにリアルタイムで出力ペースといったデータを共有することで、ランニングデータをより高精度にします。\n*出力ペースについての詳細はこちらでご参照ください。',
  mobile_preciseOnTheHillsTextLinkText: 'こちら',
  mobile_preciseOnTheHillsTextLink: 'https://jp.coros.com/stories/coros-metrics1/c/%E5%87%BA%E5%8A%9B%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E3%83%91%E3%83%BC%E3%82%BD%E3%83%8A%E3%83%A9%E3%82%A4%E3%82%BA%E5%8C%96%E3%81%95%E3%82%8C%E3%82%8B',
  mobile_understandYourRunningForm: '自分のランニング\nフォームを理解しよう',
  mobile_understandYourRunningFormText: 'あなたはピッチ / ストライド走法どちらですか？\nCOROS POD 2を腰に付けて走ると、ランニングフォームの簡単なテストを行うことができます。\nこのテスト結果を基に走技術を磨き、ランニングエコノミーの向上を目指しましょう。\n*ランニングレベルテストの詳細についてはこちらでご参照ください。',
  mobile_understandYourRunningFormTextLinkText: 'こちら',
  mobile_understandYourRunningFormTextLink: 'https://support.coros.com/hc/en-us/articles/22933404044564-Running-Form-Test',
  mobile_monitorOutsideTemperature: 'その場所の温度を検知',
  mobile_monitorOutsideTemperatureText: 'COROS POD 2はランニング中の気温を記録します。\n走行中の暑さ/寒さを正確に把握することができ、異なる気候や季節でトレーニングを行う際に、ランニングデータをより細かく分析できます。',
  mobile_simpleSecure: '安全で簡単な操作',
  mobile_simpleSecureText: 'COROS POD 2は軽量かつ、洗練されたデザインで操作も簡単。長時間のランニングにも対応し、接地時間や左右差など高精度のランニング指標を提供します。',
  mobile_longBatteryLife: '圧倒的なバッテリー\n稼働時間',
  mobile_longBatteryLifeText: 'COROS POD 2には25時間の連続使用が可能なロングバッテリーが搭載されています。\nさらに、COROS POD 2のフル充電が5回行えるポータブル充電ドックを利用すれば、長期の外出中でもバッテリー残量を心配することはないでしょう。',
  mobile_data1: '25',
  mobile_data1Unit: '時間の連続使用が可能',
  mobile_data1Text: '1回の充電',
  mobile_data2: '最大150',
  mobile_data2Unit: '時間の連続稼働',
  mobile_data2Text: '充電ドック付き',
  mobile_lightweightWeatherproof: '軽量かつ高い耐久性',
  mobile_lightweightWeatherproofText: '重さはわずか5.6gと、トレーニングやレース中に装着している事を忘れるぐらいの軽さです。\nロードでも山でもCOROS POD 2は氷点下から高温まで（-10°C～60°C）の動作が可能で、3ATMの防水性も備えています。',
  mobile_data3: '5.6',
  mobile_data3Unit: 'ｇ',
  mobile_data3Text: 'COROS POD２の重量',
  mobile_data4: '3',
  mobile_data4Unit: 'ATM',
  mobile_data4Text: '防水性能',
  mobile_setupMadeEasy: '簡単に装着できる',
  mobile_setupMadeEasyText: 'COROS POD 2はシューズや腰に簡単に装着できます。\nまた、使用していない時は待機状態となってバッテリーを保ちます。',
  mobile_pair: 'PAIR',
  mobile_pairText: 'COROS POD 2をCOROSアプリ\nに追加し、ウォッチと自動的\nにペアリングします。',
  mobile_clip: 'CLIP',
  mobile_clipText: 'シューズや腰に装着。走った後、\nシューズにつけたままでもOKです。',
  mobile_go: 'GO',
  mobile_goText: 'ランモードを開始して瞬時にリアル\nタイムの指標を確認することができ\nます。',
  mobile_box: "WHAT'S IN THE BOX",
  mobile_boxText: 'COROS POD 2にはシューズ装着用クリップ、シリコン製\nの腰部装着用クリップ、ポータブル充電ドック、充電ケ\nーブル、キャリーケースが付属されます。',
  mobile_generalFaQs: 'COROS POD 2のよくある質問',
  mobile_generalFaQsLink: 'https://support.coros.com/hc/en-us/articles/10351744085012-COROS-POD-2-FAQ-s',
  mobile_runningFormTestFaQs: 'ランニングフォームテストについて',
  mobile_frequentlyAskedQuestions: 'よくある質問',
  shareTitle: 'COROS PACE 3 GPS Sport Watch Eliud Kipchoge Edition',
  shareDesc: 'ランニングやトライアスロンなどスピードを求める方向け。',
  productNameShort: 'COROS POD 2',
  productMenuTitle: 'COROS PACE 3 Eliud Kipchoge Edition',
  faq: 'FAQ'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/sasha.js
/* harmony default export */ const jp_sasha = ({
  bannerTitle: 'COROS APEX 2 & PACE 2',
  section: {
    brief: {
      title: "\u52C7\u6C17\u3092\u51FA\u3057\u3066\u3001\n      \u58C1\u3092\u4E57\u308A\u8D8A\u3048\u3088\u3046",
      desc: "\u30D7\u30ED\u30AF\u30E9\u30A4\u30DE\u30FC\u306ESasha Digiulian(\u30B5\u30FC\u30B7\u30E3\u30FB\u30C7\u30A3\u30B8\u30E5\u30EA\u30A2\u30F3)\u306F\n      \u82E5\u304F\u3057\u3066\u3059\u3067\u306B\u5927\u304D\u306A\u6210\u529F\u3092\u53CE\u3081\u3066\u3044\u307E\u3059\u3002\n      \u5F7C\u5973\u306F6\u6B73\u304B\u3089\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u30B8\u30E0\u306B\u901A\u3044\u300117\u6B73\u3067\u5168\u7C73\u9078\u624B\u6A29\u3092\u521D\n      \u512A\u52DD\u3002\u305D\u3057\u3066\u300118\u6B73\u3067\u4E16\u754C\u738B\u8005\u306E\u79F0\u53F7\u3092\u5F97\u307E\u3057\u305F\u3002"
    },
    "abstract": {
      desc: "\u7537\u6027\u512A\u4F4D\u306E\u30B9\u30DD\u30FC\u30C4\u754C\u306B\u304A\u3044\u3066\u3001\u30B5\u30FC\u30B7\u30E3\u306F\u5973\u5B50\u30AF\u30E9\u30A4\u30DE\u30FC\u306E\u5148\n      \u99C6\u8005\u3068\u3057\u3066\u6D3B\u8E8D\u3057\u3001\u30A2\u30B9\u30EA\u30FC\u30C8\u3068\u3057\u3066\u3060\u3051\u3067\u306A\u304F\u8D77\u696D\u5BB6\u3001\u4F5C\u5BB6\u3001\n      \u74B0\u5883\u4FDD\u8B77\u6D3B\u52D5\u5BB6\u3068\u3057\u3066\u3082\u69D8\u3005\u306A\u696D\u754C\u306B\u8CA2\u732E\u3057\u3066\u3044\u307E\u3059\u3002\n      \u5FC3\u306B\u6C7A\u3081\u305F\u3053\u3068\u306F\u4F55\u3067\u3082\u9054\u6210\u53EF\u80FD\u3067\u3042\u308B\u3068\u3044\u3046\u3053\u3068\u3092\u793A\u3057\u3001\u5F7C\u5973\n      \u306F\u7279\u306B\u82E5\u3044\u5973\u6027\u305F\u3061\u3092\u9F13\u821E\u3057\u7D9A\u3051\u3066\u3044\u308B\u306E\u3067\u3059\u3002"
    },
    inspire: {
      title: '強い気持ちで高みを目指す',
      desc: "COROS x Sasha \u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u306F\u3001APEX 2 \u3068 PACE 2\u306B\u9069\u5FDC\u3057\u3066\u3044\u307E\u3059\u3002\n      \u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u306F\u5F7C\u5973\u304C\u597D\u304D\u306A\u8272\u304B\u3089\u30A4\u30F3\u30B9\u30D1\u30A4\u30A2\u3055\u308C\u3066\u304A\u308A\u3001\u660E\u308B\u304F\u30DD\u30B8\u30C6\u30A3\u30D6\u306A\u8272\u5408\u3044\u306E\u30D4\u30F3\u30AF\u3067\u3059\u3002",
      subDesc: "\u30D0\u30F3\u30C9\u306E\u5916\u5074\u306B\u306F\u30AF\u30E9\u30A4\u30DF\u30F3\u30B0\u30ED\u30FC\u30D7\u304B\u3089\u30A4\u30F3\u30B9\u30D1\u30A4\u30A2\u3055\u308C\u305F\u67C4\u304C\u63CF\u304B\u308C\u3001\n      \u30B5\u30FC\u30B7\u30E3\u306E\u30E2\u30C3\u30C8\u30FC\u3067\u3042\u308B\u300CTAKE THE LEAD\u300D\u3068\u7E4B\u304C\u3063\u3066\u3044\u307E\u3059\u3002\n      \u307E\u305F\u3001\u30D0\u30F3\u30C9\u306E\u5185\u5074\u306B\u306F\u30B5\u30FC\u30B7\u30E3\u304C\u4F4F\u3080\u30C8\u30EC\u30FC\u30CB\u30F3\u30B0\u62E0\u70B9\u306E\u30B3\u30ED\u30E9\u30C9\u5DDE\u30FB\u30D5\u30E9\u30C6\u30A3\u30ED\u30F3\u5C71\u8108\u304C\u63CF\u304B\u308C\u3066\u3044\u307E\u3059\u3002"
    },
    shop: {
      title: "APEX 2 COROS x Sasha \u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u3092\u624B\u306B\u5165\u308C\u307E\u3057\u3087\u3046\u3002",
      desc: "APEX 2\u3092\u304A\u8CB7\u3044\u4E0A\u3052\u3044\u305F\u3060\u304F\u3068\u3001\u671F\u9593\u9650\u5B9A\u3067COROS x Sasha \u30CA\u30A4\u30ED\u30F3\u30D0\u30F3\u30C9\u3092\u7121\u6599\u3067\u30D7\u30EC\u30BC\u30F3\u30C8\u3057\u307E\u3059\u3002"
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/vertix2s.js
/* harmony default export */ const jp_vertix2s = ({
  intro: '目標の達成に\n最高な装備',
  introText: 'COROS VERTIXシリーズは、世界最高クラスの登頂者や\nウルトラランナーなど最高のパフォーマンスを求める人\nに最適のモデルです。最新のCOROS VERTIX 2Sは、新し\nい夢の実現のために必要な機能を提供します。',
  easyToOperate: '簡単な操作',
  easyToOperateText: '直感的に操作ができるデジタルダイヤルボタン、\nたとえ厚手のグローブを着用した状態でも操作\nを簡単に行うことができます。',
  madeToBeTough: '頑丈なボディ',
  madeToBeToughText: '耐久性が高く傷つきにくいサファイアスクリーンと\nPVDコーティングを施したチタンベゼル。スポーツ\nやアドベンチャーなどのあらゆるシーンで壊れない\nように設計されています。',
  builtForTheExtreme: '厳しい環境下でも動作可能',
  builtForTheExtremeText: 'COROS VERTIX 2Sは、-30°C～50°Cの環境下で動作し、10ATM\nの防水性能で水深100ｍまでの水圧に耐えることができます。',
  powerToEndure: '超ロングバッテリー',
  powerToEndureText: 'VERTIXシリーズは「超ロングバッテリー」として知られています。たった1回の\nフル充電で、エベレスト登頂達成者や400km以上のウルトラレース完走者など、\n数え切れないほどの偉業を後押ししてきました。',
  pinPointAccuracy: '随所を網羅する\n高精度GPS',
  pinPointAccuracyText: 'COROSは業界で唯一、マルチピッチクライミングに特化し\nたGPSアルゴリズムを持つウォッチブランドです。\n二周波GPSを活用して山の中でも、狭い渓谷や切り立った\n岩壁でも、正確な位置情報を記録します。',
  effortlessNavigation: '快適なナビゲーション',
  effortlessNavigationText: 'COROSのルート作成機能とナビゲーション機能を活用\nすると、オンラインでもオフラインでもルート作成から\n目的地へのナビゲーションが円滑に進みます。また、\n新機能の「ミラーリング機能」をナビゲーション時に使\n用することで、ウォッチだけでなくスマートフォンでも\nでもルート確認が容易に行うことができ、視認性を高め\nることができます。',
  fitForEverything: '細かなデータ分析',
  fitForEverythingText: '世界最高クラスのアスリートたちによって実証され\nたCOROSトレーニングソリューションは、あなた\nのトレーニングをサポートします。次世代型の光学\n式センサーが心拍数を記録し、貴重なトレーニング\nデータを蓄積します。\nまた、COROSアプリを活用すると、トレーニング\nの進捗状況のモニタリング、実用的な分析データ\nの確認などを通じて、最高のパフォーマンスに向け\nての計画性を高めることができます。',
  preparedForAnything: '備えあれば憂いなし',
  preparedForAnythingText: '荒天、高山病、暗闇、脱水症状といったハードな状況は\n大自然の冒険中で起こりうるリスクです。\nCOROS VERTIX 2Sは、これらに対する準備、情報収集、\nそして安全確保をサポートします。',
  readyForAdventure: '様々な\nアドベンチャー\nに対応',
  readyForAdventureText1: '各アクティビティモードが正確な\nデータ収集を可能にし、\n各スポーツの需要に合わせて特化\nされている機能を提供します。',
  readyForAdventureText2: 'COROS VERTIX 2Sは安全面、ルート作成、そして最高\nのパフォーマンスを続けるための幅広い機能が追加され\nました。あなたの次の冒険に向けての必需品となること\nでしょう。',
  ultraRunning: 'ウルトラマラソン\n標高\nチェックポイント\nコース離脱アラート\n補給アラート',
  climbing: 'クライミング\nロック、アイス、ミックスグレード\nインドアピッチ自動検出\nフラッシュ、レッドポイント、オンサイト記録\nワークアウトとトレーニングプラン作成',
  snowSports: 'ウィンタースポーツ\n自動ラップ検出\n距離、上昇/下降、スピード\nスキーツーリングの上昇/下降の自動検測',
  mountaineering: '登山\n血中酸素飽和度（SpO2）\nストームアラート\nスタートに戻るナビ機能\n日没・日の出までの時間',
  trackMoreThanTraining: 'リカバリーのトラッキング',
  trackMoreThanTrainingText: 'トレーニング効果はトレーニングとリカバリーの結果です。睡眠モニタリング、\n心拍変動（HRV）、ウェルネスチェックなどの機能を活用して、リカバリーを\nトラッキングすることで、故障や体調不良を予防しましょう。',
  offWristConvenience: '専用のカラビナ',
  offWristConvenienceText: 'クライミング上級者の要望をもとにして\n作られたCOROS第2世代のカラビナは、\n手首にウォッチを装着していない状況で\nもデータを記録することができます。\nCOROS VERTIX 2Sをしっかりと保護し\nたり、必要時にすぐに手が届く優れもの\nです。',
  performanceWithStyle: 'スタイリッシュなデザイン',
  performanceWithStyleText: 'COROS VERTIX 2Sはナイロンバンドとシリコンバンドが両方とも付属してお\nり、各自のニーズに合わせることができます。または、26mmのバンドに交換\nすることもできます。',
  nextLevelMetrics: 'より細かなデータ指標',
  nextLevelMetricsText: 'COROSの別売りアクセサリーと併用することで、GPSウォッチの機能がさらに\n格段とアップします。',
  hrm: 'COROS心拍センサー',
  pod2: 'COROS POD 2',
  sync_ConnectAndControl: 'サードパーティアプリとの同期\nスマホ接続、アクションカメラ操作',
  sync_ConnectAndControlText: 'Strava、Nike Run Club、Apple Health、Health Connectなど、\nサードパーティアプリと同期することができます。\nメールや電話の着信を確認したり、「携帯を探す」機能を使って\n置き忘れたデバイスを探したり、GoProやInsta360カメラを\nウォッチで操作することができます。',
  what_sInTheBox: "WHAT'S IN THE BOX",
  what_sInTheBoxText: '充電ケーブルやアクセサリーなどを収納でき\nる、リサイクル素材を使用したコンパクトな\nパッケージです。',
  trustedByThePros: 'プロ達からの絶大な信頼',
  trustedByTheProsText: 'COROSのVERTIXシリーズは、世界最高クラスのアスリートたち\nの夢をサポートしてきました。彼らの記事を読めば、あなたも\nインスピレーションを得ることができるかもしれません。',
  gpsAdventureWatch: 'GPS ADVENTURE WATCH',
  viewAll: 'VIEW ALL',
  close: '閉じる',
  temperatures: '-30°C\n50°C',
  power: 'バッテリー',
  viewMore: 'VIEW MORE',
  effortlessNavigationInfo1: ' ターンバイターン',
  effortlessNavigationInfo2: '標高',
  effortlessNavigationInfo3: 'チェックポイント',
  effortlessNavigationInfo4: '位置情報を保存',
  effortlessNavigationInfo5: '離脱アラート',
  preparedForAnythingInfo1: '補給\nアラート',
  preparedForAnythingInfo2: '日の出 /\n日の入り',
  preparedForAnythingInfo3: 'ストーム\nアラート',
  preparedForAnythingInfo4: '安全機能',
  preparedForAnythingInfo5: '標高\nモード',
  preparedForAnythingInfo6: 'ナイト\nモード',
  comingSoon: '安全機能：今後アップデート予定。',
  hrmText: '胸用の心拍ベルトに匹敵する高精度\nの心拍センサーです。快適な装着感\nで正確な心拍数を記録することがで\nきます。',
  pod2Text: 'ランニングフォームテストでフォーム\nの確認、トレッドミルでの練習など\nGPS信号の受信が難しい場合をカバー\n可能',
  fitFor1: 'トレーニング状態',
  fitFor2: 'ホームページ',
  fitFor3: 'トレーニング負荷',
  sleepTracking: '睡眠トラッキング',
  overnightHrv: 'HRV評価',
  wellnessCheck: 'ヘルススナップ\nショット',
  competitorGpsTrack: '通常GPSトラッキング',
  corosGpsTrack: 'COROS GPSトラッキング',
  seoTitle: 'COROS VERTIX 2S GPS Adventure Watch',
  seoDesc: '登山、ハイキングなどアウトドア アドベンチャーに最適。',
  tommyCaldwell: 'Tommy Caldwell',
  kilianJornet: 'Kilian Jornet',
  sallyMcRae: 'Sally McRae',
  readTheStory: '詳細を表示',
  tommyCaldwellBlog: 'https://us.coros.com/stories/athlete-stories/c/tommy-caldwell-the-ride-of-a-lifetime',
  sallyMcRaeBlog: 'https://us.coros.com/stories/athlete-stories/c/sally-mcrae-wins-the-grand-slam-of-200-mile-races',
  kilianJornetBlog: 'https://us.coros.com/stories/athlete-stories/c/back-to-start-kilian-jornet-navigates-off-mt-everest-amidst-tough-conditions',
  m_intro: '目標の達成に\n最高な装備',
  m_introText: 'COROS VERTIXシリーズは、世界最高クラス\nの登頂者やウルトラランナーなど最高の\nパフォーマンスを求める人に最適のモデル\nです。最新のCOROS VERTIX 2Sは、新しい\n夢の実現のために必要な機能を提供します。',
  m_easyToOperate: '簡単な操作',
  m_easyToOperateText: '直感的に操作ができるデジタル\nダイヤルボタン、\nたとえ厚手のグローブを着用し\nた状態でも操作を簡単に行うこ\nとができます。',
  m_madeToBeTough: '頑丈なボディ',
  m_madeToBeToughText: '耐久性が高く傷つきにくいサファイア\nスクリーンとPVDコーティングを施し\nたチタンベゼル。\nスポーツやアドベンチャーなどのあら\nゆるシーンで壊れないように設計され\nています。',
  m_builtForTheExtreme: '厳しい環境下でも\n動作可能',
  m_builtForTheExtremeText: 'COROS VERTIX 2Sは、-30°C～50°Cの環境\n下で動作し、10ATMの防水性能で水深100ｍ\nまでの水圧に耐えることができます。',
  m_powerToEndure: '超ロングバッテリー',
  m_powerToEndureText: 'VERTIXシリーズは「超ロングバッテリー」\nとして知られています。たった1回のフル\n充電で、エベレスト登頂達成者や400km以\n上のウルトラレース完走者など、数え切れ\nないほどの偉業を後押ししてきました。',
  m_pinPointAccuracy: '随所を網羅する\n高精度GPS',
  m_pinPointAccuracyText: 'COROSは業界で唯一、マルチピッチ\nクライミングに特化したGPSアルゴ\nリズムを持つウォッチブランドです。\n二周波GPSを活用して山の中でも、\n狭い渓谷や切り立った岩壁でも、正\n確な位置情報を記録します。',
  m_effortlessNavigation: '快適な\nナビゲーション',
  m_effortlessNavigationText: 'COROSのルート作成機能とナビゲーション\n機能を活用すると、オンラインでもオフ\nラインでもルート作成から目的地への\nナビゲーションが円滑に進みます。\nまた、新機能の「ミラーリング機能」を\nナビゲーション時に使用することで、\nウォッチだけでなくスマートフォンでも\nでもルート確認が容易に行うことができ、\n視認性を高めることができます。',
  m_fitForEverything: '細かな\nデータ分析',
  m_fitForEverythingText: '世界最高クラスのアスリートた\nちによって実証されたCOROS\nトレーニングソリューションは\n、あなたのトレーニングをサポ\nートします。次世代型の光学式\nセンサーが心拍数を記録し、貴\n重なトレーニングデータを蓄積\nします。\nまた、COROSアプリを活用する\nと、トレーニングの進捗状況の\nモニタリング、実用的な分析\nデータの確認などを通じて、最\n高のパフォーマンスに向けての\n計画性を高めることができます。',
  m_preparedForAnything: '備えあれば憂いなし',
  m_preparedForAnythingText: '荒天、高山病、暗闇、脱水症状といった\nハードな状況は大自然の冒険中で起こり\nうるリスクです。\nCOROS VERTIX 2Sは、これらに対する準\n備、情報収集、そして安全確保を\nサポートします。',
  m_readyForAdventure: '様々な\nアドベンチャー\nに対応',
  m_readyForAdventureText1: '各アクティビティモードが正確な\nデータ収集を可能にし、\n各スポーツの需要に合わせて特化\nされている機能を提供します。',
  m_readyForAdventureText2: 'COROS VERTIX 2Sは安全面、ルート作\n成、そして最高のパフォーマンスを続\nけるための幅広い機能が追加されまし\nた。あなたの次の冒険に向けての必需\n品となることでしょう。',
  m_ultraRunning: 'ウルトラ\nマラソン\n標高\nチェックポイント\nコース離脱アラート\n補給アラート',
  m_climbing: 'クライミング\nロック、アイス、ミックスグレード\nインドアピッチ自動検出\nフラッシュ、レッドポイント、オンサイト記録\nワークアウトとトレーニングプラン作成',
  m_snowSports: 'ウィンター\nスポーツ\n自動ラップ検出\n距離、上昇/下降、スピード\nスキーツーリングの上昇/下降の自動検測',
  m_mountaineering: '登山\n血中酸素飽和度（SpO2）\nストームアラート\nスタートに戻るナビ機能\n日没・日の出までの時間',
  m_trackMoreThanTraining: 'リカバリーの\nトラッキング',
  m_trackMoreThanTrainingText: 'トレーニング効果はトレーニングとリカバリ\nーの結果です。睡眠モニタリング、心拍変動\n（HRV）、ウェルネスチェックなどの機能を\n活用して、リカバリーをトラッキングするこ\nとで、故障や体調不良を予防しましょう。',
  m_offWristConvenience: '専用の\nカラビナ',
  m_offWristConvenienceText: 'クライミング上級者の要望を\nもとにして作られたCOROS\n第2世代のカラビナは、手首\nにウォッチを装着していない\n状況でもデータを記録するこ\nとができます。\nCOROS VERTIX 2Sをしっか\nりと保護したり、必要時にす\nぐに手が届く優れものです。',
  m_performanceWithStyle: 'スタイリッシュな\nデザイン',
  m_performanceWithStyleText: 'COROS VERTIX 2Sはナイロンバンドと\nシリコンバンドが両方とも付属して\nおり、各自のニーズに合わせること\nができます。または、26mmのバンド\nに交換することもできます。',
  m_nextLevelMetrics: 'より細かな\nデータ指標',
  m_nextLevelMetricsText: 'COROSの別売りアクセサリーと併用する\nことで、GPSウォッチの機能がさらに格\n段とアップします。',
  m_hrm: 'COROS\n心拍センサー',
  m_pod2: 'COROS POD 2',
  m_sync_ConnectAndControl: 'サードパーティ\nアプリとの同期\nスマホ接続、アク\nションカメラ操作',
  m_sync_ConnectAndControlText: 'Strava、Nike Run Club、Apple Health、\nHealth Connectなど、サードパーティ\nアプリと同期することができます。\nメールや電話の着信を確認したり、\n「携帯を探す」機能を使って置き忘れた\nデバイスを探したり、GoProやInsta360\nカメラをウォッチで操作することができ\nます。',
  m_what_sInTheBox: "WHAT'S IN THE BOX",
  m_what_sInTheBoxText: '充電ケーブルやアクセサリーなどを収納でき\nる、リサイクル素材を使用したコンパクトな\nパッケージです。',
  m_trustedByThePros: 'プロ達からの\n絶大な信頼',
  m_trustedByTheProsText: 'COROSのVERTIXシリーズは、世界最高\nクラスのアスリートたちの夢を\nサポートしてきました。彼らの記事を\n読めば、あなたもインスピレーション\nを得ることができるかもしれません。',
  m_gpsAdventureWatch: 'GPS ADVENTURE WATCH',
  m_viewAll: 'VIEW ALL',
  m_close: '閉じる',
  m_temperatures: '-30°C\n50°C',
  m_power: 'バッテリー',
  m_viewMore: 'VIEW MORE',
  m_effortlessNavigationInfo1: 'ターンバイターン',
  m_effortlessNavigationInfo2: '標高',
  m_effortlessNavigationInfo3: 'チェックポイント',
  m_effortlessNavigationInfo4: '位置情報を保存',
  m_effortlessNavigationInfo5: '離脱アラート',
  m_preparedForAnythingInfo1: '補給\nアラート',
  m_preparedForAnythingInfo2: '日の出 /\n日の入り',
  m_preparedForAnythingInfo3: 'ストーム\nアラート',
  m_preparedForAnythingInfo4: '安全機能',
  m_preparedForAnythingInfo5: '標高\nモード',
  m_preparedForAnythingInfo6: 'ナイト\nモード',
  m_comingSoon: '安全機能：今後アップデート予定。',
  m_hrmText: '胸用の心拍ベルトに匹敵する\n高精度の心拍センサーです。\n快適な装着感で正確な心拍数\nを記録することができます。',
  m_pod2Text: 'ランニングフォームテストで\nフォームの確認、トレッドミ\nルでの練習などGPS信号の受\n信が難しい場合をカバー可能',
  m_fitFor1: 'トレーニング状態',
  m_fitFor2: 'ホームページ',
  m_fitFor3: 'トレーニング負荷',
  m_sleepTracking: '睡眠トラッキング',
  m_overnightHrv: 'HRV評価',
  m_wellnessCheck: 'ヘルススナップ\nショット',
  m_competitorGpsTrack: '通常GPSトラッキング',
  m_corosGpsTrack: 'COROS GPSトラッキング',
  m_seoTitle: 'COROS VERTIX 2S GPS Adventure Watch',
  m_seoDesc: '登山、ハイキングなどアウトドア アドベンチャーに最適。',
  m_tommyCaldwell: 'Tommy Caldwell',
  m_kilianJornet: 'Kilian Jornet',
  m_sallyMcRae: 'Sally McRae',
  m_readTheStory: '詳細を表示',
  m_tommyCaldwellBlog: 'https://us.coros.com/stories/athlete-stories/c/tommy-caldwell-the-ride-of-a-lifetime',
  m_sallyMcRaeBlog: 'https://us.coros.com/stories/athlete-stories/c/sally-mcrae-wins-the-grand-slam-of-200-mile-races',
  m_kilianJornetBlog: 'https://us.coros.com/stories/athlete-stories/c/back-to-start-kilian-jornet-navigates-off-mt-everest-amidst-tough-conditions'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/batteryUnit.js
/* harmony default export */ const batteryUnit = ({
  continuous_gps_use_value: '{num}時間',
  daily_use_value: '{num}日間',
  power: 'バッテリー',
  daily_use: '日常使用',
  continuous_gps_use: 'フルGPS連続稼働',
  InstandardGPSmode: '*標準フルGPS'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/climb.js
/* harmony default export */ const climb = ({
  intro: 'クライマーのための\n先端テクノロジー結集',
  introText: 'トレーニングやジャーナリングは、クライマーにとって非常に重要であり、不可能とされてきたルートも可能になることができます。\n室内のボルダリングからエル・キャピタンでのクライミングまで、COROSはストレスの少ない操作性などクライマーのニーズに応えるテクノロジーを提供します。\n\nCOROSの様々な製品と機能が、クライミングやフィットネス向上にどのように役立つのか、さらに詳しくご紹介します。',
  climbingProducts: 'クライミング製品',
  climbingProductsText: 'どんなスタイルのユーザーでも活用できる、クライミング用のCOROS製品を紹介します。',
  vertix2: 'COROS VERTIX 2',
  vertix2Text: '「アドベンチャーウォッチ」COROS VERTIX 2は、過酷な地に足を踏み入れる冒険家のために設計されました。業界トップクラスのロングバッテリー、頑丈な耐久性。目指す冒険先がどこであっても、その一歩一歩に寄り添います。',
  viewDetail: '製品の詳細',
  carabiner: 'COROS VERTIX 2 \nカラビナ',
  carabinerText: 'VERTIX 2を手首から外して使用したいクライマーのために作られたCOROS第2世代のカラビナ。\n必要な時に、バックパックなど手が届く場所にウォッチを簡単に装着することができます。',
  apex2Pro: 'COROS APEX 2 Pro',
  apex2ProText: '軽量かつ、頑丈なボディと最新テクノロジーを搭載。クライマーに最適なニーズを満たします。ナイロンバンドなら、ウォッチを簡単に装着し固定できます。',
  hrm: 'COROS 心拍センサー',
  hrmText: '心拍数の計測は、体のパフォーマンスをモニターするために非常に重要です。快適性の高い洗練されたモデルの心拍センサーを活用すれば、手首にウォッチを装着していない状況でも正確な心拍数を測定できます。',
  modes: 'クライミングモード',
  modesText: '現在人気なクライミングスタイルを対応しています。',
  modesIndoor: 'インドアクライミング',
  modesIndoorText: 'インドアでのリードクライミングやトップロープに特化し、ピッチやグレード、スタイルを簡単に記録できます。',
  modesOutdoor: 'アウトドアクライミング',
  modesOutdoorText: 'スポートクライミング、トラディショナルクライミング、ビッグウォール、さらにはアイスクライミングやミックスクライミングのアプローチ、上昇、下降などを記録します。',
  modesBouldering: 'ボルダリング',
  modesBoulderingText: 'インドアクライミングモードでは、ボルダリンググレードでセッションを記録し、ルート数、ルートグレードなどの指標が確認できます。',
  climbingFeatures: 'クライミングのトラッキング',
  climbingFeaturesText: '登頂まで進捗状況をモニタリングし、クライミングを手軽に記録できます。',
  pitchTracking: 'ルートのトラッキング',
  pitchTrackingText: '全てのピッチやグレードを記録し手首からフラッシングもしくはレッドポイントを指定して、時間の経過とともに進歩することを確認することもできます。',
  autoLeadFallDetection: '自動下降検知',
  autoLeadFallDetectionText: 'インドアクライミングモードでは、下降の回数と高さを自動的に検知し、評価の調整に役立ちます。',
  detailedVerticalTracking: 'ハングボードでのワークアウト',
  detailedVerticalTrackingText: 'ウォッチで直接ワークアウトが確認できます。ハングボードでのワークアウトのダウンロード、作成、修正、実施がこれまで以上に簡単になりました。',
  powerfulNavigationTools: 'オフラインナビゲーション',
  powerfulNavigationToolsText: 'COROSアプリでルートを作成してウォッチにシェアします。オフライン地図を使うと、ウォッチ上でアプローチや下りなど確認でき安全面をサポートします。',
  timeToSunset: '日没時間',
  timeToSunsetText: '日没/日の出の時刻ウィジェットで暗闇を回避して山でのアクティビティを安全に行いましょう。',
  extremeBatteryLife: 'ロングバッテリー',
  extremeBatteryLifeText: 'VERTIX 2やAPEX 2 Proをフル充電すれば、数日間のエル・キャピタンでのクライミングや1週間の期間のクライミングに打ち込むことができます。',
  climbingFitness: 'クライミングフィットネス',
  climbingFitnessText: 'クライミングでもワークアウトでも、COROSでパフォーマンス指標をモニタリングして、貴重なデータを確認しましょう。',
  corosApp: 'COROSアプリ',
  corosAppText: 'クライミングセッションのデータを分析し、フィットネスをモニタリングすることで、より優れたクライマーに向けての体調管理をサポートします。',
  wellnessCheck: 'ヘルススナップショット',
  wellnessCheckText: '30秒の簡単な測定で、おもな健康指標を定期的に確認することができます。',
  trainingLoad: 'トレーニング負荷',
  trainingLoadText: 'リアルタイムの心拍データを活用し、クライミングやトレーニングの各セッションで身体がどのようにトレーニング負荷に適応しているかを確認します。',
  baseFitness: 'ベースフィットネス',
  baseFitnessText: 'フィットネスレベルを中長期的に記録し、この指標を活用することでベストパフォーマンスに向けて準備ができているかを確認します。',
  sleepTracking: '睡眠モニタリング',
  sleepTrackingText: '睡眠の質やHRVデータなどの詳細を知ることで、夜間への登頂に影響するかどうかを理解する。',
  hansFlorineClimbsWithCoros: 'COROSと共に挑戦するハンス・フローリン',
  hansFlorineClimbsWithCorosText: '40年のキャリアを持つプロクライマー、ハンス・フローリンが、COROSデバイスを使用しながらのヨセミテでのピッチクライミングの様子です。',
  blog: 'COROSクライミングストーリー',
  blogText: 'COROSは、プロクライマーのストーリーを伝え、トレーニングを熟知したエキスパートからの洞察をシェアします。以下に、最も関連性の高いクライミングストーリーの一部をご紹介します。',
  menuTitle: 'カロスでクライミング',
  seoDesc: 'ボルダリングのトレーニングからエル・キャピタンで数日間のクライミングまで、COROSはテクノロジーでクライマーにシームレスな体験を提供します。',
  verticalGPSTracking: '高精度GPS',
  verticalGPSTrackingText: '二周波GPS技術と業界唯一クライミングに適用するアルゴリズムを搭載して、トップレベルのGPS精度を提供します。',
  m_introText: 'トレーニングやジャーナリングは、クライマーにとって非常に重要であり、不可能とされてきたルートも可能になることができます。\n室内のボルダリングからエル・キャピタンでのクライミングまで、COROSはストレスの少ない操作性などクライマーのニーズに応えるテクノロジーを提供します。\n\nCOROSの様々な製品と機能が、クライミングやフィットネス向上にどのように役立つのか、さらに詳しくご紹介します。',
  m_verticalGPSTrackingText: '二周波GPS技術と業界唯一クライミングに適用するアルゴリズムを搭載して、トップレベルのGPS精度を提供します。',
  m_hansFlorineClimbsWithCorosText: '40年間キャリアを持つプロクライマーハンス・フローラインがCOROSを使ったヨセミテでクライミングを紹介しました。',
  m_blogText: 'COROSは、プロクライマーのストーリーでトレーニングのエキスパートからの洞察をシェアします。以下に、最も関連性の高いクライミングブログの一部をご紹介します。'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/jp/index.js







































// import workouts from './workouts.js';
// import progress from './progress.js';














/* harmony default export */ const jp = ({
  climb: climb,
  batteryUnit: batteryUnit,
  vertix2s: jp_vertix2s,
  pod2_2024: jp_pod2_2024,
  sasha: jp_sasha,
  pace3_ek: jp_pace3_ek,
  pace3: jp_pace3,
  chamonix_edition: jp_chamonix_edition,
  chamonix: jp_chamonix,
  hrm: jp_hrm,
  stories: jp_stories,
  pace2_2023: jp_pace2_2023,
  app3Langdingpage: jp_app3_langdingpage,
  ekGiveaway: jp_ek_giveaway,
  home: jp_home,
  common: jp_common,
  products: jp_products,
  "continue": '続ける',
  carabiner: jp_carabiner,
  convos: jp_convos,
  evolab: jp_evolab,
  specs: jp_specs,
  accessories: jp_accessories,
  apexPro: jp_apexPro,
  getApp: jp_getApp,
  declarationOfConformity: jp_declarationOfConformity,
  pod: jp_pod,
  pod2: jp_pod2,
  apex: jp_apex,
  apex2: jp_apex2,
  tradeIn: jp_tradeIn,
  athleteDetails: jp_athleteDetails,
  athlete: jp_athlete,
  warranty: jp_warranty,
  contact: jp_contact,
  vertix: jp_vertix,
  pace2: jp_pace2,
  plans: jp_plans,
  retail: jp_retail,
  privacy: jp_privacy,
  terms: jp_terms,
  ek: jp_ek,
  vertix2: jp_vertix2,
  map: jp_map,
  trainingHub: jp_trainingHub,
  login: jp_login,
  datalist: jp_datalist,
  yourproduct: jp_yourproduct,
  aboutPage: jp_about,
  events: jp_events,
  athleteNames: athleteNames,
  shop: jp_shop,
  coaches: jp_coaches,
  careers: jp_careers,
  // workouts,

  //公共部分
  CommonHeaderMenu1name: '製品紹介',
  CommonHeaderMenu1nav1: 'COROS VERTIX 2',
  CommonHeaderMenu1nav2: 'COROS VERTIX',
  CommonHeaderMenu1nav3: 'COROS APEX Pro',
  // CommonHeaderMenu1nav4: "COROS APEX",
  CommonHeaderMenu1nav5: 'COROS PACE 2',
  // CommonHeaderMenu1nav6: 'COROS PACE 2 EK',
  // CommonHeaderMenu1nav7: 'COROS POD',
  CommonHeaderMenu1nav8: 'アクセサリー',
  CommonHeaderMenu2name: 'コミュニティ',
  CommonHeaderMenu2nav1: 'COROS STORIES',
  CommonHeaderMenu2nav2: 'プロアスリート',
  CommonHeaderMenu3name: 'サポート',
  CommonHeaderMenu3nav1: 'ログイン',
  CommonHeaderMenu3nav2: 'COROS について',
  CommonHeaderMenu3nav3: 'Q＆A',
  CommonHeaderMenu3nav4: 'アフターサービス',
  CommonHeaderMenu3nav5: '取扱説明書',
  CommonHeaderMenu5name: 'お取り扱い店舗',
  CommonHeaderMenu6name: '言語',
  CommonFooterDealerLogin: '販売店様専用ログイン',
  CommonFooterDealerReturnRefund: 'アフターサービス',
  CommonFooterDealerWatchComparison: '商品比較',
  CommonFooterDealerTermsConditions: 'サービス規約',
  CommonFooterDealerPrivacyPolicy: 'プライバシーポリシー',
  CommonFooterDealerWheretoDownload: 'ダウンロードについて',
  CommonFooterDealercopyright: '© 2021 | COROS Wearables, Inc.',
  Commonshopnow: '今すぐ購入',
  Commonspeecs: '商品詳細',
  Commoncomparisonchart: 'COMPARISON CHART',
  SignupforNews: 'Sign up for News',
  //EK
  EKtitle: 'COROS PACE 2 | Eliud Kipchoge Edition',
  EKkeywords: 'COROS PACE 2 | The lightest GPS watch - packs a punch',
  EKdescription: 'COROS PACE 2 is the lightest GPS watch on the market and the perfect training partner for athletes aiming for a new personal best.',
  EKekaccessories: 'SHOP PACE 2 ACCESSORIES',
  EKektitle: 'COROS PACE 2 Eliud Kipchoge Edition',
  EKcontent1c: 'The greatest marathon runner of all time – there has never been a runner quite like Eliud Kipchoge. He has all the accolades one can hope to achieve over the 26.22 mile/42.195 km distance. The first human to dip under 2 hours for the marathon, the world record holder, Olympic Gold Medalist and winner of the Berlin, London, and Chicago marathons.',
  EKcontent1tit: '1:59:40',
  EKcontent2tit: 'NO HUMAN IS LIMITED',
  EKcontent2c: 'Eliud\'s mantra is "No Human is Limited" and with COROS, we Explore Perfection. Together, we set out to celebrate this spirit with a signature watch bundle that features Eliud\'s favorite COROS technology – The special edition COROS PACE 2 Eliud Kipchoge Edition , and the COROS POD. When you wear the EK Signature Edition PACE 2, we hope that you will be inspired by Eliud and will push yourself to train a little harder, and race a little faster.',
  EKcontent3tit: 'THE ELIUD KIPCHOGE PACE 2',
  EKcontent3c: "Unlike the traditional PACE 2, the Eliud Kipchoge edition features red and green accents inspired by the flag Eliud's native Kenya. The watch also showcases a white bezel with a red digital dial and green lap/back button.",
  EKcontent4tit: 'ONE-OF-A-KIND BANDS',
  EKcontent4c: 'The Eliud Kipchoge PACE 2 Edition is equipped with both silicone and nylon wrist bands, which like the watch body feature a white base with red and green accents.',
  EKcontent5tit: 'BETTER DATA FOR BETTER RUNNING',
  EKcontent5c: 'To train with the same focus as Eliud Kipchoge, requires you to collect the same data as Eliud and that means utilizing his favorite accessory – the COROS POD. The POD (Performance Optimization Device) offers you and Eliud advanced metrics including:',
  'content5-icon-1-text': 'Stride Ratio',
  'content5-icon-1-text-sub': '(Height to Length)',
  'content5-icon-2-text': 'Ground',
  'content5-icon-2-text-sub': 'Contact Time',
  'content5-icon-3-text': 'Form',
  'content5-icon-3-text-sub': 'Power',
  'content5-icon-4-text': 'Left/Right',
  'content5-icon-4-text-sub': 'Balance',
  'content5-icon-5-text': 'Stride',
  'content5-icon-5-text-sub': 'Height',
  content5info: 'Using the POD in tandem with the PACE 2 will help you further optimize your training as you chase your goals.',
  EKcontent6tit: 'Train like the G.O.A.T. with EvoLab',
  EKcontent6c: 'When you use EvoLab, Eliud is always by your side. EvoLab provides each user with a unique marathon level score of 0 – 100. Did you know that Eliud’s sub 2-hour marathon is the model for the max score of 100? Now you can see how you and your training partners stack up against the greatest marathoner of all time. Even if you are not quite ready to break the 2-hour barrier, be sure to check out the all-new race predictor to see how you’re ready to perform at your next 5k, 10k, half marathon or Eliud’s favorite – marathon.',
  EKcontent7tit: 'Limited Special Edition',
  EKcontent7c: 'Eliud may be an Olympic Gold Medalist in the Marathon now, but his first senior-level gold medal came in the 5,000m at the 2003 World Championships in Paris. To honor this, COROS is making just 5,000 units of the COROS PACE 2 Eliud Kipchoge Edition!',
  // vertix2
  VERTIX2title: 'COROS VERTIX 2 | 次世代のアドベンチャーへ',
  VERTIX2keywords: 'keywords',
  VERTIX2description: 'COROS VERTIX 2 | 次世代のアドベンチャーへ',
  VERTIX2vertix2title: 'COROS VERTIX 2',
  VERTIX2vertix2accessories: 'SHOP VERTIX 2 ACCESSORIES',
  VERTIX2content1c: 'アドベンチャーとは定義上、手に汗握るような体験のことです。COROSが新たに生み出したVERTIX 2 GPSアドベンチャーウォッチは、各種機能が想像を絶するほど進歩した上、大胆な革新も実現しました。ですから、あなたがおそらく考えたことすらない、刺激的で新しい課題も乗り越えることができます。あなたの追い求めるものがあなたをどこに連れて行っても－VERTIX 2はあらゆる局面で役に立つでしょう。',
  VERTIX2content2tit: 'エクスプレス・レーンへようこそ',
  VERTIX2content2c: 'VERTIX 2は5つの主要な衛星システム（GPS・GLONASS・Galileo・QZSS・Beidou）すべてにデータを同時伝送することができます。その上、2周波衛星通信にも対応しています。2周波衛星通信とは、以前は航空製品でしか利用できなかった、衛星信号をより速く正確に受信するための、いわばエクスプレス・レーンです。',
  VERTIX2content2desc: 'VERTIX 2は高層ビルの間・森林の奥深く・岩壁の近くなどを移動する際のGPSプロッティング（GPSからの位置情報をマップに表示すること）を大幅に改善しています。これらの場所を移動する際、従来のGPSウォッチでは精度に課題がありました。',
  VERTIX2content3tit: 'さらにもっと強力なパワー',
  VERTIX2content3c: '当社はVERTIX 2を一から構築しました。次世代のチップセットとプロセッサーを採用し、より優れた高速体験を可能にしました。これらの進化により、VERTIX 2の動作は先代モデル（VERTIX）よりも20％以上速くなっています。',
  VERTIX2content4tit: '大きなディスプレー',
  VERTIX2content4c: 'VERTIX 2の1.4インチディスプレーは先代モデルより解像度が16％高まっているので、より多くの情報を一目で表示し、いつでもどこでも主要な指標を最新のものにしておくことができます。また、VERTIX 2はディスプレーに最大8種類のデータを同時に表示できるので、運動中に確認したい情報をより多く見ることが可能です。',
  'performance-improvement-1': '1.4 in',
  'performance-improvement-2': '16%',
  VERTIX2content5tit: '再設計されたユーザーインターフェース',
  VERTIX2content5c: '新しいUIは当社のGPSウォッチの象徴であるデジタルダイヤルの可能性を解き放ちます。サッとスクロールすれば、最も重要である毎日の測定値が見られるようになりました。改良されたタッチスクリーンでは特定の操作を指先で行えるので、音楽・各種データにアクセスする際はもちろん、移動時も正確な操作ができます。',
  VERTIX2content6tit: '（再び同じように）驚くべきバッテリー持続時間',
  VERTIX2content6c: '驚くべきCOROSのバッテリー効率を正しく理解し、効率を一層高めるとどうなるでしょうか。それを確かめるにはVERTIX 2さえあれば十分です。VERTIX 2はGPSウォッチ史上最長のバッテリー持続時間を実現しました。標準的なフルGPSモードだと135時間、通常使用なら60日間と、VERTIX 2のバッテリー持続時間は、既に市場を先導している先代モデルの2倍以上に達しています。VERTIX 2はあなたの人生史上最長で、最も過酷な冒険への準備ができています。',
  VERTIX2content7tit: '世界を走る人は誰でも',
  VERTIX2content7c: 'VERTIX 2 GPSアドベンチャーウォッチではグローバルなオフラインマッピング（地図作成）機能を利用できます。同機能はLandscape、Topo、Hybridの3モードが用意されています。VERTIX 2は全世界のLandscape地図を標準装備しており、ユーザーはCOROS.comから自身が居住する地域のTopo地図を無料でダウンロードできます。VERTIX 2はデジタルダイヤルで地図を拡大・縮小したり、応答性に優れたタッチスクリーンで地図をドラッグしたりすることも可能です。進むべき道を教えてくれるGPSウォッチはいくつもありますが、VERTIX 2ほどスムーズな移動を約束するものはありません。',
  VERTIX2content8tit: 'ストレスを感じ過ぎないで',
  VERTIX2content8c: 'VERTIX 2にはECG（心電図）機能が搭載されており、GPSウォッチを使って心拍変動（HRV）を手首から直接測定できます。HRVはストレスに対する身体の反応や回復力を測定するのに理想的な指標です。COROSのシステムは測定したHRVをアスリートごとに容易に比較可能な指標に変換します。',
  VERTIX2content9tit: '遂に音楽がウォッチの中に',
  VERTIX2content9c: '32GBのストレージを搭載したVERTIX 2は、より多くのデータ、ワークアウト、ルートに加え、COROSのGPSウォッチでは初となる——音楽も保存できるようになりました。GPSウォッチにオーディオファイルをダウンロードし、ウォッチから直接操作することができます。VERTIX 2にはWi-Fi機能も追加されており、アクセサリーとのペアリングなど、さらに大きな可能性が広がることになります。',
  VERTIX2content10tit: 'Insta360カメラをリモートでコントロール',
  VERTIX2content10c: 'Insta360™アクションカメラ（Insta360 Go 2、One X2、One R）をお持ちの方は、GPSウォッチからカメラを操作できるようになりました。これは、手の届かないところにカメラを置いていても、数々のベストショットを撮れることを意味します。',
  VERTIX2content11tit: 'どうして引っ掛けるのか',
  VERTIX2content11c: 'ロッククライマーのトミー・コールドウェル氏が挑むビッグウォール・クライミングのように「GPSウォッチを手首に装着するのは賢明ではないけれど、それでもデータは必要」というアクティビティには、COROSウォッチカラビナ（Watch Carabiner）を活用してください。クライマーや冒険家には欠かせないこのアクセサリーは、GPSウォッチのフレームに固定し、ハーネスやその他の道具にクリップで留めます。',
  VERTIX2content12tit: 'COROSエコシステム',
  VERTIX2content12c: 'VERTIX 2は上記の機能に加え、近年のCOROSのGPSウォッチに搭載されている優れた機能もしっかり備えています。',
  VERTIX2learnmore: 'さらに詳しく',
  VERTIX2speedleft1: '商品名',
  VERTIX2speedright1: ['COROS VERTIX 2 GPS Adventure Watch'],
  VERTIX2speedleft2: 'スクリーンサイズ',
  VERTIX2speedright2: ['1.4 インチ'],
  VERTIX2speedleft3: '解像度',
  VERTIX2speedright3: ['280 x 280 (64 colors)'],
  VERTIX2speedleft4: 'スクリーン素材',
  VERTIX2speedright4: ['サファイアガラス'],
  VERTIX2speedleft5: '外観素材',
  VERTIX2speedright5: ['グレード5チタン合金（PVDコーティング付き）＋PVDコーティングを施したチタン合金'],
  VERTIX2speedleft6: 'Bezel Material',
  VERTIX2speedright6: ['Grade 5 Titanium Alloy with PVD coating'],
  VERTIX2speedleft7: 'Cover Material',
  VERTIX2speedright7: ['Titanium Alloy with PVD coating'],
  VERTIX2speedleft8: 'バンドサイズ',
  VERTIX2speedright8: ['26mmクイックフィットバンド'],
  VERTIX2speedleft9: 'バンド素材',
  VERTIX2speedright9: ['シリコン/ナイロン'],
  VERTIX2speedleft10: 'サイズ',
  VERTIX2speedright10: ['50.3 x 50.3 x 15.7mm'],
  VERTIX2speedleft11: '重量（シリコンバンド付き）',
  VERTIX2speedright11: ['89g'],
  VERTIX2speedleft12: '稼働時間',
  VERTIX2speedright12: ['日常使用なら60日', '標準GPSモードなら140時間', 'マルチコンステレーションモードなら90時間', 'デュアル周波数モードなら50時間', '音楽再生＋標準GPSモードなら35時間', '音楽再生＋マルチコンステレーションモードなら30時間', '長稼働モードなら240時間'],
  VERTIX2speedleft13: 'ワイヤレス接続',
  VERTIX2speedright13: ['Bluetooth® 5.0 Dual Mode, Wi-Fi®'],
  VERTIX2speedleft14: 'アクセサリ接続',
  VERTIX2speedright14: ['Bluetooth®'],
  VERTIX2speedleft15: 'メモリー',
  VERTIX2speedright15: ['32GB'],
  VERTIX2speedleft16: '衛星チップセット',
  VERTIX2speedright16: ['全衛星デュアル周波数GNSSチップセット'],
  VERTIX2speedleft17: 'センサー',
  VERTIX2speedright17: ['光パルスオキシメータ', '光学式心拍センサー', 'ECG', '気圧高度計', '加速度計', '方位磁針', 'ジャイロスコープ', '温度計'],
  VERTIX2speedleft18: '防水レベル	',
  VERTIX2speedright18: ['100m'],
  VERTIX2speedleft19: '作業温度',
  VERTIX2speedright19: ['-22°F to 122°F (-30°C to 50°C)'],
  VERTIX2speedleft20: '保管温度',
  VERTIX2speedright20: ['-22°F to 140°F (-30°C to 60°C)'],
  VERTIX2speedleft21: '充電時間',
  VERTIX2speedright21: ['2時間以内'],
  VERTIX2speedleft22: '地図/ナビゲーションサポート',
  VERTIX2speedright22: ['グローバルオフラインストリートおよび地形図', 'タッチスクリーンおよびデジタルダイヤル対応のパンくずナビゲーション', '関門', 'スタートに戻る', '標高の詳細', '目的地までの距離', 'GPS / MGRS座標', '嵐アラート'],
  VERTIX2speedleft23: '音楽サポート',
  VERTIX2speedright23: ['オフライン保存用の内部ストレージとBluetoothヘッドフォンストリーミング'],
  VERTIX2speedleft24: '音楽フォーマット',
  VERTIX2speedright24: ['MP3'],
  VERTIX2speedleft25: 'サポートされているワークアウト',
  VERTIX2speedright25: ['ランニング、インドアラン、トレイルラン、トラックラン、ハイキング、登山、自転車、屋内バイク、プールスイム、オープンウォーター、トライアスロン、ジムカーディオ、GPSカーディオ、スキー、スノーボード、スキーツーリング、クロスカントリースキー、マルチスポーツ、筋トレ、トレーニング、スピードサーフィン、ウィンドサーフィン、ホワイトウォーター、フラットウォーター、ローイング、インドアローイング'],
  //maps

  maptitle: 'Map Download',
  mapsubheader: 'Region Selection',
  mapwelcome: 'Welcome to the all-new COROS Maps download page. Here you will find our current Topographic (Topo) and Landscape maps, available to download completely for free! At this time the Topo and Landscape maps below are only available on the VERTIX 2, however, we are excited to announce that the Topo maps will also be available to APEX Pro and VERTIX 1 users later this year.',
  mapdownload_instruction: 'Follow these instructions to download the Topographic (Topo) and/or Landscape Map for your region:',
  mapdownload_instruction_list1: '- Using the Region Selection tool below, hold the SHIFT button while dragging your mouse/cursor over the desired area.',
  mapdownload_instruction_list2: '- Once you have selected the desired region, press the “Download” button to view the approximate file sizes for downloading either the Topo or Landscape map for that region.',
  mapdownload_tips: '*Please keep in mind when choosing a region that the APEX Pro and VERTIX 1 models have 4GB of onboard storage while the VERTIX 2 has 32GB*',
  mapdownload_message: 'Download task has started, Close the pop-up window to view the progress',
  mapdownload_instruction_mobile: 'Please use your desktop computer to download maps from this page.',
  maplandscope_introduction: 'Landscape maps currently provide information such as streets, major road networks, natural features, and waterways. Landscape maps do not include international borders, administrative boundaries, or information on points of interest such as restaurants, gas stations, stores, schools, etc.',
  maptopo_introduction: 'Topo maps are a detailed record of a land area, giving geographic positions and elevations for both natural and man-made features. They show the shape of the land, the mountains, valleys, and plains by means of contour lines (lines of equal elevation above sea level)',
  maph4: 'Please select a region to download from the table below.',
  maph5: 'How to Install',
  mapl1: 'Please make sure you have enough space on your hard drive before downloading.',
  mapl2: 'Unzip the downloaded file on your hard drive.',
  mapl3: 'Locate the map folder and copy it to the watch.',
  mapl4: 'see:',
  maph6: 'Landscape Map ',
  mapt3: 'Estimated file transfer time: ',
  maph7: 'Topo Map ',
  mapt4: 'Estimated file transfer time: ',
  mapconditions: '©OpenStreetMap Terms and Conditions',
  mapconditions_1: 'This map was compiled using the community-generated ©OpenStreetMap (OSM) database. The use of this map is not subject to the terms of the End User License Agreement (EULA), but to the following terms and conditions of ©OpenStreetMap：',
  mapconditions_2: 'The ©OpenStreetMap data is the copyright of ©OpenStreetMap contributors and is subject to the Open Database License. Any rights to the individual content of ©OpenStreetMap data are licensed under the Database Content License.',
  maph9: 'Data Range',
  mapt7: 'This map includes only the street and trail network, waterways, and natural features. It does not include international borders, administrative boundaries, or points of interest such as stores, restaurants, or parking areas.',
  maph10: 'Warning',
  mapt8: '©COROS only formats and styles ©OpenStreetMap maps. ©COROS does not guarantee the accuracy or completeness of the map data in ©OpenStreetMap products. You agree to use it at your own risk.',
  mapt9: 'You undertake full responsibility and risk related to your use of the mapping data. ©COROS is not responsible to you for the mapping data and does not make or give to you any representations or warranties, express and implied, in connection with the mapping data, including, but not limited to, the accuracy, completeness, reliability or usability of the mapping data. Therefore, ©COROS is not liable to you for any damage or claim whatsoever, direct or indirect, arising from your use of the mapping data.',
  mapt10: '©COROS maps are intended as reference only and should not be used for any purpose that requires precise measurements of direction, distance, location or terrain.',
  mapt11: 'Hours',
  mapcopyright: '© 2021 | COROS Wearables Inc.',
  mapregion: 'Region',
  mapgeomap: 'Landscape',
  downloadprocess: 'Download process',
  shiftPress: 'Please press SHIFT + Draw a Box to select the desired data',
  mapcontours: 'Topo',
  maplanguage: 'language',
  mapcn: '中文',
  mapen: 'English',
  mapAfrica: 'Africa',
  mapAntarctica: 'Antarctica',
  mapAsia: 'Asia',
  mapAsia1: 'Asia - 1',
  mapAsia2: 'Asia - 2',
  mapAsia3: 'Asia - 3',
  mapAsia4: 'Asia - 4',
  mapnorthamerica1: 'North America - 1',
  mapnorthamerica2: 'North America - 2',
  mapaustraliaoceania: 'Oceania',
  mapcentralamerica: 'Central America',
  mapeurope: 'Europe',
  mapnorthamerica: 'North America',
  mapsouthamerica: 'South America',
  maplocaldown: 'Download',
  mapdownloadbutton: 'Download Map',
  maphelplink: 'Installation Instructions',
  mapdownloadtitle: 'Download maps below',
  mapmacoshelp: 'Detailed instructions for MacOS',
  mapwinhelp: 'Detailed instructions for Windows',
  macostitle: 'Installation Instructions',
  macost1: '1.	Select the zip file to unzip it. This will save the file to your hard drive and as a folder on your desktop (for example: North_America_Contour).',
  macost2: '2. Plug your COROS watch into the computer via the USB/charging cable and wait for the disk symbol to appear on your desktop. ',
  macost3: '3. Select the disk symbol (VERTIX 2) to open the root directory of your watch. Next, press and hold the "option" key while copying/dragging the entire map file (labeled: map) to the root directory of your COROS watch USB disk.',
  macost4: '4. If prompted, select "Merge" in the pop-up dialog and wait for the copy to complete.',
  macoscautions: 'Please Read:',
  macosc1: '1. To avoid replacing the default [map] directory on your watch, please follow the steps below: When accessing and copying the map directory, press the "option" key on the keyboard while dragging and copying, then select "Merge" in the pop-up box. Please do not select “replace” as this will remove the original map files in the [map] directory of your watch.',
  macosc2: '2. Depending on internet speed and download size, map files can take a significant amount of time to be transferred to your watch hard drive. Please plan accordingly and ensure your computer is properly connected to power.',
  macosc3: '3. Please ensure that the [map] directory is placed in the root directory of your watch and do not rename the file as this will cause installation issues.',
  windowstitle: 'Instructions',
  windowst1: '1. Select the zip file to unzip it. This will save the file to your hard drive and as a folder on your desktop (for example: North_America_Contour).',
  windowst2: '2. Plug the watch into the computer via the USB cable, select “File Explorer” in the taskbar then “This PC” from the left pane. Here you will see your COROS watch appear as a hard drive.',
  windowst3: '3. Now locate the extracted directory/map file from Step 1 (on your desktop or in your files), right click on the [map] directory, click on the "Send" menu, then choose "VERTIX 2" and wait for the file transfer to finish.',
  windowscautions: 'Please Read:',
  windowsc1: '1. To avoid replacing the default [map] directory on your watch, if prompted, select "Merge" in the pop-up box. Please do not select “replace” as this will remove the original map files in the [map] directory of your watch.',
  windowsc2: '2. Depending on internet speed and download size, map files can take a significant amount of time to be transferred to your watch hard drive. Please plan accordingly and ensure your computer is properly connected to power.',
  windowsc3: '3.  Please ensure that the [map] directory is placed in the root directory of your watch and do not rename the file as this will cause installation issues.'

  ////////////////////////////////////////////////////////
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/vertix.js
/* harmony default export */ const fr_vertix = ({
  name: 'COROS VERTIX',
  accessories: 'ACCESSOIRES',
  readMore: 'LIRE PLUS',
  'Rugged YET premium': {
    title: 'Robuste MAIS haut de gamme',
    desc: 'Une monture et une lunette en titane léger et sans corrosion témoignent de notre engagement envers la durabilité. La qualité de la VERTIX vous permet d\'affronter les éléments les plus rudes du monde sans sacrifier votre style.'
  },
  'Virtually scratch proof screen': {
    title: 'Écran pratiquement inrayable',
    desc: 'L\'écran en verre saphir avec revêtement en forme de diamant confère à VERTIX l\'écran le plus résistant du marché.'
  },
  'The ONLY GPS watch with a 150-meter waterproof rating': {
    title: 'La SEULE montre GPS avec un indice d\'étanchéité de 150 mètres',
    desc: '15 ATM rated : résiste à des pressions équivalentes à une profondeur de 150 mètres.'
  },
  'Ultra-light Durability': {
    title: 'Durabilité ultra-légère',
    desc: 'Le corps de la VERTIX ne pèse que 54 grammes, ce qui en fait la montre la plus légère de sa catégorie.'
  },
  'VERTIX is your Sherpa': {
    title: 'VERTIX est votre sherpa',
    desc: 'Surveillance de l\'oxygène sanguin 24 heures sur 24 et 7 jours sur 7 Avec le mode Altitude, VERTIX est la seule montre à fournir une évaluation quotidienne de l\'acclimatation et à suggérer quand vous pouvez monter plus haut.'
  },
  'Industry leading performance in extreme cold': {
    title: 'Des performances de pointe dans le froid extrême',
    desc: 'Fonctionne jusqu\'à -4°F/-20°C avec une dépréciation de moins de 30% des performances de la batterie VERTIX dure 21 heures en mode GPS sous des tests extrêmes de -22°F/-30°C.'
  },
  'EASY use in ANY condition': {
    title: 'Utilisation FACILE dans TOUTES les conditions',
    desc: 'Cadran numérique de conception entièrement nouvelle pour un contrôle à un doigt, même avec des gants d\'escalade épais ou sous l\'eau.'
  },
  'Track your path': {
    title: 'Suivez votre parcours',
    desc: 'Prend désormais en charge la cartographie hors ligne, et comprend : Les modes Paysage, Topo et Hybride. En utilisant l\'écran tactile et le cadran numérique, les utilisateurs peuvent explorer notre nouvelle fonction de cartographie. Vous pouvez suivre votre chemin sur les cartes. C\'est une expérience de navigation complètement renouvelée à votre poignet.'
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'N\'IMPORTE QUELLE SÉANCE D\'ENTRAÎNEMENT, N\'IMPORTE OÙ',
    desc: 'Avec le mode d\'entraînement COROS, vous pouvez créer, partager et même télécharger des séances d\'entraînement d\'athlètes et d\'entraîneurs professionnels. Créez votre propre séance d\'entraînement dans l\'application COROS pour la course à pied, le cyclisme, la natation ou la musculation, sans aucune limite. Choisissez parmi plus de 200 exercices préchargés pour créer votre séance de musculation idéale. Partagez vos séances d\'entraînement avec vos amis et vos partenaires d\'entraînement par SMS, e-mail, réseaux sociaux ou même directement dans l\'application à l\'aide d\'un QR code. Enfin, suivez des séances d\'entraînement triées sur le volet par des athlètes et des entraîneurs professionnels en les téléchargeant sur coros.com et sur votre montre. Avec le nouveau mode d\'entraînement, vos meilleurs efforts sont à votre portée.'
  },
  'Light up the Night’s Sky': {
    title: 'Illuminez le ciel de la nuit',
    desc: 'Mode nuit - un nouveau mode toujours actif pour les activités nocturnes. Alors que les options manuelles permettent toujours d\'allumer rapidement le rétroéclairage, le mode Nuit laisse le rétroéclairage allumé pendant toute la durée de votre entraînement. Une lumière suffisamment vive pour que vos yeux puissent s\'adapter et lire dans l\'obscurité, mais suffisamment faible pour maintenir des performances de batterie élevées tout au long de votre course ou de votre trajet, même si cela est nécessaire toute la nuit. Ne vous inquiétez pas, elle s\'éteint automatiquement lorsque vous terminez votre entraînement ou au lever du soleil.'
  },
  'Stay on Track': {
    title: 'Restez sur la bonne voie',
    desc: 'Une piste standard fait 400m, alors pourquoi les appareils GPS ne semblent pas y arriver ? Avec le nouveau mode piste de COROS, un algorithme propriétaire est utilisé pour s\'assurer que vos courses sur piste et vos séances d\'entraînement sont mesurées avec précision, quel que soit le couloir que vous choisissez. Les zigzags aléatoires à travers le terrain ou les virages serrés ont disparu, remplacés par les lignes droites et les courbes de la piste - fidèles la façon dont vous courez sur celle-ci.'
  },
  'Ice Breaker': {
    title: 'Brise-glace',
    desc: 'Brisez la glace dans n\'importe quel contexte avec cette montre unique en son genre.'
  },
  'Stand out in a Crowd': {
    title: 'Se démarquer dans la foule',
    desc: 'La lunette exclusive en titane azur est un véritable coup d\'éclat, tandis que le boîtier en fibre transparente crée une montre aussi élégante à votre poignet que puissante dans votre aventure.'
  },
  'Handled With Care': {
    title: 'Manipulés avec soin',
    desc: 'Suffisamment solide pour résister aux éléments les plus durs que mère nature lui envoie, le cadre en fibre translucide est assemblé à la main pour garantir la meilleure qualité possible.'
  },
  batteryLife: {
    title: 'Autonomie de la batterie au-delà de votre imagination',
    desc: 'L\'autonomie de la batterie est suffisante pour une expédition en Himalaya ou une randonnée sur le sentier John Muir, le tout sans charge.',
    reqular: {
      title: '45j',
      desc: '45 jours d\'utilisation quotidienne'
    },
    gps: {
      title: '60h',
      desc: '60 heures en mode full GPS'
    },
    ultraMax: {
      title: '150h',
      desc: '150 heures en mode UltraMax'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/products.js
/* harmony default export */ const fr_products = ({
  pageMeta: {
    title: 'Découvrez les montres GPS premium COROS',
    keywords: 'Marathon ultra cross country course montre intelligente notifications alpinisme calories suivi du sommeil distance étanche miles cardiofréquencemètre GPS Course à pied Natation Triathlon Entraînement Camping Randonnée Exercice Fitness Tracker Boussole',
    description: "Des montres de sport GPS haut de gamme conçues pour les coureurs, les aventuriers et tous les athlètes. COROS mène la révolution de l'entraînement athlétique grâce à une technologie avancée."
  },
  learnMore: 'EN SAVOIR PLUS',
  compareEntrance: 'Tableau de comparaison des montres',
  pageTitle: 'montres gps coros',
  pageSubtitle: 'et capteurs',
  pageDesc: "Chaque montre GPS de la gamme COROS a été conçue,\n    testée et perfectionnée pour l'athlète, par l'athlète. Nos\n    montres associent un matériel de haute qualité à une \n    technologie innovante pour fournir aux athlètes \n    d'endurance l'équipement dont ils ont besoin dans\n    les environnements les plus extrêmes du monde.",
  pace2: {
    name: 'COROS PACE 2',
    header: 'MONTRE SPORT GPS PREMIUM',
    desc: 'Pour les athlètes multisports\n qui vont vite et loin'
  },
  pace2_ek: {
    name: 'COROS PACE 2 EK',
    header: 'ÉDITION ELIUD KIPCHOGE',
    desc: "La montre d'Eliud incite à s'entraîner un peu plus et à courir un peu plus vite"
  },
  apex_42: {
    name: 'COROS APEX',
    header: 'MONTRE GPS MULTISPORT PREMIUM',
    desc: 'Pour les sportifs de plein air, qui voyagent léger et vite'
  },
  apex_46: {
    name: 'COROS APEX',
    header: 'MONTRE GPS MULTISPORT PREMIUM',
    desc: 'Pour les sportifs outdoor, qui voyagent léger et vite'
  },
  apex_pro: {
    name: 'COROS APEX Pro',
    header: 'MONTRE GPS MULTISPORT PREMIUM',
    desc: "Pour les athlètes d'endurance dans des environnements difficiles"
  },
  apex2: {
    name: 'COROS APEX 2',
    header: 'Montre GPS Outdoor',
    desc: "Pour les athlètes qui s'entraînent\ndur et qui vont loin en montagne"
  },
  apex2pro: {
    name: 'COROS APEX 2 Pro',
    header: 'Montre GPS Outdoor',
    desc: "Pour les athlètes qui s'entraînent\ndur et qui vont loin en montagne"
  },
  vertix: {
    name: 'COROS VERTIX',
    header: 'MONTRE GPS AVENTURE',
    desc: "Notre montre originale pour\nles aventuriers de l'extrême"
  },
  vertix2: {
    name: 'COROS VERTIX 2',
    header: "MONTRE D'AVENTURE GPS",
    desc: 'Pour les athlètes qui\nveulent tout avoir'
  },
  pod: {
    name: 'COROS POD',
    header: "DISPOSITIF D'OPTIMISATION DES PERFORMANCES",
    desc: 'Des mesures de fonctionnement avancées\npour optimiser vos performances'
  },
  pod2: {
    name: 'COROS POD 2',
    header: 'PERFORMANCE OPTIMIZATION DEVICE',
    desc: 'Un niveau de précision optimal \npour tous les coureurs'
  },
  hrm: {
    name: 'Capteur de FC COROS',
    header: 'CAPTEUR DE FRÉQUENCE CARDIAQUE OPTIQUE',
    desc: 'Des données précises sans\ncompromis sur le confort'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/plans.js
/* harmony default export */ const fr_plans = ({
  plan: 'PLAN',
  roadRunning: 'Running',
  getItNow: "télécharger l'entraînement",
  bannerTitle: "plans d'entraînement",
  running: {
    '12-Week Beginner Half-Marathon Training Plan': {
      title: "Plan d\xE9butant de 12 semaines pour semi-marathon",
      desc: "Ce plan de 12 semaines bas\xE9 sur la FC se concentre sur l'acquisition de volume en vue d'une premier semi-marathon. Les coureurs doivent \xEAtre pr\xE9par\xE9s \xE0 courir 5x par semaine entre 25 et 45km. Les s\xE9ances du Mercredi et Dimanche sont les s\xE9ances sp\xE9cifiques au semi-marathon, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de l'emploi du temps. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement!"
    },
    '12-Week Intermediate Half-Marathon Training Plan': {
      title: "Plan interm\xE9diaire de 12 semaines pour semi-marathon",
      desc: "Ce plan de 12 semaines bas\xE9 sur la FC se concentre sur l'acquisition de volume avec des sorties a\xE9robies et tempo. Les coureurs doivent \xEAtre pr\xE9par\xE9s \xE0 courir 5x par semaine entre 25 et 50km. Les s\xE9ances du Mercredi et Dimanche sont les s\xE9ances sp\xE9cifiques au semi-marathon, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de l'emploi du temps. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement!"
    },
    '12-Week Advanced Half-Marathon Training Plan': {
      title: "Plan avanc\xE9 de 12 semaines pour semi-marathon",
      desc: "Ce plan de 12 semaines bas\xE9 sur la FC se concentre sur l'am\xE9lioration de votre allure de semi-marathon et votre confort en haute-intensit\xE9. Les coureurs doivent \xEAtre pr\xE9par\xE9s \xE0 courir 6x par semaine entre 30 et 70km. Les s\xE9ances du Mercredi, Vendredi, et Dimanche sont les s\xE9ances sp\xE9cifiques au semi-marathon, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de l'emploi du temps. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement!"
    },
    '20-Week Beginner Marathon Training Plan': {
      title: 'Plan débutant de 20 semaines pour marathon',
      desc: "Ce programme de 20 semaines bas\xE9 sur la fr\xE9quence cardiaque se concentre sur l'augmentation du volume en vue d'un premier marathon \xE0 la fin du programme. Les coureurs doivent \xEAtre pr\xEAts \xE0 courir 5 fois par semaine de 20 \xE0 65km. Les entra\xEEnements du jeudi et du dimanche sont les s\xE9ances sp\xE9cifiques au marathon, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de votre emploi du temps. Le plan \xE9tant bas\xE9 sur vos zones de FC seuil, nous vous encourageons \xE0 effectuer un test d'aptitude en course \xE0 pied au d\xE9but pour vous assurer que vous vous entra\xEEnez dans les bonnes zones. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement !"
    },
    '20-Week Intermediate Marathon Training Plan': {
      title: 'Plan intermédiaire de 20 semaines pour marathon',
      desc: "Ce programme de 20 semaines bas\xE9 sur la FC se concentre sur l'augmentation du volume ainsi que sur l'am\xE9lioration de l'intensit\xE9 au seuil avant un marathon \xE0 la fin du programme. Les coureurs doivent \xEAtre pr\xEAts \xE0 courir 5 fois par semaine de 25-70km. Les s\xE9ances d'entra\xEEnement du jeudi et du dimanche sont les s\xE9ances sp\xE9cifiques d'intensit\xE9 sup\xE9rieure, mais n'h\xE9sitez pas \xE0 les modifier en fonction de votre emploi du temps. Le programme \xE9tant bas\xE9 sur vos zones de FC seuil, nous vous encourageons \xE0 effectuer un test d'aptitude en course \xE0 pied au d\xE9but pour vous assurer que vous vous entra\xEEnez dans les bonnes zones. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement!"
    },
    '20-Week Advanced Marathon Training Plan': {
      title: 'Plan avancé de 20 semaines pour marathon',
      desc: "Ce programme de 20 semaines bas\xE9 sur la fr\xE9quence cardiaque se concentre sur l'am\xE9lioration de votre rythme au seuil gr\xE2ce \xE0 des s\xE9ances d'entra\xEEnement de haute intensit\xE9 et \xE0 un volume \xE9lev\xE9. Les coureurs doivent \xEAtre pr\xEAts \xE0 courir 6x/semaine de 35-90km. Les entra\xEEnements du mardi et du vendredi sont les s\xE9ances sp\xE9cifiques \xE0 haute intensit\xE9, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de votre emploi du temps. Le programme \xE9tant bas\xE9 sur vos zones de FC seuil, nous vous encourageons \xE0 effectuer un test d'aptitude en course \xE0 pied au d\xE9but pour vous assurer que vous vous entra\xEEnez dans les bonnes zones. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement !"
    },
    '16-Week Beginner Marathon Training Plan': {
      title: 'Plan débutant de 16 semaines pour marathon',
      desc: "Ce programme de 16 semaines bas\xE9 sur la fr\xE9quence cardiaque se concentre sur l'acquisition de volume en vue d'un premier marathon \xE0 la fin du programme. Les coureurs doivent \xEAtre pr\xEAts \xE0 courir 5 fois par semaine de 25-65km. Les entra\xEEnements du mercredi et du dimanche sont les s\xE9ances sp\xE9cifiques au marathon, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de votre emploi du temps. Le plan \xE9tant bas\xE9 sur vos zones de FC seuil, nous vous encourageons \xE0 effectuer un test d'aptitude en course \xE0 pied au d\xE9but pour vous assurer que vous vous entra\xEEnez dans les bonnes zones. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement !"
    },
    '16-Week Intermediate Marathon Training Plan': {
      title: 'Plan intermédiaire de 16 semaines pour marathon',
      desc: "Ce programme de 16 semaines bas\xE9 sur la fr\xE9quence cardiaque se concentre sur l'augmentation du volume ainsi que sur l'am\xE9lioration de l'intensit\xE9 au seuil avant un marathon \xE0 la fin du programme. Les coureurs doivent \xEAtre pr\xEAts \xE0 courir 5x par semaine de 30 \xE0 70km. Les s\xE9ances d'entra\xEEnement du mercredi et du dimanche sont les s\xE9ances sp\xE9cifiques d'intensit\xE9 plus \xE9lev\xE9e, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de votre emploi du temps. Le programme \xE9tant bas\xE9 sur vos zones de FC seuil, nous vous encourageons \xE0 effectuer un test d'aptitude en course \xE0 pied au d\xE9but pour vous assurer que vous vous entra\xEEnez dans les bonnes zones. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entrainement!"
    },
    '16-Week Advanced Marathon Training Plan': {
      title: 'Plan avancé de 16 semaines pour marathon',
      desc: "Ce programme de 16 semaines bas\xE9 sur la fr\xE9quence cardiaque se concentre sur l'am\xE9lioration de votre rythme limite gr\xE2ce \xE0 des s\xE9ances d'entra\xEEnement de haute intensit\xE9 et \xE0 un volume \xE9lev\xE9. Les coureurs doivent \xEAtre pr\xEAts \xE0 courir 6x/semaine de 30 \xE0 90km. Les s\xE9ances d'entra\xEEnement du mardi et du vendredi sont les s\xE9ances sp\xE9cifiques \xE0 haute intensit\xE9, mais n'h\xE9sitez pas \xE0 modifier l'horaire en fonction de votre emploi du temps. Le programme \xE9tant bas\xE9 sur vos zones de FC seuil, nous vous encourageons \xE0 effectuer un test d'aptitude en course \xE0 pied au d\xE9but pour vous assurer que vous vous entra\xEEnez dans les bonnes zones. N'h\xE9sitez pas \xE0 nous contacter via coach@coros.com pour nous faire part de vos commentaires et de vos impressions sur votre parcours d'entra\xEEnement!"
    },
    '12-week Intermediate Mountain Training Plan': {
      title: "Plan d'entrainement interm\xE9diaire en montagne de 12 semaines",
      desc: "Le programme interm\xE9diaire de 12 semaines de Kilian Jornet est con\xE7u pour aider les athl\xE8tes \xE0 d\xE9velopper leur endurance et leur capacit\xE9 \xE0 performer sur de longues distances. Avec un m\xE9lange d'intensit\xE9, de longues courses a\xE9robies et de l'\xE9l\xE9vation, les athl\xE8tes qui visent des \xE9preuves de trail ou des parcours en terrain vallonn\xE9 se pr\xE9pareront en cons\xE9quence pour atteindre leurs objectifs. "
    },
    '12-Week Advanced Mountain Training Plan': {
      title: "Plan d'entrainement avanc\xE9 en montagne de 12 semaines",
      desc: "Le programme avanc\xE9 de 12 semaines de Kilian Jornet est con\xE7u pour d\xE9velopper l'endurance des athl\xE8tes et leur capacit\xE9 \xE0 r\xE9aliser des performances sur de longues dur\xE9es. Avec un m\xE9lange d'intensit\xE9, de longues courses a\xE9robiques et un accent mis sur l'\xE9l\xE9vation, les athl\xE8tes qui visent des \xE9preuves de trail ou des parcours en terrain vallonn\xE9 se pr\xE9pareront en cons\xE9quence pour atteindre leurs objectifs. Ce programme comporte plusieurs longues journ\xE9es de plus de 4 heures, il est donc id\xE9al pour les athl\xE8tes qui souhaitent participer \xE0 des \xE9preuves de longue dur\xE9e ou d'ultra. "
    },
    "5km": {
      title: "Plan d'entrainement au 5km Débutant",
      desc: "Ce plan d'entraînement de 6 semaines est destiné aux coureurs qui souhaitent commencer à courir avec un plan d'entraînement sûr et progressif en vue d'un premier 5 km. Aucune expérience préalable n'est nécessaire pour commencer ce plan. Ce plan comprend 3 séances par semaine en mettant l'accent sur la cadence et la respiration. Pour obtenir de l'aide, envoie-nous un mail à coach@coros.com et nous nous ferons un plaisir de t’aider !"
    },
    "10km": {
      title: "Plan d'entraînement au 10km débutant",
      desc: "Ce plan d'entraînement de 6 semaines est destiné aux coureurs qui souhaitent commencer à courir avec un plan d'entraînement sûr et progressif en vue d'un premier 10 km. Aucune expérience préalable n'est nécessaire pour commencer ce plan, mais il faut savoir que le volume hebdomadaire varie de 15 à 30 km. Il comprend 3 séances par semaine avec un accent sur la cadence, la respiration, la forme et une introduction à une intensité plus élevée. Pour obtenir de l'aide, envoie-nous un mail à coach@coros.com et nous nous ferons un plaisir de t’aider !"
    },
    '12-Week Molly Seidel Marathon Plan': {
      title: 'Plan de 12 semaines pour le marathon de Molly Seidel',
      desc: "Ce plan est conçu pour présenter les entraînements clés que Molly Seidel utilise pour se préparer à ses marathons. Avec les entraînements clés fournis par Jonathon Green, l'entraîneur de Molly, ce plan permettra également aux athlètes de développer le volume nécessaire pour courir un marathon à leur niveau. Si tu cherches à t'entraîner comme les pros, ce plan est idéal pour te guider à chaque étape. Pour une approche plus individualisée, rends-toi sur verdetrackclub.com et contacte l'entraîneur Green pour obtenir de l'aide !"
    },
    '2:45-3:00 12-Week Marathon Plan': {
      title: 'Plan marathon 2:45-3:00 de 12 semaines',
      desc: "Il s'agit d'un plan d'entraînement agressif qui fait débuter les athlètes dans la fourchette 30-40 miles/semaine (50-65km) et les fait progresser vers 60 miles/semaine (100km). Les entraînements consistent en des séances d'intervalles en milieu de semaine, un volume de base et des courses longues au rythme spécifique du marathon. Les athlètes qui commencent ce programme doivent avoir un volume de base de 30-40 miles (50-65km) par semaine. Les athlètes prendront l’habitude de courir à un rythme de 6:18-6:52/mile (3:55-4:16/km) qui leur permettra de courir un marathon de moins de 3 heures."
    },
    '3:15-3:35 12-Week Marathon Plan': {
      title: 'Plan marathon 3:15-3:35 de 12 semaines',
      desc: "Ce plan d'entraînement est conçu pour augmenter le volume des athlètes jusqu'à 50 miles (80km) /semaine tout en les préparant à courir un marathon de 3:15-3:35. Les athlètes effectueront un mélange d'intervalles de seuil en milieu de semaine, de kilomètres de base d'endurance aérobie pour le volume et d'entraînements spécifiques au marathon pour affiner leur rythme. Les athlètes doivent avoir une base de 30-40 miles (50-65km) /semaine avant de commencer ce plan."
    },
    '4:00-4:30 12-Week Marathon Plan': {
      title: 'Plan marathon 4:00-4:30 de 12 semaines',
      desc: "Ce plan commence à 26 miles (40km) /semaine et monte jusqu'à 40 miles (65km)/semaine avant de diminuer progressivement jusqu'au marathon. Dans la plupart des cas, les athlètes courent à leur rythme cardiaque d'endurance aérobie ou à un rythme spécifique pour un marathon de 4:00-4:30 (9:09-10:17/mile - 5:42-6:24/km). Les athlètes doivent être capables de courir 25-30 miles (40-50km) /semaine avant de commencer ce programme. À mesure que les athlètes progressent dans le plan d'entraînement, ils doivent utiliser les séances d'entraînement spécifiques au marathon pour avoir une idée réaliste du jour de la course. Si tu es capable d'effectuer tous les entraînements spécifiques à un rythme inférieur à 9:09/mile (5:42/km), alors peut-être qu'un marathon inférieur à 4 est réaliste. Si tu as du mal à tenir une allure de 10:17/mile (6:24/km), un marathon de plus de 4:30 est peut-être plus réaliste. N'hésite pas à ajuster les jours d’entraînements spécifiques selon tes besoins, tout en laissant les jours d'endurance aérobique en place !"
    },
    'Beginner Marathon Plan': {
      title: 'Plan marathon pour débutants',
      desc: "Ce plan d'entra\xEEnement est con\xE7u pour les personnes qui commencent un nouveau bloc d'entra\xEEnement et qui cherchent \xE0 courir leur premier marathon ! Tu as peut-\xEAtre couru un 10 km ou un 1/2 marathon dans le pass\xE9 et tu veux passer \xE0 la distance sup\xE9rieure. Ce plan commence \xE0 13 miles(20km)/semaine et augmente jusqu'\xE0 50 miles(80km)/semaine \xE0 la semaine 18. Con\xE7u pour progresser de mani\xE8re s\xFBre et efficace, les athl\xE8tes peuvent \xEAtre tranquilles en sachant qu'ils seront sur la bonne voie pour courir 26,2 miles (42,195km) apr\xE8s les 20 semaines. Si tu es actuellement au-dessus du volume d'entra\xEEnement des premi\xE8res semaines, maintiens ton volume actuel jusqu'\xE0 ce que tu atteignes le point o\xF9 le plan comporte plus de kilom\xE8tres. Continue simplement \xE0 partir de l\xE0 et profite des r\xE9sultats ! N'oublie pas de partager ton exp\xE9rience avec nous et de nous dire comment se passe ton entra\xEEnement ! #exploreperfection"
    },
    '6-Week Mountain Running Training Plan': {
      title: "Plan d'entraînement de 6 semaines pour la course en montagne",
      desc: "Entraînement de course en montagne de 6 semaines conçu pour augmenter ta capacité à soutenir des intensités plus élevées sur des terrains vallonnés et techniques. Ce plan se concentre sur des journées plus longues à des intensités faibles/modérées. Il contient une accumulation de 2 blocs sans temps de repos, mais hautement spécifique à une grande variété de projets de montagne. Les athlètes doivent être prêts à courir 6 jours jusqu'à 80 km par semaine. Avoir accès à un terrain vallonné est nécessaire."
    },
    '12-Week 100 Mile Ultra Training Plan': {
      title: "Plan d'entraînement de 12 semaines pour l'Ultra 100 Mile",
      desc: "Pour les athlètes qui souhaitent commencer ce plan d'entraînement, nous leur recommandons d'avoir une condition physique de base d'au moins 80 et de courir en moyenne plus de 40 miles par semaine. Si vous n'êtes pas encore à ce niveau, veuillez suivre l'un de nos autres plans d'entraînement pour atteindre ce point. Ce plan est conçu pour développer la condition physique des athlètes sur une période de 12 semaines et les préparer à courir un ultra-marathon de 100 miles. Le plan se compose de renforcement et de course à pied pour s'assurer que les athlètes ont la condition musculaire et l'endurance requises. Les entraînements clés de chaque semaine sont les longues courses du week-end. Si vous devez modifier votre emploi du temps, c'est parfait, mais concentrez-vous sur les longues journées et le développement de votre endurance aérobie !"
    },
    '10-Week Return to Running Training Plan': {
      title: "Plan d'entraînement de 10 semaines pour le retour à la course à pied",
      desc: "L'objectif de ce plan d'entraînement est d'aider à guider les utilisateurs vers un retour à la course à pied. Ce plan comprendra des marches, des marches/courses et des courses. Ce plan mènera les utilisateurs à travers une progression graduelle de l'entraînement et les aidera à revenir à une course régulière après 10 semaines d'entraînement. Veillez à commencer à votre propre rythme et à votre niveau de confort. Les jours d'entraînement peuvent être déplacés dans votre calendrier selon vos besoins. Ce programme est conçu pour vous aider à réintégrer l'entraînement dans votre quotidien. Après avoir suivi ce programme pendant 10 semaines, vous aurez la possibilité de suivre un programme spécifique à la course si vous le préférez. Veillez à ce que cela reste amusant et dans les limites des paramètres prescrits. La meilleure façon d'atteindre l'objectif des 10 semaines est de faire preuve de régularité et de prévoir un entraînement réalisable. Vous avez réussi ! Profitez du voyage !"
    },
    '8-Week Off-Season Training Plan': {
      homeRecommendedTitle: "Plan d'entraînement de 8 semaines hors saison",
      title: "Plan d'entraînement hors saison de 8 semaines",
      desc: "Ce programme est conçu pour permettre aux athlètes de rester en mouvement pendant l'intersaison. Nous incorporerons 15-25 miles/semaine de course à pied ainsi que des activités de cross-training. Les athlètes peuvent mélanger n'importe quelle activité d'entraînement croisé où le terme \"cyclisme\" est indiqué. L'objectif global sera d'avoir des athlètes en bonne santé et motivés lorsque viendra leur prochaine saison d'entraînement. Veillez à ce que les choses restent relativement faciles pendant cette partie de l'année. Ceci a pour but de vous aider à récupérer tout en restant en forme."
    },
    '8 Week Threshold Development': {
      title: 'Développement du seuil de 8 semaines',
      desc: "L'objectif de ce plan d'entraînement est d'augmenter le temps au seuil et la VO2 en quelques semaines. Le volume hebdomadaire restera relativement constant, seule une augmentation de l'intensité pouvant créer un changement. Les athlètes doivent être prêts à courir 5-6 jours par semaine avec un volume de 25-40 miles (40-65km) par semaine. Chaque semaine, l'accent sera mis sur des séries clés de seuil ou de VO2. Les courses de base sont destinées à maintenir le volume et à aider les athlètes à récupérer. Ne dépassez pas les allures de course facile. À la fin de ces 8 semaines, veuillez effectuer un test de 5 km. Si votre rythme de seuil a changé, vous devriez voir de nouvelles zones et être en mesure de réappliquer ce plan d'entraînement si vous souhaitez travailler davantage le seuil."
    },
    '12 Week Run Speed Development': {
      title: '12 semaines de développement de la vitesse de course',
      desc: "Ce programme est conçu pour les coureurs ayant un kilométrage hebdomadaire de base de 25-40 miles (40-65km). Tout au long de ce plan, le volume hebdomadaire restera autour de 25-30 miles chaque semaine. Les coureurs sont autorisés à ajouter plus de volume de base si nécessaire, mais l'accent doit rester mis sur les entraînements de vitesse. En raison de la nature de l'entraînement pour la vitesse de course, il est recommandé aux athlètes de prendre des jours de récupération supplémentaires si leurs jambes sont endolories ou fatiguées par les entraînements précédents. À la fin de ces 12 semaines, les coureurs devraient constater une augmentation de leur seuil, de leur VO2 et de leur efficacité de course. Effectuer un 5 km, un 10 km ou un semi-marathon en suivant ce plan devrait se traduire par des temps plus rapides."
    },
    '50k Trail Run Training Plan': {
      title: "Plan d'entraînement pour un trail de 50 km",
      desc: "Ce plan d'entraînement commence à 25 miles par semaine et monte progressivement jusqu'à 60+ miles à la fin. Les 10 premières semaines de ce plan sont conçues pour développer l'endurance aérobie des athlètes. Les 10 dernières semaines sont spécifiques aux exigences du trail et visent à atteindre un niveau de forme maximal avant la compétition. Les épreuves de trail étant toutes différentes, il est recommandé aux athlètes de courir sur des sentiers ou dans des conditions similaires au parcours de la course. Ce plan garantira que votre condition physique est prête, mais les athlètes doivent rechercher du dénivelé pour aider à maximiser leur préparation. Comme toujours, si un coureur a besoin de jours de repos supplémentaires, il doit les prendre. Les jours clés de ce plan sont les mercredis et les week-ends. Vous devez en faire votre priorité absolue. Bonne lecture !"
    },
    'Beginner Sprint Distance Triathlon Plan': {
      title: 'Plan de triathlon distance sprint pour débutants',
      desc: "Un plan de 12 semaines conçu pour aider les triathlètes à réaliser 800 mètres de natation, 12,4 miles de vélo et 3,1 miles de course à pied. Ce programme utilise la fréquence cardiaque pour garantir un entraînement approprié et efficace. Les athlètes doivent maitriser la technique de base de la natation avant de commencer. Les athlètes doivent également être capables de s'entraîner 4 à 5 fois par semaine pendant 30 à 45 minutes par jour avant de commencer ce programme."
    },
    '12 Week Half Marathon HR Plan': {
      homeRecommendedTitle: "Semi-marathon - 12 semaines d'entraînement",
      title: 'Plan FC de 12 semaines pour le semi-marathon',
      desc: "Ce programme est conçu pour les coureurs débutants et intermédiaires. Les coureurs doivent être à l'aise pour courir 4 fois par semaine et avoir un volume hebdomadaire de 10 à 15 miles. Le programme utilise les zones de fréquence cardiaque pour garantir un entraînement approprié et efficace. À la fin du plan, l'utilisateur courra 30 miles par semaine et aura augmenté son endurance aérobie et sa capacité à maintenir des efforts en tempo."
    },
    'Beginner Runner Base Plan (Imperial)': {
      title: 'Plan de base pour coureur débutant',
      desc: "Un plan de 10 semaines conçu pour un coureur débutant ou intermédiaire, allant jusqu'à 30 miles par semaine. En supposant que l'allure est maintenue tout au long de la semaine, les courses les plus longues sont censées être naturellement plus difficiles que les autres jours, ce qui est normal. Ce plan est en miles."
    },
    '12 Week 5000m Training Plan (Metric)': {
      title: "Plan d'entraînement de 12 semaines pour le 5000m (métrique)",
      desc: "Un plan de 12 semaines créé par l'athlète olympique américaine Kim Conley. Les coureurs doivent être prêts à courir 6 à 7 fois par semaine. Le samedi est un jour de repos, mais vous pouvez courir jusqu'à 60 minutes si nécessaire. Ce plan est en mètres."
    },
    'Beginner Runner Base Plan (Metric)': {
      title: 'Plan de base pour coureur débutant (métrique)',
      desc: "Un plan de 10 semaines conçu pour un coureur débutant ou intermédiaire, allant jusqu'à 30 miles par semaine. En supposant que l'allure est maintenu tout au long de la semaine, les courses les plus longues sont censées être naturellement plus difficiles que les autres jours, ce qui est normal. Ce plan est en mètres."
    },
    'Sub-3:15 Marathon': {
      title: 'Marathon en moins de 3:15',
      desc: 'Un programme de 8 semaines conçu pour les marathoniens en 3:30 ayant une grande endurance aérobie pour courir un marathon de moins de 3:15. Les coureurs doivent être prêts à courir 5-6 jours par semaine.'
    },
    'Sub-25 5K': {
      title: 'Moins de 25 km',
      desc: 'Un plan de 14 semaines conçu pour les coureurs qui veulent courir un 5 km en 25 minutes. Les coureurs doivent être prêts à courir 5 jours par semaine.'
    },
    'Competitive 10K': {
      title: '10 km compétitif',
      desc: "Un plan de 12 semaines conçu pour les coureurs en compétition afin de s'entraîner pour les courses de 10 km. Les coureurs doivent être prêts à courir entre 30 et 40 miles par semaine."
    },
    'Half Marathon': {
      title: 'Semi-marathon',
      desc: "Un plan de 15 semaines conçu pour les coureurs en compétition afin de s'entraîner pour un semi-marathon. Les coureurs doivent être prêts à courir entre 55 et 70 miles par semaine."
    },
    Marathon: {
      title: 'Marathon',
      desc: "Un plan de 12 semaines conçu pour les coureurs qui veulent atteindre leur forme optimale pour le marathon. Si vous avez couru moins de 30 miles par semaine, vous devez suivre le plan d'entraînement de base pour passer à 30 miles par semaine. L'objectif principal de ce plan est d'améliorer votre rythme de lactate par le biais de tempo, d'intervalles de lactate et de longues courses de progression. Les priorités secondaires sont l'augmentation des courses longues et du kilométrage total."
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/contact.js
/* harmony default export */ const fr_contact = ({
  pageTitle: 'NOUS CONTACTER',
  companyName: 'COROS Wearables, Inc.',
  mail: 'Courrier',
  mailValue: "\n  3 Peters Canyon Rd\n  Suite 100\n  Irvine, CA 92606\n  USA",
  phone: 'Téléphone',
  phoneValue: '+1 (855) 934-4411',
  businessHours: "Heures d'ouverture",
  businessHoursValue: 'Du lundi au vendredi de 9h00 à 18h00 (heure du Pacifique)',
  salesSupport: 'Soutien aux ventes et aux partenaires',
  salesSupportValue: 'sales@coros.com',
  consumerSupport: 'Soutien aux consommateurs',
  consumerSupportValue: 'support@coros.com',
  careerOpportunities: 'Opportunités de carrière',
  careerOpportunitiesValue: 'careers@coros.com',
  mediaRelations: 'Relations avec les médias',
  mediaRelationsValue: 'press@coros.com',
  distributors: 'Distributeurs COROS internationaux',
  area: {
    hk: 'Hong Kong',
    au_nz: 'Australie et Nouvelle-Zélande',
    ar: 'Argentine',
    BeNeLux: 'BeNeLux',
    bg: 'Bulgarie',
    br: 'Brésil',
    ca: 'Canada',
    cl: 'Chili',
    co: 'Colombie',
    ec: 'Équateur',
    ee_lv_lt: 'Estonie, Lettonie, Lituanie',
    fr: 'France',
    de: 'Allemagne',
    gt: 'Guatemala',
    gr: 'Grèce',
    id: 'Indonésie',
    il: 'Israël',
    it: 'Italie',
    in_np_bd: 'Inde, Népal, Bangladesh',
    jp: 'Japon',
    my: 'Malaisie',
    mt: 'Malte',
    mu: 'Maurice',
    mx: 'Mexique',
    me: 'Moyen-Orient',
    nordics: 'Pays nordiques (Suède, Norvège, Finlande, Danemark, Islande)',
    pl: 'Pologne, Hongrie, République tchèque, Slovaquie, Slovénie, Croatie, Serbie',
    ph: 'Philippines',
    qa: 'Qatar',
    ro: 'Roumanie',
    ru: 'Russie',
    sg: 'Singapour',
    za: 'Afrique du Sud',
    es: 'Espagne, , Andorre',
    ch: 'Suisse',
    th: 'Thaïlande',
    uk: 'Royaume-Uni',
    vn: 'Vietnam',
    ve: 'Venezuela'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/warranty.js
/* harmony default export */ const fr_warranty = ({
  title: 'Garantie limitée',
  desc: "Une entreprise de technologie sportive de performance qui aide les athlètes à s'entraîner pour donner le meilleur d'eux-mêmes.",
  pageTitle: 'GARANTIE',
  'getting warranty service': {
    title: 'Obtenir un service de garantie',
    content: "Obtenir un service de garantie\",\n    \"content\": \"Les produits COROS sont fabriqu\xE9s selon les normes de qualit\xE9 les plus \xE9lev\xE9es possibles. Toutefois, dans les rares cas o\xF9 un produit pr\xE9sente des probl\xE8mes de qualit\xE9, nous nous portons garants de nos produits. COROS offre une garantie de 2 ans \xE0 partir de la date d'activation pour les montres et une garantie de 6 mois pour les PODs. Les casques sont couverts par une garantie d'un an. Tous les accessoires sont couverts par une garantie de 90 jours.\n\n        Si vous avez un probl\xE8me avec votre produit r\xE9sultant d'un d\xE9faut de fabrication, COROS vous aidera \xE0 remplacer votre produit ou \xE0 rem\xE9dier \xE0 votre probl\xE8me.\n\n        Il vous suffit de nous contacter par t\xE9l\xE9phone ou par e-mail pour nous aider \xE0 remplir une demande de garantie et nous vous aiderons \xE0 obtenir la garantie dans les meilleurs d\xE9lais."
  },
  returns: {
    title: 'Renvoie à',
    content: "COROS propose une politique de retour garantie de 30 jours pour les commandes passées sur coros.com uniquement. Si, pour quelque raison que ce soit, vous n'êtes pas satisfait, vous pouvez retourner votre achat dans les 30 jours suivant la date de livraison pour un remboursement complet du prix d'achat. Les produits doivent être retournés dans leur état physique d'origine avec tous les accessoires et l'emballage. COROS ne couvre pas les frais d'expédition des produits retournés pour un remboursement. Veuillez contacter le service clientèle pour les procédures de retour et les approbations. Les commandes passées en dehors de la fenêtre de retour ne seront pas acceptées ou approuvées. Le remboursement approuvé prend jusqu'à 5 jours ouvrables pour apparaître sur votre compte bancaire. Les frais d'expédition originaux et les frais de douane ne sont pas remboursables."
  },
  'out-of-warranty service': {
    title: 'Service hors garantie',
    content: 'COROS offre des services de réparation/remplacement pour les montres hors garantie au coût ci-dessous.',
    extraContent: "L'unité de remplacement bénéficie d'une garantie de 180 jours et sera neuve ou équivalente à une unité neuve en termes de performances et de fiabilité.\nCliquez ici pour connaître les détails de la politique et du service hors garantie."
  },
  warranty: {
    title: 'Garantie',
    content: 'COROS Wearables Inc. (ci-après dénommée "COROS") garantit que le Produit (défini ci-dessous) livré dans le cadre des présentes à l\'acheteur initial (ci-après dénommé "Acheteur initial") par COROS.com ou un Revendeur agréé COROS (ci-après dénommé "Revendeur agréé") sera exempt de défauts de matériaux et de fabrication qui affectent négativement les performances du Produit dans des conditions normales d\'utilisation, conformément aux conditions décrites ci-dessous. La présente garantie limitée n\'est valable que pour l\'acheteur initial, n\'est pas transférable et ne s\'étend pas aux produits d\'occasion ou aux produits qui n\'ont pas été achetés auprès de COROS.com ou d\'un revendeur agréé.\n\nProduits couverts et durée de la garantie\n\n Dans le cadre de la présente garantie limitée, les termes "Produits" et "Produit" désignent le ou les produits COROS individuels décrits ci-dessous par le préfixe suivant :'
  },
  'Limited Warranty Term': {
    title: 'Durée de la garantie limitée',
    content: "La durée de la Garantie limitée est limitée à deux ans à compter de la date d'achat initiale pour les montres, un an pour les casques et quatre-vingt-dix jours pour les accessoires.\n\n Aucun élément des instructions ou des informations relatives aux produits ne doit être interprété comme créant une garantie expresse de quelque nature que ce soit concernant les produits. Aucun agent, employé, revendeur, représentant ou revendeur n'est autorisé à modifier ou à étendre la présente garantie limitée ou à faire des déclarations ou des revendications contraignantes, que ce soit dans le cadre de publicités, de présentations ou autres, au nom de COROS concernant les produits ou la présente garantie limitée. La présente garantie limitée vous confère des droits légaux spécifiques et vous pouvez également bénéficier d'autres droits qui varient d'un État à l'autre ou d'une province à l'autre. Si une partie de la présente garantie limitée est jugée illégale ou inapplicable, cette illégalité ou inapplicabilité partielle n'affecte pas l'applicabilité du reste de la garantie limitée. La Convention des Nations Unies sur les contrats de vente internationale de marchandises est spécifiquement rejetée. Les tribunaux d'État et/ou fédéraux résidant dans le comté d'Orange, en Californie, auront la compétence exclusive pour tout litige ou réclamation découlant des présentes conditions de garantie limitée."
  },
  'not covered': {
    title: "Ce qui n'est pas couvert par cette garantie limitée",
    content: "La présente garantie limitée ne s'applique qu'aux produits utilisés conformément à la présente garantie limitée et à la documentation publiée par COROS, et ne couvre pas :\n\nLes produits modifiés en dehors des spécifications d'usine et/ou qui ne sont pas dans l'état d'origine.\nLes produits dont le numéro de série et/ou les étiquettes d'identification d'usine ont été modifiés, qu'ils aient été retirés, déplacés, falsifiés, défigurés, endommagés, altérés ou rendus illisibles.\nLes dommages au corps du produit, qu'ils soient coupés, rayés, déformés, pliés, fissurés, bosselés ou cassés.\\Tout dommage aux composants, au matériel et/ou à l'assemblage des produits, y compris, mais sans s'y limiter, les dommages causés par une négligence, un abus, un accident, une mauvaise utilisation ou un stress physique, électrique ou électromécanique inhabituel.\\Les produits exposés à un liquide, à des résidus de liquide ou à des environnements excessivement humides entraînant de la rouille, de l'humidité, des taches, de la corrosion ou des déversements de liquide sur les composants, le matériel ou l'électronique. Brûlures ou embrasement des composants à la suite d'un accident ou d'un déversement de liquide. L'utilisation directe de peinture, l'immersion de l'alimentation dans l'huile, l'utilisation d'adhésifs ou de colles sur toute partie du produit, l'utilisation de soudure sur le produit, la modification de l'électronique et/ou des composants. L'exposition à des résidus de goudron de cigarette, à l'humidité, au sable, à la saleté ou à des débris excessifs.\\Les produits rendus non fonctionnels en raison d'un accident, d'une collision avec un objet ou un outil, de l'utilisation d'une force excessive, d'une négligence, d'une exposition au feu ou à une chaleur anormale, d'une inondation, de la saleté, d'une tempête de vent, de la foudre, d'un tremblement de terre, de conditions météorologiques excessives ou d'autres catastrophes naturelles, d'un vol, de fusibles grillés, d'une utilisation incorrecte de toute source électrique ou de circuits électriques surchargés.\\Défauts ou dommages résultant de l'utilisation d'un produit tiers en conjonction ou en connexion avec des accessoires, des produits, des logiciels ou des équipements périphériques secondaires non fournis pour être utilisés avec le produit ou non approuvés par COROS.\n Défauts ou dommages résultant d'un test, d'un fonctionnement, d'une maintenance, d'une installation, d'un service ou d'un réglage inapproprié non fourni ou approuvé par COROS.\\L'utilisation d'un emballage d'expédition inadéquat ou l'utilisation d'un matériel d'emballage inadéquat entraînant des dommages au produit lors de son transport par le service de messagerie de l'acheteur d'origine ou de l'acheteur d'occasion. Les produits achetés auprès de revendeurs ou de concessionnaires non autorisés, ce qui inclut, sans s'y limiter, les marchés en ligne tels qu'eBay (à l'exception de la boutique officielle eBay de COROS), Amazon (à l'exception de la boutique officielle Amazon Marketplace de COROS) et d'autres sites Web d'enchères et/ou de marchés en ligne. Si vous n'êtes pas sûr qu'un revendeur soit un revendeur agréé, veuillez contacter COROS pour en avoir la confirmation.\n\nRecours exclusif et remboursements limités\n\n Sauf disposition spécifique ci-dessous, votre seul recours en cas de produit défectueux sera la réparation ou le remplacement dudit produit défectueux conformément aux conditions générales de la présente garantie limitée.\n\n COROS offre uniquement des remboursements pour les produits achetés directement sur son site Web officiel COROS.com si ces produits sont retournés dans les 30 jours suivant la livraison.\n\n Pour les produits qui n'ont pas été achetés sur COROS.com, les demandes de remboursement, le cas échéant, sont soumises à la politique de remboursement du revendeur agréé et doivent être traitées par le biais de la politique de retour du revendeur agréé d'origine. COROS n'honorera aucun remboursement offert par les revendeurs agréés. COROS ne couvre pas les frais d'expédition des produits retournés pour remboursement."
  },
  'how to obtain': {
    title: 'Comment obtenir un service de garantie',
    content: "Pour obtenir un service de garantie dans le cadre de cette garantie limitée, vous devez contacter COROS pour recevoir un numéro d'autorisation de retour de marchandise (RMA) avant de renvoyer le produit à COROS conformément à la procédure RMA de COROS. Veuillez contacter le support technique de COROS au +1 (855) 934-4411 ou nous contacter par e-mail à support@coros.com."
  },
  'product warranty replacement': {
    title: 'Remplacement de la garantie du produit',
    content: "COROS se réserve le droit de vérifier la validité de votre garantie et de votre demande de service sous garantie. COROS se réserve le droit de vous facturer les frais d'expédition et les frais de service pour tout produit incomplet, endommagé ou modifié qui est renvoyé à COROS et qui nécessite une réparation ou un remplacement ou qui n'est pas autrement couvert par la présente garantie limitée. Les frais de service sont variables et se basent sur le coût réel du matériel et de la main d'œuvre raisonnablement nécessaires pour remplacer les pièces manquantes ou remettre les pièces modifiées dans leur état d'origine à l'usine. Les produits envoyés pour une demande d'autorisation de retour d'article seront réparés et renvoyés ou remplacés par un produit recertifié testé de manière approfondie et présentant des performances égales ou supérieures.\\La présente garantie limitée de COROS commence à la date d'achat initiale du produit, telle que vérifiée par une preuve d'achat fournie et/ou confirmée par un revendeur agréé. Tous les produits retournés aux acheteurs originaux ou aux acheteurs d'occasion par le service RMA de COROS sont des produits recertifiés testés de manière approfondie. Les pièces et/ou Produits de remplacement peuvent inclure des pièces ou Produits neufs ou remis à neuf et sont garantis uniquement jusqu'à l'expiration de la période de garantie originale. Les pièces et/ou Produits de remplacement répondront aux normes de performance et de fiabilité d'un Produit neuf ou d'une pièce du même modèle, cependant, ces Produits et/ou pièces peuvent présenter de petites rayures, de petites bosses, d'autres défauts cosmétiques ou une utilisation perceptible.\n\n Si un RMA est nécessaire dans les 30 jours suivant la date de livraison d'un Produit neuf en boîte, un remplacement OEM neuf en boîte sera envoyé à l'Acheteur initial en retour, sous réserve de disponibilité."
  },
  'shipping to coros for warranty': {
    title: 'Expédition à COROS pour la garantie'
  },
  'warranty replacement shipping': {
    title: 'Garantie Remplacement Expédition',
    content: "COROS expédiera à l'adresse confirmée au moment de l'approbation de votre RMA. Si votre remplacement sous garantie ne peut être livré parce que l'adresse n'est pas valide ou que la livraison n'est pas effectuée en raison d'un manque d'accès, d'une adresse inconnue, d'obstacles de sécurité ou de zones fermées, vous devrez payer des frais de réacheminement ou de réexpédition qui varieront en fonction de votre région. Vous devez contacter COROS avant l'expédition pour obtenir de l'aide afin d'éviter ces frais. COROS n'est pas responsable des colis livrés à une adresse périmée. Si le produit est renvoyé à COROS pour cause de non-livraison, vous devrez payer tous les frais d'expédition supplémentaires pour la réexpédition. COROS vous encourage à vérifier votre adresse de livraison avant de soumettre toute demande de RMA. Tous les remplacements RMA porteront la mention \"Remplacement de la garantie\" sur le colis afin d'éviter toute taxe, droit et/ou frais de courtage par le biais des douanes ou autres. COROS n'est pas responsable des frais facturés par l'organisme gouvernemental du pays de destination, les courtiers ou toute autre tierce partie. COROS n'est pas responsable de tout colis non réclamé qui est retenu par votre organisme gouvernemental pour le dédouanement ou autre et qui devient abandonné à la suite du refus de conformité du dédouanement.\nLe courrier postal n'est pas recommandé pour l'expédition de tout produit COROS. Si votre colis est reçu avec des dommages physiques, une réclamation ne peut pas être traitée en raison des limitations des services postaux, et le colis sera renvoyé à l'expéditeur sans options alternatives.\n\nNous nous réservons le droit de mettre à jour cette Garantie limitée\n\nNous avons et nous continuerons à faire des changements de politique au fil du temps. Veillez à lire attentivement ce document et à vérifier les mises à jour. COROS se réserve le droit de modifier cette politique sans préavis. Dernière mise à jour le 18 mars 2020."
  },
  registration: 'ENREGISTREMENT DE LA GARANTIE',
  contact: {
    us: {
      area: 'États-Unis',
      phone: '#ERROR!',
      email: 'support@coros.com',
      desc: "Si vous avez besoin d'une assistance en dehors des États-Unis et du Canada, veuillez utiliser les informations ci-dessus et nous vous dirigerons vers la meilleure assistance locale."
    },
    uk: {
      area: 'Royaume-Uni',
      address: '2pure Ltd, 4 Royston Road, Deans Industrial Estate, Livingston, West Lothian, EH54 8AH, Royaume-Uni',
      phone: '#ERROR!',
      email: 'support@coros.com',
      question: 'consumersupport@2pure.co.uk',
      desc: "Si vous avez besoin d'une assistance en dehors des États-Unis et du Royaume-Uni, veuillez contacter support@coros.com et nous vous dirigerons vers l'assistance la mieux adaptée à votre situation."
    },
    ca: {
      area: 'Canada',
      phone: '#ERROR!',
      email: 'contact@abritu-sport.com'
    }
  },
  checkWarranty: {
    title: 'Vérifier la garantie de l’appareil - COROS',
    desc: "Sélectionne le type de ton appareil et entre l'ID à 6 chiffres pour consulter l'état de ta garantie COROS.",
    snGuide: {
      title: 'Vous ne trouvez pas le numéro de série ?',
      desc: "Chaque produit COROS poss\xE8de un num\xE9ro d'identification \xE0 6 chiffres. La plupart des produits ont \xE9galement un num\xE9ro de s\xE9rie \xE0 10 chiffres. Vous trouverez ci-dessous diff\xE9rentes fa\xE7ons de les localiser.",
      tips: [{
        title: "ID de l'appareil",
        tips: ["Une fois connect\xE9 \xE0 l'application COROS \u2192 page Profil \u2192 tapez sur l'ic\xF4ne de l'appareil.", "Sur votre COROS Watch \u2192 Syst\xE8me \u2192 Plus de param\xE8tres \u2192 Informations sur l'appareil \u2192 ID de l'appareil"]
      }, {
        title: 'Numéro de série',
        tips: ["Imprim\xE9 sur l'autocollant de l'emballage (le cas \xE9ch\xE9ant)", "Imprim\xE9 sur le dispositif (le cas \xE9ch\xE9ant)"]
      }]
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/about.js
/* harmony default export */ const fr_about = ({
  202208: {
    time: 'août 2022',
    desc: "Kilian Jornet remporte sa 4e victoire à l'Ultra Trail Mont Blanc, en passant sous les 20 heures et en établissant un nouveau record du parcours. Le Français Mathieu Blanchard monte sur son deuxième podium consécutif en terminant 2e à quelques minutes de Jornet, sous les 20 heures et en battant le précédent record du parcours. Les deux athlètes ont utilisé la COROS APEX Pro pour leurs courses record."
  },
  20220516: {
    time: '16 mai 2022',
    desc: "COROS publie une mise à jour importante du micrologiciel, qui comprend le suivi des mouvements « rapid eye », le taux d'effort perçu pour les activités, la fonctionnalité « Trouver mon téléphone/ma montre », et de multiples améliorations des performances et des algorithmes."
  },
  201802: {
    time: 'février 2018',
    desc: 'COROS déplace son siège social américain de Virginie en Californie du Sud.'
  },
  201808: {
    time: 'août 2018',
    desc: "L'Ultrarunner Dominic Grossman et Sally McRae rejoignent COROS et deviennent les deux premiers athlètes professionnels de la marque."
  },
  201902: {
    time: 'février 2019',
    desc: "La COROS APEX remporte le prix de la rédaction de Runner's World 2019."
  },
  201905: {
    time: 'mars 2019',
    desc: "La COROS APEX a été désignée meilleure montre de sa catégorie par le Guide de l'acheteur 2019 des triathlètes (Triathlete 2019 Buyer''s Guide)."
  },
  201908: {
    time: 'août 2019',
    desc: "L'équipe COROS se lance sur l'UTMB 2019 - Les athlètes COROS Hillary Allen  (États-Unis), termine 2e de la TDS et Maite Maora (Espagne) termine 3e de l'UTMB."
  },
  201910: {
    time: 'octobre 2019',
    desc: 'La COROS APEX Pro a reçu le prix Best In Gear de BelieveInTheRun.'
  },
  202001: {
    time: 'janvier 2020',
    desc: "COROS élargit son équipe d'athlètes professionnels pour inclure des grimpeurs et des alpinistes professionnels à commencer par la légende Steve House."
  },
  202002: {
    time: 'février 2020',
    desc: 'COROS signe ses premiers athlètes professionnels sur route, à commencer par Des Linden, deux participations aux Jeux Olympiques, ainsi que Parker Stinson, détenteur d\'un record des États-Unis, Emma Bates, douze fois "All American", Kellyn Taylor et Reed Fischer.'
  },
  202005: {
    time: 'mai 2020',
    desc: "COROS lance les modes musculation et entraînement. Un programme complexe de construction d'entraînements fractionnés donnant la possibilité d'y donner accès à des partenaires d'entraînement et de télécharger des entraînements d'athlètes professionnels. En outre, le mode musculation comprend une bibliothèque de plus de 200 types d'exercices ainsi que des instructions animées pour les réaliser."
  },
  202007: {
    time: 'juillet 2020',
    desc: "COROS lance l'édition limitée COROS VERTIX Mojito, fabriquée à seulement 200 exemplaires dans le monde. La montre est équipée du tout nouveau bracelet en nylon, qui est 50 % plus léger que le bracelet en silicone standard. Les bracelets en nylon sont disponibles en 4 couleurs et seront disponibles pour toutes les montres COROS."
  },
  20160907: {
    time: '7 september 2016',
    desc: "COROS lance son premier produit : LINX Smart Cycling Helmet et 1 135 backers s'engagent à verser 319 765 dollars peu après le lancement de la campagne Kickstarter."
  },
  20171205: {
    time: '5 décembre 2017',
    desc: 'COROS lance son deuxième produit et récolte 130 974 USD auprès de 835 backers lors de la campagne Indiegogo pour les casques cyclistes intelligents OMNI.'
  },
  20180515: {
    time: '15 mai 2018',
    desc: 'COROS lance sa première montre GPS : la montre GPS PACE Multisport.'
  },
  20181209: {
    time: '9 décembre 2018',
    desc: "L'Ultrarunner Camille Herron porte la montre COROS APEX 46 mm sur sa course de 24 heures, qui lui a permis de battre le record du monde. Il reste 32 % de batterie à sa montre à l'issue de la course."
  },
  20190109: {
    time: '9 janvier 2019',
    desc: "COROS lance l'APEX 24h World Record Limited Edition pour célébrer l'exploit de Camille Herron qui a parcouru 163 miles en 24 heures - un record qu'elle éclipsera elle-même plus tard."
  },
  20190514: {
    time: '14 mai 2019',
    desc: "COROS lance la montre VERTIX GPS Adventure Watch - la montre la plus puissante de la marque avec 60 heures d'autonomie GPS, et la première montre de la gamme à inclure un oxymètre de pouls."
  },
  20190523: {
    time: '23 mai 2019',
    desc: "Roxanne Vogel utilise la VERTIX pour établir le record de rapidité d'ascension du Mont Everest de porte à porte."
  },
  20190917: {
    time: '17 september. 2019',
    desc: 'COROS lance la montre GPS multisports APEX Pro Premium.'
  },
  20200113: {
    time: '13 janvier 2020',
    desc: "Hilaree Nelson et Jim Morisson, athlètes professionnels COROS, emportent leur montre VERTIX dans une expédition d'une journée vers le plus haut sommet de l'Antarctique, le mont Vinson. La montre haut de gamme de la marque est testée dans des conditions parmi les plus difficiles au monde."
  },
  20200229: {
    time: '29 février 2020',
    desc: "Plus de 10 athlètes professionnels et ambassadeurs de COROS ont participé aux trials de marathon pour les Jeux olympiques de 2020 à Atlanta, en Géorgie. Desiree Linden, fraichement signée, a mené l'équipe avec une 4e place."
  },
  20200825: {
    time: '25 août 2020',
    desc: "COROS lance la PACE 2, la montre GPS la plus légère jamais fabriquée, ainsi que plusieurs fonctionnalités logicielles clés, dont les données de puissance de course au poignet, la première intégration native et complète de Stryd par une marque de montres, et l'extension de la plateforme d'entraînement COROS pour inclure des plans d'entraînement quotidiens, hebdomadaires et mensuels complets."
  },
  20201104: {
    time: '4 novembre 2020',
    desc: 'COROS rajoute plusieurs nouvelles activités de sports nautiques, y compris un mode unique de Speedsurfing co-développé avec la principale autorité en matière de speedsurfing - GPS-Speedsurfing.com. La liste des modes de sports nautiques est la suivante : Speedsurfing, Planche à voile, Eau calme, Eau plate, Rameur et Rameur indoor.'
  },
  20201124: {
    time: '24 novembre 2020',
    desc: "COROS signe le détenteur du record du monde de marathon Eliud Kipchoge dans son équipe d'athlètes professionnels. Outre le parrainage individuel d'Eliud, COROS a également annoncé que la marque deviendrait partenaire montres GPS officiel de l'équipe NN Running Team, qui comprend certains des meilleurs coureurs sur piste et sur route du monde (dont Eliud Kipchoge)."
  },
  20210112: {
    time: '12 janvier 2021',
    desc: "COROS lance avec succès la Desert Sol VERTIX, une version saisonnière en édition limitée du modèle phare. Ce lancement symbolise une renaissance, sortie des cendres de 2020, qui est très probablement l'année la plus difficile de notre génération."
  },
  20210118: {
    time: '18 janvier 2021',
    desc: "Toujours en évolution, COROS démarre la nouvelle année avec une mise à jour passionnante du micrologiciel qui inclut des points de contrôle de navigation, des centièmes de seconde aux tours et des entraînements personnalisés en mode piste. L'application COROS reçoit également des mises à jour, notamment le suivi de la météo et des couches cartographiques améliorées."
  },
  20210127: {
    time: '27 janvier 2021',
    desc: "COROS déploie un deuxième lancement de produit réussi au cours du premier mois de 2021, l'APEX PRO WHITE. L'APEX PRO WHITE s'inspire du contraste entre la glace et la roche des lacs Mammoth, un terrain de jeu apprécié des athlètes et des employés de COROS."
  },
  20210520: {
    time: '20 mai 2021',
    desc: 'COROS lance la série PACE 2 Speed. La série Speed est conçue aux côtés des athlètes les plus rapides du monde. Disponible en trois couleurs de saison : Evergreen, Track Red et Medal Gold.'
  },
  20210629: {
    time: '29 juin 2021',
    desc: "COROS lance la plateforme de science du sport EvoLab. Après d'innombrables heures de recherche, de développement et d'ingénierie, et grâce aux efforts conjoints de nos milliers de testeurs publics, COROS EvoLab est désormais disponible pour tous les utilisateurs de montres COROS."
  },
  20210722: {
    time: '22 juillet 2021',
    desc: "L'athlète professionnelle COROS Sally McRae remporte la Badwater 135. Sally a remporté l'épreuve féminine en 30:48:47 - terminant avec deux heures et 49 minutes d'avance sur la deuxième concurrente."
  },
  20210802: {
    time: '2 août 2021',
    desc: "COROS signe un contrat avec le grimpeur de renommée mondiale Tommy Caldwell, qui fait partie de ses athlètes professionnels. Tommy a été surnommé le \"roi d'El Cap\" et est une légende vivante dans le monde de l'escalade. Il a grimpé dans le monde entier et a créé certaines des voies d'escalade les plus difficiles des États-Unis."
  },
  20210808: {
    time: '8 août 2021',
    desc: "Samedi 8 août, Eliud Kipchoge remporte le marathon masculin (2:08.38) et conserve ainsi son titre des Jeux olympiques de 2016 au Brésil. EK continue d'inspirer la communauté mondiale des coureurs et prouve que #NoHumanIsLimited."
  },
  20210817: {
    time: '17 août 2021',
    desc: "COROS lance avec succès ses toutes nouvelles montres VERTIX 2 et Eliud Kipchoge PACE 2 destinées aux ommunautés mondiales de course à pied et d'outdoor. La VERTIX 2 est dotée d'une technologie révolutionnaire, notamment d'une autonomie de 140 heures en mode full GPS. L'édition limitée de la montre EK PACE 2 est conçue avec goût dans des couleurs rouge et verte inspirées des couleurs nationales du Kenya, pays natal d'Eliud. Il s'agit du plus grand lancement multi-produits de l'histoire de COROS."
  },
  20211014: {
    time: '14 octobre 2021',
    desc: "COROS introduit le mode Escalade Multi-Pitch sur VERTIX 2. Ce nouveau mode d'entraînement est spécialement conçu pour les activités d'escalade technique sur plusieurs longueurs, permettant aux utilisateurs d'enregistrer le nombre de pas et les notes, tout en suivant séparément l'approche, la montée et la descente."
  },
  20211122: {
    time: '22 novembre 2021',
    desc: "COROS publie une mise à jour majeure de son micrologiciel qui ajoute la prise en charge des cartes Topo/Paysage, le mode Marche, la prise en charge de Galileo, le raccourci clavier LIGHT et le contrôle de la caméra à la première VERTIX et l'APEX Pro."
  },
  20220120: {
    time: '20 janvier 2022',
    desc: "COROS publie une autre mise à jour majeure de son micrologiciel, qui inclut l'allure ajustée, le mode Course Virtuelle, la prise en charge des capteurs de température, l'étalonnage de la température, ainsi que de nombreuses améliorations des performances et des algorithmes."
  },
  20220125: {
    time: '25 janvier 2022',
    desc: "COROS présente et commence à livrer le mousqueton VERTIX 2. Conçu pour répondre aux besoins des alpinistes de l'extrême, le mousqueton est devenu un accessoire indispensable pour les explorateurs de plein air lors de longues randonnées ou d'ascensions afin de visualiser rapidement les principales mesures sur leur VERTIX 2."
  },
  20220307: {
    time: '7 mars 2022',
    desc: "COROS signe les athlètes de sports de montagne de renommée mondiale Kílian Jornet et Emelie Forsberg dans son équipe d'athlètes professionnels. Kilian et Emelie ont à eux deux remporté de nombreux championnats majeurs, notamment l'UTMB, le Hardrock 100, les Sky Running World Series et les Ski Mountaineering World Series. Ils détiennent également d'innombrables records d'ascension de montagne, de descente et de temps le plus rapide connu (FKT)."
  },
  pageTitle: 'À PROPOS DE COROS',
  desc: "COROS est une entreprise de technologie sportive performante qui aide les athlètes à s'entraîner et à donner le meilleur d'eux-mêmes. Pour COROS, tout tourne autour du plein air, des montagnes et d'un style de vie actif et passionné. Nous combinons du matériel de haute qualité avec une technologie innovante pour fournir aux athlètes d'endurance l'équipement sur lequel ils peuvent compter dans les environnements les plus extrêmes du monde. Une technologie avancée avec une expérience utilisateur efficace et intuitive est au cœur de nos préoccupations - lorsque vous utilisez un produit COROS, vous savez que vous obtenez un outil qui a été conçu, testé et perfectionné pour l'athlète, par l'athlète. Les utilisateurs de COROS ont établi des records du monde et sont allés au point le plus élevé de la terre, poussant nos produits à l'extrême. Chez COROS, la création et l'innovation sont sans fin. Nos clients, les athlètes font COROS - faites partie de notre communauté @COROSGlobal sur Facebook et Instagram.",
  milestones: 'LES ÉTAPES DE COROS',
  '201911_1': {
    time: 'novembre 2019',
    desc: 'La COROS VERTIX a reçu la récompense de meilleure montre altimétrique par Outdoor Gear Lab.'
  },
  '201911_2': {
    time: 'novembre 2019',
    desc: "La COROS APEX remporte le prix de l'équipement de l'année 2019 décerné par Runner's World."
  },
  '20191112_1': {
    time: '12 novembre 2019',
    desc: "COROS lance le dispositif d'optimisation des performances (POD) qui fournit des mesures de course avancées."
  },
  '20191112_2': {
    time: '12 novembre 2019',
    desc: "COROS lance le premier mode Piste de sa catégorie dans sa gamme de montres. Un algorithme propriétaire permet à l'utilisateur de sélectionner son couloir avec une précision jamais atteinte par une montre GPS sur une piste standard de 400 mètres."
  },
  '20181025_1': {
    time: '25 octobre 2018',
    desc: 'COROS lance sa troisième génération de casques cyclistes intelligents : SafeSound Road, Urban et Mountain.'
  },
  '20181025_2': {
    time: '25 octobre 2018',
    desc: "COROS lance la montre GPS multisports APEX Premium en deux tailles - 46 mm et 42 mm - permettant une plus grande personnalisation de l'utilisateur."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pace2.js
/* harmony default export */ const fr_pace2 = ({
  title: 'Montre GPS COROS PACE 2',
  desc: 'Notre montre la plus légère pour les athlètes multisports qui vont vite et loin.',
  viewPlans: "Plan d'entraînement vérifié",
  viewWorkouts: "Programme d'entraînement vérifié",
  accessories: 'ACCESSOIRES',
  section: {
    light: {
      title: "Si légère qu'elle pourrait voler",
      desc: 'Avec seulement 29g avec le bracelet nylon COROS, la COROS PACE 2 est la montre GPS la plus légère au monde à son lancement. Ne vous laissez pas alourdir par plus que ce dont vous avez besoin, avec la COROS PACE 2 vous serez prêt pour votre nouveau record personnel - que ce soit en course ou en salle de musculation.'
    },
    processor: {
      title: 'Une force à prendre en compte',
      desc: "La COROS PACE 2 dispose d'un processeur 1,5 fois plus puissant, offre 5 fois plus de RAM et 4 fois plus de stockage que la COROS PACE original, ce qui laisse beaucoup de place pour des fonctionnalités étendues. La COROS PACE 2 sera votre partenaire d'entraînement sur le long terme.",
      pace: 'PROCESSEUR COROS PACE',
      pace2: 'PROCESSEUR COROS PACE 2',
      compareDesc: ['ADDITIONNEL', 'PLUS', 'STOCKAGE']
    },
    counts: {
      title: 'Chaque seconde compte',
      desc: "Nous savons que chaque seconde compte lorsque vous êtes en course pour un nouveau record personnel, donc COROS vous aide à passer moins de temps à vous battre pour obtenir les informations importantes dont vous avez besoin. Avec un nouveau design, comprenant le cadran numérique COROS, la COROS PACE 2 crée une expérience utilisateur encore plus simple. Obtenez vos temps de passage, vérifiez votre fréquence cardiaque ou planifiez votre prochaine séance d'entraînement en utilisant un seul doigt."
    },
    packs: {
      title: 'Un coup de poing',
      desc: "Grâce à la magie de l'efficacité de la technologie de batterie COROS GPS, la COROS PACE 2 offre 30 heures d'autonomie GPS complète. Cela représente une augmentation de 20% par rapport à la COROS PACE originale. Si vous avez besoin que votre batterie dure encore plus longtemps, passez au mode UltraMax pour une consommation de batterie presque deux fois moindre."
    },
    endurance: {
      title: "L'endurance au poignet",
      desc: "La COROS PACE 2 offre 20 jours d'utilisation quotidienne. C'est-à-dire 20 jours de suivi de la fréquence cardiaque et du sommeil, de déclenchement du rétroéclairage, de mesure des pas, de réception de notifications et même d'alarmes tous les jours. Alors, laissez votre chargeur derrière vous, et partez pour votre prochaine course, votre prochain match ou vos vacances en famille en toute confiance."
    },
    night: {
      title: 'Illuminez le ciel de la nuit',
      desc: "Le mode Nuit est notre mode toujours actif pour les activités nocturnes. Il laisse le rétroéclairage allumé pendant toute la durée de votre entraînement. Une lumière suffisamment vive pour que vos yeux puissent s'adapter et lire dans l'obscurité, mais suffisamment faible pour maintenir des performances de batterie élevées tout au long de votre course ou de votre randonnée, même si vous en avez besoin toute la nuit. Ne vous inquiétez pas, elle s'éteint automatiquement lorsque vous terminez votre séance d'entraînement ou une heure après le lever du soleil."
    },
    laps: {
      title: 'Tours sur terre ou en mer',
      desc: "Que vous nagiez dans une piscine ou que vous vous entraîniez dans l'océan, avec une résistance à l'eau de 50 mètres, vous pouvez porter la COROS PACE 2 pour suivre vos activités dans l'eau comme sur terre."
    },
    possibilities: {
      title: 'Nouvelles possibilités',
      desc: "Avec une réduction de poids d'environ 50 % par rapport au bracelet en silicone, le bracelet COROS en nylon est plus respirant et offre de nouvelles options de couleur, ce qui vous donne des possibilités infinies d'afficher votre propre style. Les bracelets en nylon sont également plus confortables et mieux ajustés, ce qui devrait améliorer la précision de la fréquence cardiaque, déjà très élevée, notamment pendant les longues séances d'entraînement en sueur par temps chaud."
    },
    athlete: {
      title: 'Quelque chose pour chaque athlète',
      desc: 'La COROS PACE 2 est dotée de tous les modes sportifs que vous recherchez. Allez au-delà de la course, du vélo ou de la natation standard et testez le nouveau mode Musculation, explorez la précision du mode Piste ou mouillez-vous avec le mode Eau calme.'
    },
    trainer: {
      title: 'Votre nouvel entraîneur personnel',
      desc: "Le programme d'entraînement musculaire comprend plus de 200 exercices déjà intégrés pour le haut du corps, le bas du corps, le travail du tronc et plus encore. La COROS PACE 2 détecte automatiquement les mouvements de votre corps et surveille votre fréquence cardiaque et les calories brûlées."
    },
    muscleHeatmap: {
      title: 'Carte thermique des muscles',
      desc: "Une fois que vous avez terminé, consultez la toute nouvelle carte thermique des muscles pour voir quels groupes de muscles ont effectué le plus d'action dans une vue quotidienne, hebdomadaire ou mensuelle, afin de déterminer votre prochain bloc d'entraînement."
    },
    learn: {
      title: 'Apprendre des meilleurs et partager',
      desc: "Il y a une séance d'entraînement que vous aimez? Ne la gardez pas pour vous, partagez-la avec vos amis d'une simple pression du doigt dans l'application COROS. Nous avons des séances d'entraînement pré-conçues et des plans d'entraînement des athlètes COROS et de leurs entraîneurs disponibles gratuitement sur COROS.com. Il suffit de télécharger pour commencer votre prochaine séance d'entraînement."
    },
    follow: {
      title: 'Suivez votre cœur',
      desc: "Toutes les activités ne font pas circuler le sang de la même manière. Les courses faciles sont plus régulières, tandis que les séances d'intervalles et l'haltérophilie connaissent plus de pics et de creux. COROS a développé des algorithmes de fréquence cardiaque uniques pour chaque mode d'activité afin de vous fournir la meilleure précision de fréquence cardiaque au poignet de sa catégorie."
    },
    track: {
      title: 'Chaque seconde compte',
      mobileTitle: 'Restez sur la bonne voie',
      desc: "Une piste standard fait 400m, alors pourquoi les appareils GPS ne semblent pas y arriver ? Avec le mode Piste de COROS, un algorithme propriétaire aussi précis qu'un chronomètre est utilisé pour s'assurer que vos courses sur piste et vos entraînements sont mesurés avec précision, quel que soit le couloir que vous choisissez. Les zigzags aléatoires à travers le terrain ou les virages serrés ont disparu, remplacés par les lignes droites et les courbes de la piste - suivant la façon dont vous courez."
    },
    smart: {
      title: 'Puissant ET intelligent',
      desc: "Les montres COROS offrent tout ce que vous êtes en droit d'attendre d'une montre sportive GPS, ainsi que certains des aspects les plus souhaitables d'une montre intelligente, notamment les notifications téléphoniques, l'identification de l'appelant, le suivi du sommeil et l'analyse du niveau de forme."
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/terms.js
/* harmony default export */ const fr_terms = ({
  termsofservice: 'CONDITIONS DE SERVICE',
  lastUpdate: 'Dernière mise à jour : 7 oct. 2020',
  baseTOS: 'Ces conditions de service ("Conditions") régissent votre utilisation des produits COROS, de nos sites Web, y compris www.coros.com ,du logiciel intégré aux appareils COROS, du logiciel COROS, des applications mobiles COROS et d\'autres services COROS (collectivement, les "Services COROS").\n Vous devez accepter ces Conditions pour créer un compte COROS et utiliser les Services COROS. Si vous n\'avez pas de compte, vous acceptez ces Conditions en visitant www.coros.com ou en utilisant toute partie des Services COROS. Si vous n\'acceptez pas l\'une de ces conditions, veuillez ne pas créer de compte COROS, visiter www.coros.com ou utiliser les services COROS.',
  whoCanUse: {
    title: 'Qui peut utiliser COROS',
    desc: 'Pour utiliser les Services COROS, vous devez être âgé d\'au moins quinze (15) ans. Si vous avez au moins quinze (15) ans mais que vous êtes mineur dans votre pays de résidence, vous devez prendre connaissance des Conditions et demander à votre parent ou tuteur légal de compléter l\'inscription en votre nom pour pouvoir utiliser les Services COROS. La personne qui remplit l\'inscription doit être légalement compétente. Si vous avez des questions sur la qualification d\'un produit ou d\'une application en tant que connexion autorisée, veuillez contacter info@coros.com.'
  },
  account: {
    title: 'Inscription et compte de connexion',
    desc: 'Pour que vous puissiez utiliser pleinement les services COROS, vous devez créer un compte en nous fournissant une adresse électronique valide et un mot de passe sécurisé. Vous pouvez également créer un compte ou vous connecter en utilisant des comptes tiers. Conformément à l\'accord relatif aux comptes tiers, nous aurons accès à votre nom d\'utilisateur, à votre vignette et à votre sexe. Vous êtes responsable de toutes les activités qui se produisent en association avec votre compte. COROS n\'est pas responsable des pertes ou des dommages causés par votre incapacité à maintenir la sécurité des informations d\'identification de votre compte.\nNous pouvons avoir besoin de vous contacter au sujet de votre utilisation des services COROS. Ces communications font partie des Services COROS et vous ne pouvez pas choisir de ne pas les recevoir. Vous pouvez gérer et refuser de recevoir d\'autres communications et maintenir votre adresse e-mail à jour à partir des paramètres de votre compte.'
  },
  equipment: {
    title: 'Équipement nécessaire',
    desc: 'L\'utilisation complète des Services COROS dépend de votre utilisation d\'un ordinateur avec un logiciel adéquat ou d\'un appareil mobile pris en charge et d\'un accès à Internet. La maintenance et la sécurité de cet équipement peuvent influencer la performance des Services COROS et il est de votre responsabilité d\'assurer la fonctionnalité de l\'équipement. COROS n\'est pas responsable de toute perte ou de tout dommage causé par votre incapacité à maintenir la sécurité de votre équipement.'
  },
  disclaimers: {
    title: 'Avis de non-responsabilité',
    desc: 'Nous ne garantissons pas que les Services COROS répondront à vos besoins ou seront disponibles de manière ininterrompue, sécurisée ou sans erreur. Nous ne donnons aucune garantie quant à la qualité, l\'exactitude, l\'actualité, la véracité, l\'exhaustivité ou la fiabilité des Services COROS. Nous ne garantissons pas que toutes les erreurs des Services COROS seront corrigées et mises à jour en temps voulu. Les Services COROS ne sont pas destinés à diagnostiquer, traiter, guérir ou prévenir une quelconque maladie. L\'ensemble du "Contenu COROS" fourni par les Services COROS, y compris le texte, les graphiques, les images, la musique, les logiciels, l\'audio, la vidéo, les œuvres d\'auteur de toute sorte, et les informations ou autres matériaux ne peuvent pas être utilisés pour remplacer les informations et les conseils de votre médecin ou d\'autres professionnels. Il est interdit d\'utiliser le contenu de COROS pour toute raison médicale, ou sur tout emballage ou étiquette.\n Si vous souffrez d\'un problème médical ou cardiaque, consultez votre médecin avant d\'utiliser les Services COROS, de vous engager dans un programme d\'exercices ou de modifier votre régime alimentaire. En cas d\'urgence médicale, arrêtez d\'utiliser les Services COROS et consultez un professionnel de santé. Nous ne sommes pas responsables des problèmes de santé qui peuvent résulter des programmes d\'entraînement, des consultations, des produits ou des événements dont vous avez pris connaissance par le biais des Services COROS. Si vous vous engagez dans un programme d\'exercice que vous recevez ou dont vous avez pris connaissance par le biais des Services COROS, vous acceptez de le faire à vos propres risques et de participer volontairement à ces activités. Vous acceptez d\'être responsable de tout risque personnel ou matériel lié à vos activités, y compris, mais sans s\'y limiter, le cyclisme, la course, la natation ou les plans d\'entraînement fournis par les Services COROS. COROS n\'est pas responsable de tout risque concernant les blessures personnelles et les dommages matériels.\n Vous acceptez que COROS ne soit pas responsable de tout résultat causé par l\'échec de l\'envoi du message SOS. Nous ne garantissons pas que le message SOS sera envoyé dans n\'importe quelle circonstance. Vous acceptez que lors de l\'utilisation des produits COROS, le message SOS dépende du réseau cellulaire, de la maintenance du serveur et d\'autres problèmes imprévisibles. Vous acceptez que les Services COROS téléchargent vos informations et vos données d\'activité sur des serveurs tiers conformément à la politique des tiers. Les Services COROS peuvent vous donner la possibilité de lier votre compte COROS, vos données COROS ou les Services COROS à des services tiers. Bien que nous vous offrions cette possibilité, vous reconnaissez que les services tiers que vous utilisez en relation avec les Services COROS ne font pas partie des Services COROS. Vous reconnaissez que les présentes Conditions et la Politique de confidentialité de COROS ne s\'appliquent pas aux Services tiers. Vous êtes responsable de la lecture et de la compréhension des conditions et de la politique de confidentialité qui s\'appliquent à votre utilisation de tout service tiers.'
  },
  UOS: {
    title: 'Utilisation du service',
    desc: 'Le contenu des Services COROS, tel que le texte, les graphiques, les images, l\'audio, la vidéo et tout autre matériel, ainsi que les noms de domaine, le slogan et l\'organisation, est protégé par le droit d\'auteur, le droit des marques et d\'autres lois similaires aux États-Unis et dans les pays étrangers, et est détenu ou contrôlé par COROS. L\'utilisation non autorisée des Services COROS peut constituer une violation du droit d\'auteur, de la marque commerciale et d\'autres lois. Vous ne devez pas tenter d\'obtenir un accès non autorisé à une partie ou à une fonction des Services COROS, ou à tout autre système ou réseau connecté au service ou à tout serveur COROS, ou à tout service offert sur ou par le biais du service par tout moyen illégitime.\\Vous n\'êtes pas autorisé à utiliser les Services COROS à des fins illégales ou interdites par les présentes conditions d\'utilisation ou pour toute autre activité qui enfreint les droits de COROS ou d\'autres personnes. Vous acceptez de ne pas utiliser de dispositif, logiciel ou routine pour interférer ou tenter d\'interférer avec le bon fonctionnement des Services COROS ou avec l\'utilisation du service par toute autre personne.'
  },
  feedbackPolicy: {
    title: 'Politique de feedback',
    desc: 'Si vous soumettez des commentaires, des idées ou des feedback à COROS, vous acceptez que COROS et ses employés puissent les utiliser sans aucune restriction ni compensation pour vous. Nous ne renonçons à aucun droit d\'utiliser des idées ou des commentaires similaires ou connexes dont nous avons eu connaissance précédemment, qui ont été développés par COROS ou qui ont été obtenus de sources autres que vous. Vous pouvez nous contacter via info@coros.com. Veuillez ne pas nous envoyer de commentaires sans votre autorisation. Notre politique de feedback fait également partie des conditions.'
  },
  distribution: {
    title: 'Résolution des litiges',
    desc: 'Vous acceptez que tout litige entre vous et COROS découlant de ou lié aux présentes Conditions de service, au Service COROS ou à tout autre produit ou service de COROS (collectivement, " Litiges ") sera régi par la procédure d\'arbitrage décrite ci-dessous.\nLoi applicable : Les conditions de service et la résolution de tout litige seront régies et interprétées conformément aux lois de l\'État de Californie, sans tenir compte des conflits de lois et de principes : Nous voulons répondre à vos préoccupations sans avoir besoin d\'une affaire juridique formelle. Avant de déposer une plainte contre COROS, vous acceptez d\'essayer de résoudre le litige de manière informelle en contactant info@coros.com. Nous essaierons de résoudre le litige de manière informelle en vous contactant par courrier électronique. Si un litige n\'est pas résolu dans les 15 jours suivant son dépôt, vous ou COROS pouvez engager une procédure formelle.\n Pas de recours collectif : Vous ne pouvez résoudre les litiges avec COROS que sur une base individuelle, et ne pouvez pas déposer une plainte en tant que plaignant ou membre d\'un groupe dans le cadre d\'une action collective, consolidée ou représentative. Les arbitrages collectifs, les recours collectifs, les actions de l\'avocat général privé et la consolidation avec d\'autres arbitrages ne sont pas autorisés dans le cadre de cet accord : Indépendamment de tout statut ou loi contraire, toute réclamation ou cause d\'action découlant de ou liée à votre utilisation des produits COROS ou des Services COROS doit être déposée dans un délai d\'un (1) an après la survenance de cette réclamation ou cause d\'action, faute de quoi cette réclamation ou cause d\'action sera définitivement prescrite.'
  },
  violation: {
    title: 'Violation des présentes conditions d\'utilisation',
    desc: 'Vous reconnaissez et acceptez que COROS puisse préserver toute transmission ou communication de votre part avec COROS par le biais des Services COROS, et puisse également divulguer ces données si la loi l\'exige ou si COROS détermine qu\'une telle préservation ou divulgation est raisonnablement nécessaire pour (1) se conformer à une procédure légale, (2) appliquer ces Conditions de service, (3) répondre aux réclamations selon lesquelles ces données violent les droits de tiers, ou (4) protéger les droits, la propriété ou la sécurité personnelle de COROS, de ses employés, des utilisateurs des Services COROS et du public.\\Vous acceptez que COROS puisse, à sa seule discrétion et sans préavis, mettre fin à votre accès au Service COROS et/ou bloquer votre accès futur au Service COROS si nous déterminons que vous avez violé les présentes Conditions de service ou d\'autres accords ou directives qui peuvent être associés à votre utilisation des Services COROS. Vous convenez également que toute violation de votre part des présentes Conditions de service constituera une pratique commerciale illégale et déloyale et causera un préjudice irréparable à COROS, pour lequel des dommages-intérêts monétaires seraient inadéquats, et vous consentez à ce que COROS obtienne toute mesure injonctive ou équitable que COROS juge nécessaire ou appropriée dans de telles circonstances. Ces recours s\'ajoutent à tous les autres recours dont COROS peut disposer en droit ou en équité.\n Vous acceptez que COROS puisse, à sa seule discrétion et sans préavis, mettre fin à votre accès au Service COROS, pour un motif valable, ce qui inclut (sans s\'y limiter) (1) les demandes des forces de l\'ordre, (2) une demande de votre part (suppressions de compte auto-initiées), (3) l\'interruption ou la modification substantielle des Services COROS ou de tout service offert sur ou par le biais des Services COROS, ou (4) des questions ou problèmes techniques inattendus.\\Si COROS engage une action en justice contre vous suite à votre violation des présentes Conditions de service, COROS sera en droit de récupérer auprès de vous, et vous acceptez de payer, tous les frais d\'avocat et coûts raisonnables d\'une telle action, en plus de toute autre réparation accordée à COROS. Vous convenez que COROS ne sera pas responsable envers vous ou envers un tiers de la résiliation de votre accès au Service COROS à la suite d\'une violation des présentes Conditions de service.'
  },
  security: {
    title: 'Sécurité ; appareils perdus ou désactivés',
    desc: 'Vous êtes seul responsable du maintien de la sécurité de votre appareil COROS. Vous acceptez que COROS n\'ait aucune responsabilité si vous perdez ou partagez l\'accès à votre appareil COROS. Vous acceptez que COROS n\'ait aucune responsabilité si vous apportez des modifications non autorisées à votre Appareil COROS.\n Si votre Appareil COROS est perdu ou volé, veuillez contacter les forces de police locales. Vous pouvez également contacter COROS pour verrouiller l\'appareil afin de suspendre la capacité de synchronisation des données et de connexion avec les Services COROS. Contactez support@coros.com si vous avez trouvé un Appareil COROS perdu ou si votre Appareil COROS est verrouillé par erreur en raison d\'un rapport inexact. COROS se réserve le droit de verrouiller les Appareils COROS si (1) l\'utilisateur viole les accords que COROS a conclus collectivement ou (2) l\'utilisateur fait l\'objet de commandes/activités frauduleuses. Si vous signalez ou si COROS soupçonne des activités frauduleuses ou abusives, vous acceptez de coopérer avec COROS dans le cadre de toute enquête.'
  },
  orders: {
    title: 'Commandes',
    desc: 'Bien que COROS fasse tout son possible pour vous fournir les Produits et/ou Services énumérés dans la Confirmation de Commande, il peut arriver que COROS ne soit pas en mesure de fournir ces Produits et/ou Services parce que, par exemple, (1) ces Produits ou Services ne sont plus fabriqués ou disponibles, (2) COROS n\'est pas en mesure de se procurer les composants pertinents, (3) il y a eu une erreur de prix ou (4) il y a eu une intention/pratique malveillante pendant le processus de commande. Dans de telles circonstances, COROS vous contactera et pourra vous proposer d\'autres Produits ou Services que vous pourriez souhaiter acheter (au même prix ou à un prix différent). En cas d\'erreur de prix, COROS vous communiquera le prix correct. Si vous n\'acceptez pas la substitution proposée par COROS ou la modification du prix, COROS annulera alors la Commande et vous remboursera toute somme que vous avez pu verser à COROS au titre de la Commande. Le remboursement de ces sommes constituera l\'étendue de la responsabilité de COROS envers vous si COROS n\'est pas en mesure de livrer les Produits et/ou Services que vous avez commandés.\n COROS se réserve le droit d\'annuler votre commande si une activité frauduleuse est détectée. COROS vous informera si COROS annule votre commande sur la base de ce qui précède. Tous les paiements que vous avez effectués vous seront remboursés.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/athlete.js
/* harmony default export */ const fr_athlete = ({
  pageTitle: 'ATHLÈTES PROFESSIONNELS COROS',
  mobilePageTitle: 'EXPLOREZ VOTRE INSPIRATION INTÉRIEURE AVEC LES ATHLÈTES PRO COROS',
  pageDesc: 'L\'équipe COROS Pro est composée d\'utilisateurs de haut niveau qui vivent pour explorer l\'impossible. Ils ont tous utilisé les produits COROS de manière intensive sur les parcours les plus difficiles du monde. Plus important encore, ils partagent la même passion de construire les meilleurs produits pour les athlètes du monde entier. COROS est également fier d\'être le partenaire officiel montres GPS du NN Running Team.',
  trailAthletes: 'Athlètes trail',
  roadAthletes: 'Athlètes route',
  alpineAthletes: 'Athlètes outdoor'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/athleteDetails.js

/* harmony default export */ const fr_athleteDetails = ({
  more: "Plus d'athlètes",
  athletes: 'Athlètes professionnels',
  dane_jackson: {
    name: 'Dane Jackson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: "Première descente de la cascade de Salto Maule (134 pieds) au Chili\n 7 descentes de cascades de plus de 100 pieds\n 4x vainqueur du championnat de North Fork \n 3x vainqueur du Grand Prix d'eau vive\n 4x vainqueur de la Green Race \n 3x champion du monde de freestyle\n Des dizaines de victoires en compétition dans le monde entier\n Détenteur du record du parcours à 3 courses\n Porte une COROS VERTIX 2",
    desc: "Dane Jackson a expérimenté ce que le monde offre de mieux en kayak. Le kayak est la véritable vocation de Dane, et il le pratique depuis plus de 20 ans. Le port d'attache de Dane est le Tenessee, mais il passe plus de six mois par an à voyager dans les meilleurs endroits du monde pour son sport. Il participe régulièrement à des expéditions au Mexique, en Terre-Neuve, au Kenya et au Canada. Ses rivières préférées sont le Zambèze, l'Outaouais et le Nil. Il attribue à son père, Eric Jackson, le mérite de l'avoir mené là où il est en tant qu'athlète. Dane est considéré comme le meilleur kayakiste d'eau vive au monde, avec plus de 80 premières places remportées lors de compétitions dans le monde entier. Ses compétences et sa détermination l'ont mené au sommet."
  },
  adrian_ballinger: {
    name: 'Adrian Ballinger',
    country: 'USA',
    countryIcon: 'usa',
    achievement: "A gravi l'Everest et le K2 sans oxygène supplémentaire \n Première descente à ski du Manaslu, 8ème plus haut sommet du monde \n A fondé Alpenglow Expeditions \n Dix-sept sommets de 8000 mètres \n Seul Américain à avoir réalisé trois descentes à ski de 8000 mètres \n Porte une COROS VERTIX 2",
    desc: "Adrian Ballinger est un alpiniste et un skieur de haute montagne, et guide de montagne certifié. Adrian guide professionnellement des groupes sur les plus hautes montagnes du monde depuis 25 ans. Il est le fondateur d'Alpenglow Expeditions qui emmène plus de 6000 personnes par an faire du ski, de l'escalade et de l'alpinisme, à Tahoe et dans le monde entier. Il a dirigé plus de 150 expéditions internationales d'escalade sur six continents et a gravi 17 sommets de 8 000 mètres, dont 8 sommets du Mont Everest. Il est connu pour avoir été le pionnier de l'utilisation de la pré-acclimatation pour les expéditions commerciales, qui permet de réduire de moitié le temps habituellement passé en expédition, tout en étant à l'origine de l'évolution de l'industrie vers des normes éthiques tout en guidant sur les plus hautes montagnes du monde.\n\n En tant qu'athlète, Adrian est le seul Américain à avoir réussi trois descentes à ski de sommets de 8 000 m, dont la première descente à ski du Manaslu depuis son sommet. Il est également le quatrième Américain à avoir atteint les sommets de l'Everest et du K2 sans avoir recours à l'oxygène. Plus récemment, après une année passée à se concentrer sur l'escalade au milieu de la pandémie de Covid, Adrian a gravi son premier 8a/5.13b, Fall of Man, dans les gorges de Virgin River. Adrian souhaite exceller dans les trois disciplines traditionnelles des guides de montagne - l'alpinisme, l'escalade et le ski."
  },
  kilian_journet: {
    name: 'Kilian Jornet',
    country: 'ESPAGNE',
    countryIcon: 'spain',
    achievement: ['4 x vainqueur de l’UTMB', '5 x vainqueur de la Hardrock 100', '4 x champion du monde de ski alpinisme', '3 x champion du monde de Sky Running', 'D’innombrables records d’ascensions et de descentes de montagnes et de FKTs majeurs'].join('\n'),
    desc: 'Kilian Jornet est sans doute l’athlète de sports de montagne le plus complet au monde. Ayant grandi dans les Pyrénées, Kilian a commencé à gravir des sommets à l’âge de 3 ans seulement. Il a fait irruption sur la scène de la course de montagne/trail à la fin de son adolescence et, en 2007, il a remporté sa première des 10 Sky Running World Series. L’année suivante, il a remporté le prestigieux UTMB pour la première de ses quatre victoires entre 2008 et 2022. Il est difficile de trouver une course de montagne ou de trail majeure que Kilian n’ait pas gagnée, ayant été couronné à la Western States, Sierre-Zinal, Pikes Peak Marathon, Zegama, Hardrock, au Marathon du Mont Blanc et bien d’autres encore.\n\nCe qui rend Kilian si spécial en tant qu’athlète, c’est son niveau de classe mondiale non seulement en course à pied, mais aussi en ski-alpinisme, une discipline dans laquelle il concourt depuis 2002, remportant au passage des championnats d’Europe et du monde dans toutes les catégories d’âge. Kilian réside désormais en Norvège avec sa compagne Emelie Forsberg et leurs deux filles.'
  },
  emelie_forsberg: {
    name: 'Emelie Forsberg',
    country: 'SUÈDE',
    countryIcon: 'sweden',
    achievement: ['4 x vainqueur de la SkyRunner World Series', '6 x médaillée mondiale aux championnats du Monde de ski-alpinisme', '2 x vainqueur de la Transvulcania', 'Détentrice de FKTs sur le Mont Blanc, le Cervin, le Grand Teton, et plusieurs autres montées et descentes.'].join('\n'),
    desc: 'Vivant en Norvège et représentant la Suède, Emelie est l’une des athlètes de sports de montagne les plus accomplies au monde – avec un accent sur le trail et le ski alpinisme. À l’origine, Emelie s’identifiait surtout comme une grimpeuse, avant de commencer à courir en montagne par pur plaisir. Elle a participé sérieusement à son premier trail en 2009 et figure depuis parmi les meilleures du monde sur des distances allant du kilomètre vertical aux 100 miles. La carrière de ski-alpinisme d’Emelie a commencé quelques années plus tard, en 2012, lorsqu’elle s’est lancée dans une course en empruntant des skis pour terminer à la 3ème place. Depuis, elle a terminé sur le podium sur plusieurs courses du championnat européen et mondial.\n\nEmelie a donné naissance à sa première fille avec Kilian Jornet en mars 2019, et à leur deuxième fille en avril 2021. Elle a maintenant les yeux rivés sur un retour à l’entraînement et au haut niveau en 2022 et au-delà.'
  },
  emma_coburn: {
    name: 'Emma Coburn',
    country: 'USA',
    countryIcon: 'usa',
    achievement: "Championne du monde 2017 - 3 000 m steeple\nMédaillée d'argent aux Championnats du monde 2019 - 3 000 m steeple\nMédaillée de bronze aux Jeux olympiques 2016 - 3 000 m steeple\n9 x championne nationale USATF\n6 x NCAA All American\n",
    desc: "Originaire de Crested Butte et Boulder, CO - Emma a fréquenté l'Université du Colorado où elle a été trois fois championne nationale et six fois All American. Neuf fois championne nationale de l'USATF dans son épreuve phare, le 3 000 m steeple, Emma détient l'ensemble des médailles sur la scène mondiale, ayant obtenu le bronze aux Jeux Olympiques de Rio, l'argent aux Championnats du monde de 2019 et, en 2017, la médaille d'or et le titre de championne du monde. Emma s'entraîne avec le team Boss et est coachée par son mari Joe Bosshard qui devient rapidement l'un des meilleurs entraîneurs du pays. Au-delà de la piste, Emma est une source d'inspiration et un modèle pour beaucoup, car elle affiche son esprit d'entrepreneuse avec ses propres projets, y compris un livre de cuisine récemment publié et Emma Coburn's Elk Run 5k, qui a recueilli des fonds importants pour soutenir ceux qui luttent contre le cancer dans le comté de Gunnison, Colorado."
  },
  emily_infeld: {
    name: 'Emily Infeld',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Championnat du monde 2015 sur 10 000 m - 3e place \n aux Jeux Olympiques 2016 sur 10 000 m \nChampionnat du monde 2017 sur 10 000 m - 6e place \n11x All American \nChampion de NCAA',
    desc: "Emily a un curriculum vitae impressionnant qui remonte à ses années de lycée dans l'Ohio, où elle était championne nationale et détentrice du record de l'État sur le mile. Elle a couru à Georgetown où elle a été championne NCAA du 3 km en 2012, a été 11 fois All-American et a mené l'équipe de cross-country au titre national en 2011. Sa carrière post-collégiale a également été marquée par de grands moments, dont aucun n'est plus important que sa médaille de bronze au 10 000 m lors des Championnats du monde de 2015 à Pékin. Emily a participé aux Jeux olympiques de 2016 et a de nouveau représenté les États-Unis aux Championnats du monde de 2017, où elle a terminé à la 6e place en tant que meilleure Américaine de l'épreuve."
  },
  eliud_kipchoge: {
    name: 'Eliud Kipchoge',
    country: 'Kenya',
    countryIcon: 'kenya',
    achievement: ['Détenteur du record du monde du marathon (2:01:09) - Berlin 2022', 'Premier/seul marathonien à être passé sous les 2 heures au marathon - (1:59:40) - Vienne 2019', '10 fois champion du monde de marathon', '2 fois médaillé aux championnats du monde', '3 fois médaillé olympique', 'Marié et père de trois enfants'].join('\n'),
    desc: "Eliud Kipchoge s'entra\xEEne avec le mantra suivant : \"Aucun humain n'est limit\xE9\" et il l'a d\xE9montr\xE9 dans sa carri\xE8re de coureur. \xC0 l'\xE2ge de 18 ans seulement, Eliud a remport\xE9 une m\xE9daille aux championnats du monde sur 5 000 m et a ensuite remport\xE9 trois autres m\xE9dailles mondiales sur cette distance. Cependant, c'est en 2013 qu'Eliud a commenc\xE9 \xE0 devenir une l\xE9gende, en remportant et en battant le record du parcours lors de son premier marathon. Il est presque difficile de croire ce qui allait suivre - 11 victoires officielles sur marathon, dont 8 Marathon Majors, et les Jeux Olympiques, deux records du parcours du marathon de Londres, et bien s\xFBr son record du monde au marathon de Berlin en 2018 (o\xF9 il a \xE9galement battu les records du monde du 30 km, 35 km et 40 km en route). Malgr\xE9 tous ces accomplissements, ils ne mentionnent m\xEAme pas ce qui est peut-\xEAtre la plus grande r\xE9ussite d'Eliud en tant que coureur - devenir le premier et le seul humain \xE0 courir la distance du marathon en moins de 2 heures - en \xE9tablissant le meilleur temps mondial 1:59:40 lors de l'INEOS Challenge sur un parcours ferm\xE9 \xE0 Vienne en Autriche en octobre 2019. Eliud a \xE9t\xE9 la personnalit\xE9 k\xE9nyane de l'ann\xE9e 2018 des Nations unies, et l'athl\xE8te masculin de l'ann\xE9e 2018 et 2019 de l'IAAF (maintenant WA). Dernier point, mais certainement pas le moindre, Eliud est mari\xE9 et p\xE8re de trois enfants. Il vit et s'entra\xEEne pr\xE8s d'Eldoret, au Kenya."
  },
  molly: {
    name: 'Molly Seidel',
    country: 'USA',
    countryIcon: 'usa',
    achievement: ['Médaillée de bronze olympique (Tokyo 2020)', '4ème au marathon de New York en 2021, femme américaine la plus rapide de tous les temps (2:24:42)', '4x championne NCAA', '6 fois All-American de la NCAA'].join('\n'),
    desc: "Molly Seidel est la d\xE9finition m\xEAme du courage et de la pers\xE9v\xE9rance. Lors de son tout premier marathon, Molly s'est class\xE9e deuxi\xE8me aux \xAB trials \xBB olympiques am\xE9ricains en 2020, assurant sa place dans l'\xE9quipe am\xE9ricaine, o\xF9 elle a remport\xE9 une m\xE9daille de bronze \xE0 Tokyo.\n    Molly a \xE9t\xE9 championne Foot Locker Cross Country au lyc\xE9e et quatre fois championne NCAA avec l'Universit\xE9 de Notre Dame. Malgr\xE9 ses succ\xE8s, elle est connue pour sa personnalit\xE9 terre-\xE0-terre, son sens de l'humour et son amour des donuts et de la bi\xE8re artisanale. Aujourd'hui, elle s'entra\xEEne \xE0 Flagstaff, AZ, avec le Verde Track Club."
  },
  desiree_linden: {
    name: 'Desiree Linden',
    country: 'USA',
    countryIcon: 'usa',
    achievement: ['Vainqueur du marathon de Boston 2018', 'Deux fois championne olympique', '9 fois dans le top 5 des World Marathon Majors', 'Deux fois vice-championne des "trials" de marathon aux États-Unis', 'Amateur de café et propriétaire de Linden X Two.', 'Passionée de whisky. Accro à la musique. Féru de livres. Voyageuse du monde.'].join('\n'),
    desc: "En avril 2018, Des Linden a brav\xE9 des vents contraires et une pluie torrentielle pour devenir la premi\xE8re vainqueur am\xE9ricaine du marathon de Boston depuis 1985. Sa victoire a \xE9t\xE9 inscrite dans le livre des records car elle a surpass\xE9 le peloton et les pires conditions de l'histoire de la course. Des a particip\xE9 deux fois aux Jeux Olympiques avec les Etats-Unis, terminant 7\xE8me aux Jeux Olympiques de Rio. Elle a fait ses d\xE9buts au lyc\xE9e Hilltop de Chula Vista, dans la banlieue de San Diego, en Californie, o\xF9 elle a obtenu les honneurs de l'\xC9tat. Linden a fr\xE9quent\xE9 l'universit\xE9 d'\xC9tat de l'Arizona, o\xF9 elle a \xE9t\xE9 nomm\xE9e All-American en cross-country et en athl\xE9tisme. Apr\xE8s avoir obtenu son dipl\xF4me, elle s'est install\xE9e \xE0 Rochester, dans le Michigan, pour rejoindre le Hansons Brooks Distance Project. Elle s'entra\xEEne actuellement dans le nord du Michigan et continue de repr\xE9senter Brooks. En 2019, Des est retourn\xE9e au marathon de Boston en terminant 5e, et plus tard cet automne-l\xE0, elle a men\xE9 le peloton du marathon de NYC jusqu'au semi-marathon en 1:11:40 et a termin\xE9 \xE0 la 6e place en tant que meilleure Am\xE9ricaine dans le 4e temps am\xE9ricain le plus rapide de l'histoire sur le parcours historique de New York. Aficionado autoproclam\xE9e du bacon, ses loisirs comprennent la lecture et l'\xE9criture, la collection de whisky, le caf\xE9 Linden X Two, les premiers lancers lors des matchs de la Major League, les balades avec ses chiens Atlas et Boston, l'\xE9coute de bonne musique et la course contre son mari, Ryan Linden, marathonien et v\xE9t\xE9ran de Kona."
  },
  grayson_murphy: {
    name: 'Grayson Murphy',
    country: 'USA',
    countryIcon: 'usa',
    achievement: "5 x NCAA All-American à l'Université de l'Utah \n2ème Americain 2019 Boilermaker 15k \n Recordman de l'université of Utah School - 3k Steeple, 5,000m (indoor et outdoor), 10,000m",
    desc: "S'entraînant dans sa ville natale de Salt Lake City, Utah et membre de l'Idaho Distance Project, Grayson se concentre principalement sur les courses sur route et sur le trail. Grayson est diplômée en 2018 de l'Université de l'Utah d'un bachelor en génie civil et 5 fois All-American en cross-country et en piste. Ses records sur piste : 32:28 au 10 km, 15:44 au 5 km et 9:44 au steeplechase. Plus récemment, Grayson a terminé 2e américain au Boilermaker 15k à Utica, NY - la plus grande course de 15k du pays. A l'avenir, Grayson espère améliorer tous ses records personnels et participer à une grande variété de courses de trail, de montagne, de route et de cross country."
  },
  emma_bates: {
    name: 'Emma Bates',
    country: 'USA',
    countryIcon: 'usa',
    achievement: ['Marathon de Chicago 2019 - 1ère Américaine', 'Championne des États-Unis de marathon 2019', '12 fois All-American NCAA D1', '2014 Champion NCAA DI 10 000m'].join('\n'),
    desc: "S'entra\xEEnant \xE0 Boise, Idaho et membre du projet Idaho Distance, Emma se concentre principalement sur les courses sur route de moyenne et longue distance. Emma est dipl\xF4m\xE9e de l'universit\xE9 de Boise State, o\xF9 elle a \xE9t\xE9 12 fois championne All-American de la division 1 de la NCAA et championne NCAA 2014 du 10 000 m. Depuis, Emma a remport\xE9 les championnats am\xE9ricains de marathon f\xE9minin 2018, en plus de se classer 4e au marathon de Chicago 2019 avec un meilleur temps personnel de 2:25:27. L'\xE9tat d'esprit \xAB libre \xBB d'Emma lui a permis de devenir l'une des meilleures coureuses am\xE9ricaines avec un avenir incroyablement brillant."
  },
  parker_stinson: {
    name: 'Parker Stinson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Détenteur du record des États-Unis sur 25 km en 2019 - Marathon de Chicago (1er Américain)\n9 fois All-American en NCAA D1.',
    desc: "Détenteur du record américain du 25 km, Parker réside à Boulder, dans le Colorado. Il a été neuf fois All-American à l'Université de l'Oregon, où il a également terminé troisième au 5 000 mètres lors de deux championnats NCAA consécutifs. Dans sa jeunesse, Parker a été trois fois champion junior (U19) sur 10 000 mètres. Parmi ses dernières réalisations, il a notamment remporté le championnat USATF 2019 de 25 km et a terminé meilleur américain au marathon de Chicago 2019 avec un meilleur temps personnel de 2:10:53. Avec l'aide de COROS, Parker espère continuer à repousser ses limites pour devenir un athlète encore plus fort."
  },
  reed_fischer: {
    name: 'Reed Fischer',
    country: 'USA',
    countryIcon: 'usa',
    achievement: ["20e semi-marathon le plus rapide de l'histoire américaine", 'Meilleur Américain au semi-marathon Aramco de Houston 2019', "4ème place aux championnats de l'USATF sur 10 000m", 'Deux fois membre de Team USA'].join('\n'),
    desc: "Originaire du Minnesota, Reed vit et s'entraîne actuellement avec le Tinman Elite à Boulder, dans le Colorado. En tant que membre fondateur de cette jeune équipe, Reed s'est découvert un don pour les longues distances sur route. S'étant autoproclamé « late bloomer » (floraison tardive), il a terminé sa carrière à l'université de Drake avec une 9e place aux championnats NCAA 2017. Bien que n'ayant jamais été membre de l'équipe américaine, Reed est devenu l'un des coureurs les plus prometteurs du pays. À seulement 24 ans, Reed a établi un record personnel au semi-marathon de 1:01:37 et prévoit de poursuivre sur cette lancée dans sa carrière de marathonien."
  },
  coree_woltering: {
    name: 'Coree Woltering',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: '1er - Superior Spring 50k 2019\n2e - American River 50m & Quick Silver 50k 2018\n4e - Superior 100 Mile 2018\nIce Age Trail (1147 miles) FKT - 2020\n',
    desc: "Coree vit et s'entraîne à Ottowa, dans l'Illinois ; il est l'un des rares coureurs d'élite du Midwest. Bien qu'il privilégie désormais les épreuves plus longues, il a commencé sa carrière de coureur en courant des distances de 400 et 800 m sur la piste - ce qui le rend prêt pour n'importe quelle distance sur n'importe quelle surface. La plus longue course de Coree avant de s'inscrire à son premier marathon en 2014 n'était que de 16 miles, mais il a réalisé un premier chrono très respectable de 2:37. Un an plus tard, il a remporté tous les ultras auxquels il s'est inscrit. Quelques années plus tard, en 2018, il a terminé 25e de la Western States. Plus récemment, Coree a établi un FKT sur le Ice Age Trail en bouclant le parcours de 1147 miles en seulement 21 jours, 13 heures et 35 minutes. Au-delà de la course, Coree est père, parachutiste et un modèle pour tous ceux qui défendent la diversité dans le monde de l'outdoor."
  },
  john_kelly: {
    name: 'John Kelly',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: 'Vainqueur des marathons Barkley en 2017. Champion du monde ITU dans sa catégorie d\'âge sur longue distance en 2018. Vainqueur de la Spine Race en 2020. Premier à terminer "The Grand Round" au Royaume-Uni. Record du monde Guiness du "marathon le plus rapide habillé en personnage de jeu vidéo" (marathon de Boston 2016).',
    desc: "John est spécialisé dans les épreuves de montagne de plusieurs jours telles que le Barkley Marathon, la Spine Race, le Tor Des Geants, et les longs FKT comme son récent projet de Grand Round où il a relié les 3 grands tours de course à pied du Royaume-Uni. Il a grandi dans l'est du Tennessee, où son amour de la montagne a débuté, et il vit actuellement au Royaume-Uni avec sa femme et ses quatre enfants, où il est directeur technique et cofondateur d'une start-up technologique. John va continuer à explorer les montagnes et ses propres limites, en se fixant des objectifs qui repoussent ses limites. Il espère pouvoir transmettre ces passions à ses enfants et à d'autres personnes, en encourageant l'appréciation et la préservation des espaces sauvages et de la valeur qu'ils apportent à notre société."
  },
  camille_herron: {
    name: 'Camille Herron',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: '\\Trois fois qualifiée pour les trials olympiques sur marathon (2008, 12, 16) Deux fois championne du monde (50 km, 100 km) Vainqueure du marathon des Camarades en 2017 Meilleur temps sur 100 miles, 12:42:40 Records du monde (50 miles, 12 heures, 100 miles, 24 heures) et 8 records américains.',
    desc: "Camille est en train de s'imposer comme l'ultrarunneuse la plus rapide de tous les temps sur de nombreuses distances et surfaces. Sa vitesse, sa polyvalence, sa ténacité et son sens de la course font d'elle une légende dans ce sport. Elle est entraînée par son mari, Conor, et vit à Warr Acres, OK/Alamosa, CO avec leurs bergers allemands, Hawi et Winny. Elle est entraîneur, assistante de recherche à l'OUHSC, conférencière et ambassadrice, et depuis 2012, elle est secrétaire du comité féminin de course longue distance de l'USATF."
  },
  hayden_hawks: {
    name: 'Hayden Hawks',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: '2016 Speedgoat 50km- 1ère place\n2016/2017 TNF SF 50mile- 2ème/3ème place\n2017 CCC 100km- 1ère place et CR\n2018 Lavaredo Ultra Trail 120km- 1ère place\nZion Traverse Fastest Known Time (FKT) 48 miles',
    desc: "Athlète professionnel d'ultra/montagne de Cedar City, Utah. Hayden aime passer ses journées à explorer les montagnes, les canyons et les déserts des parcs nationaux et des itinéraires publiques près de chez lui, dans le sud de l'Utah. Il aime aussi voyager et découvrir le monde avec les deux personnes qui comptent le plus pour lui, sa femme et son jeune fils. Il a eu du succès dans tous les domaines de la course à pied dans lesquels il s'est spécialisé au fil des ans, y compris l'athlétisme, le cross-country, la course sur route, la course en montagne, et maintenant l'ultra-marathon ! Il adore la course à pied et tout ce qui s'y rapporte !"
  },
  tim_tollefson: {
    name: 'Tim Tollefson',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: ['Deux fois qualifiés aux Trials Olympiques US sur marathon', 'Champion des Etats-Unis en trail sur 50km en 2014', '3ème à l’UTMB en 2016 et 2017', 'Vainqueur de l’Ultra Trail d’Australie en 2017'].join('\n'),
    desc: 'Tim Tollefson est un athlète de sports de montagne qui vit à Mammoth Lakes, en Californie, avec son épouse, Lindsay. Après une carrière réussie de coureur sur route, deux fois qualifié pour les Trials olympiques de marathon aux États-Unis, Tim a fait la transition vers le trail running. En trois ans à peine, il a remporté le titre national américain 2014 de l’USATF sur 50 km, a porté le maillot américain aux championnats du monde d’Ultra Trail de l’IAU, a remporté l’Ultra Trail Australia et a terminé deux fois 3e à l’UTMB. Tim travaille également à plein temps comme kinésithérapeute au service de la population locale de l’Eastern Sierra et des athlètes de passage. A l’avenir, Tim espère continuer à progresser en tant qu’athlète de haut niveau en trail running, en ski alpinisme et en alpinisme, et à promouvoir le plaisir de faire du sport en montagne au plus grand nombre et le plus longtemps possible à travers un sport propre.'
  },
  magda_boulet: {
    name: 'Magda Boulet',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: "Deuxième du marathon des trials olympiques de 2008 ; meilleur temps au marathon en 2:26.22 (Rotterdam 2010) ; vainqueur de la Western States en 2015 ; meilleure coureuse d'ultra-nord-américain de l'année en 2015 ; deuxième de la Western States en 2017 ; deuxième du 102 km de Terewara en 2017.",
    desc: "Magda a grandi en Pologne et a immigré aux États-Unis en 2001, obtenant sa nationalité la même année. Elle a obtenu un diplôme de premier cycle en biodynamique humaine à l'UC Berkeley et une maîtrise en physiologie de l'exercice à Cal State Hayward. Entraînée par le légendaire Jack Daniels, Magda a connu d'immenses succès sur les routes et les pistes. Magda s'est qualifiée pour les Jeux olympiques de 2008 à Pékin grâce à sa deuxième place aux trials olympiques. Son meilleur temps au marathon de Rotterdam en 2010 (2:26.22) la place toujours au 11e rang des femmes américaines sur la distance de 26.2 miles. En 2013, Magda a fait la transition vers le trail et l'ultra-running et, à peine deux ans plus tard, elle a remporté le prestigieux Western States 100 lors de son premier test sur cette distance. Un certain nombre d'autres performances solides lui ont valu d'être nommée North American Ultra Runner of the Year en 2015. Magda vit à Oakland, en Californie, avec son mari Richie et leur fils Owen. Lorsqu'elle n'est pas en compétition, vous pouvez la trouver en train de diriger l'innovation et le développement de produits pour GU Energy Labs."
  },
  sally_mcrae: {
    name: 'Sally McRae',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: "10 fois championne d'ultramarathon. 20 fois sur le podium dans le monde entier. 2 fois dans le top 10 de la Western States 100.",
    desc: "Sally McRae est une épouse et une mère de deux enfants qui croque les rêves et l'aventure. Elle est coureuse de trail professionnelle et gravit des montagnes dans le monde entier. Elle est également coach, écrivain et conférencière à temps partiel, encourageant les autres à vivre pleinement leur vie."
  },
  hillary_allen: {
    name: 'Hillary Allen',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: 'Victoire à la course Cortina Trail 2018\nRecord du parcours, TNF Endurance Challenge Chile 80km 2018\n2ème au classement mondial Sky Running Ultra 2017\nRecord du parcours, Maderia Skyrace 2017\nTransvulcania 3ème place 2017\nUSA Mountain Running Team 2016\n3ème place, Ultra Skyrunning World Series 2016\nRecord du parcours, TNF Cortina Trail 2016\nUS Sky Running Ultra Champion 2015\nRecord du parcours, Speedgoat 50k 2015',
    desc: "Ce n'est pas pour rien qu'on appelle Hillary Allen la \"Hillygoat\" : elle a rapidement prouvé ses capacités de coureuse rapide en montagne, surtout lorsque le sentier tourne vers le ciel. Joueuse de tennis à l'origine, Hillary Allen ne s'est mise à la course à pied qu'après ses études supérieures, lorsqu'elle a eu besoin d'un exutoire pour se vider l'esprit pendant son cursus en neurosciences. Elle s'est associée à quelques coureurs locaux et n'a jamais regardé en arrière, atteignant rapidement des podiums dans des courses de trail longue distance. Depuis, elle a participé à des courses dans le monde entier, où elle continue à accumuler les podiums et à établir des records de parcours, tout en gardant une attitude humble et un grand sens de l'humour."
  },
  sage_canaday: {
    name: 'Sage Canaday',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: "Deux fois qualifiée pour les trials olympiques de marathon \n3 fois vainqueur du 50 km Speedgoat \n3 fois champion nationale de l'USATF (Trail 100 km, course de montagne et Trail Marathon) \n2 fois vainqueur du 100 km Tarawera \n2 fois vainqueur du 50 mile Lake Sonoma \nVainqueur du North Face 50 mile Endurance Challenge San Francisco \nChampionne du monde longue distance en montagne en 2014 (ascension du Pikes Peak en 2:10)",
    desc: 'Sage est un coureur de "montagne-ultra-trail" ou "MUT" depuis 2012, date à laquelle il a déménagé à Boulder Colorado. Auparavant, il courait principalement sur les routes et la piste, où il était le plus jeune qualifié aux trials olympiques de marathon des États-Unis en 2007, à l\'âge de 21 ans. Après avoir fait la transition vers les sentiers et les montagnes en 2012, il est devenu champion américain de course de montagne et, quelques années plus tard, il a également ajouté les épreuves de 100 km et de marathon en trail à sa liste de titres nationaux américains. Sur le plan international, il a remporté deux fois les 100 km de Tarawera en Nouvelle-Zélande et a été champion du monde de course de montagne longue distance lors de l\'ascension de Pikes Peak en 2014.  Il a également remporté la prestigieuse course North Face Endurance Challenge 50-mile à San Francisco et a gagné trois fois le Speedgoat 50km. A l\'avenir, Sage envisage de participer aux courses de montagne-ultra-trail les plus compétitives du monde.'
  },
  cody_reed: {
    name: 'Cody Reed',
    country: 'États-Unis',
    countryIcon: 'usa',
    achievement: '2014 Championnats nationaux de cross-country NCAA \n2014 Championnats de la Big Sky Indoor Conference (à Flagstaff) 3k 2ème place \n2016 Tamalpa Headlands 50k 1ère place \n2017 Way Too Cool 1ère place \n2018 Western States 7ème place',
    desc: "Cody Reed vit et s'entraîne sur les montagnes et dans les canyons autour de Flagstaff, en Arizona, avec les Coconino Cowboys. Il court en compétition depuis le collège, mais ce n'est qu'en 2016 que Cody a décidé d'essayer une course de trail et il n'a pas fait marche arrière depuis. Cody a pu voyager dans le monde entier en faisant ce qu'il aime et en faisant passer la promotion du trail."
  },
  harry_jones: {
    name: 'Harry Jones',
    country: 'Royaume-Uni',
    countryIcon: 'kingdom',
    achievement: '',
    desc: "Harry a commencé à courir en junior sur la piste avant de faire la transition vers le monde de l'ultra trail. Il se concentre principalement sur la distance de 100 km depuis deux ans et est monté sur le podium dans un certain nombre de courses internationales, notamment en prenant la troisième place au Tarawera Ultramarathon, au Cappadocia Ultra-Trail et à l'Ultra-Trail Australia. Pendant son temps libre, Harry travaille en tant qu'entraîneur de course à pied et YouTuber, documentant son entraînement et ses courses à travers le monde. Il s'entraîne actuellement pour son plus grand défi à ce jour - son premier 100 milles à l'UTMB en août 2019."
  },
  zach_bitter: {
    name: 'Zach Bitter',
    country: 'USA',
    countryIcon: 'usa',
    achievement: 'Détenteur du record du monde et du record américain. Champion national 2012 et 2015 (50 miles)\nChampion national 2014 (100 miles)\nCourse de 50 miles de JFK - 9ème meilleur temps',
    desc: "Zach Bitter est un athlète d'endurance extrême et un entraîneur. Zach détient le record du monde des 100 miles (11 heures 19 minutes 13 secondes) et des 12 heures (104,88 miles). Zach a couru dans le monde entier, et a notamment représenté l'équipe des États-Unis aux championnats du monde de 100 km à trois reprises. Lorsqu'il n'est pas sur la route ou sur la piste, Zach aime s'amuser sur les sentiers. Il a gagné le Javelina 100 mile et le San Diego 100 mile."
  },
  audrey_tanguy: {
    name: 'Audrey Tanguy',
    country: 'France',
    countryIcon: 'france',
    achievement: ['2ème de l’Ultra Trail du Lavaredo Ultra Trail', '3ème de l’Ultra Trail de Madère (MIUT)', 'Vainqueure de la TransJeju en Corée (50km)', 'Vainqueure de la TDS en 2018 et 2019', '2ème des 90km du marathon du Mont Blanc en 2018'].join('\n'),
    desc: 'Audrey Tanguy est basée dans les Alpes françaises où elle s’entraîne pour devenir l’une des meilleures coureuses de trail en Europe. Ses performances en tant que traileuse et coureuse en montagne sont impressionnantes, avec des victoires et des podiums au Marathon du Mont-Blanc, à l’Ultra Trail de Lavaredo et à l’Ultra Trail de l’île de Madère (MUIT) mais surtout deux victoires sur la TDS. Passionnée de trail running, Audrey espère continuer à défendre ses titres, tout en se lançant dans de nouvelles aventures.'
  },
  scotty_hawker: {
    name: 'Scotty Hawker',
    country: 'Nouvelle-Zélande',
    countryIcon: 'newzealand',
    achievement: '5ème - 2019 Hong Kong 100km, Hong Kong 1er - 2019 Mt Solitary Ultra 45km, Australie 3ème - 2019 Retezat Skyrace 28km, Roumanie 3ème - 2019 Lavaredo Ultra Dolomites, Italie 2ème - 2019 Grossglockner Ultra Trail 50km, Autriche 3ème - 2019 UTMB, France 1er - 2019 Maesalong 10km, Thaïlande',
    desc: "Scotty Hawker est un coureur de trail et d'ultramarathon originaire de Christchurch, en Nouvelle-Zélande. Il passe actuellement six mois de l'année à voyager en Europe avec sa femme et sa fille de trois ans. Ils adorent explorer de nouveaux pays et cela donne à Scotty l'occasion de s'aligner sur certains des trails et d'ultramarathon les plus compétitifs au monde. En 2019, Scotty a couronné une excellente saison de course par une 3e place au prestigieux Ultra Trail du Mont Blanc. Après une année 2018 incroyablement difficile et avoir failli abandonner le sport, c'est un résultat qui a été durement combattu et qui a laissé Scotty avec une confiance retrouvée alors qu'il se prépare pour la saison 2020. Scotty est également entraîneur, aidant des athlètes du monde entier à se préparer pour des courses en trail et ultramarathon. Scotty aime pouvoir partager ses connaissances et son expérience du trail avec d'autres personnes et trouve que l'entraînement lui permet d'équilibrer sa vie avec celle d'un athlète."
  },
  tommy_caldwell: {
    name: 'Tommy Caldwell',
    country: 'USA',
    countryIcon: 'usa',
    achievement: ["Première Free Climb du mur du Dawn Wall d'El Capitan (Yosemite)", 'Première Free Climb du Dihedral Wall', 'Free Climb du Nose en 11 heures', 'Record de vitesse du Nose en 1 heure 58 mins', 'Première ascension de la traversée du Fitz Roy en Patagonie.'].join('\n'),
    desc: "National Geographic a dit de Caldwell qu'il \xE9tait \"sans doute le meilleur grimpeur polyvalent de la plan\xE8te\". Tommy a grimp\xE9 dans le monde entier et a \xE9tabli certaines des voies d'escalade les plus difficiles des \xC9tats-Unis. Qu'il s'agisse du Dawn Wall, de la Fitz Traverse ou du record de vitesse The Nose, Tommy est inarr\xEAtable et continue de prouver ce qui est possible lorsqu'on pousse le corps humain."
  },
  john_price: {
    name: 'John Price',
    country: 'Canada',
    countryIcon: 'canada',
    achievement: '',
    desc: "John Price, photographe et grimpeur, a passé les six dernières années à voyager dans le monde entier, tout en étant basé au Canada.  Au cours des quatre dernières années, John Price s'est adonné à l'escalade et à la photographie de rochers, de glace et d'ascensions alpines dans toute l'Amérique du Nord, dans les coins les plus reculés de l'Himalaya, dans le Japon rural, dans des escalades sur glace en Chine et dans les Rocheuses canadiennes.  Il est actuellement basé à Canmore, en Alberta, où il travaille en tant que photographe indépendant spécialisé dans l'aventure, le lifestyle et les paysages."
  },
  luke_smithwick: {
    name: 'Luke Smithwick',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: "Un journaliste a récemment surnommé Luke Smithwick, skieur alpiniste professionnel de COROS, \"l'un des alpinistes himalayens les plus prolifiques de ces derniers temps.\" Après 73 expéditions himalayennes au cours des 9 dernières années, il se concentre sur le ski d'exploration et l'alpinisme. Smithwick a effectué plus de 30 premières descentes à pied dans l'Himalaya, développant au passage une profondeur de connaissances et un curriculum vitae en ski que peu possèdent.  Il vit à Victor, dans l'Idaho, au pied des Tetons.  Il rejoint l'équipe professionnelle COROS avec de grands projets pour 2020 et au-delà."
  },
  hilaree_nelson: {
    name: 'Hilaree Nelson',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: "Combinant une passion pour l'exploration, les aventures en montagne et le ski, Hilaree Nelson a voyagé dans certaines des chaînes de montagnes les plus exotiques de la planète. Sa carrière d'expédition l'a conduite à de nombreuses \"premières\" dans le monde du ski-alpinisme, notamment la liaison de deux sommets de 8 000 m (Everest et Lhotse) en une seule fois, les premières descentes à ski sur l'île de Baffin, la première ascension et descente à ski américaine du pic Papsura en Inde et, plus récemment, la première descente à ski du quatrième plus haut sommet du monde, le Lhotse. Elle est la capitaine de l'équipe d'athlètes de North Face, une leader actif sur le climat avec Protect Our Winters, et une fervente partisane des endroits sauvages tels que l'Arctic National Wildlife Refuge. Elle est convaincue que ces endroits encore sauvages ont une grande importance pour le bien-être de la planète et de l'esprit humain. Récemment désignée par le Men's Journal comme l'une des femmes les plus aventureuses de ces 25 dernières années, ainsi que comme l'aventurière de l'année 2018 du National Geographic, Hilaree complète ses activités sportives en partageant ses nombreuses histoires sur des scènes à travers le pays dans l'espoir d'inspirer l'imagination et la passion des personnes qu'elle rencontre. Hilaree est également la mère de deux garçons et trouve son équilibre mental dans les montagnes San Juan près de chez elle à Telluride, dans le Colorado."
  },
  jim_morrison: {
    name: 'Jim Morrison',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: "Jim Morrison a cimenté sa réputation de l'un des plus grands skieurs alpinistes de tous les temps en effectuant en 2018 la première descente du couloir du Lhotse, l'une des dernières lignes de ski de haute altitude de premier ordre au monde. Des décennies avant cet exploit historique, Morrison accumulait toute une vie d'expérience de ski autour du globe. De Chamonix à l'Alaska et à l'Himalaya indien, Morrison a escaladé et skié les sommets les plus exigeants du monde, y compris une première descente de Papsura, une nouvelle ligne de ski sur Cho Oyu, ainsi qu'un sommet et une descente partielle à ski du mont Everest. En plus de son temps passé dans les montagnes, Morrison est également un entrepreneur prospère, propriétaire et exploitant d'une entreprise de construction de maisons de luxe à Lake Tahoe. En outre, il s'investit dans sa communauté en tant que membre du conseil d'administration de son district aéroportuaire local et participe activement à l'association environnementale sans but lucratif Protect Our Winters."
  },
  jason_antin: {
    name: 'Jason Antin',
    country: 'USA',
    countryIcon: 'usa',
    achievement: '',
    desc: "Jason Antin, originaire de Nouvelle-Angleterre et désormais installé dans le Colorado, s'efforce de trouver un équilibre optimal entre vie professionnelle et vie privée. En plus de contribuer au lancement d'une poignée de jeunes entreprises spécialisées dans les activités de plein air, il consacre une grande partie de son temps à travailler comme guide d'escalade technique pour les guides Alpenglow Mountain et Denver Mountain Guiding. En outre, il est coach de renforcement musculaire au Alpine Training Center de Boulder, CO, où il prépare ses athlètes aux rigueurs physiques et mentales de la montagne. En dehors des heures de travail, Jason partage sa maison à Golden, CO, avec sa femme Jenny et sa fille de 3 ans, Avery. Il aime se déplacer rapidement en montagne sur tous les supports que mère nature partage avec nous, qu'il s'agisse de sentiers, de rochers, de glace ou de neige."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/retail.js
/* harmony default export */ const fr_retail = ({
  retailTitle: 'TROUVER UN REVENDEUR',
  findADealer: 'TROUVER UN REVENDEUR',
  loading: 'Logiciel de localisation de magasin en cours de chargement'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/privacy.js
/* harmony default export */ const fr_privacy = ({
  privacyTitle: 'Politique de confidentialité',
  title: 'POLITIQUE DE CONFIDENTIALITÉ',
  updateDate: 'Dernière mise à jour：15/8/2020',
  updateDesc: 'Cette politique de confidentialité explique comment les informations vous concernant sont collectées, utilisées et divulguées par COROS Wearables Inc. (\\"COROS,\\" \\"nous,\\" ou \\"us\\"). Cette politique de confidentialité s\'applique aux informations que nous recueillons lorsque vous utilisez nos produits et services, y compris nos sites Web et nos applications mobiles (collectivement, les "Services") ou lorsque vous interagissez avec nous de toute autre manière. Pour plus de détails concernant les choix que nous offrons en rapport avec nos pratiques en matière d\'information, veuillez consulter la section "Vos choix" ci-dessous. Si vous avez des questions sur cette politique de confidentialité, veuillez nous contacter à info@coros.com.',
  infoTitle: 'Collecte d\'informations',
  providedInfo: {
    title: 'Informations que vous nous fournissez',
    desc: 'Nous recueillons les informations que vous nous fournissez directement par le biais de nos Services ou autrement. Par exemple, nous recueillons des informations lorsque vous créez un compte, mettez à jour votre profil, vous inscrivez à notre newsletter, utilisez notre appareil pour une séance d\'entraînement, synchronisez l\'historique de vos séances d\'entraînement sur notre serveur, effectuez un achat, demandez une assistance client ou nous fournissez des informations de toute autre manière. Les types d\'informations que nous pouvons recueillir comprennent votre nom, votre adresse électronique, votre adresse de livraison ou de facturation, les informations relatives au mode de paiement, l\'historique de vos séances d\'entraînement et toute autre information que vous choisissez de fournir.'
  },
  collectForService: {
    title: 'Informations que nous recueillons automatiquement lorsque vous utilisez nos services',
    desc: 'Lorsque vous accédez à nos Services ou les utilisez, nous recueillons automatiquement des informations vous concernant, notamment :\n - Informations de connexion : Nous recueillons des fichiers en relation avec votre utilisation des Services, y compris le type de navigateur que vous utilisez, les temps d\'accès, les pages consultées, votre adresse IP et la page que vous avez visitée avant de naviguer sur nos sites Web.\n - Informations sur les appareils : Nous recueillons des informations sur l\'ordinateur ou l\'appareil mobile que vous utilisez pour accéder à nos Services, y compris le modèle de matériel, le système d\'exploitation et la version, les identifiants uniques de l\'appareil et les informations sur le réseau mobile.\n - Informations de localisation : Nous pouvons recueillir des informations sur votre localisation par le biais de diverses technologies, notamment en déduisant une localisation approximative à partir de l\'adresse IP. Avec votre consentement, nous pouvons également collecter une localisation plus précise via notre application mobile.\n - Après avoir utilisé l\'application COROS pour télécharger les données de suivi de routine et de mouvement de votre appareil, les données seront téléchargées vers le serveur du magasin, et les données téléchargées comprendront les pas, les calories, la fréquence cardiaque, le temps d\'activité, les données d\'activité et la trajectoire de l\'activité. Vous pouvez désactiver l\'interrupteur GPS à la fin de la montre, et vous ne serez plus en mesure d\'enregistrer votre trajectoire et de télécharger le stockage sur le serveur lorsque vous vous déplacez. Si vous utilisez la fonction de rendu de carte, nous enverrons vos informations de localisation au fournisseur de services de rendu de carte qui peut dessiner et afficher votre emplacement sur la carte conformément à l\'accord, ces fournisseurs ne sont pas autorisés à partager ou à utiliser ces données à d\'autres fins.\n - Pour utiliser COROS Training Hub, veuillez vous connecter avec les mêmes identifiants de compte que ceux utilisés pour vous connecter à l\'application COROS. Si vous avez un accès de coach, vous pouvez créer des équipes et inviter d\'autres utilisateurs à rejoindre votre équipe via des liens d\'invitation ou des codes QR. Vous aurez la possibilité de définir des autorisations de confidentialité pour masquer ou autoriser votre équipe à voir vos informations personnelles et vos données d\'entraînement sur la page d\'informations personnelles dans COROS Training Hub. Vous pouvez également définir des autorisations de confidentialité pour permettre aux entraîneurs de modifier votre calendrier, de consulter vos données d\'entraînement et de laisser des commentaires pour suivre votre progression dans COROS Training Hub. COROS n\'est pas responsable du contenu des messages générés dans le COROS Training Hub. COROS n\'est pas responsable de la conduite de tout utilisateur de COROS (en ligne ou hors ligne).\n - Rapport de panne de l\'application et rapport d\'utilisation des fonctionnalités : lorsque votre application COROS ne fonctionne pas correctement, elle peut envoyer des rapports de panne à notre équipe pour analyse. Ce rapport est anonyme et ne contient aucune information personnelle. L\'application recueille également des données anonymes sur le comportement des utilisateurs afin de fournir un retour d\'information aux développeurs sur les fonctions les plus populaires, ce qui permet à nos développeurs de prendre les meilleures décisions pour le développement des produits à venir.\n - Contact d\'urgence : Lors de l\'utilisation de la fonction de contact d\'urgence du casque, vous saisirez à l\'avance le contact téléphonique et les informations de mémo pour le contact d\'urgence, qui est uniquement utilisé lorsque vous portez un casque et que vous êtes connecté à l\'app ride, le casque reconnaît cette urgence et demande à l\'app de demander au serveur d\'envoyer un message au contact d\'urgence. Nous n\'exposons pas ce contact à d\'autres fins. Dans le cas d\'un accident qui déclenche l\'envoi d\'un message texte, nous inclurons les informations de localisation dans le message envoyé et l\'heure locale à laquelle l\'accident s\'est produit au contact d\'urgence précédemment défini. Nous ne serons pas tenus responsables de l\'échec de l\'envoi du SMS SOS en raison de l\'interruption du service de l\'opérateur SMS ou de l\'absence de réponse. Informations collectées par les cookies et autres technologies de suivi : Nous et nos prestataires de services utilisons diverses technologies pour collecter des informations, notamment des cookies et des balises web. Les cookies sont de petits fichiers de données stockés sur votre disque dur ou dans la mémoire de votre appareil qui nous aident à améliorer nos Services et votre expérience, à voir quelles zones et fonctionnalités de nos Services sont populaires et à compter les visites. Les pixels invisibles sont des images électroniques qui peuvent être utilisées dans nos services ou nos courriels et qui nous aident à transmettre les cookies, à compter les visites et à comprendre l\'utilisation et l\'efficacité des campagnes.'
  },
  collectFromOther: {
    title: 'Informations que nous recueillons auprès d\'autres sources',
    desc: 'Nous pouvons également obtenir des informations d\'autres sources. Par exemple, si vous créez ou vous connectez votre compte par le biais des réseaux sociaux, nous recevrons certaines informations de ce service, telles que votre nom, les informations de votre compte ou votre liste d\'amis, conformément aux procédures d\'autorisation déterminées par ce service. Utilisation des informations Nous pouvons combiner les informations que nous recueillons à votre sujet et utiliser ces informations pour :\n - Fournir, maintenir et améliorer nos Services et développer de nouveaux produits et services;\n - Fournir et livrer les produits ou services que vous demandez ou achetez;\n - Vous envoyer des avis, mises à jour, alertes, confirmations, réponses du service clientèle, et autres messages administratifs et de support;\n - Communiquer avec vous au sujet de produits, services, offres, promotions, ou autres informations que nous pensons pouvoir intéressants pour vous ;\\Contrôler et analyser les tendances, l\'utilisation et les activités en rapport avec nos Services;- Détecter, enquêter et prévenir les transactions frauduleuses et autres activités illégales et protéger les droits et la propriété de COROS et autres ; et - Personnaliser et améliorer nos Services et fournir un contenu ou des fonctionnalités qui correspondent à votre profil ou à vos intérêts.'
  },
  sharingInfo: {
    title: 'Partage de l\'information',
    desc: 'Nous pouvons partager les informations vous concernant comme suit ou comme décrit autrement dans la présente politique de confidentialité :\n - Avec les prestataires de services qui effectuent des travaux en notre nom ;\n - Si vous choisissez de connecter votre compte COROS à d\'autres services tiers, tels que Strava, TrainingPeaks ou d\'autres services non explicitement répertoriés pour la synchronisation automatique, vos données leur seront automatiquement envoyées. Vous pouvez désactiver les paramètres de synchronisation automatique sur votre application COROS à tout moment, mais les données envoyées à la plateforme tierce y resteront, sauf si elles sont supprimées de leur serveur.\n - Si vous participez à des zones interactives de nos Services, certaines informations vous concernant peuvent être affichées publiquement via nos Services, telles que votre nom d\'utilisateur et les informations de votre profil ; \n - En réponse à une demande d\'informations si nous pensons que la divulgation est conforme à, ou requise par, toute loi, réglementation ou procédure légale applicable ; \n - Si nous pensons que vos actions sont incompatibles avec nos accords ou politiques d\'utilisation, ou pour protéger les droits, la propriété et la sécurité de COROS ou d\'autres personnes ;\n - Dans le cadre de, ou pendant les négociations de, toute fusion, vente d\'actifs de la société, financement ou acquisition de tout ou partie de notre activité par une autre société;\n - Entre et parmi COROS et nos parents, affiliés, filiales et autres sociétés sous contrôle et propriété communs actuels et futurs;\n - Avec votre consentement ou selon vos instructions, nous pouvons également partager des informations agrégées ou dépersonnalisées, qui ne peuvent pas être raisonnablement utilisées pour vous identifier.'
  },
  advancedRawData: {
    title: 'Données brutes des séances d\'entraînement avancées',
    desc: 'Les données brutes des séances d\'entraînement avancées, y compris les données sources du GPS de votre appareil COROS, la fréquence cardiaque, les performances de la batterie, etc. sont stockées sur votre appareil COROS. Il se peut que l\'on vous demande d\'envoyer les données brutes via l\'application COROS à notre équipe lorsque vous sollicitez une assistance client ou un dépannage. En outre, notre équipe a besoin de la soumission de données brutes afin de déterminer la défaillance du matériel en réponse aux demandes de garantie.'
  },
  socialSharingFeat: {
    title: 'Fonctions de partage social',
    desc: 'Nos services peuvent offrir des fonctions de partage sur les réseaux sociaux et d\'autres outils intégrés (par exemple avec d\'autres réseaux sociaux), qui vous permettent de partager les actions que vous effectuez sur nos services avec d\'autres médias, et vice versa. Votre utilisation de ces fonctionnalités permet de partager des informations avec vos connaissance ou avec le public, en fonction des paramètres que vous établissez avec l\'entité qui fournit la fonctionnalité de partage. Pour plus d\'informations sur l\'objectif et la portée de la collecte et du traitement des données dans le cadre des fonctionnalités de partage, veuillez consulter les politiques de confidentialité des entités qui fournissent ces fonctionnalités.'
  },
  ad: {
    title: 'Services d\'analyse et de publicité fournis par d\'autres',
    desc: 'Nous pouvons faire appel à des tiers pour fournir des services d\'analyse et de publicité pour nos sites web et services en ligne. Ces entités peuvent utiliser des cookies, des balises web, des identifiants d\'appareils et d\'autres technologies pour collecter des informations sur votre utilisation de nos Services et d\'autres sites web et services en ligne, y compris votre adresse IP, votre navigateur web, des informations sur le réseau mobile, les pages consultées, le temps passé sur les pages ou dans les apps, les liens cliqués et les informations de conversion. Ces informations peuvent être utilisées par COROS et d\'autres pour analyser et suivre l\'activité d\'utilisation, déterminer la popularité de certaines fonctionnalités et fournir des publicités et du contenu adaptés à vos intérêts. Pour plus d\'informations sur les publicités basées sur les intérêts, y compris sur la manière de refuser que vos informations de navigation sur le web soient utilisées pour des publicités basées sur les intérêts, veuillez consulter www.aboutads.info/choices. Votre appareil mobile peut également comporter une fonction qui vous permet de restreindre l\'utilisation de certaines informations collectées par des applications à des fins de diffusion de publicités ciblées.'
  },
  deleteAccount: {
    title: 'Suppression de votre compte',
    desc: 'Vous pouvez envoyer un email à support@coros.com pour demander la suppression de votre compte COROS, y compris toutes les données personnelles. Une copie de l\'historique de vos séances d\'entraînement dans un format de fichier .fit peut également être demandée à partir de cet e-mail.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/tradeIn.js
/* harmony default export */ const fr_tradeIn = ({
  title: 'Programme COROS Trade In',
  desc: "Une entreprise de technologie sportive de performance qui aide les athlètes à s'entraîner pour donner le meilleur d'eux-mêmes.",
  pageTitle: 'TRADE IN APPLICATION',
  pageDesc: 'Trade in a working GPS watch from any brand including COROS for up to a $100 credit towards your new COROS watch purchase. Each trade-in eligible watch applies to only one new watch purchase.\n\nOnce the trade-in unit has been shipped to us, it is unable to be returned or refunded if you change your mind.',
  residentsDescNotify: 'The program is currently available for residents in the United States only. ',
  residentsDesc: 'The program is currently available for US residents only. ',
  nextSteps: ['Our team will review your information and provide an estimate value by email.', 'If you choose to accept the offer, place your new watch order with the original price.', 'Ship the trade in unit with prepaid shipping label provided by COROS, along with your order email confirmation.', 'We will refund the value of your trade in to your order once we receive your shipment.', "This offer can't be combined with other price discounts.", 'Enjoy your newly upgraded COROS watch!'],
  howItWorks: ['Submit information', 'Receive an offer with value', 'Place an order for the new watch and ship your trade in watch', 'Get a refund when we receive your trade in watch'],
  notifyButton: 'NOTIFY ME',
  notifyPlaceholder: 'NOTIFY WHEN AVAILABLE'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/apex.js
/* harmony default export */ const fr_apex = ({
  title: 'Montre GPS COROS APEX',
  desc: 'Notre montre la plus polyvalente pour les athlètes de plein air, qui voyagent léger et vite.',
  accessories: 'ACCESSOIRES',
  battery_life: {
    title: 'Durée de vie de la batterie ultra-durable',
    desc: "Ne chargez plus votre montre en permanence. Avec l'APEX, vous disposez d'une montre conçue pour durer au-delà de vos séances d'entraînement. En réglage UltraMax, la batterie est conçue pour durer jusqu'à 100 heures en mode GPS. En mode normal, elle peut durer jusqu'à 35 heures, et en usage quotidien, jusqu'à 30 jours."
  },
  'Built in Premium': {
    title: 'Intégré dans le Premium',
    desc: "La transition entre le lieu de travail et l'entraînement est facile grâce à la conception et au design intelligents de l'APEX. Avec des options de finition comprenant un alliage de titane et une lunette en acier inoxydable, ainsi qu'un cadran en verre saphir pour une protection extrême, vous êtes prêt à affronter tous les environnements."
  },
  'Simplicity at its Finest': {
    title: "La simplicité à l'état pur",
    desc: "Changer d'écran et utiliser des appareils peut être laborieux avec des boutons traditionnels, surtout au milieu d'une séance d'entraînement. Avec le cadran numérique, vous pouvez facilement naviguer dans l'APEX, ce qui vous permet de vous concentrer sur les choses importantes comme terminer votre course ou préparer votre prochaine série."
  },
  'Training Efficiency Without Injury': {
    title: "Efficacité de l'entraînement sans blessure",
    desc: "Pour éviter les blessures, il n'y a rien de plus crucial que de s'entraîner correctement. Nous sommes en mesure de déterminer avec précision votre effort global, décomposé en niveau d'endurance (0-100) et en effet d'entraînement (0-6). Vous avez exercé trop d'endurance ? COROS Trainer vous signalera qu'il est temps de vous reposer. En fonction du niveau d'effort et de l'historique d'entraînement, vous pourrez alors voir une fenêtre de récupération conseillée avant de commencer votre prochaine activité."
  },
  'Navigation Track': {
    title: 'Voie de navigation',
    desc: "Équipé de fonctions de suivi et de navigation, l'APEX peut être votre meilleur outil lorsque vous avez le plus besoin d'indications. Les itinéraires sont téléchargés et affichés sur la grille sous la forme d'un fil d'Ariane avec des informations en temps réel sur la direction et l'altitude et des alertes pour vous aider à retrouver le cap."
  },
  'Smart Learning Stride Length': {
    title: 'Longueur de la foulée Smart Learning',
    desc: "Voici l'algorithme intelligent de la foulée, propre à COROS. Cet algorithme unique, qui repose sur l'apprentissage automatique, enregistre votre amplitude de mouvement personnelle pendant la course. Vous pourrez ainsi construire votre propre modèle de foulée qui sera utilisé pour la course en intérieur ou dans les zones où le signal GPS est faible (comme les tunnels)."
  },
  gpsAbilities: ['Prenez les bonnes habitudes en course à pied avec le GPS normal', 'Estimez la distance parcourue et suivez votre trace lorsque le GPS est faible ou perdu.'],
  'Your Complete Training Guide': {
    title: "Votre guide complet d'entraînement",
    desc: "Basé sur un algorithme unique avec seuil de lactate, VO2 Max et FC, le COROS Trainer calcule chaque jour votre entraînement de course. En utilisant vos données historiques personnelles ainsi que les mesures de votre dernière activité, telles que l'allure, la distance et la fréquence cardiaque, COROS Trainer calcule l'effort perçu et recommande un temps de récupération complet."
  },
  'ANY WORKOUT, ANYWHERE': {
    title: "N'IMPORTE QUELLE SÉANCE D'ENTRAÎNEMENT, N'IMPORTE OÙ",
    desc: "Avec le mode d'entraînement COROS, vous pouvez créer, partager et même télécharger des séances d'entraînement d'athlètes et d'entraîneurs professionnels. Créez votre propre séance d'entraînement dans l'application COROS pour la course à pied, le cyclisme, la natation ou l'entraînement musculaire, sans aucune limite. Choisissez parmi plus de 200 exercices préchargés pour créer votre séance de musculation idéale. Partagez vos séances d'entraînement avec vos amis et partenaires d'entraînement par SMS, e-mail, médias sociaux ou même directement dans l'application à l'aide d'un code QR. Enfin, suivez les séances d'entraînement sélectionnées par des athlètes et des entraîneurs professionnels en les téléchargeant sur coros.com et sur votre montre. Avec le nouveau mode d'entraînement, vos meilleurs efforts sont à votre portée."
  },
  'Stay on Track': {
    title: 'Restez sur la bonne voie',
    desc: "Une piste standard fait 400 m, alors pourquoi les appareils GPS ne semblent pas y arriver ? Avec le nouveau mode de course sur piste de COROS, un algorithme exclusif est utilisé pour s'assurer que vos courses sur piste et vos séances d'entraînement sont mesurées avec précision, quel que soit le couloir que vous choisissez. Fini les zigzags aléatoires sur le terrain, ou les virages serrés, place aux lignes droites et aux courbes de la piste, comme si vous couriez dessus."
  },
  pod: "En travaillant avec le dispositif d'optimisation des performances (POD) de COROS, l'APEX est en mesure de fournir des mesures de course avancées en temps réel, y compris des données sur la puissance et la forme, pour vous aider à devenir un coureur plus intelligent et plus efficace.",
  podLinkText: 'Consultez le COROS POD',
  battery: {
    size46: {
      normal: '35 heures en mode GPS normal',
      ultra: '100 heures en mode UltraMax',
      regular: '30 jours en usage quotidien'
    },
    size42: {
      normal: '25 heures en mode GPS normal',
      ultra: '80 heures en mode UltraMax',
      regular: '24 jours usage quotidien'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/apex2.js
/* harmony default export */ const fr_apex2 = ({
  apex2title: 'COROS APEX 2/2 Pro',
  title: "Montre d'extérieur COROS APEX 2/2 Pro GPS",
  desc: "Pour les athlètes outdoor qui s'entraînent dur et bougent vite.",
  apex2Accessories: 'ACCESSOIRES APEX 2',
  apex2proAccessories: 'ACCESSOIRES APEX 2 Pro',
  productTitle: "POUR L'ENTRAÎNEMENT ET \nLE DÉPASSEMENT DE SOI",
  productDesc1: "Con\xE7ues pour \xEAtre performantes sur tous les types de terrain, les montres GPS \n  APEX 2 et APEX 2 Pro sont bas\xE9es sur des technologies innovantes pour t'aider \n  \xE0 atteindre tes objectifs les plus ambitieux.",
  productDesc2: "Avec un ext\xE9rieur encore plus r\xE9sistant, une antenne GPS redessin\xE9e pour des \n  performances plus solides, une exp\xE9rience de navigation am\xE9lior\xE9e, un capteur \n  de fr\xE9quence cardiaque optique nouvelle g\xE9n\xE9ration et une autonomie de \n  batterie encore plus longue, les montres APEX 2 et APEX 2 Pro sont les outils \n  les plus puissants pour guider ton entra\xEEnement et suivre tes progr\xE8s. \n  Pr\xE9pare-toi \xE0 t'entra\xEEner plus intelligemment et \xE0 aller plus loin.",
  productDescMobile1: "Con\xE7ues pour \xEAtre performantes sur tous les types de terrain, les montres GPS \n  APEX 2 et APEX 2 Pro sont bas\xE9es sur des technologies innovantes pour t'aider \n  \xE0 atteindre tes objectifs les plus ambitieux.",
  productDescMobile2: "Avec un ext\xE9rieur encore plus r\xE9sistant, une antenne GPS redessin\xE9e pour des \n  performances plus solides, une exp\xE9rience de navigation am\xE9lior\xE9e, un capteur \n  de fr\xE9quence cardiaque optique nouvelle g\xE9n\xE9ration et une autonomie de \n  batterie encore plus longue, les montres APEX 2 et APEX 2 Pro sont les outils \n  les plus puissants pour guider ton entra\xEEnement et suivre tes progr\xE8s. \n  Pr\xE9pare-toi \xE0 t'entra\xEEner plus intelligemment et \xE0 aller plus loin.",
  explorationTitle: "REPOUSSE LES LIMITES DE L'EXPLORATION",
  explorationDesc: " La montre de sport de plein air ultime équilibre la durabilité et la fonctionnalité, ce qui\n est c'est pourquoi nous avons soigneusement conçu chaque détail en gardant les\n performances à l'esprit, c'est pourquoi nous avons soigneusement conçu chaque\n détail en gardant les performances à l'esprit.  Avec l'APEX 2 et l'APEX 2 Pro, tu auras\n une montre qui dure aussi longtemps que toi. Et plus encore.",
  designLabel1: 'Titane de grade 5 \n Lunette avec revêtement PVD ',
  designLabel2: 'Compatible avec les gants \n Grand cadran numérique ',
  designLabel3: 'Verre saphir résistant aux rayures',
  explorationDescMobile: "La montre de sport de plein air ultime équilibre \n durabilité et la fonctionnalité, c'est pourquoi nous avons \n soigneusement conçu chaque détail en gardant \n la performance à l'esprit. Avec l'APEX 2 et \n APEX 2 Pro, tu auras une montre qui dure\naussi longtemps que toi. Et plus encore. ",
  designTitle: 'Conçue pour durer',
  designDesc: "Un \xE9cran en verre saphir et une lunette en alliage de titane grade 5 prot\xE8gent les composants \xE9lectroniques \n    composants \xE9lectroniques \xE0 l'int\xE9rieur de l'APEX 2 et de l'APEX 2 Pro. Alors que le verre saphir reste \n    pratiquement sans rayures, un nouveau rev\xEAtement PVD offre une r\xE9sistance aux rayures 2x plus importante sur\n    la lunette par rapport \xE0 son pr\xE9d\xE9cesseur. ",
  designDescMobile: "Un écran en verre saphir et une lunette en alliage de titane grade 5 \n protègent les composants électroniques à l'intérieur des \n APEX 2 et APEX 2 Pro. Alors que le verre saphir \n reste pratiquement inrayable, un nouveau revêtement PVD \n offre une résistance aux rayures multipliée par 2 sur la lunette\npar rapport à son prédécesseur. ",
  temperatureResistanTitle: 'Résistante aux températures',
  temperatureResistanDesc: " N'importe quel climat, n'importe où. L'APEX 2 fonctionne dans des\n températures de fonctionnement au poignet   températures allant de -20℃\n à 50℃, pour que tu puisses tester les limites de l'exploration.",
  temperatureResistanDescMobile: "N'importe quel climat, n'importe où. L'APEX 2 fonctionne dans des températures de fonctionnement sur- \n poignet des températures de fonctionnement allant de -20℃ \nà 50℃, pour que tu puisses tester les limites de l'exploration. \n de l'exploration.",
  temperatureResistanLower: '-20',
  temperatureResistanUpper: '50',
  temperatureUnit: '℃',
  waterproofTitle: "Résistante à l'eau",
  waterproofDesc: "Pluie, neige, flaques d'eau, boue, tu l'as\n dit.  L'APEX 2 reste au sec dans toutes les\n conditions.  Construite avec une résistance\n à l'eau de 5 ATM, cette  montre résiste\n également aux pressions jusqu'à une\n profondeur de 50m.",
  waterproofDescMobile: "Pluie, neige, flaques d'eau, \n boue, tu le sais. La \n APEX 2 reste sèche en toute \n condition. Construite avec une résistance à l'eau de 5 \n ATM de résistance à l'eau, \n cette montre résiste également \n résiste à des pressions \n jusqu'à une profondeur de 50m.",
  dialTitle: 'Cadran facile à utiliser',
  dialDesc: "Notre design comporte une molette digitale, pour que tu puisses facilement modifier les \n  param\xE8tres de ta montre en quelques clics, m\xEAme avec des gants.",
  dialDescMobile: "Notre design comporte une molette digitale, pour que tu puisses facilement modifier les \n  param\xE8tres de ta montre en quelques clics, m\xEAme avec des gants.",
  batteryTitle: 'Une autonomie de batterie encore meilleure',
  batteryDesc: "Gr\xE2ce \xE0 la faible consommation d'\xE9nergie du nouveau syst\xE8me de signal satellite, les APEX 2 ont une\n  autonomie de batterie encore plus longue que l'APEX originale. L'APEX 2 offre 40 heures d'autonomie, \n tandis que l'APEX 2 Pro offre 66 heures. De plus, il faut moins de 2 heures \xE0 la montre pour passer \n de z\xE9ro pourcent de batterie \xE0 compl\xE8tement charg\xE9e.",
  batteryDescKeyword: '66 heures',
  batteryDescMobile: "Gr\xE2ce \xE0 la faible consommation d'\xE9nergie du nouveau syst\xE8me de signal satellite, les APEX 2 ont une\n  autonomie de batterie encore plus longue que l'APEX originale. L'APEX 2 offre 40 heures d'autonomie, \n tandis que l'APEX 2 Pro offre 66 heures. De plus, il faut moins de 2 heures \xE0 la montre pour passer \n de z\xE9ro pourcent de batterie \xE0 compl\xE8tement charg\xE9e.",
  batteryDescMobileKeyword: '66 heures',
  batteryCompareImprove: "Jusqu'à",
  batteryCompareImproveTitle: 'Durée de vie de la batterie du GPS plus longue',
  navTitle: 'NAVIGUE EN PLEIN AIR \n COMME JAMAIS AUPARAVANT ',
  navDesc: "L'APEX 2 se double d'une montre prête pour tes aventures sur les sentiers du jardin ou pour \n l'escalade de montagnes glaciaires. Tu seras équipé de fonctions de navigation de premier ordre \n pour savoir exactement où tu te trouves dans la nature et comment retourner à ta destination initiale.\ncomment revenir à ta destination initiale. ",
  navDescMobile: "L'APEX 2 est une montre prête pour tes \n aventures sur les sentiers de l'arrière-cour ou l'escalade de \n montagnes. Tu seras équipé d'excellentes \n fonctions de navigation, pour que tu saches exactement où\ntu es dans la nature sauvage et comment revenir\nà ta destination initiale. ",
  gpsTitle: 'Précision GPS de niveau supérieur',
  gpsTitleMobile: 'Précision augmentée du GPS',
  gpsDesc: " Avec l'antenne 50 % plus performante  et le chipset\n GNSS All-Satellite, l'APEX 2 reçoit des  signaux des\n cinq principaux systèmes satellites pour obtenir les\n  données les plus précises. De plus, l'APEX 2 Pro\n  dispose de la toute dernière technologie bi-fréquence\n pour te suivre dans les endroits les plus difficiles.",
  gpsDescMobile: "Avec l'antenne 50% plus\n    performance et l'antenne All-\n   Satellite GNSS chipset, l\n    APEX 2 re\xE7oit les signaux des\n    les cinq principaux syst\xE8mes\n    satellites pour obtenir les\n    donn\xE9es les plus pr\xE9cises. De\n    plus, l'APEX 2 Pro  dispose de la\n    toute derni\xE8re technologie bi\n    technologie \xE0 double fr\xE9quence pour\n    te suivre  te suivre dans les\n   endroits les plus  endroits les\n    plus difficiles.",
  outdoorNavTitle: 'Ne te perds plus jamais',
  outdoorNavDesc: "Notre système de navigation très intuitif te donne les outils dont tu as besoin pour explorer les grands espaces. Avec \n cartes paysagères et topographiques mondiales hors ligne gratuites, tu peux accéder à des informations de navigation essentielles\ndans les endroits les plus reculés. Le cadran numérique des COROS APEX 2 et APEX 2 Pro permet de facilement \n zoomer en avant et en arrière sur ta carte, tandis que l'écran tactile te permet de faire glisser la carte avec ton doigt. ",
  outdoorNavLabel1: 'Mouvements du soleil.',
  outdoorNavLabel2: "Profil d'élévation.",
  outdoorNavLabel3: "Distance jusqu'à la destination.",
  outdoorNavLabel4: 'Alerte de déviation.',
  outdoorNavLabel5: 'Checkpoint.',
  outdoorNavLabel6: 'Coordonnées GPS exactes.',
  outdoorNavScene1: "Garde une longueur d'avance sur le soleil. Déplace-toi rapidement avant qu'il fasse nuit, ou bats le lever du soleil précoce.",
  outdoorNavScene2: "Apprends à connaître les changements d'élévation de ton parcours avant ou pendant l'activité. ",
  outdoorNavScene3: 'Obtiens une motivation supplémentaire en connaissant la distance qui te sépare du prochain point de contrôle ou de ta destination finale.',
  outdoorNavScene4: 'Reçois des alertes lorsque tu es hors de ton itinéraire avec des infos sur la distance et le cap pour te remettre sur la bonne voie.',
  outdoorNavScene5: "Marque les endroits importants tels que les sources d'eau, les postes d'aide ou les points de rangement du matériel pour une navigation ultérieure.",
  outdoorNavScene6: "Accède à ta position GPS actuelle, à la pression atmosphérique et à l'élévation estimée.",
  plan: 'Planifie ta prochaine aventure',
  planDesc1: "Il suffit d'ouvrir  ton application, commence à dessiner\n ton itinéraire préféré, et laisse Route  Planner choisir ton chemin\n optimal en se basant sur les sentiers ou les rues les plus\n proches. Vérifie la distance et l'élévation, enregistre-la,\n  transfère-le sur ta montre, ou partage-le avec tes amis. ",
  planDesc2: "Actuellement, l'écosystème COROS est compatible avec les\n célèbres constructeurs d'itinéraires tiers populaires, comme\n Strava et Komoot.",
  planDescMobile: "Ouvre simplement l'appli, commence à dessiner ton itinéraire préféré, et laisse Route Planner choisir ton chemin optimal en fonction des sentiers ou des rues les plus proches. Vérifie la distance et l'élévation, enregistre-le, transfère-le sur ta montre ou partage-le avec tes amis. Actuellement, l'écosystème COROS est compatible avec les constructeurs d'itinéraires tiers populaires, comme Strava et Komoot.",
  planDescMobile1: "Il suffit d'ouvrir ton application, de commencer à dessiner ton itinéraire préféré et de laisser Route Planner choisir ton chemin optimal en fonction des sentiers ou des rues les plus proches disponibles. Vérifie la distance et l'élévation, enregistre-le, transfère-le sur ta montre ou partage-le avec tes amis.",
  planDescMobile2: "Actuellement, l'écosystème COROS est compatible avec les constructeurs d'itinéraires tiers populaires, tels que Strava et Komoot.",
  prepareTitle: "Quoi qu'il arrive, tu seras préparé",
  prepareTitleMobile: "Quoi qu'il arrive, \n tu seras préparé.",
  prepareDesc: "Avec la beauté du plein air vient aussi le risque. Le temps orageux, le mal de l'altitude, \n l'obscurité, la déshydratation - ce sont toutes des réalités potentielles d'un trekking en pleine nature. \n L'APEX 2 et l'APEX 2 Pro te préparent à toutes les situations, afin que\ntu puisses rester en sécurité et informé pendant que tu fonces vers le sommet.",
  prepareDescMobile: "Avec la beauté des grands espaces vient aussi le risque. \n Le temps orageux, le mal de l'altitude, l'obscurité, \n déshydratation - ce sont toutes des réalités potentielles de la \n trekking dans la nature sauvage. L'APEX 2 et \n APEX 2 Pro te préparent à toute situation, pour que tu puisses \n puisses rester en sécurité et informé pendant que tu fonces vers le sommet.",
  nutritionAlert: 'ALERTE\nNUTRITION',
  sunMovements: 'MOUVEMENTS\nDU SOLEIL',
  stormAlert: 'ALERTE\nTEMPETE',
  cameraControl: 'CONTROLE DE\nLA CAMERA',
  altitudeMode: 'MODE \nALTITUDE',
  nightMode: 'MODE \nNUIT',
  fitnessTitle: 'DEVELOPPE TA CONDITION PHYSIQUE\nPOUR ATTEINDRE DES SOMMETS',
  fitnessDesc: "Quelle que soit ta prochaine aventure, les COROS APEX 2 et APEX 2 Pro associées au système de science du\n sport COROS EvoLab peuvent t'aider à progresser ou à faire des progrès.    ou à établir un nouveau record personnel. Soutenue\n par les meilleurs athlètes d'endurance du monde, notre solution d'entraînement t'aide à développer ta forme\n physique à la maison ou en salle de sport, pour que tu sois prêt pour les grands espaces. ",
  fitnessDescMobile: "Quelle que soit ta prochaine aventure, les COROS \n APEX 2 et APEX 2 Pro associées au système de science du sport COROS \n EvoLab peut t'aider à progresser ou à établir un nouveau record personnel. \n progrès, ou à établir un nouveau record personnel. Soutenue par les \n meilleurs athlètes d'endurance du monde, notre solution d'entraînement \n solution d'entraînement t'aide à développer ta forme physique à la maison ou au \n salle de sport, afin que tu sois prêt pour les grands espaces. ",
  sensorTitle: 'Notre capteur de fréquence cardiaque le plus précis à ce jour',
  sensorDesc: "Plus tes données de fréquence cardiaque sont précises, meilleures seront tes perspectives d'entraînement. Notre tout nouveau capteur optique de fréquence cardiaque pour poignet \n de fréquence cardiaque au poignet est doté d'un système de 5 LED et de 4 photodétecteurs dans une disposition personnalisée. protégé par un revêtement lisse et résistant aux rayures. Grâce à des algorithmes avancés de suppression du bruit, tes APEX 2 et APEX 2 Pro offrent un nouveau \n niveau de précision de la fréquence cardiaque. Que tu te déplaces rapidement \n à travers les canyons, ou que tu récupères du sommeil dans une tente pour \n récupération, les nouvelles montres APEX 2 enregistrent tes \n performance sans manquer un battement... littéralement.",
  sensorDescMobile: "Plus tes données de fréquence cardiaque sont précises, plus tu auras de meilleures \n aperçus d'entraînement que tu auras. Notre tout nouveau poignet \n capteur optique de fréquence cardiaque est doté d'un système de 5 LED avec 4 photodétecteurs \n dans une disposition personnalisée, protégée par un revêtement lisse \n résistant aux rayures. Grâce à des algorithmes avancés d'élimination du signal \n de bruit, tes APEX 2 et APEX \n 2 Pro offrent un nouveau niveau de précision de la fréquence cardiaque. \n Que tu te déplaces rapidement dans les canyons, \n ou que tu t'endormes dans une tente pour récupérer, les nouvelles \n montres APEX 2 enregistrent tes performances sans \n manquer un battement...littéralement.",
  trackRecoverTitle: 'Suis ta récupération',
  trackRecoverDesc: "Une bonne récupération te permet de t'entraîner plus fort. Surveille \n la qualité de ton sommeil avec les montres APEX 2 et APEX 2 Pro, \n qui suivent le sommeil profond, léger et paradoxal - toutes les étapes cruciales \n de ton cycle de sommeil. Lorsque tu te réveilles, prends une \n une rapide mesure de la variabilité de la fréquence cardiaque (VFC) pour \n déterminer à quel point ton corps est prêt à affronter les \n facteurs de stress de la journée. Si tu t'entraînes en altitude, active \n le mode Altitude ou vérifie manuellement ton taux d'oxygène sanguin \n (SpO2) pour surveiller l'adaptation de ton corps.",
  trackRecoverDescMobile: "Une bonne récupération te permet de t'entraîner plus fort. Surveille \n ta qualité de sommeil avec l'APEX 2 et l'APEX 2 Pro, \n qui suivent le sommeil profond, léger et paradoxal - toutes les étapes cruciales \n de ton cycle de sommeil. Lorsque tu te réveilles, prends \n une rapide mesure de la variabilité de la fréquence cardiaque (VFC) \n pour déterminer à quel point ton corps est prêt à affronter les \n les facteurs de stress de la journée. Si tu t'entraînes en \n altitude, active le mode Altitude ou vérifie manuellement \n ton niveau d'oxygène dans le sang (SpO2) pour surveiller l'adaptation de ton corps. \n l'adaptation de ton corps.",
  trainingSolutionTitle: "Une solution d'entraînement inégalée",
  trainingSolutionTitleMobile: "Une solution d'entraînement \n Solution d'entraînement ",
  trainingSolutionDesc: "Depuis leur lancement, COROS EvoLab et COROS Training Hub ont aidé de nombreux\n exploits athlétiques qui ont battu des records : Le record du monde du marathon d'Eliud Kipchoge \n le record du monde du marathon, le nouveau record du parcours UTMB de Kilian Jornet \n et d'innombrables records d'ultra-course, notamment de 24 heures, de 100 miles, \n et bien plus encore. Avec COROS APEX 2 et APEX 2 Pro, tu auras accès à \n à des informations d'entraînement de classe mondiale, tout comme les pros.",
  trainingSolutionDescMobile: "Depuis leur lancement, COROS EvoLab et COROS \n Training Hub ont aidé de nombreux records\n records d'athlétisme : Le marathon d'Eliud Kipchoge \n d'Eliud Kipchoge, le nouveau record du parcours UTMB de Kilian Jornet et d'innombrables records d'ultra running. \n et d'innombrables records d'ultra-course, \n y compris les 24 heures, les 100 miles, et plus encore. Avec \n COROS APEX 2 et APEX 2 Pro, tu auras accès à \n à des informations d'entraînement de classe mondiale, comme les pros.",
  traninghubTitle: "Crée des séances d'entraînement\n structurées  et des plans d'entraînement",
  traninghubDesc: "Avoir un plan en place rend l'entra\xEEnement plus efficace et\n    te permet de suivre les gains de forme au fil du temps.\n    Acc\xE8de \xE0 des s\xE9ances d'entra\xEEnement et \xE0 des\n    plans d'entra\xEEnement approuv\xE9s par les athl\xE8tes, ou cr\xE9e\n    les tiens via nos applications mobiles et de bureau. \n       Programme les entra\xEEnements de ton coach directement \n       dans le COROS Training Hub, qu'il peut consulter \n       imm\xE9diatement une fois ta montre synchronis\xE9e. ",
  trainingLabel1: "État général de l'entraînement.",
  trainingLabel2: 'Prédicteur de course.',
  trainingLabel3: 'Charge totale sur 7 jours.',
  trainingLabel4: "Allure d'effort.",
  trainingLabel5: "Focus sur l'entraînement.",
  trainingLabel6: 'Minuteur de récupération.',
  trainingDesc1: 'Comprends comment ton corps réagit aux entraînements récents grâce à des informations sur la fatigue et la forme physique.',
  trainingDesc2: 'Une estimation de la vitesse à laquelle tu es susceptible de courir un 5 km, un 10 km, un semi-marathon et un marathon complet.',
  trainingDesc3: "Comprends les charges d'entraînement de ta dernière semaine et vérifie si elles sont dans la zone recommandée.",
  trainingDesc4: 'Gère ton effort indépendamment des montées ou des descentes pour mieux aider ton entraînement et tes courses.',
  trainingDesc5: "Résume l'amélioration principale de ta course en fonction de la charge d'entraînement et de l'intensité. ",
  trainingDesc6: 'Reçois des informations sur le temps nécessaire pour récupérer complètement et pour commencer un entraînement facile ou difficile.',
  repsTrackTitle: 'Les séances de musculation simplifiées',
  repsTrackDesc: "Marre de compter? COROS suit tes répétitions et tes \n séries automatiquement, pour que tu n'aies pas à le faire. Choisis parmi \n 200+ exercices préchargés pour créer ta séance de musculation idéale.\n Partage tes séances d'entraînement avec tes amis  et tes partenaires\n d'entraînement par texto, email, médias sociaux ou \n en personne à l'aide d'un QR code dans l'application COROS.",
  repsTrackDescMobile: "Marre de compter? COROS suit tes répétitions \n et tes séries automatiquement, pour que tu n'aies pas à le faire. Sélectionne \n parmi plus de 200 exercices préchargés pour créer ta séance d'entraînement \n session d'entraînement musculaire idéale. Partage tes séances d'entraînement \n avec tes amis et tes partenaires d'entraînement par SMS, email, \n les médias sociaux ou en personne à l'aide d'un QR code dans l'appli COROS. \n COROS app.",
  packagelist: [{
    name: 'COROS APEX 2/2 Pro',
    num: '1'
  }, {
    name: 'Câble de chargement ',
    num: '1'
  }, {
    name: 'Bracelet de montre en nylon ',
    num: '1'
  }],
  comingSoon: 'BIENTÔT DISPONIBLE',
  filterDifferentDialog: {
    intro: 'Si les montres APEX 2 et APEX 2 Pro partagent de nombreuses caractéristiques similaires, elles présentent quelques différences importantes à souligner :',
    list1: ['Le COROS APEX 2', 'possède un écran de 1,2 pouce et a une autonomie de 45 heures en mode full GPS.'],
    list2: ['COROS APEX 2 Pro', "est doté d'un écran plus grand, d’une autonomie de batterie plus longue et d'une double fréquence pour une meilleure précision de suivi."],
    link: ['Consultez le', 'tableau comparatif', 'pour connaître tous les détails des specs.']
  },
  dustyPinkDesc: "\xC0 l'aube ou au cr\xE9puscule, dans des environnements vari\xE9s de sable,\n  de terre et de roche, l'APEX 2 Dusty Pink rend hommage \xE0 l'une des\n  couleurs les plus inspirantes de la nature, qui n'existe souvent que\n  pour un court instant magique. Saisis l'opportunit\xE9 d'obtenir cette\n  \xE9dition limit\xE9e originale avant \xE9puisement des stocks.",
  gobiDescs: ["Connu pour son paysage aride, son terrain hostile et ses conditions extr\xEAmes, \n    le grand d\xE9sert de Gobi pr\xEAte son nom \xE0 une montre en \xE9dition limit\xE9e qui s'y sentirait chez elle.", "Dot\xE9e de fonctions de navigation avanc\xE9es, d'une autonomie de batterie incroyable et d'une durabilit\xE9 \xE0 toute \xE9preuve,\n    l'APEX 2 Pro Gobi est con\xE7ue pour \xE9voluer l\xE0 o\xF9 peu de gens osent s'aventurer. Quel que soit le chemin que tu souhaites\n    emprunter, commande l'un des 1500 exemplaires disponibles avant qu'ils ne disparaissent comme les sables mouvants du d\xE9sert."],
  gobiDescsMobile: ["Connu pour son paysage aride, son terrain hostile et ses\n    conditions extr\xEAmes, le grand d\xE9sert de Gobi pr\xEAte son nom\n    \xE0 une montre en \xE9dition limit\xE9e qui s'y sentirait chez elle.", "Dot\xE9e de fonctions de navigation avanc\xE9es, d'une\n    autonomie de batterie incroyable et d'une durabilit\xE9 \xE0 toute\n    \xE9preuve, l'COROS APEX 2 Pro Gobi est con\xE7ue pour \xE9voluer\n    l\xE0 o\xF9 peu de gens osent s'aventurer. Quel que soit le chemin\n    que tu souhaites emprunter, commande l'un des 1500\n    exemplaires disponibles avant qu'ils ne disparaissent\n    comme les sables mouvants du d\xE9sert."]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pod.js
/* harmony default export */ const fr_pod = ({
  title: 'COROS POD',
  desc: "Notre appareil pour accompagner la capture et l'analyse avancées des données.",
  performanceTitle: "Dispositif d'optimisation des performances",
  performanceDesc: "Peut-on avoir assez de données ? Nous ne le pensons pas, c'est pourquoi nous avons créé le COROS Performance Optimization Device ou COROS POD. Le COROS POD fournit toutes les analyses de course avancées dont vous avez besoin pour compléter votre montre GPS COROS et vous aider à rester en bonne santé et en forme.",
  useDemo: "Le COROS POD est facile à utiliser, il suffit de le secouer pour l'activer, de l'associer à votre montre ou à l'application COROS et de le fixer verticalement à votre taille, au centre du dos.",
  features: [{
    title: 'Équilibre gauche/droite',
    desc: "Nous aimerions tous avoir une répartition égale entre notre jambe gauche et notre jambe droite, mais pour de nombreuses raisons, c'est moins fréquent que vous ne le pensez. Savoir quel côté de votre corps vous avez tendance à privilégier peut vous aider à identifier les blessures potentielles avant qu'elles ne se produisent et peut être utile pour corriger votre forme de course."
  }, {
    title: 'Rapport de foulée',
    desc: "Le rapport de foulée est la hauteur de votre foulée divisée par la longueur de votre foulée. Trouvons le rapport idéal pour être sûr que vous n'êtes pas en train de sauter en l'air ou d'essayer de participer à une compétition de saut en longueur. Un rapport de foulée idéal garantit que vous utilisez l'énergie de votre corps pour vous propulser vers l'avant aussi efficacement que possible."
  }, {
    title: 'Hauteur de la foulée',
    desc: "Également appelée oscillation verticale, la hauteur de foulée mesure la hauteur à laquelle votre corps se soulève du sol pendant votre foulée de course. Pourquoi cela est-il important ? S'il est important de s'assurer que vous décollez du sol, il est aussi important de vous assurer que la majeure partie de votre énergie est utilisée pour vous déplacer vers l'avant plutôt que dans les airs. Une position trop basse ou trop haute peut indiquer des possibilités d'amélioration - trouvons votre point idéal."
  }, {
    title: 'Temps au sol',
    desc: "La principale différence entre la course et la marche est qu'en courant, les deux pieds ne touchent pas le sol pendant un certain temps. Plus vos pieds sont au sol, moins vous avancez. Une foulée efficace passe suffisamment de temps sur le sol pour se mettre en mouvement pour la foulée suivante, pas une milliseconde de plus."
  }, {
    title: 'Puissance de la forme',
    desc: "Qu'est-ce que la puissance de la forme - il s'agit essentiellement de la quantité de puissance gaspillée en raison d'inefficacités dans votre forme de course. Tout comme le temps de contact au sol ci-dessus, plus le chiffre est bas, plus le coureur est performant et efficace. Surveillez la façon dont la puissance de votre forme évolue au fur et à mesure que votre corps se fatigue pendant la course, car des défaillances de la forme sont susceptibles de se produire. Rappelez-vous, une meilleure efficacité = moins d'énergie gaspillée = une puissance de forme plus faible."
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pod2.js
/* harmony default export */ const fr_pod2 = ({
  title: 'COROS POD 2 - Cours au-delà du GPS',
  desc: 'Un niveau de précision optimal pour tous les coureurs',
  shopify_product_extra_desc_1: "*Pré-commande maintenant. L'expédition commence dans 10-15 jours ouvrables.",
  shopify_product_extra_desc_2: '*Vérifie la fiche technique pour les infos sur la compatibilité des montres.',
  name: 'COROS POD 2',
  subtitle: 'COURS AU-DELÀ DES \nLIMITES DU GPS',
  product_detail: "Voici le tout nouveau COROS POD 2. Un accessoire de montre léger et résistant à l'eau qui se clipse sur ta chaussure ou ta ceinture pour une précision des données de course du prochain niveau. Avec un matériel de détection optimisé et des algorithmes logiciels intuitifs, le COROS POD 2 mesure ta course directement à partir des mouvements de ton pied ou de ton corps. Il se connecte à ta montre COROS pour fournir des données en temps réel, afin que tu puisses toujours t'entraîner ou courir avec les bonnes informations.",
  problem: 'LE PROBLÈME',
  problem_desc: "La technologie GPS est incroyable, mais elle n'est pas parfaite.",
  problem_desc_mobile: "La technologie GPS est étonnante, \nmais elle n'est pas parfaite.",
  problem_scene1: 'Les grands bâtiments interfèrent avec les données satellites',
  problem_scene2: "Les changements d'allure peuvent avoir jusqu'à 10 secondes de retard",
  problem_scene2_mobile: "Les changements d'allure peuvent avoir un retard",
  problem_scene3: 'La course sur tapis est \nmesurée de manière hypothétique',
  solution: 'NOTRE SOLUTION',
  solution_desc: "\n    Le COROS POD 2 r\xE9sout les probl\xE8mes les plus courants de la technologie des montres \nGPS pendant la course, notamment le d\xE9calage des donn\xE9es, le signal faible \net la perturbation des satellites. En suivant le mouvement directement \xE0 partir \nde ton pied, le COROS POD 2 am\xE9liore la pr\xE9cision et la sensibilit\xE9 \xE0 l'allure pour t'aider \n\xE0 t'entra\xEEner plus intelligemment et plus efficacement.\n  ",
  more: 'PLUS',
  more1: '',
  more2: 'PLUS',
  more3: 'PLUS',
  more4: 'PLUS',
  sensitive: 'ALLURE INSTANTANÉE SENSIBLE',
  datalag: 'Dis adieu au décalage des données',
  datalag_desc: "Gr\xE2ce \xE0 l'acc\xE9l\xE9rom\xE8tre avanc\xE9 du COROS POD 2, tu recevras des donn\xE9es \n    donn\xE9es directement de ton pied pour cr\xE9er l'allure la plus r\xE9active \n        affich\xE9e sur ta montre. Le COROS POD 2 supprime le d\xE9calage pouvant aller \n        jusqu'\xE0 10 secondes caus\xE9 par les capteurs de poignet des montres \n    GPS. Avec l'alerte d'allure int\xE9gr\xE9e, ta montre COROS associ\xE9e au \n    COROS POD 2 te permet de rester dans ton allure cibl\xE9e en quasi temps r\xE9el, \n    au lieu d'attendre que tes donn\xE9es te rattrapent. M\xEAme \n    lorsqu'il n'y a pas de signal GPS.",
  accurate: "PRÉCIS À L'INTÉRIEUR",
  accurate_subtitle: 'Un moyen fiable de mesurer la distance en intérieur',
  accurate_desc: "Gr\xE2ce \xE0 la d\xE9tection pr\xE9cise de l'allure, le COROS POD 2 mesure la distance exacte \n  que tu as courue, m\xEAme en int\xE9rieur. En tra\xE7ant le mouvement de ton pied \n  \xE0 travers l'espace sur un plan XYZ, le COROS POD 2 se calibre automatiquement \n  automatiquement pour calculer ta foul\xE9e et la distance que tu as \n  parcourue sur un tapis de course ou une piste de course. Le COROS POD 2 \n  sera ton parfait partenaire d'entra\xEEnement parfait pour les s\xE9ances de\n  course en salle en hiver, ou lorsque le temps est mauvais.",
  consistent: 'FIABLE EN VILLE',
  gps: 'Amélioration du suivi là où le signal GPS est faible',
  gps_desc: "La technologie GPS peut subir des interf\xE9rences. Courir entre des gratte-ciels ou sous les tunnels du marathon de Paris ne perturbe pas seulement les donn\xE9es d'allure et de distance de ta montre, mais cr\xE9e aussi des traces GPS d\xE9sordonn\xE9es. C'est l\xE0 que le COROS POD 2 intervient. Gr\xE2ce aux donn\xE9es recueillies par divers capteurs internes, le COROS POD 2 est capable de de corriger automatiquement les perturbations GPS telles que les pics et les chutes d'allure.Ta montre COROS travaille en collaboration avec le COROS POD 2 pour am\xE9liorer la coh\xE9rence des donn\xE9es pendant tes courses.",
  precise: 'PRÉCISE SUR LES TERRAINS VALLONNÉS',
  comprehensive_metric: 'Une mesure complète pour tout ton entraînement',
  comprehensive_metric_desc: "Tous les terrains de course ne sont pas parfaitement plats. L'Allure \n  d'effort est une mesure unique de COROS qui t'indique \xE0 quel point\ntu travailles r\xE9ellement sur un terrain vallonn\xE9. Gr\xE2ce \xE0 la saisie\ninstantan\xE9e des donn\xE9es de COROS POD 2, ton Allure d'effort devient\nencore plus pr\xE9cise.Gr\xE2ce au COROS POD 2, ton Allure d'effort est 5 fois plus \nr\xE9active qu'un GPS standard. Tu peux donc prendre des d\xE9cisions en \nune fraction de seconde et mieux analyser ton effort global une fois\nl'entra\xEEnement termin\xE9.",
  learn_effort_pace: "En savoir plus sur l'Allure d'effort",
  beyond_gps: 'AU-DELA DU GPS',
  beyond_gps_desc: "Le COROS POD 2 ne s'arrête pas là. Il fournit des mesures de course avancées dans un \ndesign léger et élégant, simple à utiliser et qui durera plus longtemps que tes courses les plus longues.",
  even: 'EVEN',
  even1: '',
  running_insights: "PLUS D'INFORMATIONS SUR LA COURSE",
  beyound_gps_desc1: "Grâce à une détection intelligente de la position de port (chaussure ou ceinture),\nle COROS POD 2 fournit des mesures clés pour t'aider à mieux comprendre \nta démarche, ta forme et ta technique de course.",
  stride_height: 'Hauteur de la foulée',
  balance: 'Équilibre gauche/droite',
  ground_contact_time: 'Temps de contact avec le sol',
  stride_ratio: 'Rapport de foulée',
  monitor: '',
  temperature: 'THERMOMETRE',
  monitor_desc: "Le COROS POD 2 enregistre les relev\xE9s de temp\xE9rature ambiante tout au long de ta course,\n    pour que tu saches exactement s'il faisait chaud ou froid pendant ton activit\xE9. Tu \n    peux utiliser ces points de donn\xE9es pour analyser davantage tes courses lorsque tu \n    t'entra\xEEnes dans diff\xE9rents climats, ou pendant diff\xE9rentes saisons.",
  battery: '',
  battery_1: 'UNE DUREE DE VIE DE LA BATTERIE IMBATTABLE',
  battery_desc: "Le COROS POD 2 est équipé d'une batterie puissante qui reste chargée pendant des \nsemaines. Couplé à la station de charge portable qui fournit jusqu'à 5 \ncharges complètes, tu n'auras jamais à te soucier d'une batterie faible.",
  continuous_running: "Jusqu'à 25 heures de fonctionnement continu",
  total_running: "Jusqu'à 150 heures de fonctionnement total \n(avec le socle de chargement)",
  lightweight: 'LEGER',
  and: 'ET',
  weatherproof: 'RESISTANT AUX INTEMPÉRIES',
  light_waterproof_desc: "Pesant seulement 5,6 g, tu ne remarqueras m\xEAme pas que tu portes le COROS POD 2 \n    lors de tes entra\xEEnements ou de tes courses. Que tu sois sur les routes ou en \n    montagne,le COROS POD 2 r\xE9siste aux \xE9l\xE9ments, des temp\xE9ratures n\xE9gatives aux \n    fortes chaleurs. des temp\xE9ratures n\xE9gatives aux fortes chaleurs (-10\xB0C \xE0 60\xB0C),et reste r\xE9sistant \xE0 l'eau jusqu'\xE0 3 ATM.",
  setup: 'UNE INSTALLATION FACILE',
  setup_desc: "Le COROS POD 2 peut être porté sur ta chaussure ou accroché à ta ceinture,\net se met en veille pour préserver la batterie lorsqu'il n'est pas en mouvement.",
  pair: 'SYNCHRONISE',
  pair_desc: "Ajoute le COROS POD 2 à ton COROS \napp pour qu'il s'apparie avec les montres \nconnectées automatiquement.",
  clip: 'ATTACHE-LE',
  clip_desc: 'Attache-le à ta chaussure ou à ta ceinture. Laisse-le \nsur ta chaussure après ta course \nsi tu veux.',
  go: "C'EST PARTI",
  go_desc: "Une fois que la configuration initiale est terminée, \ntu peux simplement courir comme d'habitude pour obtenir \ndes métriques instantanées et en temps réel.",
  in_the_box: "CE QU'IL Y A DANS LA BOÎTE",
  in_the_box_desc: "Le COROS POD 2 est livr\xE9 avec tout ce dont tu as besoin, y compris deux clips pour chaussures,\n    un clip en silicone pour la ceinture, un dock de chargement, un c\xE2ble de chargement \n    USB-A \xE0 USB-C et un \xE9tui compact.",
  faq: 'FAQ',
  fullCorosPod2Faq: 'FAQ DU COROS POD 2 COMPLETE',
  faq_list1: [{
    ask: 'Puis-je utiliser le COROS POD 2 avec des montres non COROS ?',
    ans: 'Le COROS POD 2 est uniquement compatible avec les montres COROS.'
  }, {
    ask: 'Le COROS POD 2 mesure-t-il la puissance de course ?',
    ans: "Non, le COROS POD 2 utilise l'Allure d'effort, une mesure beaucoup plus facile à comprendre et plus personnalisée, pour que tu saches exactement à quel point ton corps travaille."
  }, {
    ask: 'Comment le COROS POD 2 peut-il améliorer mon entraînement ?',
    ans: 'Le COROS POD 2 peut t\'aider dans ton entraînement en te fournissant des informations plus précises à examiner après chaque séance d\'entraînement. Va dans ton\n<a class="color-danger" href="https://coros.com/traininghub">COROS Training Hub</a> compte pour voir les métriques et les données qui t\'aideront à identifier tes forces et tes faiblesses. Cet outil est\nconçu pour te fournir les meilleures données possibles afin que tu puisses continuer à améliorer ton entraînement et tes performances.'
  }, {
    ask: "Comment le COROS POD 2 peut-il m'aider lors des courses ?",
    ans: "Le COROS POD 2 peut aider tes courses de deux façons. Tu peux utiliser l'Allure d'effort pour mieux comprendre ton effort, quels que soient les changements d'altitude sur le terrain. Parallèlement, un allure plus précis et\nsensible peut t'aider à mieux ajuster ton allure. Avec le COROS POD 2, tu peux connaître ton allure sans aucun retard du GPS pour t'assurer que tu ne vas jamais au-dessus ou au-dessous de ton allure prévu."
  }]
});
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/fr/ek.js
var fr_ek = __webpack_require__(83303);
var fr_ek_default = /*#__PURE__*/__webpack_require__.n(fr_ek);
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/fr/vertix2.js
var fr_vertix2 = __webpack_require__(85988);
var fr_vertix2_default = /*#__PURE__*/__webpack_require__.n(fr_vertix2);
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/fr/map.js
var fr_map = __webpack_require__(57687);
var fr_map_default = /*#__PURE__*/__webpack_require__.n(fr_map);
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/trainingHub.js
/* harmony default export */ const fr_trainingHub = ({
  title: 'Training Hub COROS',
  keywords: 'entraînement, analyser, athlète, entraîneur, performance athlétique, communication, endurance, forme physique, fatigue, marathon, triathlon',
  description: "Notre plateforme gratuite d'analyse et de coaching pour les utilisateurs de COROS.",
  desc: "S'appuyant sur le cadre de COROS EvoLab, le COROS Training Hub vous donne désormais, à vous ou à votre entraîneur, les outils nécessaires pour vous entraîner au plus haut niveau - gratuitement. L'accès instantané à vos données via le portail web COROS Training Hub vous permet d'analyser les mesures passées et présentes, de communiquer et d'interagir avec votre entraîneur, d'élaborer un plan d'entraînement et de rejoindre ou de gérer une équipe.",
  visualize: {
    title: 'comprendre votre passé\n analyser votre présent\n créer votre avenir',
    desc: 'Visualisez toutes vos données dans le COROS\n Training Hub afin que vous ou votre coach puissiez\n optimiser votre efficacité et vous assurer que\n votre condition physique est prête à atteindre\n votre prochain objectif.'
  },
  plans: {
    title: 'suivez un plan',
    desc: "L'analyse prédictive associée à notre fonction de glisser-déposer\nvous permet, à vous ou à votre entraîneur, de créer facilement\ndes séances d'entraînement individualisées et des plans\nd'entraînement."
  },
  interact: {
    title: 'interaction fluide',
    desc: "Les commentaires d'entraînement et les\n notifications push qui se synchronisent avec votre \napplication COROS permettent une communication \nbidirectionnelle fluide entre le sportif et le coach."
  },
  team: {
    title: "s'entraîner avec une équipe",
    desc: "Qu'il s'agisse d'une équipe établie ou d'un groupe\n de coureurs virtuels, le COROS Training Hub vous\n offre la possibilité de voir l'entraînement de toute\n votre équipe afin de renforcer la motivation, la\n responsabilité et l'esprit de groupe."
  },
  knowMore: {
    title: 'apprendre a connaitre le coros training hub',
    desc: "Veuillez consulter le centre d'aide de COROS pour obtenir une pr\xE9sentation \n    d\xE9taill\xE9e des fonctionnalit\xE9s du COROS Training Hub. Les entra\xEEneurs auront \n    acc\xE8s \xE0 la cr\xE9ation d'\xE9quipes, \xE0 la gestion des athl\xE8tes, au d\xE9veloppement et\n    \xE0 l'attribution de plans d'entra\xEEnement, ainsi qu'\xE0 d'autres fonctions de la\n    plateforme. Pour y acc\xE9der, les entra\xEEneurs devront soumettre leurs \n    informations d'identification d'entra\xEEneur et suivre un tutoriel avec \n    notre \xE9quipe de science du sport."
  },
  coachSignup: 'inscription des entraîneurs',
  athleteSignup: 'INSCRIPTION DES ATHLÈTES',
  login: 'CONNECTEZ-VOUS MAINTENANT'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/home.js
/* harmony default export */ const fr_home = ({
  title: 'COROS | Technologie des sports de performance',
  desc: 'Innovation pour les coureurs, les aventuriers et les athlètes quel que soit leur sport.',
  localeswitchtips: 'Rediriger vers votre site ?',
  insName: 'COROSFRANCE',
  vertix2: {
    name: 'COROS VERTIX 2',
    desc: 'Pour les athlètes qui\nveulent tout avoir'
  },
  pace2: {
    name: 'COROS PACE 2',
    desc: 'Pour les athlètes multisports\nqui vont vite et loin'
  },
  apexPro: {
    name: 'COROS APEX Pro',
    desc: "Pour les athlètes d'endurance\nen environnements rudes"
  },
  apex: {
    name: 'COROS APEX',
    desc: 'Pour les athlètes outdoor\nqui voyagent vite et léger'
  },
  apex2: {
    name: 'COROS APEX 2/2 Pro',
    desc: "Pour les athlètes qui s'entraînent\ndur et qui vont loin en montagne"
  },
  vertix: {
    name: 'COROS VERTIX',
    desc: "Notre montre originale\npour les aventuriers de l'extrême"
  },
  pod: {
    name: 'COROS POD',
    desc: 'Des mesures de course avancées pour optimiser tes performances'
  },
  pod2: {
    name: 'COROS POD 2',
    desc: 'Un niveau de précision optimal \npour tous les coureurs'
  },
  trainingHub: {
    title: 'COROS TRAINING HUB',
    desc: "Comprends ton passé, analyse ton présent et crée ton avenir avec notre puissante plateforme d'entraînement. Crée des plans d'entraînement et travaille avec ton coach de n'importe où, à n'importe quel moment."
  },
  story: {
    title: 'HISTOIRES EN VEDETTE'
  },
  viewAllPlans: 'VOIR TOUS LES PLANS',
  plans: {
    title: "PLANS D'ENTRAÎNEMENT",
    desc: "Tire parti de ta montre et de ton corps grâce à nos plans d'entraînement conçus par des entraîneurs et approuvés par des athlètes."
  },
  banners: [{
    title: 'EXPLORE PERFECTION\nDECOUVRE TON POTENTIEL',
    linkDesc: 'VOIR TOUTES LES MONTRES GPS'
  }],
  learnMore: 'EN SAVOIR PLUS',
  buy: 'ACHETEZ',
  readMore: 'Continuer à lire',
  watch: 'Regarder',
  outOfStock: 'Épuisé'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/common.js
/* harmony default export */ const fr_common = ({
  header: {
    support: 'Support',
    stories: 'Histoires',
    products: 'produits',
    training_science: 'entraînement',
    technology: 'Technologie',
    people: 'Personnes',
    trainingHub: "Centre d'entraînement",
    plans: "Plan d'entraînement",
    workouts: 'Entraînements',
    overview: 'APERÇU',
    trainingBlog: 'Histoires',
    retail: 'Trouver un magasin',
    athlete: 'Athlètes',
    shopNow: 'ACHETER MAINTENANT',
    specs: 'SPECS',
    all_watches: 'Toutes les montres GPS',
    login: 'SE CONNECTER',
    checkWarranty: 'État de la garantie',
    menu1: {
      name: 'PRODUIT',
      subnav: {
        nav1: 'COROS VERTIX 2',
        nav2: 'COROS VERTIX',
        nav3: 'COROS APEX Pro',
        nav4: 'COROS APEX',
        nav5: 'COROS PACE 2',
        nav6: 'COROS PACE 2 EK',
        nav7: 'COROS POD',
        nav8: 'Accessoires',
        nav9: 'Autres',
        nav10: 'COROS PACE',
        nav11: 'SafeSound-MOUNTAIN',
        nav12: 'SafeSound-ROAD',
        nav13: 'SafeSound-URBAN',
        nav14: 'OMNI',
        nav15: 'LINX'
      }
    },
    menu2: {
      name: 'COMMUNAUTÉ',
      subnav: {
        nav1: 'COROS STORIES',
        nav2: 'COROS PRO ATHLETE',
        nav3: "PROGRAMME D'ÉCHANGE",
        nav4: 'ENTRAÎNEMENT VÉRIFIÉ',
        nav5: "PLANS D'ENTRAINEMENT"
      }
    },
    menu3: {
      name: 'SUPPORT',
      subnav: {
        nav1: "CONNEXION DE L'UTILISATEUR",
        nav2: "CENTRE D'AIDE",
        nav3: 'GARANTIE',
        nav4: 'NOTES DE MISE A JOUR',
        nav5: 'Comparateur de montres'
      }
    },
    menu4: {
      name: 'À PROPOS DE',
      subnav: {
        nav1: 'À PROPOS DE NOUS',
        nav2: "DANS L'ACTUALITE",
        nav3: 'CONTACT',
        nav4: 'EVENEMENTS',
        nav5: 'CARRIÈRES'
      }
    },
    menu5: {
      name: 'Trouver un magasin'
    },
    menu6: {
      name: 'PAYS',
      subnav: {
        nav1: 'États-Unis (anglais)',
        nav2: 'Royaume-Uni (anglais)',
        nav3: 'Canada (anglais)',
        nav4: 'France (Français)',
        nav5: 'Allemagne (Deutsch)',
        nav6: '中国(中文)',
        nav7: '日本(日本語)'
      }
    },
    storiesTesting: 'Tests de produits'
  },
  footer: {
    subscribeEmailError: 'Veuillez saisir une adresse e-mail valide.',
    apex2credit: 'Demande de crédit APEX 2',
    DealerLogin: 'Connexion revendeur',
    ReturnRefund: 'Retour et remboursement',
    WatchComparison: 'Comparateur',
    TermsConditions: 'Conditions générales',
    ReleaseNotes: 'Notes de mise à jour',
    PrivacyPolicy: 'Politique de confidentialité',
    CookieSettings: 'Paramètrage des cookies',
    WheretoDownload: 'Où télécharger',
    copyright: '2020 | COROS Wearables Inc.',
    trainingHub: 'COROS Training Hub',
    evolab: 'COROS Evolab',
    coach: ' Solutions de coaching ',
    warranty: 'Garantie et retour',
    helpCenter: "Centre d'aide",
    maps: 'Cartes',
    software: 'Logiciel',
    hardware: 'Matériel',
    support: 'Support',
    company: 'Entreprise',
    news: 'Histoires',
    inTheNews: "Dans l'actualité",
    countries: 'Changer de pays',
    about: 'A propos de nous',
    careers: 'Carrières',
    contact: 'Contact',
    joinUs: "S'INSCRIRE",
    subscripPlaceholder: 'ENTRER VOTRE EMAIL',
    selectYourLocation: 'Sélectionne ton emplacement',
    subscribe: {
      success: {
        title: 'Merci de ton attention !',
        desc: 'Inscription réussie !'
      },
      error: {
        title: 'Oups !',
        desc: "Oups ! Un probl\xE8me s'est produit. Veuillez r\xE9essayer."
      },
      title: 'Abonne-toi à la newsletter COROS'
    }
  },
  country: {
    usa: 'usa',
    kingdom: 'royaume',
    newzealand: 'Nouvelle-Zélande'
  },
  home: 'Accueil',
  shopnow: 'Commander',
  loginNow: 'se connecter',
  speecs: 'SPECS',
  comparisonchart: 'TABLEAU COMPARATIF',
  video: {
    play: 'Lire',
    pause: 'Pause',
    replay: 'Revoir'
  },
  race: {
    courseDetails: "Détails de l'itinéraire"
  },
  subscribeBIS: {
    notifyMe: 'me prévenir',
    requireEmail: 'Saisis ton adresse e-mail.',
    invalidEmail: 'E-mail non valide. Essaie à nouveau.',
    emailMeWhenAvailable: 'Recevoir une alerte de disponibilité',
    success: "Tu t'es abonné(e) à cet article.",
    tooManyReq: 'Patiente quelques secondes et réessaie.',
    serverError: 'Le serveur est en panne. Réessaie plus tard.'
  },
  promotionTips: 'Sac de sport COROS gratuit pour tout achat de montre.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/declarationOfConformity.js
/* harmony default export */ const fr_declarationOfConformity = ({
  apex46: 'COROS APEX 46mm',
  apex42: 'COROS APEX 42mm',
  safeSound: 'COROS SafeSound'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/getApp.js
/* harmony default export */ const fr_getApp = ({
  title: "OBTENIR L'APP",
  desc: 'App de fitness pour tout le monde',
  subDesc: "L'appli COROS est un élément essentiel de ton expérience COROS. \n  Utilise-la pour gérer ton appareil et synchroniser tes données pour obtenir des analyses de performance approfondies.",
  appExamples: [{
    title: 'mesurer votre progression',
    text: 'Reçois des aperçus quotidiens de ta fréquence cardiaque, de ta dépense énergétique, de ton sommeil et bien plus encore.'
  }, {
    title: 'créez vos parcours',
    text: 'Commencez de nouvelles aventures avec des outils de navigation et synchronisez facilement les itinéraires sur votre montre.'
  }, {
    title: 'fixe tes objectifs',
    text: "Entraîne-toi plus intelligemment avec le Niveau de course, le Prédicteur de course, la Gestion de la fatigue et d'autres outils."
  }, {
    title: 'planifie ton avenir',
    text: "Crée, modifie et partage des séances d'entraînement structurées et des plans d'entraînement."
  }, {
    title: 'connaître ton chemin',
    text: "Examine des mesures d'activité avancées, des itinéraires GPS et les tendances d'entraînement."
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/apexPro.js
/* harmony default export */ const fr_apexPro = ({
  title: 'Montre GPS COROS APEX Pro',
  desc: "Notre montre haut de gamme pour les athlètes d'endurance évoluant dans des environnements difficiles.",
  name: 'COROS APEX Pro',
  accessories: 'ACCESSOIRES',
  trailTested: {
    title: 'Testé sur piste - Approuvé par les athlètes',
    desc: "Le cadre en titane, l'écran en verre saphir et l'étanchéité à 100 mètres offrent une durabilité ultime. Avec un poids de 59 g, bracelet compris, l'APEX Pro peut vous accompagner dans toutes les aventures dont vous pouvez rêver."
  },
  battery: {
    desc: "L'APEX Pro offre 40 heures d'autonomie de la batterie GPS complète - une augmentation de 14% par rapport à l'APEX original. Vous pouvez désormais parcourir vos 100 kilomètres en montagne sans avoir à vous demander si vous devez passer en mode Ultra Max."
  },
  mountainGuide: {
    title: 'Un guide de montagne à votre poignet',
    desc: "Surveillance de l'oxygène dans le sang 24 heures sur 24 et 7 jours sur 7 avec mode Altitude, l'APEX Pro est, après la VERTIX, la seule montre à fournir des évaluations d'acclimatation toutes les heures. Votre montre vous indiquera quand vous devez continuer à grimper ou quand vous devez redescendre à une altitude plus basse."
  },
  touchFeat: {
    title: "L'expérience de navigation",
    desc: "Prend désormais en charge la cartographie hors ligne, et comprend : Les modes Paysage, Topo et Hybride. En utilisant l'écran tactile et le cadran numérique, les utilisateurs peuvent explorer notre nouvelle fonction de cartographie. Vous pouvez suivre votre chemin sur les cartes. C'est une expérience de navigation complètement renouvelée sur votre poignet.",
    videos: ['Comment utiliser les fonctions de navigation de base', 'Comment utiliser les fonctions de navigation avancées', 'Comment utiliser le checkpoint pendant la navigation']
  },
  trainingMode: {
    title: "N'IMPORTE QUELLE SÉANCE D'ENTRAÎNEMENT, N'IMPORTE OÙ",
    desc: "Avec le mode d'entraînement de COROS, vous pouvez créer, partager et même télécharger des séances d'entraînement d'athlètes et d'entraîneurs professionnels. Créez votre propre séance d'entraînement dans l'application COROS pour la course à pied, le cyclisme, la natation ou la musculation, sans aucune limite. Choisissez parmi plus de 200 exercices préchargés pour créer votre séance de musculation idéale. Partagez vos séances d'entraînement avec vos amis et vos partenaires d'entraînement par SMS, e-mail, médias sociaux ou même directement dans l'application à l'aide d'un QR code. Enfin, suivez des séances d'entraînement triées sur le volet par des athlètes et des entraîneurs professionnels en les téléchargeant sur coros.com et sur votre montre. Avec le nouveau mode d'entraînement, vos meilleurs efforts sont à votre portée."
  },
  nightMode: {
    title: 'Illuminez le ciel de la nuit',
    desc: "Mode nuit - un nouveau mode toujours actif pour les activités nocturnes. Alors que les options manuelles permettent toujours d'allumer rapidement le rétroéclairage, le mode Nuit laisse le rétroéclairage allumé pendant toute la durée de votre entraînement. Une lumière suffisamment vive pour que vos yeux puissent s'adapter et lire dans l'obscurité, mais suffisamment faible pour maintenir des performances de batterie supérieures tout au long de votre course ou de votre trajet, même si cela est nécessaire toute la nuit. Ne vous inquiétez pas, elle s'éteint automatiquement lorsque vous terminez votre entraînement ou au lever du soleil."
  },
  stayTrack: {
    title: 'Restez sur la bonne voie',
    desc: "Une piste standard fait 400m, alors pourquoi les appareils GPS n'y arrivent pas ? Avec le nouveau mode de course sur piste de COROS, un algorithme exclusif est utilisé pour s'assurer que vos courses sur piste et vos séances d'entraînement sont mesurées avec précision, quel que soit le couloir que vous choisissez. Les zigzags aléatoires à travers le terrain ou les virages serrés ont disparu, remplacés par les lignes droites et les courbes de la piste - suivant la façon dont vous courez sur celle-ci."
  },
  batteryDetails: {
    duration: ["Jusqu'à", '14% de plus', 'durée de vie de la batterie'],
    subDesc: "Construit pour \n    la longue... dur\xE9e."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/accessories.js
/* harmony default export */ const fr_accessories = ({
  title: 'Accessoires',
  desc: "Une entreprise technologique de performance sportive qui aide les athl\xE8tes \xE0 s'entra\xEEner pour donner le meilleur d'eux-m\xEAmes.",
  buy: 'ACHETER MAINTENANT',
  'vertix2-nylon-band': 'Bracelet en nylon COROS VERTIX 2',
  'vertix2-silicone-band': 'COROS VERTIX 2 bracelet en silicone',
  pod: 'COROS POD',
  'vertix-charging-cable': 'Câble de chargement COROS APEX/VERTIX',
  'keychain-watch-charger': 'Chargeur de montre porte-clés COROS',
  'vertix-nylon-band': 'Bracelet en nylon COROS VERTIX',
  'vertix-silicone-band': 'Bracelet en silicone COROS VERTIX',
  'charging-cable': 'Câble de chargement COROS',
  'apex-pro-nylon-band': 'Bracelet en nylon COROS APEX 46 mm/APEX Pro',
  'apex-pro-silicone-band': 'Bracelet en silicone COROS APEX 46 mm/APEX Pro',
  'pace2-nylon-band': 'Bracelet en nylon COROS APEX 42mm/PACE 2',
  'pace2-silicone-band': 'Bracelet en silicone COROS APEX 42mm/PACE 2',
  hrm: 'Capteur de FC COROS',
  detailPageDesc: 'Découvre des accessoires pratiques et élégants pour tes montres et capteurs COROS.',
  sortOptions: {
    priceLowToHigh: 'Prix de bas à élevé',
    priceHighToLow: 'Prix de élevé à bas',
    manual: 'Recommandation'
  },
  selectProductType: 'Compatibilité',
  tips4noProductType: "Veuillez d'abord s\xE9lectionner le produit compatible.",
  selectAccessoryType: "Types d'accessoire",
  resetFilter: 'Réinitialiser',
  sortBy: 'Trier par',
  filters: 'Filtres',
  confirmFilter: 'Confirmer'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/specs.js
/* harmony default export */ const fr_specs = ({
  model: 'Numéro de pièce',
  navigation: 'Navigation',
  sensors: 'Capteurs',
  batteryLife: 'Autonomie de la batterie',
  supportedWorkouts: 'Entraînements soutenus',
  yes: 'Oui',
  comparePageTitle: 'COMPARATEUR DE MONTRES',
  comparePlaceholder: 'Sélectionne une montre à comparer',
  'FULL WATCH COMPARISON': 'comparaison complète',
  'Hide Duplicated Details': 'Cacher les doublons',
  compareLabel: {
    'Size and Weight': 'Taille et poids',
    Dimensions: 'Dimensions',
    'POD Dimensions': 'Dimensions',
    Weight: 'Poids',
    Display: 'Écran',
    'Display Size': "Taille de l'écran",
    'Display Resolution': "Résolution de l'écran",
    'Display Type': "Type d'écran",
    Materials: 'Matériau',
    'Screen Material': "Matériau de l'écran",
    'Bezel Material': 'Matériau de la lunette',
    'Cover Material': 'Matériau de couverture',
    'Band Material': 'Matériau du bracelet',
    'Watch Band': 'Bracelet de la montre',
    Width: 'Largeur',
    'Installation Type': 'Type de fixation',
    Design: 'Design',
    Button: 'Boutons et molette',
    Connectivity: 'Connectivité',
    Phone: 'Téléphone',
    Accessories: 'Accessoires',
    'Data Sync': 'Synchronisation des données',
    Durability: 'Durabilité',
    'Water Resistance': "Résistance à l'eau",
    'Working Temperature': 'Température de fonctionnement',
    'Storage Temperature': 'Température de conservation',
    Battery: 'Batterie',
    'UltraMax GPS Mode': 'UltraMax GPS Mode',
    'Standard Full GPS': 'Mode Full GPS standard\n(GPS/QZSS)',
    'All Systems On': 'Tous systèmes\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'All Systems + Dual Frequency On': 'Double fréquence\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Daily Use': 'Usage quotidien',
    'Charging Time': 'Temps de chargement',
    'Geo Location': 'Localisation',
    'Satellite Systems': 'Systèmes satellite',
    'GNSS Chipset': 'Puce GNSS',
    Navigation: 'Navigation',
    'Map Layer': 'Couche de carte',
    'Additional Features': 'Fonctionnalités additionnelles',
    'Data Tracking': 'Mesure de données',
    Sensors: 'Capteurs',
    'Training Features': "Fonctions d'entraînement",
    'Daily Features': 'Fonctions quotidiennes',
    '3rd Party Integration': "Intégration d'applications tierces",
    'System Languages': 'Langues disponibles',
    'Supported Activity Modes': "Modes d'activité disponibles",
    'Compatible Apps': 'Applications compatibles',
    'Display Language': 'Langues du système',
    Run: 'Course',
    Mountain: 'Montagne',
    Bike: 'Vélo',
    Water: 'Eau',
    Winter: 'Hiver',
    Cardio: 'Cardio',
    Special: 'Spécial',
    Compatibility: 'Compatibility',
    'Supported Devices': 'Appareils compatibles',
    'Features & Metrics': 'Fonctionnalités et métriques',
    'Charging Dock Capacity': 'Capacité de charge du dock',
    'Charging Dock Cable': 'Cable de chargement du dock',
    'Activity Mode': 'En mode activité',
    'Standby Mode': 'En mode standby',
    'COROS App': 'Application COROS',
    'COROS Watch': 'Montre COROS',
    'Case Material': 'Matériau de la boîte',
    'Foot Clip Material': 'Matériau du clip pour le pied',
    'Waist Clip Material': 'Matériau du clip pour lataille',
    'Weight - COROS POD 2': 'Weight - COROS POD 2',
    'Weight - Charging Dock': 'Weight - Charging Dock',
    'Standard Full GPS With Music': 'Mode Full GPS standard With Music',
    'All Systems On With Music': 'Tous systèmes With Music',
    'Dual Frequency With Music': 'Double fréquence With Music',
    Fit: 'En forme',
    'Hrm Dimensions': 'Dimensions',
    'Hrm Weight - Case Only': 'Poids - capteur seul',
    'Hrm Weight - Case + Band': 'Poids - capteur + bracelet',
    'Hrm Band Material': 'Matériau du brassard',
    'Hrm Optical Heart Rate Hardware': 'Matériel du capteur de FC oPtique',
    'Hrm Band Circumference': 'Tour de bras',
    'Hrm Wearing Position': 'Position de port',
    'Hrm Wireless Connection': 'Connexion sans fil',
    'Hrm Supported Devices': 'Appareils compatibles',
    'Hrm Data Sync': 'Synchronisation des données',
    'Hrm Water Resistance': "Niveau d'étanchéité",
    'Hrm Working Temperature': 'Température de fonctionnement',
    'Hrm Storage Temperature': 'Température de stockage',
    'Hrm Charging Temperature': 'Température de charge',
    'Hrm Activity Mode': 'En activité',
    'Hrm Standby Mode': 'En veille',
    'Hrm Battery Capacity': "Niveau d'étanchéité",
    'Hrm Charging Time': 'Temps de charge estimé',
    'Hrm Charging Cable': 'Câble de chargement',
    'Internal Memory': 'Mémoire interne',
    'Activity Memory': "Mémoire d'activité",
    Memory: 'Mémoire interne ',
    Climb: 'Escalade',
    batteryDesc: 'Dernière mise à jour : 5/2/2024',
    'Dura Size and Weight': 'Taille et poids',
    'Dura Display': 'Écran',
    'Dura Materials': 'Matériau',
    'Dura Out-Front Handlebar Mount': 'Support guidon',
    'Dura Design': 'Design',
    'Dura Connectivity': 'Connectivité',
    'Dura Durability': 'Durabilité',
    'Dura Battery': 'Batterie',
    'Dura Memory': 'Mémoire interne ',
    'Dura Geo Location': 'Localisation',
    'Dura Navigation': 'Navigation',
    'Dura Data Tracking': 'Mesure de données',
    'Dura 3rd Party Integration': "Intégration d'applications tierces",
    'Dura System Languages': 'Langues disponibles',
    'Dura Supported Activity Modes': "Modes d'activité disponibles",
    'Dura Dimensions': 'Dimensions',
    'Dura Weight - Device': 'Poids du compteur',
    'Dura Weight - Mount': 'Poids du support',
    'Dura Display Size': "Taille de l'écran",
    'Dura Display Resolution': "Résolution de l'écran",
    'Dura Display Type': "Type d'écran",
    'Dura Screen': 'Écran',
    'Dura Body': 'Compteur',
    'Dura Mount': 'Support',
    'Dura Length': 'Longueur',
    'Dura Compatible Handlebars': 'Guidons compatibles',
    'Dura Button': 'Bouton et molette',
    'Dura Phone': 'Téléphone',
    'Dura Accessories': 'Accessoires',
    'Dura Accessory Types': 'Accessoires compatibles',
    'Dura Data Sync': 'Synchronisation des données',
    'Dura Water & Dust Resistance': 'Étanchéité et résistance à la poussière',
    'Dura Working Temperature': 'Température de fonctionnement',
    'Dura Storage Temperature': 'Température de conservation',
    'Dura All Systems On': 'Tous systèmes',
    'Dura All Systems + Dual Frequency On': 'Double fréquence',
    'Dura Solar Efficiency': 'Performance de la batterie solaire',
    'Dura Charging Time': 'Temps de chargement',
    'Dura Internal Memory': 'Mémoire interne',
    'Dura Activity Memory': "Mémoire d'activité",
    'Dura Satellite Systems': 'Systèmes satellite',
    'Dura GNSS Chipset': 'Puce GNSS',
    'Dura Map Layer': 'Couches cartographiques',
    'Dura Additional Features': 'Fonctionnalités additionnelles',
    'Dura Sensors': 'Capteurs',
    'Dura Training Features': "Fonctions d'entraînement",
    'Dura Safety Features': 'Fonctions de sécurité',
    'Dura Compatible Apps': 'Applications compatibles',
    'Dura Display Language': 'Langues du logiciel',
    'Dura Outdoor': 'Extérieurs',
    'Dura Electric': 'Électriques',
    'Dura Indoor': 'Intérieur',
    'Size - Nylon': 'Taille - Nylon',
    'Size - Silicone': 'Taille - Silicone'
  },
  pace2: {
    displaySizeVal: '1,2 pouce. 240 x 240 (64 couleurs)',
    displayType: 'Mémoire LCD toujours active',
    displayMaterialVal: 'Verre minéral',
    bezelVal: 'Polymère renforcé par des fibres',
    coverVal: 'Polymère renforcé par des fibres',
    strapVal: 'Silicone/Nylon',
    sensorsVal: 'Moniteur optique de fréquence cardiaque Altimètre barométrique Accéléromètre Compas Gyroscope Thermomètre',
    waterResistanceVal: '5ATM (50 mètres/164 pieds)',
    workingTemp: 'De -20°C à 60°C (-4°F à 140°F)',
    storageTempVal: 'De -20°C à 65°C (-4°F à 149°F)',
    chargingVal: 'Moins de 2 heures',
    batteryLifeVal: "20 jours d'utilisation régulière\n30 heures en mode GPS intégral\n60 heures en mode UltraMax\n",
    workoutsVal: 'Course, Course sur tapis, Course sur piste, Vélo, Vélo en salle, Nage en piscine, Eau libre, Triathlon, Cardio intérieur, Cardio extérieur, Multisport, Musculation, Entraînement, Eau calme, Aviron, Aviron en salle,Marche'
  },
  comparsion: {
    pace3: {
      dimensionsVal: "41,9 x 41,9 x 11,7mm\nL'épaisseur n'inclut pas le capteur optique de fréquence cardiaque",
      weightVal: ['39g\nAvec bracelet en silicone', '30g\nAvec bracelet en nylon'],
      displaySizeVal: '1,2 pouce',
      displayResolutionVal: '240 x 240\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre minéral',
      bezelMaterialVal: 'Polymère renforcé de fibres',
      coverMaterialVal: 'Polymère renforcé de fibres',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '135mm - 205mm (Standard)|||150mm - 235mm (Long)',
      sizeSiliconeVal: '130mm - 215mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / Application COROS',
      waterResistanceVal: '5 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-20°C to 50°C',
      storageTemperatureVal: '-20°C to 60°C',
      standardFullGpsVal: ['38 heures\nConnecté au GPS et au QZSS', '10 heures (avec musique)\nConnecté au GPS et au QZSS avec musique hors ligne'],
      allSystemsOnVal: ['25 heures\nConnecté aux 5 systèmes satellite en même temps', '9 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps avec musique hors ligne'],
      allSystemsDualFrequencyOnVal: ['15 heures\nConnecté aux 5 systèmes satellite en même temps en double signal', '7 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps en double signal avec musique hors ligne'],
      dailyUseVal: ['17 jours\nAvec suivi quotidien, le jour comme la nuit', '15 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '4GB',
      activityMemoryVal: '1200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Tous satellites - Double fréquence',
      mapLayerVal: ["Fil d'Ariane", '—'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', '—'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec le Wi-Fi et l'appli COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', 'Musique\nÉcoute de la musique hors ligne avec des écouteurs Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaïlandais, japonais, coréen, portugais, italien, russe',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', '—'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    vertix2: {
      dimensionsVal: '50,3 x 50,3 x 15,7mm',
      weightVal: ['89g\nAvec bracelet en silicone', '72g\nAvec bracelet en nylon'],
      displaySizeVal: '1,4 pouce',
      displayResolutionVal: '280 x 280\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5 avec revêtement PVD',
      coverMaterialVal: 'Alliage de titanium avec revêtement PVD',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Molette digitale\nUne molette plus grande et plus durable', 'Bouton retour', 'Bouton de rétroéclairage dédié'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / Application COROS',
      waterResistanceVal: '10 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-30°C to 50°C',
      storageTemperatureVal: '-30°C to 60°C',
      standardFullGpsVal: ['127 heures\nConnecté au GPS et au QZSS', '32 heures (avec musique)\nConnecté au GPS et au QZSS avec musique hors ligne'],
      allSystemsOnVal: ['89 heures\nConnecté aux 5 systèmes satellite en même temps', '29 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps avec musique hors ligne'],
      allSystemsDualFrequencyOnVal: ['49 heures\nConnecté aux 5 systèmes satellite en même temps en double signal', '23 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps en double signal avec musique hors ligne'],
      dailyUseVal: ['43 jours\nAvec suivi quotidien, le jour comme la nuit', '39 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Tous satellites - Double fréquence',
      mapLayerVal: ['Paysage\nCartes mondiales téléchargeables', 'Topo\nCartes régionales téléchargeables'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', 'ECG'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec le Wi-Fi et l'appli COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', 'Musique\nÉcoute de la musique hors ligne avec des écouteurs Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaïlandais, japonais, coréen, portugais, italien, russe',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ["Escalade extérieure\nDonnées améliorées pour mesurer l'escalade multi-pitch et big wall", "Escalade indoor\nPermet de faire de l'escalade à l'intérieur, de l'escalade à la corde et de l'escalade de bloc avec comptage automatique des voies/chutes", 'Alpinisme', 'Escalade de bloc'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', 'Eau vive', 'Speedsurfing', 'Planche à voile'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    vertix2s: {
      dimensionsVal: '50,3 x 50,3 x 16mm',
      weightVal: ['87g\nAvec bracelet en silicone', '70g\nAvec bracelet en nylon'],
      displaySizeVal: '1,4 pouce',
      displayResolutionVal: '280 x 280\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5 avec revêtement PVD',
      coverMaterialVal: 'Alliage de titanium avec revêtement PVD',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Molette digitale\nUne molette plus grande et plus durable', 'Bouton retour', 'Bouton de rétroéclairage dédié'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / Application COROS',
      waterResistanceVal: '10 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-30°C to 50°C',
      storageTemperatureVal: '-30°C to 60°C',
      standardFullGpsVal: ['118 heures\nConnecté au GPS et au QZSS', '32 heures (avec musique)\nConnecté au GPS et au QZSS avec musique hors ligne'],
      allSystemsOnVal: ['73 heures\nConnecté aux 5 systèmes satellite en même temps', '27 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps avec musique hors ligne'],
      allSystemsDualFrequencyOnVal: ['43 heures\nConnecté aux 5 systèmes satellite en même temps en double signal', '22 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps en double signal avec musique hors ligne'],
      dailyUseVal: ['40 jours\nAvec suivi quotidien, le jour comme la nuit', '36 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Tous satellites - Double fréquence',
      mapLayerVal: ['Paysage\nCartes mondiales téléchargeables', 'Topo\nCartes régionales téléchargeables'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', 'ECG'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec le Wi-Fi et l'appli COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', 'Musique\nÉcoute de la musique hors ligne avec des écouteurs Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaïlandais, japonais, coréen, portugais, italien, russe',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ["Escalade extérieure\nDonnées améliorées pour mesurer l'escalade multi-pitch et big wall", "Escalade indoor\nPermet de faire de l'escalade à l'intérieur, de l'escalade à la corde et de l'escalade de bloc avec comptage automatique des voies/chutes", 'Alpinisme', 'Escalade de bloc'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', 'Eau vive', 'Speedsurfing', 'Planche à voile'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    vertix: {
      dimensionsVal: '47 x 47 x 15,6mm',
      weightVal: ['76g\nAvec bracelet en silicone', '63g\nAvec bracelet en nylon'],
      displaySizeVal: '1,2 pouce',
      displayResolutionVal: '240 x 240\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5',
      coverMaterialVal: 'Alliage de titane',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Quick Fit',
      buttonVal: ['Molette digitale\nUne molette plus grande et plus durable', 'Bouton retour', 'Bouton de rétroéclairage dédié'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'Application COROS',
      waterResistanceVal: '15 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-20°C to 60°C',
      storageTemperatureVal: '-30°C to 70°C',
      standardFullGpsVal: ['58 heures\nConnecté au GPS et au QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['27 jours\nAvec suivi quotidien, le jour comme la nuit', '22 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '4GB',
      activityMemoryVal: '200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Fréquence unique',
      mapLayerVal: ['Paysage\nCartes mondiales téléchargeables', 'Topo\nCartes régionales téléchargeables'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', '—'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec l'application COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaï, japonais, coréen, portugais, italien, russe.',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', "Escalade indoor\nPermet de faire de l'escalade à l'intérieur, de l'escalade à la corde et de l'escalade de bloc avec comptage automatique des voies/chutes", 'Alpinisme', 'Escalade de bloc'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', 'Eau vive', 'Speedsurfing', 'Planche à voile'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    pace2: {
      dimensionsVal: '42 x 42 x 11,7mm',
      weightVal: ['35g-36g\nAvec bracelet en silicone', '29g-30g\nAvec bracelet en nylon'],
      displaySizeVal: '1,2 pouce',
      displayResolutionVal: '240 x 240\n64 couleurs',
      displayTypeVal: 'Ecran LCD à mémoire permanente',
      screenMaterialVal: 'Verre minéral',
      bezelMaterialVal: 'Polymère renforcé de fibres',
      coverMaterialVal: 'Polymère renforcé de fibres',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'Application COROS',
      waterResistanceVal: '5 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-20°C to 60°C',
      storageTemperatureVal: '-20°C to 65°C',
      standardFullGpsVal: ['27 heures\nConnecté au GPS et au QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 jours\nAvec suivi quotidien, le jour comme la nuit', '11 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '—',
      activityMemoryVal: '200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Fréquence unique',
      mapLayerVal: ["Fil d'Ariane", '—'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', '—'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", '—', '—'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', '—', '—', "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec l'application COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaï, japonais, coréen, portugais, italien, russe.',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', '—', '—', '—'],
      winterVal: ['—', '—', '—', '—'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    pod2: {
      podDimensionsVal: '27.1 x 33.9 x 8.6mm',
      weightCorosPod2Val: '5.6g\nSans le clip',
      weightChargingDockVal: '17.6g',
      caseMaterialVal: 'Polymère renforcé par des fibres\nPour le COROS POD 2 et le dock de charge',
      footClipMaterialVal: 'Polymère renforcé de fibres',
      waistClipMaterialVal: 'Silicone',
      corosAppVal: 'Bluetooth',
      corosWatchVal: 'Bluetooth',
      dataSyncVal: "Données d'activité en temps réel vers la montre COROS",
      waterResistanceVal: "3 ATM\nPour le COROS POD 2 uniquement et ne s'applique pas au socle de chargement.",
      workingTemperatureVal: '-10°C à 60°C',
      storageTemperatureVal: '-20°C à 70°C',
      activityModeVal: "25 heures\nJusqu'à 150 heures de fonctionnement total avec la station d'accueil de chargement",
      standbyModeVal: '40 jours',
      chargingTimeVal: 'Moins de 2 heures\nPour le COROS POD 2 et le socle de chargement',
      chargingDockCapacityVal: '5 charges',
      chargingDockCableVal: 'USB Type-C',
      sensorsVal: ['Altimètre barométrique', 'Thermomètre', 'Géomagnétique', 'Accéléromètre', 'Gyroscope'],
      supportedDevicesVal: ['Montres COROS sauf COROS PACE 1\nCompatibilité COROS APEX 42mm/46mm à venir fin novembre via des mises à jour du firmware.', 'KIPRUN GPS 500/GPS 900'],
      featuresMetricsVal: ['Optimisation du suivi GPS\nCourir / Suivre la course', 'Distance\nCourse / Piste / Tapis', "Allure\nCourse / Piste / Course en salle\nAllure d'effort", 'Piste / Course en salle', 'Cadence\nCourse / Piste / Trail / Tapis', 'Longueur de foulée\nCourse / Parcours / Course en salle\nTempérature', 'Course / Piste / Trail / Tapis', "Gain/perte d'élévation\nCourse / Parcours sur piste / Course en salle\nAltitude", 'Course / Piste / Trail / Course en salle', 'Pente\nCourse / Trail\nBalance D/G', 'Course / Piste / Trail / Course en salle', 'Temps de contact au sol\nCourse / Piste / Trail / Course en salle "Temps de contact avec le sol', 'Hauteur de foulée\nCourse / Piste / Trail / Tapis "Hauteur de la foulée', 'Rapport de foulée\nCourse / Piste / Trail / Tapis']
    },
    apex2: {
      dimensionsVal: '43,0 x 42,8 x 12,8mm',
      weightVal: ['53g\nAvec bracelet en silicone', '42g\nAvec bracelet en nylon'],
      displaySizeVal: '1,2 pouce',
      displayResolutionVal: '240 x 240\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5 avec revêtement PVD',
      coverMaterialVal: 'Alliage de titane',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', 'Bouton de rétroéclairage dédié'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / Application COROS',
      waterResistanceVal: '5 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-20°C à 50°C',
      storageTemperatureVal: '-20°C à 60°C',
      standardFullGpsVal: ['40 heures\nConnecté au GPS et au QZSS', '10 heures (avec musique)\nConnecté au GPS et au QZSS avec musique hors ligne'],
      allSystemsOnVal: ['25 heures\nConnecté aux 5 systèmes satellite en même temps', '9 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps avec musique hors ligne'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 jours\nAvec suivi quotidien, le jour comme la nuit', '13 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '8GB',
      activityMemoryVal: '1200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Tous satellites - Fréquence unique',
      mapLayerVal: ['Paysage\nCartes mondiales téléchargeables', 'Topo\nCartes régionales téléchargeables'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', 'ECG'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement fractionné de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec le Wi-Fi et l'appli COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', 'Musique\nÉcoute de la musique hors ligne avec des écouteurs Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaïlandais, japonais, coréen, portugais, italien, russe',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', "Escalade indoor\nPermet de faire de l'escalade à l'intérieur, de l'escalade à la corde et de l'escalade de bloc avec comptage automatique des voies/chutes", 'Alpinisme', 'Escalade de bloc'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', 'Eau vive', 'Speedsurfing', 'Planche à voile'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    apex2pro: {
      dimensionsVal: '46,1 x 46,5 x 14mm',
      weightVal: ['66g\nAvec bracelet en silicone', '53g\nAvec bracelet en nylon'],
      displaySizeVal: '1,3 pouce',
      displayResolutionVal: '260 x 260\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5 avec revêtement PVD',
      coverMaterialVal: 'Alliage de titane',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Court)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', 'Bouton de rétroéclairage dédié'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / Application COROS',
      waterResistanceVal: '5 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-20°C à 50°C',
      storageTemperatureVal: '-20°C à 60°C',
      standardFullGpsVal: ['66 heures\nConnecté au GPS et au QZSS', '18 heures (avec musique)\nConnecté au GPS et au QZSS avec musique hors ligne'],
      allSystemsOnVal: ['41 heures\nConnecté aux 5 systèmes satellite en même temps', '15 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps avec musique hors ligne'],
      allSystemsDualFrequencyOnVal: ['24 heures\nConnecté aux 5 systèmes satellite en même temps en double fréquence', '12 heures (avec musique)\nConnecté aux 5 systèmes satellite en même temps en double signal avec musique hors ligne'],
      dailyUseVal: ['24 jours\nAvec suivi quotidien, le jour comme la nuit', '21 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Tous satellites - Double fréquence',
      mapLayerVal: ['Paysage\nCartes mondiales téléchargeables', 'Topo\nCartes régionales téléchargeables'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', 'ECG'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec le Wi-Fi et l'appli COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', 'Musique\nÉcoute de la musique hors ligne avec des écouteurs Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaïlandais, japonais, coréen, portugais, italien, russe',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ["Escalade extérieure\nDonnées améliorées pour mesurer l'escalade multi-pitch et big wall", "Escalade indoor\nPermet de faire de l'escalade à l'intérieur, de l'escalade à la corde et de l'escalade de bloc avec comptage automatique des voies/chutes", 'Alpinisme', 'Escalade de bloc'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', 'Eau vive', 'Speedsurfing', 'Planche à voile'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    apex42: {
      dimensionsVal: '42 x 42 x 11,75mm',
      weightVal: ['49g\nAvec bracelet en silicone', '38g\nAvec bracelet en nylon'],
      displaySizeVal: '1,1 pouce',
      displayResolutionVal: '218 x 218\n64 couleurs',
      displayTypeVal: 'Ecran LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5',
      coverMaterialVal: 'Aluminium',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'Application COROS',
      waterResistanceVal: '10 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-10°C to 60°C',
      storageTemperatureVal: '-20°C to 65°C',
      standardFullGpsVal: ['25 heures\nConnecté au GPS et au QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['24 jours', '—'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '—',
      activityMemoryVal: '200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Fréquence unique',
      mapLayerVal: ["Fil d'Ariane", '—'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', '—'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", '—', '—'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", '—', '—', "Fréquence cardiaque sous l'eau", '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarmee', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec l'application COROS", '—', '—', '—', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaï, japonais , portugais',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', '—', 'Alpinisme', '—'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", '—', '—'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    apex46: {
      dimensionsVal: '46 x 46 x 11,9mm',
      weightVal: ['55.3g\nAvec bracelet en silicone', '45g\nAvec bracelet en nylon'],
      displaySizeVal: '1,2 pouce',
      displayResolutionVal: '240 x 240\n64 couleurs',
      displayTypeVal: 'Ecran LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5',
      coverMaterialVal: 'Aluminium',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Court)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'Application COROS',
      waterResistanceVal: '10 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-10°C to 60°C',
      storageTemperatureVal: '-20°C to 65°C',
      standardFullGpsVal: ['35 heures\nConnecté au GPS et au QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['30 jours', '—'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '—',
      activityMemoryVal: '200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Fréquence unique',
      mapLayerVal: ["Fil d'Ariane", '—'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', '—'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", '—', '—'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", '—', '—', "Fréquence cardiaque sous l'eau", '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec l'application COROS", '—', '—', '—', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaï, japonais , portugais',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', '—', 'Alpinisme', '—'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', '—', '—', '—'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", '—', '—'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    apexPro: {
      dimensionsVal: '47 x 47 x 13,4mm',
      weightVal: ['59g\nAvec bracelet en silicone', '49g\nAvec bracelet en nylon'],
      displaySizeVal: '1,2 pouce',
      displayResolutionVal: '240 x 240\n64 couleurs',
      displayTypeVal: 'Écran tactile LCD à mémoire permanente',
      screenMaterialVal: 'Verre saphir',
      bezelMaterialVal: 'Alliage de titane de grade 5',
      coverMaterialVal: 'Aluminium',
      bandMaterialVal: 'Silicone / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Standard)|||130mm - 195mm (Court)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Libération rapide',
      buttonVal: ['Molette digitale', 'Bouton retour', 'Bouton de rétroéclairage dédié'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'Application COROS',
      waterResistanceVal: '10 ATM\nConvient à des activités en surface, ne convient pas pour la plongée',
      workingTemperatureVal: '-10°C to 60°C',
      storageTemperatureVal: '-20°C to 70°C',
      standardFullGpsVal: ['37 heures\nConnecté au GPS et au QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['18 jours\nAvec suivi quotidien, le jour comme la nuit', '14 jours (Avec niveau de stress quotidien)\nSurveille ton niveau de stress tout au long de la journée'],
      chargingTimeVal: 'Moins de 2 heures',
      internalMemoryVal: '4GB',
      activityMemoryVal: '200 heures\nEstimations basées sur des activités extérieures',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Fréquence unique',
      mapLayerVal: ['Paysage\nCartes mondiales téléchargeables', 'Topo\nCartes régionales téléchargeables'],
      additionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte'],
      sensorsVal: ['Capteur de fréquence cardiaque optique\nPeut ne pas fonctionner sur les tatouages', 'Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole 3D', "Thermomètre\nMesure la température corporelle pendant l'entraînement (avec un accessoire compatible)", 'Oxymètre de pouls optique', '—'],
      trainingFeaturesVal: ["L'allure d'effort\nUne métrique personnalisée qui représente l'effort réel en course à pied", "EvoLab\nRécupération, fatigue, charge d'entraînement, prédicteur de course, VO2 max, zones de seuil et autres métriques", "Alertes d'activité\nPour la cadence, la distance, l'allure, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînement par intervalles de base/avancé', 'Entraînements préplanifiés', "Plans d'entraînement", 'Niveau de course', 'FC au repos', "Fréquence cardiaque sous l'eau", 'Contrôle de caméra à distance\nPrend en charge certaines caméras GoPro et Insta360', 'Virtual Pacer', 'Course virtuelle', 'Test de technique de course\nNécessite COROS POD/POD 2', 'Mode altitude\nÉvaluation régulière de la SpO2 et de la condition physique en haute altitude', "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement", "Partage d'écran"],
      dailyFeaturesVal: ['Stress quotidien', 'Bilan de santé', "Alerte de message/appel\nPendant l'utilisation quotidienne et pendant l'entraînement", 'Sommeil\nAvec suivi des cycles', 'Alarme', 'Minuteur', 'Chronomètre', "Alertes quotidiennes\nInclut les calories actives, le temps d'exercice, la tempête et d'autres alertes.", "Micrologiciel compatible avec les mises à jour\nAvec l'application COROS", 'Trouver mon téléphone', 'Trouver ma montre', 'Mode rétroéclairage toujours allumé', 'VFC', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nClique ici pour voir la liste complète',
      displayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaï, japonais, coréen, portugais, italien, russe.',
      runVal: ['Course', 'Tapis', 'Piste', 'Trail'],
      climbVal: ['—', "Escalade indoor\nPermet de faire de l'escalade à l'intérieur, de l'escalade à la corde et de l'escalade de bloc avec comptage automatique des voies/chutes", 'Alpinisme', 'Escalade de bloc'],
      bikeVal: ['Vélo', "Vélo d'intérieur"],
      waterVal: ['Eau libre', 'Nage en piscine', 'Eau plate', 'Aviron', 'Eau vive', 'Speedsurfing', 'Planche à voile'],
      winterVal: ['Ski', 'Snowboard', 'Ski de fond', 'Ski de randonnée'],
      cardioVal: ['Cardio extérieur', 'Cardio intérieur', 'Randonnée', "Rameur d'intérieur", 'Marche', 'Corde à sauter'],
      specialVal: ['Triathlon', 'Multisport', 'Musculation', 'Entraînement', "Plan d'entraînement"]
    },
    hrm: {
      hrmDimensionsVal: '42.5 x 28.4 x 9.1mm',
      hrmWeightCaseOnlyVal: '9.7g',
      hrmWeightCaseBandVal: '19g',
      hrmBandMaterialVal: 'Fibres de polyester, nylon, élasthanne',
      hrmOpticalHeartRateHardwareVal: '5 LEDs avec 4 photodétecteurs',
      hrmBandCircumferenceVal: '18 - 32 cm (7.09-12.6 pouces)',
      hrmWearingPositionVal: 'Biceps',
      hrmWirelessConnectionVal: 'Bluetooth',
      hrmSupportedDevicesVal: 'Appareils compatibles Bluetooth recevant des données de fréquence cardiaque\nSupports simultaneous connection of 3 devices',
      hrmDataSyncVal: 'Données sur la fréquence cardiaque en temps réel',
      hrmWaterResistanceVal: '3 ATM',
      hrmWorkingTemperatureVal: '-20°C to 50°C (-4°F to 122°F)',
      hrmStorageTemperatureVal: '-20°C to 60°C (-4°F to 140°F)',
      hrmChargingTemperatureVal: '0°C to 45°C (32°F to 113°F)',
      hrmActivityModeVal: '38 heures',
      hrmStandbyModeVal: '80 jours',
      hrmBatteryCapacityVal: '55 mAh',
      hrmChargingTimeVal: '2 heures',
      hrmChargingCableVal: "USB Type-A\nSe connecte au capteur à l'aide d'une interface magnétique"
    },
    dura: {
      duraDimensionsVal: '99.5 x 60.8 x 15.7mm\nSans le support',
      duraWeightDeviceVal: '102g',
      duraWeightMountVal: '53g',
      duraDisplaySizeVal: '2.7 pouces',
      duraDisplayResolutionVal: '400 x 240\n64 couleurs',
      duraDisplayTypeVal: 'Écran tactile LCD à mémoire permanente',
      duraScreenVal: 'Verre composite durable',
      duraBodyVal: 'Polymère renforcé',
      duraMountVal: 'Polymère renforcé',
      duraLengthVal: "70mm\nDu centre du guidon à l'extrémité du support à l'avant",
      duraCompatibleHandlebarsVal: '25.4mm / 31.8mm',
      duraButtonVal: ['Molette digitale', 'Bouton retour'],
      duraPhoneVal: 'Bluetooth',
      duraAccessoriesVal: "ANT+ / Bluetooth\nJusqu'à 12 connexions simultanées avec BLE",
      duraAccessoryTypesVal: 'Capteurs de fréquence cardiaque, capteurs de puissance, home trainers, capteurs de vitesse et de cadence, radar vélo Garmin Varia, vitesses en vélo électrique, systèmes de transmission électronique Shimano/SRAM\nClique ici pour voir la liste complète',
      duraDataSyncVal: 'Wi-Fi / app COROS',
      duraWaterDustResistanceVal: 'IP67',
      duraWorkingTemperatureVal: '-20℃ ~ 60℃',
      duraStorageTemperatureVal: '-30℃ ~ 70℃',
      duraAllSystemsOnVal: '120 heures\nSans solaire',
      duraAllSystemsDualFrequencyOnVal: '70 heures\nSans solaire',
      duraSolarEfficiencyVal: "1 heure d'exposition directe au soleil génère jusqu'à 2 heures d'utilisation supplémentaires",
      duraChargingTimeVal: '2.5 heures (15℃ ~ 45℃)|||4 heures (0℃ ~ 15℃)\nChargement impossible en dehors de ces températures',
      duraInternalMemoryVal: '32 Go',
      duraActivityMemoryVal: '1200 heures\nEstimations basées sur des activités extérieures',
      duraSatelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      duraGnssChipsetVal: 'Tous satellites - Double fréquence (L1 + L5)',
      duraMapLayerVal: 'Paysage\nCartes mondiales préchargées',
      duraAdditionalFeaturesVal: ['Check point', 'Retour au point de départ', 'Alerte de déviation', 'Navigation digitale sur la carte', 'Turn by Turn', "Smart Reroute Navigation\nVia l'application COROS", 'Détails de dénivelé'],
      duraSensorsVal: ['Altimètre barométrique', 'Accéléromètre', 'Gyroscope', 'Boussole', 'Capteur de température'],
      duraTrainingFeaturesVal: ["Gestion de l'entraînement\nCharge d'entraînement, condition physique, impact de la charge", "Recommandation de charge d'entraînement", 'Test FTP', 'Minuteur de récupération', "Alertes d'activité\nPour la cadence, la distance, la fréquence cardiaque, la puissance et d'autres mesures encore", 'Entraînements préplanifiés', "Plans d'entraînement", "Défilement tactile\nBalayer pour faire défiler les pages de données pendant l'entraînement"],
      duraSafetyFeaturesVal: ["Suivi de groupe\nVia l'application COROS", "Alertes de sécurité\nVia l'application COROS", "Alarme vélo\nVia l'application COROS"],
      duraCompatibleAppsVal: 'Strava, Komoot, TrainingPeaks, Ride With GPS, Relive, Final Surge, Decathlon',
      duraDisplayLanguageVal: 'Anglais, chinois simplifié, chinois traditionnel, allemand, espagnol, français, polonais, thaïlandais, japonais, coréen, portugais, italien, russe',
      duraOutdoorVal: ['Route', 'Gravel', 'VTT'],
      duraElectricVal: ['Vélo électrique', 'VTT électrique'],
      duraIndoorVal: 'Home trainer'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/evolab.js
/* harmony default export */ const fr_evolab = ({
  title: 'COROS EvoLab',
  desc: 'Notre plateforme de science du sport pour évaluer ta forme, ta fatigue et tes performances.',
  pages: [{
    title: 'COROS EvoLab',
    desc: ["Quel est l'impact de votre entraînement sur votre forme physique ? EvoLab évalue tes séances d'entraînement et ta récupération pour te fournir une analyse de ta condition physique. La plateforme EvoLab est gratuite pour tous les utilisateurs COROS. Elle se concentre sur ta condition physique générale, avec des fonctionnalités supplémentaires destinées à la mesure de tes performances de course.", "EvoLab mesure l'évolution de la condition physique personnelle dans un bracelet."]
  }, {
    title: "Charge d'entraînement",
    desc: ["Ta montre GPS t'indique en temps réel le niveau d'impact d'une session d'entraînement ou d'une activité sur ton corps. Ce chiffre commence à 0 et augmente en fonction de l'intensité et de la durée de ton activité. Compare ta charge d'entraînement dans le menu historique de ta montre de course pour mesurer l'entraînement du jour par rapport à des activités similaires."]
  }, {
    title: "Effet de l'entraînement",
    desc: ["L'entraînement est souvent divisé en deux catégories : Aérobique - activités de construction cardio, ou Anaérobique - travail de vitesse. Ce qui sépare ces deux groupes est ton seuil de lactate. EvoLab évaluera ton effet d'entraînement aérobie et anaérobie sur une échelle de 0 à 5+ en temps réel sur ta montre."]
  }, {
    title: "Condition physique de base et charge d'impact",
    desc: ["Réaliser une bonne séance ne signifie pas que tu es prêt à réaliser un nouveau record personnel. De même, une mauvaise séance ne doit pas faire dérailler un bon bloc d'entraînement. EvoLab évalue l'impact de ta charge (7 jours d'entraînement précédents) et ta condition physique de base (6 semaines d'entraînement précédentes). Ta montre GPS te recommande une fourchette de charge d'entraînement sur 7 jours en fonction ton historique pour obtenir les meilleurs résultats."]
  }, {
    title: 'Fatigue',
    desc: ["Chaque athlète réagit différemment à une charge d'entraînement. Une semaine de 100km peut être facile pour Eliud Kipchoge, mais c'est plus que ce que beaucoup de gens peuvent courir en une semaine. Le niveau de \"Condition physique\" qui reste dans ton corps après l'impact de la charge s'appelle la fatigue. Elle fatigue votre corps, mais elle le rend aussi plus fort. C'est le cycle de l'entraînement, et EvoLab fournit un score de fatigue de 0 à 100 et catégorise votre score en 5 zones. Tu cours bientôt ? Veille à passer de la zone optimisée à la zone de performance ou, comme tu pourrais l'appeler, au repos !"]
  }, {
    title: 'Caractéristiques spécifiques à la course',
    desc: ["• EvoLab évalue votre état de préparation au marathon et vous fournit un score à comparer à celui de vos partenaires d'entraînement.", '• EvoLab identifie si votre entraînement le plus récent améliore votre condition physique générale.', "• EvoLab catégorise vos séances d'entraînement pour indiquer quelle partie de votre entraînement est prioritaire."]
  }, {
    title: 'Niveau sur marathon',
    desc: ['Les courses ne se jouent pas sur le papier ou dans les applications, EvoLab te fournit un score de 0 à 100 indiquant ton niveau en tant que marathonien. Bien que cette mesure soit fortement basée sur la distance de 42 kilomètres (100 équivaut à un marathon de 2 heures !), elle peut également servir de baromètre pour ta forme physique générale.']
  }, {
    title: 'Performances de course',
    desc: ["Pour ceux qui souhaitent une mesure plus dynamique, un score de performance en course à pied compris entre 80 % et 120 % te montre comment ta course se situe par rapport à ta forme physique. De nombreux facteurs peuvent rendre une course excellente ou moins bonne : le sommeil, la récupération, la nutrition, le stress, la météo, etc. Si tu obtiens des scores de 100 % ou plus, il y a fort à parier que ta condition physique s'améliore."]
  }, {
    title: 'Prédicteur de course',
    desc: ["Que tu t'entraînes pour le 5km, le 10km, le semi-marathon ou le marathon, EvoLab fournit une prédiction de course globale et un rythme de course directement sur ta montre. Certaines courses auront un impact sur certaines prédictions de distance de course mais pas sur d'autres, tout comme ton entraînement vise des distances spécifiques."]
  }, {
    title: "Focus sur l'entrainement",
    desc: ["Toutes les courses ne sont pas égales. EvoLab utilise la fréquence cardiaque, l'allure et d'autres mesures d'entraînement de ta montre pour vous te exactement quel type d'entraînement a eu le plus d'impact sur une course donnée. Attention, il ne s'agit pas du type de course que vous avez effectué, mais de l'effort d'entraînement susceptible d'être amélioré."]
  }, {
    title: 'Analyse avancée des données',
    desc: ["EvoLab est un outil simplifié qui permet d'examiner les mesures de votre condition physique et leur évolution. Va dans l'app COROS, visite ton profil personnel, et tu verras comment tu t'améliores. Tu disposes également d'une vue de la tendance saisonnière de votre forme physique, afin de trouver ton pic et de donner le meilleur de toi-même."]
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/convos.js
/* harmony default export */ const fr_convos = ({
  shopTheirWatches: 'ACHETER LEURS\nMONTRES',
  careerHighlights: 'FAITS MARQUANTS DE LEUR CARRIÈRE',
  watches: {
    pace2: {
      name: 'COROS PACE 2 Blue Steel',
      desc: 'Pour les athlètes multisports\nqui vont vite et loin'
    },
    pace2molly: {
      name: 'COROS PACE 2 Molly',
      desc: 'Pour les athlètes multisports\nqui vont vite et loin'
    }
  },
  eps: [{
    title: 'EMMA BATES, la plus rapide des marathoniennes américaines, 2021.',
    mobileTitle: 'EMMA BATES\nla plus rapide des marathoniennes américaines, 2021.',
    desc: "Cette étoile montante a établi le temps au marathon le plus rapide pour une Américaine (2:24:20) en 2021, avec sa deuxième place au marathon de Chicago. Dan de COROS a échangé avec Emma lors d'une COROS CONVO afin de discuter de sa course record, et de comprendre plus en détail l'une des athlètes les plus passionnantes de la course à pied.",
    title4highlights: 'FAITS MARQUANTS DE LA CARRIÈRE',
    highlights: ['2021 Marathon le plus rapide - Femme américaine', '2021 Marathon de Chicago - 1ère Américaine', 'Marathon de Chicago 2019 - 1ère Américaine', 'Championne du marathon des États-Unis 2019', 'Championne NCAA D1 du 10 000 m 2014', '12 fois All-American NCAA D1'],
    shopDesc: "ACHETER LA MONTRE D'EMMA \nCOROS APEX 42mm"
  }, {
    title1: "HANS FLORINE,\nRECORDMAN DU MONDE D'ESCALADE DE BIG WALL",
    title2: 'CAMILLE HERRON, \nULTRA RUNNER RECORDWOMAN DU MONDE',
    titleMobile1: 'HANS FLORINE,',
    titleMobile2: "RECORDMAN DU MONDE \nD'ESCALADE DE BIG WALL",
    titleMobile3: 'CAMILLE HERRON,',
    titleMobile4: 'ULTRA RUNNER\nRECORDWOMAN DU MONDE',
    desc: "Dans l'épisode 2 de COROS Convos, le légendaire grimpeur de\ngrands murs, Hans Florine et la légende en devenir de\nl'ultrarunning, Camille Herron, se racontent des anecdotes\nde leur jeunesse, discutent de l'esprit de compétition,\ndécortiquent notre monde en mutation et explorent le\nsens profond que l'on trouve en surmontant les\nblessures et l'adversité.",
    highlights: 'FAITS MARQUANTS DE LEUR CARRIÈRE',
    highlights1: 'CAMILLE HERRON',
    highlights1list: ['3 fois championne du monde (50K, 100K, 24hr)', '2 fois championne du monde par équipe (100K, 24hr)', 'Championne nationale sur route 50K/50mi/100mi', 'Vainqueur du marathon "Uphill" de Comrades', 'Détentrice de 11 records américains', 'Meilleure performance mondiale actuelle sur 50 miles (5:38:41)', 'Meilleure marque en 100 miles trail chez les femmes (12:42:40)'],
    highlights2: 'HANS FLORINE',
    highlights2list: ['8 records de vitesse sur "The Nose"', 'Auteur de "On the Nose"', "3 fois médaillé d'or aux X Games", "12 fois champion national d'escalade de vitesse", '2 titres nationaux d’escalade « Difficulty »', "Champion du monde d'escalade de vitesse 1991", 'Champion des Etats-Unis 1990']
  }, {
    title1: 'TOMMY CALDWELL, \nLÉGENDE DE L’ESCALADE DE VITESSE ET DE BIG WALLS',
    title2: "KILIAN JORNET\nLE PLUS GRAND ATHLÈTE D'ENDURANCE DE MONTAGNE DE TOUS LES TEMPS",
    titleMobile1: ['TOMMY CALDWELL,', 'LÉGENDE DE L’ESCALADE DE VITESSE ', 'ET DE BIG WALLS'],
    titleMobile2: ['KILIAN JORNET', "LE PLUS GRAND ATHLÈTE D'ENDURANCE DE MONTAGNE", 'DE TOUS LES TEMPS'],
    desc: "L'épisode 3 réunit deux des plus grands athlètes de sports de montagne de\n      tous les temps pour la toute première fois. Filmé le lendemain de\n      la victoire de Kilian, qui a battu le record du parcours de la Hardrock 100,\n      ils couvrent beaucoup de sujets, comparent leurs expériences et \n      et évoquent l'avenir. Que peuvent-ils apprendre l'un de l'autre ? Où trouvent-ils l'inspiration ? Comment parviennent-ils au\n      succès, et collaboreront-ils un jour ? Trouve les réponses à\n      ces questions et bien plus encore lors de ce mémorable COROS Convo.",
    highlights1: 'TOMMY',
    highlights1list: ['Première escalade "libre" du Dawn Wall', 'Première ascension "libre" de Dihedral Wall', 'Escalade "libre" du Nose en 11 heures', 'Record de vitesse de The Nose en 1hr 58mins', 'Première ascension de la traversée de Fitz Roy'],
    highlights2: 'KILIAN',
    highlights2list: ["4 x vainqueur de l'UTMB", '5x vainqueur de la Hardrock', '4 × champion du monde de ski-alpinisme', '3 × champion du monde de Sky Running', 'A escaladé le Mt. Everest deux fois en 1 semaine'],
    withoutSupplementalOxygen: 'sans oxygène supplémentaire'
  }, {
    title1: 'MOLLY SEIDEL\nUNE CHAMPIONNE UNIVERSITAIRE DEVENUE MÉDAILLÉE OLYMPIQUE',
    title2: 'DES LINDEN\nMARATHONIENNE AMÉRICAINE LÉGENDAIRE ET 2X PARTICIPATION AUX JEUX',
    titleMobile1: ['MOLLY SEIDEL', 'UNE CHAMPIONNE UNIVERSITAIRE DEVENUE', 'MÉDAILLÉE OLYMPIQUE'],
    titleMobile2: ['DES LINDEN', 'MARATHONIENNE AMÉRICAINE LÉGENDAIRE', 'ET 2X PARTICIPATION AUX JEUX'],
    desc: "L'épisode 4 réunit une marathonienne olympique chevronnée et une médaillée olympique débute seulement sa carrière pour une conversation sincère et inspirante pour tout\n      athlète qui aspire à la performance. Où trouvent-elles leur motivation pour la compétition ? À quoi ressemble la récupération post-marathon, et pourquoi reviennent-elles encore et encore ? Obtiens les réponses à ces\nquestions et découvre leurs parcours uniques vers le succès et au-delà dans cet épisode de COROS Convos.",
    highlights1: 'MOLLY SEIDEL',
    highlights1list: ['4x championne NCAA', 'Médaille de bronze du marathon des Jeux Olympiques de 2020', 'Temps le plus rapide réalisé par une Américaine au marathon de NYC', "Médaille de bronze du cross International d'Edimbourg", 'Première athlète olympique féminine américaine pour ses premiers Jeux'],
    highlights2: 'DES LINDEN',
    highlights2list: ['Vainqueure du marathon de Boston 2018', 'Détentrice du record du monde du 50 km féminin', '2x participations aux Jeux Olympiques (2012, 2016)', "Médaille d'argent des Jeux panaméricains 2015 sur 10 000 m", '9x top-5 sur un World Marathon Majors']
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/login.js
/* harmony default export */ const fr_login = ({
  loginTitle: 'USER LOGIN',
  Email: 'E-mail',
  password: 'Password',
  signIn: 'Sign in',
  createAccount: 'Create account',
  forgotYourPassword: 'Forgot your password?',
  DownloadPlugin: 'Download the Chrome plugin',
  sendEmai: 'We will send you an email to reset your password.',
  forgot: 'Forgot Your Password',
  submit: 'Submit',
  newPassword: 'NEW PASSWORD',
  newPasswordTips: 'Please enter your new password',
  newPasswordNext: 'NEXT',
  shortPasswordTips: 'Please enter password with 8-20 characters',
  //Please enter password with 6-20 characters
  invalidStr: 'Password must contain both number and letter characters.',
  resetSuccTitle: 'DONE ！',
  resetFailedTitle: 'RESET FAILED !',
  resetSuccDesc: 'Conguatuations ! You have reset your new password ! <br> Now go and enjoy your CTH trip!',
  resetFailedDesc: 'Woops ! The check code is invalid !',
  accountNotExist: 'This email has not been registered.',
  login: 'LOG IN'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/datalist.js
/* harmony default export */ const fr_datalist = ({
  title: 'Workout History',
  desc: ' workouts in total',
  total: 'All',
  run: 'Run',
  runOutdoor: 'Run',
  indoorRun: 'Indoor Run',
  trailRun: 'Trail Run',
  runMountaineer: 'Mtn Climb',
  hike: 'Hike',
  trackRun: 'Track Run',
  bike: 'Bike',
  indoorBike: 'Indoor Bike',
  swim: 'Swim',
  swimPool: 'Pool Swim',
  swimOpen: 'Open Water',
  triathlon: 'Triathlon',
  cardio: 'Cardio',
  aerobicOutdoor: 'GPS Cardio',
  aerobicIndoor: 'Gym Cardio',
  ski: 'Skiing',
  skiItem: 'Ski',
  skiSnowboard: 'Snowboard',
  skiMountaineering: 'Ski Touring',
  skiCrosscountry: 'XC Ski',
  multisport: 'Multisport',
  logOut: 'Log out',
  columnLabel: {
    title: 'Title',
    distance: 'Distance',
    averagePace: 'Average Pace',
    device: 'Device',
    date: 'Date',
    workout: 'Workout'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/yourproduct.js
/* harmony default export */ const fr_yourproduct = ({
  yourProducts: 'Your Products',
  product: 'Product',
  productID: '6-digit Product ID',
  warrantyPeriod: 'Warranty Period',
  expiration: 'Warranty Expiration Date',
  workoutHistory: 'Workout History',
  accountDetail: 'Account Details',
  serialNumber: 'Numéro de série'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/events.js
/* harmony default export */ const fr_events = ({
  title: 'Événement de lancement des nouveaux produits COROS',
  keywords: 'Événement de lancement des nouveaux produits COROS - 17 août 2021',
  description: 'Événement de lancement des nouveaux produits COROS - 17 août 2021',
  tittext1: 'ÉVÉNEMENT DE LANCEMENT DES NOUVEAUX PRODUITS COROS',
  titdate: '17 août 21',
  aftertit: 'Voici ce que nous avons annoncé',
  aftervertix2tit: 'COROS VERTIX 2',
  aftervertix2subtit: 'Montre GPS pour l\'aventure',
  afterpace2tit: 'COROS PACE 2',
  afterpace2titsub: 'Montre GPS Sport <br>Édition Eliud Kipchoge'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/shop.js
/* harmony default export */ const fr_shop = ({
  chooseAdditionalBands: 'Bracelets supplémentaires',
  chooseBandMaterial: 'Matériau du bracelet',
  chooseSize: 'Choisis la taille de ta montre',
  chooseColor: 'Option/Couleur',
  chooseAccessories: 'Accessoires supplémentaires',
  // outOfStock: 'STOCK ÉPUISÉ', 改用 home.outOfStock
  // add2Bag: 'AJOUTER AU PANIER',
  add2Bag: 'Commander',
  total: 'Total',
  overview: 'En savoir plus',
  skipForNow: 'Passer',
  pace2: {
    difference: 'Quelle est la différence ?',
    silicone1: 'Bracelets en silicone',
    silicone2: "sont durables, sèchent rapidement et sont faciles à nettoyer. C'est l'option idéale pour ceux qui portent leur montre 24 heures sur 24, 7 jours sur 7, qui vont souvent dans l'eau et qui veulent un bracelet qui tienne la distance.",
    nylon1: 'Bracelets en nylon',
    nylon2: "sont ultra-légers, respirants et peuvent être ajustés de manière très précise. Ces bracelets conviennent parfaitement à ceux qui privilégient un ajustement parfait et une précision optimale de la fréquence cardiaque, ainsi qu'à ceux qui trouvent le bracelet en silicone inconfortable."
  },
  whichModelIsRightForYou: 'Quel modèle te convient le mieux ?',
  details: 'Détails',
  price: 'Prix Unitaire',
  quantity: 'Quantité',
  subtotal: 'Prix',
  remove: 'Effacer',
  shipping: 'Expédition',
  taxes: 'Taxes',
  estimatedTotal: 'Total estimé',
  checkOut: 'Commander',
  frequentlyBoughtTogether: 'Souvent achetés ensemble',
  shoppingBag: 'Panier',
  bagPageTitle: 'Panier - COROS',
  moreGoodStuffIsComingSoon: "D'autres accessoires\n sont en préparation",
  added: 'Ajouté',
  calAtCheckout: 'Calculé au moment du paiement',
  bagEmpty: 'Ton panier est vide',
  chooseModel: ' Modèle ',
  bandTypes: {
    nylon: 'Bracelet en nylon',
    silicone: 'Bracelet en silicone'
  },
  thanksgivingPrompt: "Ajoute un sac d'entra\xEEnement COROS gratuit \xE0 ta commande lorsque tu d\xE9penses 300\u20AC ou plus.",
  thanksgivingPromotionDetails: {
    title: "Ajoute ton sac d'entra\xEEnement COROS gratuit",
    subTitles: ["Passe une commande d'au moins 300\u20AC pour b\xE9n\xE9ficier de ce cadeau.", "L'offre se termine le 1er d\xE9cembre ou \xE0 \xE9puisement des stocks.", "Non cumulable avec d'autres offres ou promotions."]
  },
  thanksgivingPromptBanner: {
    title: "UN SAC D'ENTRA\xCENEMENT\n      OFFERT",
    subTitles: ["Commande pour 300\u20AC ou plus et obtiens ce sac r\xE9sistant, polyvalent et \xE9l\xE9gant pour transporter ton \xE9quipement.", "L'offre se termine le 1er d\xE9cembre ou \xE0 \xE9puisement des stocks. "],
    shortDescs: ['Offre spéciale']
  },
  bagPromotion: {
    title: "Ajoute ton sac d'entra\xEEnement COROS gratuit",
    subTitles: "Commande une montre pour obtenir ce cadeau.\n    Valable jusqu'\xE0 \xE9puisement des stocks.\n    Non cumulable avec d'autres promotions."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/coaches
/* harmony default export */ const fr_coaches = ({
  subTitle: ['puissant', 'gratuit', 'facile'],
  intro: 'Le COROS Training Hub est un outil gratuit et complet pour les coachs travaillant avec des athlètes et des équipes utilisant les montres COROS.',
  features: {
    title: 'caractéristiques principales',
    list: {
      'team-view': {
        title: 'Vue équipe et athlète',
        list: ['Trier par indicateurs de performance', 'Donner un feedback immédiat', 'Comparer les athlètes'],
        desc: '"Le Training Hub a rassemblé tous mes athlètes au même endroit et m\'a permis de les regrouper par niveau de course et par aptitude."',
        coach: 'Coach Vowell : Flacon Youth AAU',
        btn: 'Falcon Youth : Étude de cas',
      },
      drag: {
        title: 'Glisser-déposer des plans',
        list: ["Créer/enregistrer des séances d'entraînement et des plans", 'Organiser et accéder à ta bibliothèque de plans', 'Recommander des plans aux athlètes ou aux groupes'],
        desc: '"Le fait de glisser-déposer des plans de musculation pour les athlètes m\'a donné plus de temps pour me concentrer sur ce qui est important. "',
        coach: 'Coach Warrick : Université de Drake S&C',
        btn: 'Université de Drake : Étude de cas',
      },
      optimize: {
        title: 'Optimiser la condition physique des athlètes',
        list: [
          'Optimiser les pics de performance et la récupération',
          "Suivre les performances de l'équipe d'une année sur l'autre",
          'Programmer les périodes de récupération avant les événements clés',
        ],
        desc: '"J\'ai un aperçu rapide de la forme physique des athlètes et d\'un éventuel surentraînement."',
        coach: 'Tristan Hogue : Endurokin Coaching',
        btn: 'Endurokin : Étude de cas',
      },

      workouts: {
        title: 'Entraînements directement sur la montre',
        list: ['Dépose les entraînements sur le calendrier', 'Entraînements synchronisés avec la montre', 'Appuie sur Start, suis les intervalles'],
      },
      communicate: {
        title: 'Communique avec les athlètes',
        list: ['Messagerie in-app', 'Notifications de lecture des messages'],
      },
    },
  },
  clickArea: {
    coachSignup: {
      title: 'inscription entraîneur',
      desc: "Les entraîneurs qui souhaitent constituer une équipe ou faire venir leur société d'entraînement sur le Training Hub peuvent s'inscrire en cliquant sur le lien ci-dessous.",
    },
    teamSales: {
      title: 'inscription par equipe',
      desc: "Les inscriptions par équipe sont un excellent moyen de mettre rapidement une équipe ou un groupe entier sur le Training Hub. Si vous faites partie d'une grande équipe ou d'un groupe qui souhaite passer une commande, remplissez le formulaire ci-dessous.",
    },
    loanerProgram: {
      title: 'programme de prêts',
      desc: "Le programme de prêt est conçu pour aider les équipes et les groupes à accéder au Training Hub. Inscrivez-vous ci-dessous pour une période d'essai de 4 semaines pour votre équipe. Une fois les 4 semaines écoulées, les athlètes peuvent acheter ou retourner les montres.",
    },
  },

  form: {
    requiredMessage: 'Ce champ est requis.',
    emailMessage: 'Veuillez fournir une adresse e-mail valide !',
    placeholder: 'Ta réponse',
    noWatch: "Je n'ai pas de montre COROS.",
    labels: {
      fullname: 'Quel est ton nom complet ?',
      email: 'Quelle est ton adresse e-mail ?',
      account: "Quel est l'email de ton compte COROS ?",
      teamName: 'Quel est le nom de ton équipe ?',
      teamSize: 'Quelle est la taille de ton équipe ?',
      role: "Quel est ton rôle dans l'équipe ?",
      yearsCoaching: 'Depuis combien de temps es-tu entraîneur ?',
      platform: 'Quelle plateforme de coaching utilises-tu actuellement ?',
      location: 'De quel pays et de quel État/province es-tu originaire ?',
      interestedProducts: "Quels sont les produits COROS qui t'intéressent ?",
      channel: 'Comment as-tu entendu parler de ce programme ?',
      additional: 'Commentaires supplémentaires que tu souhaites partager.',
      phone: 'Quel est ton numéro de téléphone ?',
      watch: 'Quelle montre COROS utilises-tu ?',
      athletesCount: "Combien d'athlètes entraînes-tu ?",
      coachingWebsite: "Quelle est l'adresse de ton site de coaching ?",
      credentials: "Merci d'indiquer tes références d'entraîneur.",
      watchRequestCount: 'Combien de montres souhaites-tu demander ?',
    },
  },
});

;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/workouts
/* harmony default export */ const fr_workouts = ({
  title: 'ENTRAÎNEMENTS CERTIFIÉS COROS',
  seo: {
    title: "Programmes d'entraînement certifiés par COROS",
    desc: "Une entreprise technologique de performance sportive qui aide les athlètes à s'entraîner pour donner le meilleur d'eux-mêmes.",
  },
  groupedWorkouts: [
    {
      type: 'RUNNING',
      name: 'Reed Fischer du Tinman Elite',
      desc: 'Tinman Elite est une équipe de course professionnelle basée à Boulder, CO.',
      workouts: [
        {
          title: 'Entraînement fartlek de 3 minutes',
          desc: "Commence par environ 15 minutes de jogging facile pour t'échauffer, puis démarre ton entraînement. L'entraînement est de 6 à 10x3min00 avec 90sec de récupération au seuil. Après le fartlek, fais un jogging facile jusqu'à ce que tu atteignes ton objectif de volume du jour.",
        },
      ],
    },
    {
      type: 'MULTISPORT',
      name: 'Tristan Hogue',
      desc: "Tristan est un kinésiologue de Montréal (CAN) et a travaillé avec l'équipe olympique canadienne en tant qu'entraîneur de PPG / assistant de recherche. En dehors de sa carrière professionnelle, c'est un athlète de sports de montagne qui utilise les sports d'endurance comme l'ultra running comme entraînement pour se préparer au mieux aux expéditions d'alpinisme en solitaire autour du globe comme le Matterhorn et le Denali.Pour plus d'informations, rendez-vous sur www.endurokin.com.",
      workouts: [
        {
          title: 'Entraînement de fartlek en côte 1:1',
          desc: 'Entraînement fractionné exhaustif de 90 minutes conçu pour augmenter le point de seuil ainsi que la récupération active. A faire de préférence sur un terrain vallonné (20-40m/km).',
        },
        {
          title: 'Routine de course en montagne',
          desc: "Un entraînement au poids du corps de 30 minutes conçu pour augmenter la force du bas du corps et du tronc, la stabilité et l'équilibre pour l'entraînement en montée.",
        },
      ],
    },
    {
      type: 'RENFORCEMENT',
      name: 'Grayson Murphy',
      desc: "Grayson est une athlète pro COROS et possède de nombreuses années d'expérience en tant que coureuse professionnelle de trail et de route. Pour plus d'informations sur Grayson, visite son Instagram : racin__grayson",
      workouts: [
        {
          title: 'Entraînement musculaire complet du corps',
          desc: "Une routine de musculation pour tout le corps qui met l'accent sur l'équilibre général, l'activation de la chaîne postérieure et d'autres mouvements spécifiques au trail running.",
        },
      ],
    },
    {
      type: 'RENFORCEMENT',
      name: 'Hillary Allen',
      desc: "Hillary représente COROS en tant que coureuse de trail professionnelle. Elle espère inspirer, éduquer et encourager d'autres personnes à trouver un équilibre dans leur vie.",
      workouts: [
        {
          title: 'Entraînement de musculation « Feel the Burn »',
          desc: "Ce programme axé sur les coureurs combine l'augmentation de ta fréquence cardiaque et la combustion de tes jambes. C'est l'entraînement parfait pour renforcer et cibler tes muscles spécifiques à la course.",
        },
      ],
    },
    {
      type: 'RENFORCEMENT',
      name: 'Steve House',
      desc: "Steve représente COROS en tant que grimpeur/alpiniste professionnel. Il a plus de 25 ans d'expérience en escalade et est devenu le 9e Américain à obtenir la certification AMGA-IFMGA. Sa plateforme de coaching connue sous le nom de Uphill Athlete est conçue pour renforcer et améliorer tes performances en escalade. Pour plus d'informations sur le coaching, visite https://www.uphillathlete.com/",
      workouts: [
        {
          title: 'Routine de musculation',
          desc: "Cette séance d'entraînement est conçue pour alterner entre le haut du corps et le bas du corps. Commence par effectuer ce circuit 1 à 2 fois, puis continue à ajouter du poids et des répétitions du circuit toutes les 2 semaines.",
        },
        {
          title: 'Entraînement de base "mortel"',
          desc: "Cette routine peut être réalisée en plusieurs tours. Fais un tour en tant qu'échauffement pour une séance de musculation, ou deux à trois tours en tant que séance d'entraînement autonome.",
        },
      ],
    },
    {
      type: 'RENFORCEMENT',
      name: 'Andres Marin',
      desc: "Andres est un grimpeur polyvalent, qui se concentre sur les expéditions alpines. Il est connu pour avoir représenté les États-Unis lors de la Coupe du monde d'escalade sur glace. Ses entraînements sont parfaits pour améliorer tes compétences en escalade et renforcer tes muscles pour l'escalade.",
      workouts: [
        {
          title: 'Routine de musculation',
          desc: "Cette routine de musculation se concentre sur le ciblage de ton tronc et la force du haut du corps pour t'aider à améliorer tes compétences en escalade.",
        },
      ],
    },
    {
      type: 'RUNNING',
      name: 'Ian Sharman',
      desc: 'Ian Sharman est entraîneur en chef sur www.sharmanultra.com et travaille avec des athlètes de tous niveaux dans le monde entier sur des marathons et des ultras.',
      workouts: [
        {
          title: 'Entraînement de vitesse sur 800m',
          desc: "Cette séance de vitesse de 800m est exécutée comme un prédicteur de temps sur marathon. Le temps qu'il faut pour faire le 800m doit être proche de ton temps de marathon. - Par exemple, 3m30secs par série indique un temps au marathon de 3h30m.",
        },
      ],
    },
    {
      type: 'RENFORCEMENT',
      name: 'Sage Canaday',
      desc: "Sage est athlète de sports de montagne et d'ultra-trail pour COROS Global. Il est également le fondateur et co-coach de sagerunning.com. Sa routine de renforcement est destinée à t'aider à renforcer tes muscles centraux tout en améliorant ta forme et ton efficacité en course.",
      workouts: [
        {
          title: 'Routine de renforcement musculaire',
          desc: "Une séance d'entraînement ciblée de 10-15 minutes pour ton cœur, par le coach Sage. Pour découvrir les services de coaching de Sage, visite www.SageRunning.com",
        },
      ],
    },
    {
      type: 'VÉLO',
      name: 'Gerardo Goméz',
      desc: "Gerardo Gómez est passionné par l'IRONMAN, le trail running et le sport de manière générale. Il est entraîneur de triathlon de niveau 2 certifié par la Fédération espagnole de triathlon et est également technicien cycliste certifié par la Fédération de cyclisme. Contacte-le ou suis-le sur Instagram: @preparacionfisicagp",
      workouts: [
        {
          title: 'Entraînement sur route plate',
          desc: "Des séries sur une route plate pour améliorer ta force sur le vélo, c'est-à-dire la capacité à endurer davantage dans une situation d'intensité élevée (force-résistance) et d'intensité maximale (force-vitesse).",
        },
        {
          title: 'Entraînement en montée',
          desc: 'Des séries en montée. Avec ces séries, nous cherchons à travailler notre seuil anaérobie et notre VO2max en effectuant des travaux courts de haute ou très haute intensité.',
        },
      ],
    },
    {
      type: 'MULTISPORT',
      name: 'Sally McRae',
      desc: "Sally est coureuse de trail professionnelle, coach à temps partiel, écrivaine et conférencière. Pour plus d'informations, suis Sally McRae sur Instagram @yellowrunner pour d'autres conseils d'entraînement et services de coaching.",
      workouts: [
        {
          title: 'Entraînement Power 5 de Sally McRae',
          desc: "Cette routine comporte 5 exercices ciblant tes hanches et tes fessiers et peut être réalisée en pré ou post entraînement. Et comme pour TOUTES les routines de musculation, sache que tu peux toujours modifier ou faire progresser n'importe quel exercice !",
        },
        {
          title: 'Entraînement Speed Play',
          desc: "Cette séance d'entraînement commence par 10 minutes de course facile pour t'installer dans ton rythme aérobique. Tu feras ensuite 6x30 secondes d'intervalles avec 2 minutes de repos après chaque intervalle à un effort de 7-8 sur une échelle de 1-10.",
        },
        {
          title: 'Routine de renforcement avant la course',
          desc: "Je crois fermement qu'incorporer la musculation te permettra de ne pas te blesser et de continuer à courir toute ta vie. Engage-toi à faire cela 3-4 jours par semaine et tu verras la différence !",
        },
      ],
    },
    {
      type: 'VÉLO',
      name: 'COROS Officiel',
      desc: "Entraînements cyclistes de l'équipe COROS.",
      workouts: [
        {
          title: "Longue sortie pour l'entraînement au marathon",
          desc: "Cette séance d'entraînement est conçue pour t'aider à te préparer aux efforts sur marathon sans créer la fatigue sur tes jambes qu'entraînerait une course de 3 heures. Ajoute-le à ton entraînement de course à pied pour maximiser le développement aérobique.",
        },
        {
          title: 'Développement du seuil anaérobie',
          desc: "Cette séance d'entraînement est conçue pour maximiser le développement de ton seuil de lactate. Pour ce faire, nous mettons d'abord l'accent sur ta capacité anaérobie, puis nous passons à des intervalles de seuil dédiés.",
        },
      ],
    },
    {
      type: 'RUNNING',
      name: 'COROS Officiel',
      desc: "Entraînements de course de l'équipe COROS.",
      workouts: [
        {
          title: 'Entraînement de seuil Elite',
          desc: "Cet entraînement est utilisé par l'équipe New Balance de Manchester lorsque ses athlètes de demi-fond se préparent aux épreuves de championnat. Composé d'intervalles, cet entraînement t'aidera à développer ton seuil.",
        },
        {
          title: 'Amélioration de la vitesse au 5 km',
          desc: "L'objectif de l'entraînement d'aujourd'hui est d'augmenter ta vitesse au-dessus de l'allure au 5 km et de prolonger les efforts. Assure-toi de courir plus vite que l'allure normale au 5 km car nous cherchons à augmenter ta vitesse.",
        },
        {
          title: "30 minutes d'endurance fondamentale avec accélérations",
          desc: "Cette séance d'entraînement est conçue pour être exécutée à une allure de base, mais inclut des foulées/accélération pour améliorer l'efficacité de la course. Augmente le rythme pendant 30 secondes, puis reviens à ton rythme facile d'endurance aérobique !",
        },
        {
          title: "45 minutes d'endurance fondamentale avec accélérations",
          desc: "Cette séance d'entraînement est conçue pour être exécutée à une allure de base, mais inclut des foulées/accélération pour améliorer l'efficacité de la course. Augmente le rythme pendant 30 secondes, puis reviens à ton rythme facile d'endurance aérobique !",
        },
        {
          title: "Une heure d'endurance fondamentale avec accélérations",
          desc: "Cette séance d'entraînement est conçue pour être exécutée à une allure de base, mais inclut des foulées/accélération pour améliorer l'efficacité de la course. Augmente le rythme pendant 30 secondes, puis reviens à ton rythme facile d'endurance aérobique !",
        },
        {
          title: 'Entraînement de course à pied Tabata',
          desc: "Tabata est une forme populaire d'exercice HIIT qui peut stimuler efficacement ta forme physique et ta capacité à courir. L'intensité maximale est requise pour chaque intervalle de 20 secondes afin de garantir le bénéfice de l'entraînement.",
        },
        {
          title: 'Fartlek à intervalle court',
          desc: "Cette séance d'entraînement fartlek nécessite des efforts moyens à durs pour maintenir ta VO2 max et ton seuil de lactate.",
        },
        {
          title: 'Fartlek 30 minutes',
          desc: "Cette séance d'entraînement de 30 minutes comprend différentes durées pour chaque intervalle afin d'améliorer ta vitesse et ton endurance. N'hésite pas à ajuster le rythme et la durée en fonction de ta condition physique.",
        },
        {
          title: 'Entraînement de fartlek pour le marathon',
          desc: "Cours à un rythme plus rapide que ton rythme au marathon pour cet entraînement afin d'améliorer ta vitesse et ton endurance. Commence par un jogging facile. Puis accélère ton rythme pendant 1 minute. Ramène le rythme à la normale pendant chaque pause.",
        },
        {
          title: "Entraînement d'intervalles en pyramide",
          desc: "Après l'échauffement, effectue 6 intervalles de distances variées et prends 90 secondes de repos entre chaque. Ajuste l'intensité et la cible en fonction de ta condition physique.",
        },
      ],
    },
  ],
});

;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/progress.js
/* harmony default export */ const fr_progress = ({
  productName: 'Mug Tommy Caldwell',
  title: 'Mug Exclusif Tommy Caldwell',
  desc: 'Prends une gorgée de motivation avec la tasse isotherme Tommy Caldwell Pain is Progress de COROS.',
  desc1: "Il est difficile de surmonter les d\xE9fis physiques et mentaux qui accompagnent l'entra\xEEnement, la comp\xE9tition et la poursuite de tes r\xEAves. Il est naturel d'\xE9viter l'inconfort, mais chaque fois que tu repousses tes limites, tu deviens plus fort, plus rapide et plus habile. Chaque fois que tu r\xE9cup\xE8res, tu construis la r\xE9silience et la d\xE9termination qui transformeront tes r\xEAves en r\xE9alit\xE9.",
  desc2: "Personne ne le sait mieux que Tommy Caldwell. Apr\xE8s avoir perdu son index dans un accident de scie \xE0 bois en 2001, Tommy, 23 ans, a patiemment travaill\xE9 malgr\xE9 une douleur atroce pour se hisser \xE0 nouveau au sommet du monde de l'escalade professionnelle - en r\xE9alisant la toute premi\xE8re free climb du Dawn Wall et en \xE9tablissant le record de vitesse actuel sur The Nose. ",
  desc3: "Prends une gorg\xE9e de motivation \xE0 chaque fois que tu t'entra\xEEnes avec ce mug exclusif, limit\xE9 \xE0 seulement 5000 exemplaires dans le monde. L'empreinte embl\xE9matique de la main de Tommy est un rappel qu'avec le bon \xE9tat d'esprit, la douleur m\xE8ne au progr\xE8s.",
  productDetailTitle: 'Détails du produit',
  detailInfo1: 'Acier inoxydable 18/8 (304) à double paroi',
  detailInfo2: 'Conception isotherme anti-brûlure',
  detailInfo3: 'Capacité : 12,85 fl.oz / 0,38 L',
  detailInfo4: 'Poids : 9 oz / Dimensions : Ø 3.3" x 4.4" (en anglais)',
  detailInfo5: 'Anti-rouille et va au lave-vaisselle',
  detailInfo6: 'Couvercle à ouverture buccale et joint amovible',
  detailInfo7: 'Marquage gravé au laser sans solvant',
  detailInfo8: 'Sans bisphénol A (BPA)',
  commit2ProgressTitle: 'Engage toi à progresser',
  commit2ProgressDesc1: "Les progr\xE8s se produisent lorsque l'on s'engage \xE0 atteindre un objectif. Alors quels objectifs t\u2019engages-tu \xE0 atteindre en 2023 ? Donne-toi une motivation suppl\xE9mentaire en te fixant des objectifs pour lesquels tu es pr\xEAt \xE0 souffrir cette ann\xE9e. Si participer \xE0 une course est l'un de tes objectifs, COROS remboursera tes frais d'inscription une fois la course r\xE9alis\xE9e dans la limite de 200\u20AC et de 5 personnes. Pour cela, donne nous simplement tes objectifs 2023 en expliquant pourquoi ils sont importants \xE0 tes yeux. Tu peux participer sur Instagram, Facebook et Strava en taguant COROS, et en utilisant le hashtag   ",
  commit2ProgressTag: '#painisprogress',
  commit2ProgressDesc2: "L'achat du mug n'est pas n\xE9cessaire pour avoir une chance de gagner, tous les posts correctement tagu\xE9s avant le 28 f\xE9vrier seront pris en compte pour le tirage au sort. Quels que soient tes objectifs et la mani\xE8re dont tu choisis de t'engager, nous te souhaitons de r\xE9ussir \xE0 les atteindre."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/kilianEdition.js
/* harmony default export */ const fr_kilianEdition = ({
  productName: 'COROS APEX 2 Pro',
  title: 'Montre GPS COROS APEX 2 Pro Edition Kilian Jornet',
  desc: 'Pour les athlètes outdoor qui voyagent vite et léger.',
  sloganTitle: 'Une collaboration de classe mondiale',
  sloganDesc1: "Kilian Jornet est sans doute le plus grand athl\xE8te de sports de montagne de tous les temps, une l\xE9gende vivante qui concilie courage, patience et humilit\xE9. Qu'il s'agisse d'\xE9tablir le record du parcours de l'UTMB ou de r\xE9aliser deux ascensions \xE9poustouflantes du Mont Everest en une semaine, Kilian d\xE9tient certains des titres les plus prestigieux de l'ultrarunning. ",
  sloganDesc2: "COROS est fier de s'associer \xE0 Kilian et \xE0 NNormal pour pr\xE9senter la COROS APEX 2 Pro Kilian Jornet en \xE9dition limit\xE9e. Vous b\xE9n\xE9ficierez de la technologie d'entra\xEEnement et de l'exp\xE9rience de navigation de COROS, ainsi que du design personnalis\xE9 de la montre et des accessoires pr\xE9f\xE9r\xE9s de Kilian, une collaboration unique et in\xE9dite.",
  slogan2Title: 'Les couleurs de la montagne',
  slogan2Desc: "En hommage aux montagnes norv\xE9giennes aux sommets enneig\xE9s et \xE0 la majestueuse vall\xE9e de Romsdalen, la patrie d'adoption de Kilian, cette montre en \xE9dition limit\xE9e arbore un coloris blanc et noir vif et percutant. ",
  twoisbetter: "Deux valent mieux qu'un",
  twoisbetterDesc: "L'APEX 2 Pro édition Kilian Jornet est livrée avec deux bracelets, au lieu du bracelet unique fourni avec l'APEX 2 Pro originale. Vous pouvez ainsi choisir ce qui convient le mieux à votre prochaine aventure entre le bracelet classique en silicone souple ou le bracelet léger en nylon.",
  capItOff: "Cap sur l'essentiel",
  capItOffDesc: "Chaque montre est livr\xE9e avec une casquette <a class=\"kilianEdition-common-link2\" href=\"https://www.nnormal.com/?utm_source=display&utm_medium=COROS&utm_content=COROS-Site&utm_term=us\">NNormal</a> d'une valeur de 35 euros faite pour la course \xE0 pied, l\xE9g\xE8re et ventil\xE9e. NNormal est la marque de sport de Kilian d\xE9di\xE9e \xE0 la simplicit\xE9 et \xE0 la durabilit\xE9. Unis par la m\xEAme passion pour l\u2019exploration des grands espaces et un engagement envers la qualit\xE9, la fonctionnalit\xE9 et la durabilit\xE9, nous sommes honor\xE9s de travailler avec NNormal pour vous proposer des produits auxquels nous croyons fermement. \n  Que vous couriez dans les fjords de Norv\xE8ge comme Kilian ou que vous vous lanciez sur les routes pour votre prochain marathon, adoptez le look de Kilian avec cette nouvelle casquette \xE9l\xE9gante.",
  getcoached: 'Fais toi coacher par Kilian',
  getcoachedDeadline: "Date limite d'inscription : 17 février 2023.",
  getcoachedDesc: "Faire appel \xE0 un coach fait une \xE9norme diff\xE9rence en termes \n  d'entra\xEEnement. Mais que se passerait-il si vous \xE9tiez coach\xE9 \n  par le meilleur athl\xE8te de sports de montagne au monde ? \n  En tant que propri\xE9taire de la COROS APEX 2 Pro Kilian Jornet \n  Edition, vous aurez l'opportunit\xE9 unique d'\xEAtre coach\xE9 par \n  Kilian pendant un programme d'entra\xEEnement de 12 semaines, \n  exclusivement via le COROS Training Hub. Seules 25 places sont \n  disponibles. La s\xE9lection sera bas\xE9e sur des crit\xE8res \xE0 remplir \n  lors de la candidature. ",
  getcoachedDescMobile: "Faire appel \xE0 un coach fait une \xE9norme diff\xE9rence en \n  termes d'entra\xEEnement. Mais que se passerait-il si \n  vous \xE9tiez coach\xE9 par le meilleur athl\xE8te de sports \n  de montagne au monde ? Vous aurez l'opportunit\xE9 \n  unique d'\xEAtre coach\xE9 par Kilian pendant un \n  programme d'entra\xEEnement de 12 semaines, \n  exclusivement via le COROS Training Hub. Seules \n  25 places sont disponibles. La s\xE9lection sera bas\xE9e \n  sur des crit\xE8res \xE0 remplir lors de la candidature.",
  reachEverySummit: 'Atteignez tous les sommets',
  reachEverySummitDesc: "Conçu pour les performances sur tous types de terrain, l'APEX 2 Pro est doté de technologies révolutionnaires pour Kilian afin d’atteindre vos objectifs les plus ambitieux. Avec un extérieur encore plus résistant, une antenne redessinée, un capteur optique de nouvelle génération et une autonomie plus longue, vous pouvez aller vite et loin. ",
  nomatterwhat: "Quoi qu'il arrive, \ntu seras préparé",
  nomatterwhatDesc: "Avec la beaut\xE9 du plein air vient aussi le risque. Le temps orageux,\n    le mal de l'altitude, l'obscurit\xE9, la d\xE9shydratation - ce sont toutes \n    des r\xE9alit\xE9s potentielles d'un trekking en pleine nature sauvage. \n    L'APEX 2 Pro te pr\xE9parent \xE0 toutes les situations, afin que tu \n    puisses rester en s\xE9curit\xE9 et inform\xE9 pendant que \n    tu fonces vers le sommet.",
  nomatterwhatDescMobile: "Avec la beaut\xE9 du plein air vient aussi le risque. Le \n  temps orageux, le mal de l'altitude, l'obscurit\xE9, la \n  d\xE9shydratation - ce sont toutes des r\xE9alit\xE9s \n  potentielles d'un trekking en pleine nature sauvage. \n  L'APEX 2 Pro te pr\xE9parent \xE0 toutes les situations, \n  afin que tu puisses rester en s\xE9curit\xE9 et inform\xE9 \n  pendant que tu fonces vers le sommet.",
  findYourPath: 'Trouvez votre voie',
  findYourPathDesc: "Kilian, qui se décrit lui-même comme un athlète de sports de montagne à 360°, exige le meilleur de la technologie de navigation. C'est pourquoi il a choisi la toute nouvelle APEX 2 Pro comme montre. Grâce à la cartographie mondiale hors ligne COROS, aux points de contrôle, à la planification d'itinéraires personnalisés et bien plus encore, vous pouvez aller n'importe où en plein air en toute confiance.",
  findYourPathLearnMore: 'En savoir plus sur technologies et fonctionnalités',
  applyTitle: "Acc\xE8s exclusif: \n  Le camp d'entra\xEEnement \n  virtuel de 12 semaines \n  de Kilian Jornet",
  applyTitleMobile: "Acc\xE8s exclusif: \n  Le camp d'entra\xEEnement \n  virtuel de 12 semaines \n  de Kilian Jornet",
  applyDesc: "Pour la toute premi\xE8re fois, Kilian s'est associ\xE9 \xE0 COROS pour d\xE9velopper un camp d'entra\xEEnement virtuel gratuit de 12 semaines con\xE7u pour les propri\xE9taires de COROS APEX 2 Pro Kilian Jornet qui veulent aller plus loin et plus vite. Dans le cadre de notre collaboration avec NNormal les participants s\xE9lectionn\xE9s recevront \xE9galement un kit d'entra\xEEnement NNormal gratuit, d'une valeur allant jusqu'\xE0 350 \u20AC. Seules 25 places sont disponibles. La s\xE9lection sera bas\xE9e sur des crit\xE8res \xE0 remplir lors de la candidature. ",
  applyDeadline: "Date limite d'inscription : 17 février 2023.",
  applyBtn2: 'Postuler maintenant',
  applyFlow1Date: '18 février 2023 à 8h59',
  applyFlow1Title: 'Date limite de candidature',
  applyFlow1Desc: 'Trouvez l’ID produit à 6 chiffres de votre montre COROS APEX 2 Pro Kilian Jornet et utilisez-le pour soumettre votre candidature sur',
  applyFlow2Date: '28 février 2023 à 8h59',
  applyFlow2Title: 'Sélection',
  applyFlow2Desc: 'COROS sélectionnera, conjointement avec Kilian, 25 athlètes en fonction de leurs capacités et de leurs objectifs de performance. Le programme est conçu pour des athlètes de tous niveaux. Le programme est entièrement gratuit de la candidature à la participation.',
  applyFlow3Date: '6 mars - 28 mai 2023',
  applyFlow3Title: "Programme d'entraînement",
  applyFlow3Desc: "Sessions vidéo en groupe avec Kilian avant le début du camp. Recevez régulièrement des commentaires et des conseils d'entraînement de Kilian via le COROS Training Hub.",
  limitedProduction: 'Production limitée',
  limitedProductionDesc: "Seuls 5 000 packs APEX 2 Pro Kilian \n    Jornet ont \xE9t\xE9 produits dans le monde. \n    Procurez-vous ce pack exclusif avant \n    qu'il ne soit \xE9puis\xE9, afin de pouvoir \n    exploiter l'alpiniste qui sommeille \n    en vous."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/careers.js
/* harmony default export */ const fr_careers = ({
  pageTitle: '加入COROS',
  desc: "\u6211\u4EEC\u8BDA\u631A\u6B22\u8FCE\u4F18\u79C0\u7684\u4F60\u4EEC\u52A0\u5165\uFF0CCOROS \u79C9\u6301\u7740\u6210\u4E3A\u6700\u4F18\u79C0\u7684\u8FD0\u52A8\u79D1\u6280\u516C\u53F8\uFF0C\u901A\u8FC7\u6570\u636E \u6280\u672F\u63A8\u52A8\u8FD0\u52A8\u8BAD\u7EC3\u53D8\u9769\u7684\u613F\u666F\uFF0C\u5E0C\u671B\u4E0E\u5927\u5BB6\u4E00\u8D77\u575A\u6301\u957F\u671F\u3001\u7406\u6027\u3001\u5766\u8BDA\u3001\u8BDA\u4FE1\u3001\u521B\u65B0\u3001 \u6210\u957F\u7684\u4EF7\u503C\u89C2\uFF0C\u5EFA\u7ACB\u7B26\u5408 COROS\n  \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002\u5BF9\u4EC0\u4E48\u662F\u201CCOROS \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u201D\u611F\u5174\u8DA3?\u521A\u597D\uFF0C\u6211\u4EEC\u4E5F\u5BF9\u4F18\u79C0\u7684\u4F60\u611F\u5174\u8DA3\u3002",
  visionTitle: '使命与投递简历：',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/ek-giveaway.js
/* harmony default export */ const fr_ek_giveaway = ({
  seo: {
    title: 'Gagnez une montre GPS COROS PACE 2 Édition Eliud Kipchoge !',
    desc: 'Inscrivez-vous pour avoir une chance de gagner le paquet ultime de course. Le gagnant sera choisi le 1er mai.'
  },
  intro: {
    title: 'UTILISÉ PAR LE G.O.A.T',
    desc: "Pr\xE9pare-toi \xE0 ressentir la sensation de courir comme un vrai champion ! En l'honneur de la premi\xE8re participation d'Eliud Kipchoge au marathon de Boston, dans sa qu\xEAte des six marathons \xAB major \xBB, nous offrons le dernier mod\xE8le invendu de la COROS PACE 2 Eliud Kipchoge. Cette \xE9dition sp\xE9ciale a \xE9t\xE9 port\xE9e par Eliud pendant des centaines d'heures d'entra\xEEnement, a franchi la ligne d'arriv\xE9e pour \xE9tablir le record du monde \xE0 Berlin, a ramen\xE9 l'or \xE0 Tokyo, et rappelle \xE0 des milliers d'utilisateurs COROS \xE0 travers le monde qu'\"aucun \xEAtre humain n'est limit\xE9\". Pour faire honneur au don de ce morceau d'histoire de la course \xE0 pied, nous nous sommes associ\xE9s au partenaire d'Eliud, la l\xE9gendaire NN Running Team, pour offrir le nec plus ultra de la course \xE0 pied :"
  },
  text2: "COROS PACE 2 Eliud Kipchoge Edition | Maillot d\xE9dicac\xE9 | Gourde d\xE9dicac\xE9 | Livre d\xE9dicac\xE9",
  form: {
    title: "N'ATTENDS PLUS",
    desc: 'Renseigne juste ton adresse email ci-dessous pour avoir une chance de gagner ce package exclusif !'
  },
  notice: "*En saisissant ton adresse e-mail pour participer \xE0 ce concours, tu acceptes de recevoir des communications marketing de la part de COROS et de NN Running. Ton adresse \xE9lectronique peut \xEAtre communiqu\xE9e \xE0 ces soci\xE9t\xE9s \xE0 des fins de commercialisation de leurs produits et services. Si tu souhaites te d\xE9sinscrire de ces communications, tu peux le faire \xE0 tout moment en suivant les instructions fournies dans les e-mails.",
  emailPlaceholder1: 'Ta réponse',
  emailPlaceholder2: 'Cet événement est terminé',
  emailError1: 'Veuillez fournir une adresse e-mail valide.',
  emailError2: "L'adresse e-mail est obligatoire.",
  submittedError: 'Veuillez rafraîchir la page si vous souhaitez soumettre un nouveau formulaire.',
  successMsg: 'Votre réponse a été enregistrée.',
  submit: 'SOUMETTRE',
  oops: 'Oups !',
  confirm: 'Confirmer',
  goodLuck: 'Bonne chance !',
  emailUsed: 'Cet e-mail a déjà soumis une réponse.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/app3-langdingpage.js
/* harmony default export */ const fr_app3_langdingpage = ({
  title: 'MISE À JOUR GLOBALE',
  seo: {
    title: "Mise à jour COROS d'avril 2023",
    desc: "Notre dernière mise à jour ajoute encore plus de nouveautés pour améliorer la façon dont tu t'entraines et explores avec ta montre COROS."
  },
  intro: "Notre nouvelle version d'avril 2023 apporte une application redessin\xE9e et des am\xE9liorations significatives \xE0 l'ensemble de la solution d'entra\xEEnement COROS avec un tout nouveau syst\xE8me d'\xE9valuation de la forme en course \xE0 pied, un EvoLab am\xE9lior\xE9, une toute nouvelle page Explore, un gestionnaire de localisation et de cartes, et bien d'autres am\xE9liorations. Que tu t'entraines pour atteindre un objectif ou que tu explores la nature, ta montre GPS vient d'\xEAtre am\xE9lior\xE9e.",
  progress: {
    title: "UNE PAGE PROGRESSION\n     TOUTE NEUVE",
    desc: "S'entra\xEEner, c'est progresser. D\xE8s l'ouverture de l'application, la toute nouvelle page Progression t'aide \xE0 hi\xE9rarchiser tes objectifs en te donnant un acc\xE8s instantan\xE9 \xE0 tes activit\xE9s r\xE9centes, aux donn\xE9es de suivi du sommeil, \xE0 l'\xE9tat de l'entra\xEEnement et \xE0 bien d'autres choses encore. Tu peux \xE9galement personnaliser ton affichage pour donner la priorit\xE9 aux informations dont tu as le plus besoin.",
    deepData: {
      title: 'Approfondis tes données',
      desc: "Il te suffit d'appuyer sur l'une des cartes de ta page de progression pour acc\xE9der \xE0 des d\xE9tails suppl\xE9mentaires et \xE0 des donn\xE9es historiques qui te permettront d'\xE9valuer ta progression au fil du temps."
    }
  },
  optimize: {
    title: 'OPTIMISE TON ENTRAÎNEMENT',
    desc: "De la compréhension de tes mesures à la planification de ta prochaine séance d'entraînement, notre nouvelle application te permet de prendre le contrôle de ton entraînement et de ta forme physique.",
    status: {
      title: "Niveau d'entraînement",
      desc: "Grâce à une combinaison de données relatives à la condition physique et à l'impact de la charge, ton état d'entraînement fournit un instantané de ta condition physique afin que tu puisses facilement voir si elle s'améliore ou diminue, et si tu gères bien la fatigue.",
      list: [{
        title: 'Excessif',
        desc: 'Un entraîenment récente peut être excessif.'
      }, {
        title: 'Optimisé',
        desc: 'La condition physique augmente progressivement'
      }, {
        title: 'Maintien',
        desc: "Charge d'entraînement récente modérée, maintien de la condition physique"
      }, {
        title: 'Reprise',
        desc: "L'entraînement récent augmente progressivement ton adaptation à une charge d'entraînement plus élevée."
      }, {
        title: 'Récupération',
        desc: 'Prêt pour des efforts de haute performance'
      }, {
        title: 'Diminution',
        desc: 'La condition physique diminue rapidement.'
      }]
    },
    weekly: {
      title: "Charge d'entraînement hebdomadaire",
      desc: "Comme la plupart des athlètes planifient leurs séances d'entraînement sur une base hebdomadaire, tu peux désormais avoir un aperçu instantané du suivi de ta charge d'entraînement afin de rester à l'abri des blessures ou d'atteindre des sommets lorsque tu en as besoin. Tu peux également visualiser le suivi de tes objectifs à long terme par mois ou par an."
    },
    enhanced: {
      title: "Planification améliorée de l'entraînement",
      list: [{
        title: "Visualise ton calendrier d'entraînement",
        desc: "Consulte rapidement les séances d'entraînement que tu as planifiées pour la semaine. "
      }, {
        title: "Crée de nouvelles séances d'entraînement",
        desc: "Accède à ton calendrier d'entraînement pour ajouter de nouvelles séances d'entraînement."
      }, {
        title: "Modifie les séances d'entraînement planifiées",
        desc: "Fais glisser et dépose les séances d'entraînement planifiées en cours de route."
      }]
    },
    running: {
      title: 'Niveau de course',
      desc: "Chaque coureur est différent, et chaque coureur a des forces et des faiblesses différentes. Le tout nouveau système Running Fitness t'aidera à comprendre tes performances dans quatre domaines fondamentaux de la course à pied : Endurance, Seuil, Vitesse et Sprint"
    }
  },
  navigation: {
    title: 'UNE NAVIGATION SIMPLIFIÉE',
    desc: "Que tu cherches un nouveau sentier ou que tu explores les rues d'une nouvelle ville, nos tout nouveaux outils de navigation t'aideront à trouver le bon chemin et à y rester. ",
    subtitle: 'LA TOUTE NOUVELLE PAGE EXPLORER',
    subdesc: 'Que tu coures ou que tu fasses du vélo, trace ton chemin, visualise la distance, vérifie le dénivelé et synchronise avec ta montre grâce à notre page Explorer simple et intuitive.',
    list: [{
      title: 'Appuie pour cliquer',
      desc: 'Appuie simplement sur la carte pour tracer ton itinéraire sur des chemins connus, ou passe en mode manuel si tu es en territoire inconnu.'
    }, {
      title: 'Courir ou rouler',
      desc: "La page Explorer propose les deux options. Choisis la tienne pour créer l'itinéraire parfait."
    }, {
      title: 'Modifier ton itinéraire',
      desc: "Une gomme te permet de supprimer et de modifier n'importe quelle partie de ton itinéraire."
    }],
    locations: {
      title: 'Lieux et points de repères',
      list: [{
        title: "Création d'itinéraires",
        desc: 'Recherche des lieux et génére automatiquement un itinéraire.'
      }, {
        title: 'Icônes personnalisées',
        desc: 'Enregistre des lieux avec des icônes personnalisées.'
      }, {
        title: 'Points de passage',
        desc: 'Ajoute des points de repère aux itinéraires nouveaux ou existants.'
      }]
    },
    manage: {
      title: 'Gérer les itinéraires et les lieux',
      desc: 'Accéde à ta Collection à partir de la page Explorer pour sélectionner rapidement des itinéraires ou des lieux enregistrés. ',
      list: ['Affiche et gère tes itinéraires enregistrés avec un profil de distance et de dénivelé.', 'Affiche et gère tes lieux enregistrés avec des icônes, des adresses et des dénivelés personnalisés. ', 'Applique des filtres en fonction du sport, de la distance, de la région et de la source.']
    },
    onWirst: {
      title: 'Navigation au poignet',
      desc: "Synchronise tes itinéraires avec n'importe quelle montre COROS compatible* pour naviguer sur ta montre de manière fluide à l'aide d'un seul bouton. à l'aide d'un seul bouton. Utilise la molette pour effectuer un zoom avant et arrière sur la carte, et utilise l'écran tactile** pour te déplacer d'une zone à l'autre.",
      note1: "*La PACE 1 et le KIPRUN 500 ne prennent pas en charge la navigation sur la montre. Mets \xE0 jour ta PACE 2 avec le dernier micrologiciel pour b\xE9n\xE9ficier des fonctions de navigation en fil d'Ariane. ",
      note2: "**PACE 2 ne prend pas en charge l'\xE9cran tactile"
    }
  },
  more: {
    title: 'ENCORE PLUS DE MISES À JOUR',
    list: [{
      title: 'Navigation sur PACE 2.',
      desc: "Tu peux désormais naviguer avec le fil d'Ariane sur PACE 2."
    }, {
      title: 'Suivi du sommeil.',
      desc: 'Une nouvelle répartition améliorée de tes données de sommeil permet de le comprendre plus facilement.'
    }, {
      title: 'Récupération.',
      desc: 'Nous avons ajouté une vue de la tendance de la récupération à long terme et une recommandation sur le délai de récupération.'
    }, {
      title: 'Gestion des cartes hors ligne.',
      desc: "T\xE9l\xE9charge ou supprime facilement les cartes de ta montre COROS* directement depuis l'application. ",
      note: "*Disponible uniquement pour les montres COROS disposant du WiFi."
    }, {
      title: "Test d'aptitude à la course à pied.",
      desc: "Notre nouveau test d'aptitude à la course à pied est un moyen rapide d'évaluer ou de réévaluer ton niveau de forme physique."
    }, {
      title: "Obtenir de l'aide.",
      desc: "Tu peux désormais soumettre une demande d'assistance produit directement à partir de l'application."
    }]
  },
  footer: {
    title: 'DÉMARRER LE TEST',
    // desc: "Clique ci-dessous pour bénéficier d'un accès un avant-première à toutes nos nouvelles fonctionnalités dans le cadre du bêta test public d'avril 2023.",
    btn: 'Mettre à jour'
  },
  header: {
    desc: 'Clique ci-dessous pour avoir accès en avant première \nà la version bêta publique qui sortira le 24 avril.',
    note: 'Sortie officielle dans quelques semaines en fonction du Beta test.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/apex2credit.js
/* harmony default export */ const fr_apex2credit = ({
  pageTitle: 'COROS APEX 2 & APEX 2 Pro demande de crédit de remboursement',
  pageDesc: 'La demande de crédit sera ouverte du 20 avril 2023 au 31 mai 2023.',
  errors: {
    430: "Malheureusement, l'email que vous avez saisi n'est pas reconnu. Mets \xE0 jour l'email du compte sur ton application COROS et actualise cette page pour red\xE9marrer l'application. Pour plus d'aide, lis cet article ou contacte support.fr@coros.com.",
    420: "Malheureusement, nous ne sommes pas en mesure de v\xE9rifier l'ID de cette montre. Veuillez contacter support@coros.com pour obtenir de l'aide",
    410: "Malheureusement, l'ID de la montre n'est pas \xE9ligible \xE0 ce programme ou ne correspond pas au mod\xE8le de la montre. Veuillez r\xE9essayer. Si tu penses qu'il s'agit d'une erreur, contacte support.fr@coros.com pour obtenir de l'aide.",
    440: "Malheureusement, la montre n'est pas li\xE9e \xE0 un email valide. Veuillez ajouter l'email du compte \xE0 votre application COROS et actualiser cette page pour red\xE9marrer l'application. Pour obtenir de l'aide, lisez cet article ou contactez support.fr@coros.com.",
    450: "Malheureusement, ta montre a \xE9t\xE9 activ\xE9e apr\xE8s l'ajustement des prix et n'est pas couverte par le cr\xE9dit. Si tu penses qu'il s'agit d'une erreur, contacte support.fr@coros.com pour obtenir de l'aide.",
    510: "Malheureusement, ta montre a \xE9t\xE9 activ\xE9e en dehors des lieux \xE9ligibles et n'es pas couverte par le cr\xE9dit. Si tu penses qu'il s'agit d'une erreur, contacte support@coros.com pour obtenir de l'aide.",
    520: "Malheureusement, ta montre semble \xEAtre d\xE9sactiv\xE9e, un \xE9chantillon ou en pr\xEAt. Si tu penses qu'il s'agit d'une erreur, contacte support.fr@coros.com pour obtenir de l'aide.",
    530: "Malheureusement, nous avons d\xE9j\xE0 re\xE7u une demande pour cet ID de montre. Si tu penses qu'il s'agit d'une erreur, contacte support.fr@coros.com pour obtenir de l'aide.",
    540: "Oops! Quelque chose s'est mal pass\xE9. Veuillez contacter support@coros.com pour obtenir de l'aide"
  },
  apply_successfully: "Merci d'avoir soumis ta demande. Un email contenant le code de cr\xE9dit te sera envoy\xE9 dans les plus brefs d\xE9lais. Merci d'avoir choisi COROS, et bon shopping !",
  creditDescs: ["A partir du 20 avril 2023, COROS ajuste les prix de vente de ses montres APEX 2 et APEX 2 Pro sur les march\xE9s utilisant les devises suivantes : USD, EUR, GBP et CAD. En raison d'\xE9volution du taux de change de l'USD, nous pensons qu'il est juste d'ajuster nos prix afin de rendre nos produits plus comp\xE9titifs et de r\xE9percuter les \xE9conomies r\xE9alis\xE9es sur nos consommateurs.", "Pour montrer notre soutien et remercier ceux qui ont achet\xE9 une APEX 2 ou une APEX 2 Pro avant le 20 avril 2023, nous offrons un cr\xE9dit sur FR.COROS.com pour compenser cet ajustement de prix. Pour v\xE9rifier si tu es \xE9ligible et obtenir des instructions sur la fa\xE7on de faire une demande, tu peux consulter les guidelines ci-dessous."],
  whatYouNeedToKnow: "CE QU'IL FAUT SAVOIR",
  whatYouNeedToKnowItems: [{
    title: 'Eligibilité',
    desc: "\u2022 Ce programme est valable pour les propri\xE9taires de montres COROS APEX 2/2 Pro dans les march\xE9s utilisant les devises suivantes : USD, EUR, GBP et CAD.\n    \u2022 Les montres doivent avoir \xE9t\xE9 achet\xE9es aupr\xE8s d'un revendeur COROS agr\xE9\xE9 avant le 20 avril 2023. \n    \u2022 La montre ne peut pas \xEAtre d\xE9fectueuse, un \xE9chantillon, en pr\xEAt, ou dans un autre \xE9tat jug\xE9 in\xE9ligible par COROS."
  }, {
    title: 'Durée',
    desc: "La demande de cr\xE9dit est ouverte du 20 avril 2023 au 31 mai 2023."
  }, {
    title: 'Détails',
    desc: "<ul>\n      <li class=\"mb-15\">\n        Les cr\xE9dits de remboursement seront \xE9mis sous forme de codes promotionnels applicables sur les sites <a class=\"underline hover:underline\" href=\"https://coros.com\">\n        COROS.com\n      </a>  d\xE9sign\xE9s. Par exemple, si tu re\xE7ois un code pour la France, il ne pourra \xEAtre utilis\xE9 que pour des commandes sur <a class=\"underline hover:underline\" href=\"https://fr.coros.com\">\n        fr.coros.com\n      </a>. Une fois le code g\xE9n\xE9r\xE9, il ne peut plus \xEAtre mis \xE0 jour.  \n      </li>\n      <li>Cr\xE9dit pour les utilisateurs d'APEX 2 : 50 USD | 80 EUR | 70 GBP | 80 CAD</li>\n      <li>Cr\xE9dit pour les utilisateurs d'APEX 2 Pro : 50 USD | 80 EUR | 50 GBP | 100 CAD</li>\n      <li>Cr\xE9dit pour les utilisateurs d'APEX 2 Pro KJ : 50 USD | 50 EUR | 50 GBP | 100 CAD</li>\n      <li>\n      Sites web: \n        <a class=\"underline hover:underline\" href=\"https://us.coros.com\">\n          US\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://es.coros.com\">\n          ES\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://fr.coros.com\">\n          FR\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://uk.coros.com\">\n          UK\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://CA.coros.com\">\n          CA\n        </a>\n      </li>\n    </ul>"
  }, {
    title: 'Demander et utiliser son crédit',
    desc: "Le code sera envoy\xE9 \xE0 l'email li\xE9 \xE0 ton compte COROS. Si tu n'utilises pas d'email pour te connecter \xE0 ton application COROS, suis <a class=\"underline hover:underline\" target=\"_blank\" href=\"https://support.coros.com/hc/fr/articles/360046691111-Comment-mettre-%C3%A0-jour-l-adresse-%C3%A9lectronique-de-votre-compte-COROS\">ces instructions</a> pour lier l'email \xE0 ton compte. Chaque montre est \xE9ligible \xE0 un code qui expire apr\xE8s 23h59 (PST), le 31 d\xE9cembre 2023. "
  }, {
    title: "Obtenir de l'aide",
    desc: "Si tu rencontres des difficult\xE9s pour soumettre ta demande ou pour recevoir le cr\xE9dit, contacte support.fr@coros.com pour obtenir de l'aide. "
  }],
  applyForCredit: 'DEMANDER UN CRÉDIT',
  watchId: "ID de la montre",
  watchIdTips: "Tu n'arrives pas \xE0 trouver l'identifiant de ta montre ?",
  watchModel: "Mod\xE8le de montre",
  watchModelTIps: "Tu ne trouves pas le mod\xE8le de ta montre ?",
  region: "S\xE9lectionne ton pays",
  regionTips: "Le pays ne peut pas \xEAtre mise \xE0 jour apr\xE8s la soumission.",
  email: "Email du compte COROS",
  submit: 'SOUMETTRE',
  inputPlaceholder: "Entrer l'identifiant",
  selectPlaceholder: "S\xE9lectionner le mod\xE8le",
  emailTips: ["L'email ci-dessous est li\xE9 \xE0 ta montre d'apr\xE8s le syst\xE8me.", "Pour des raisons de s\xE9curit\xE9, saisis \xE0 nouveau ton adresse \xE9lectronique pour continuer."],
  watchIdGuide: {
    title: "Tu peux localiser l'identifiant \xE0 6 chiffres de ta montre APEX 2/2 Pro de 2 fa\xE7ons.",
    descs: ["Sur l'application COROS > page Appareil > clique sur ta montre > l'ID se trouve en haut de la page.", "Sur ta montre > Syst\xE8me > Autres r\xE9glages > Infos sur l'appareil > ID de l'appareil."]
  },
  watchModelGuide: {
    descs: ["Dans l'application COROS > page Appareil.", "Pour les utilisateurs d'APEX 2 Pro, v\xE9rifie la couleur de la lunette et du corps pour d\xE9terminer s'il s'agit de l'\xE9dition KJ."]
  },
  'us': 'États-Unis',
  'fr': 'France',
  'es': 'Espagne',
  'uk': 'Royaume-Uni',
  'ca': 'Canada',
  'validOn': 'valable sur',
  'shipToUs': ' - livre dans la plupart des pays',
  'shipToFr': ' - livre en France',
  'shipToEs': ' - livre en Europe',
  'shipToUk': ' - livre au Royaume-Uni',
  'shipToCa': ' - livre au Canada',
  afs: {
    loading: 'Chargement...',
    slide: 'Glisser pour continuer',
    success: "Vous pouvez passer \xE0 l'\xE9tape suivante.",
    error: 'Erreur de réseau. Veuillez réessayer.',
    fail: 'La vérification a échoué. Veuillez réessayer.'
  },
  confirmCredit: {
    title: "Veuillez v\xE9rifier les informations ci-dessous. L'application ne peut pas \xEAtre mise \xE0 jour apr\xE8s soumission.",
    confirm: 'Continuer',
    region: 'Selected Region & Website'
  },
  refreshAfterApplied: 'Oups ! Actualise cette page pour commencer une nouvelle demande. ',
  messageTitles: {
    failed: 'Échec !',
    success: 'Succès !'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/carabiner.js
/* harmony default export */ const fr_carabiner = ({
  name: 'Mousqueton VERTIX 2',
  pageTitle: 'Le tout nouveau mousqueton VERTIX 2',
  pageDesc: 'Conçu pour répondre aux exigences des grimpeurs experts et pour tous ceux qui souhaitent utiliser leur VERTIX 2 en dehors du poignet, notre mousqueton deuxième génération permet de garder la montre à portée de main en toute sécurité.',
  desc: "Con\xE7u pour r\xE9pondre aux exigences des grimpeurs experts et pour tous ceux qui souhaitent utiliser leur VERTIX 2 en dehors du poignet, notre mousqueton deuxi\xE8me g\xE9n\xE9ration permet de garder la montre \xE0 port\xE9e de main en toute s\xE9curit\xE9. Que ce soit lors de l'ascension d'une voie d'escalade technique ou lors d'une randonn\xE9e en pleine nature, le suivi GPS complet continuera de fonctionner parfaitement avec le tout nouveau mousqueton. Si tu veux continuer \xE0 suivre tes donn\xE9es de fr\xE9quence cardiaque, le couplage avec un moniteur de fr\xE9quence cardiaque externe t'assurera de ne jamais manquer un battement.",
  keyFeatures: 'CARACTÉRISTIQUES\nPRINCIPALES',
  features: [{
    title: 'Dispositif de verrouillage',
    desc: "Emp\xEAche que le mousqueton ne puisse s'ouvrir accidentellement."
  }, {
    title: 'Protection des capteurs',
    desc: "Le corps prot\xE8ge les capteurs de la montre contre les rayures"
  }, {
    title: 'Gâchette de déclenchement',
    desc: "Facile \xE0 utiliser, mais difficile \xE0 activer par erreur."
  }, {
    title: 'Bloqueur de vis',
    desc: "Emp\xEAche le serrage excessif de la vis de verrouillage."
  }, {
    title: 'Verrouillage de la gâchette',
    desc: "S\xE9curit\xE9 suppl\xE9mentaire pour emp\xEAcher le d\xE9clenchement accidentel de la montre."
  }, {
    title: 'Léger et durable',
    desc: "Ces mat\xE9riaux de haute qualit\xE9 ne p\xE8sent que 40 grammes."
  }],
  keyFeaturesDesc: "N'est pas con\xE7u pour \xEAtre un \xE9quipement de s\xE9curit\xE9 pour l'escalade certifi\xE9 par l'UIAA.\n    Ne convient pas pour les donn\xE9es de d\xE9tection de mouvement, telles que la cadence, le nombre de sauts \xE0 la corde ou les r\xE9p\xE9titions d'entra\xEEnement musculaire."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pace2-2023.js
/* harmony default export */ const fr_pace2_2023 = ({
  intro: {
    title: 'LÉGÈRE EN POIDS. \nMAIS TRÈS RICHE EN \nFONCTIONNALITÉS.',
    desc: ["La COROS PACE 2 est la partenaire d'entraînement idéale pour les athlètes de toutes sortes et de tous niveaux. Cette montre super légère embarque des fonctions d'entraînement poids lourd et une énorme autonomie de batterie allant jusqu'à 30 heures de fonctionnement du GPS.", "Mais quand tu choisis la PACE 2, tu reçois aussi toute la solution d'entraînement COROS. EvoLab transformera tes données en mesures précieuses et en informations exploitables. La plateforme desktop COROS Training Hub offre des fonctions d'analyse et de gestion approfondies. Notre application te permet de contrôler quotidiennement ton entraînement et tes appareils COROS, et lorsque tu as besoin de conseils personnalisés, notre équipe de coachs COROS se tient prête à t'aider. Découvre en lisant cette page comment la PACE 2 peut t'aider à aller vite, et loin."]
  },
  theLightestGpsWatch: {
    title: 'La montre GPS la plus légère',
    desc: "\xC0 un peu moins de 30 grammes avec \n    bracelet en nylon COROS, tu peux te \n    concentrer sur ton entra\xEEnement et non \n    sur la sensation d'encombrement \n    \xE0 ton poignet.",
    descMobile: "\xC0 un peu moins de 30 \n    grammes avec bracelet \n    en nylon COROS, tu \n    peux te concentrer \n    sur ton entra\xEEnement \n    et non sur la \n    sensation \n    d'encombrement \n    \xE0 ton poignet."
  },
  fingertipSimplicity: {
    title: 'Simplicité du bout des doigts',
    desc: 'Conçue pour être facile et intuitive à utiliser, la molette COROS te permet de naviguer dans ta montre avec un seul doigt.'
  },
  builtForTheLongHaul: {
    title: 'CONÇUE POUR LE LONG',
    desc: 'Utilise beaucoup ta montre et peu ton chargeur.',
    left: {
      upto: "Jusqu'à",
      num: '30',
      unit: 'heures',
      words: "de suivi d'activit\xE9 avec GPS complet, \n      barom\xE8tre et fr\xE9quence cardiaque."
    },
    right: {
      upto: "Jusqu'à",
      num: '20',
      unit: 'jours',
      words: "d'utilisation r\xE9guli\xE8re avec un entra\xEEnement \n      hebdomadaire et le suivi quotidien du \n      sommeil et de la r\xE9cup\xE9ration."
    }
  },
  perfectForRunners: {
    title: 'Parfaite pour les coureurs',
    desc: ["Comprends ta capacité à courir et concentre-toi sur tes besoins en matière d'entraînement grâce au test de niveau de course intégré.", 'Évite les données erronées causées par les dérives du GPS pendant les entraînements sur piste. Laisse la COROS PACE 2 détecter automatiquement que tu es sur une piste pour garantir la précision du GPS et des données grâce au mode piste. ', "Associe ta montre au COROS POD 2 pour obtenir des mesures de course encore plus avancées, telles que le temps au sol, l'équilibre gauche/droite, la hauteur de la foulée et le ratio de foulée. Parfait pour les utilisations sans GPS, obtiens une précision de niveau supérieur pour tes données durement gagnées sur les tapis de course et les pistes intérieures."],
    title2: 'MODE PISTE'
  },
  navigationMadeEasy: {
    title: 'La navigation en \ntoute simplicité',
    desc: "Que tu explores les rues d'une nouvelle ville \n    ou que tu cherches le chemin du retour au \n    parking, nos outils de navigation t'aideront \xE0 \n    cr\xE9er de nouveaux itin\xE9raires et \xE0 rester sur la \n    bonne voie."
  },
  nightMode: {
    title: 'Mode nuit',
    desc: "Ménage tes yeux lorsque tu t'entraînes dans des environnement à faible luminosité, sans nuire à l'autonomie de la batterie."
  },
  customizableActivityScreens: {
    title: "Écrans d'activités personnalisables",
    desc: "Personnalise facilement la pr\xE9sentation de \n    chaque activit\xE9 et re\xE7ois des alertes d'activit\xE9 \n    personnalis\xE9es pour te permettre de ne pas \n    perdre de vue tes objectifs."
  },
  multisportActivityTracking: {
    title: 'Suivi des activités multisports',
    desc: "De la natation en eau libre à la corde à sauter, nos modes d'activité sont spécifiquement conçus pour fournir les mesures les plus précises pour ton sport."
  },
  evoLabInsights: {
    title: 'INSIGHTS EvoLab',
    desc: 'COROS EvoLab est notre plateforme de sciences du sport. Elle transforme les données collectées par ta COROS PACE 2 en informations exploitables pour que tu puisses optimiser ton entraînement et atteindre tes objectifs sportifs.'
  },
  runningFitness: {
    title: 'Niveau de course',
    desc: "Chaque coureur est différent. Tes forces et tes faiblesses peuvent également changer au cours de l'entraînement. Comprends tes performances dans les domaines essentiels de la course à pied, avec des indications claires pour t'améliorer."
  },
  trainingStatus: {
    title: "Niveau d'entraînement",
    desc: "Un instantané de ta forme physique pour que tu puisses facilement voir si elle s'améliore ou se dégrade, et si tu gères bien la fatigue."
  },
  trainingLoad: {
    title: "Charge d'entraînement",
    desc: "Surveille le volume et l'intensité de ton entraînement pour t'assurer que tu n'es pas en sur-entraînement ou en sous-entraînement."
  },
  recoveryTimer: {
    title: 'Compteur de récupération',
    desc: 'Évite les blessures et prends soin de ton corps grâce à une tendance de récupération à long terme et à une recommandation de temps de récupération.'
  },
  racePredictor: {
    title: 'Prédicteur de course',
    desc: 'Prends conscience de la vitesse à laquelle tu peux courir dans les conditions actuelles, du 5 km au marathon.'
  },
  advancedTrainingTools: "OUTILS D'ENTRAÎNEMENT AVANCÉS",
  trainingHub: {
    title: 'Training Hub',
    desc: "Une plateforme desktop conçue pour aider les athlètes à suivre les données de performance, à effectuer des analyses approfondies, à gérer et à planifier l'entraînement, et à faciliter les échanges avec les entraîneurs."
  },
  corosCoaches: {
    title: 'COROS Coaches',
    desc: "Tu as besoin d'aide ou de conseils en matière d'entraînement ? Bénéficie gratuitement d'un soutien individualisé de la part de notre équipe de coachs qualifiés en fonction de tes données d'entraînement."
  },
  evenMoreFeatures: 'ENCORE PLUS DE FONCTIONNALITÉS',
  enhancedSleepMonitoring: {
    title: 'Mesure améliorée du sommeil',
    desc: 'Un sommeil de qualité est essentiel pour un entraînement optimal. Une répartition détaillée de tes stades de sommeil permet de comprendre facilement si ta nuit a été réparatrice.'
  },
  flexibleTrainingCalendar: {
    title: "Calendrier d'entraînement flexible",
    desc: "Prends le contrôle de ton programme d'entraînement pour rester sur la voie de tes objectifs en synchronisant et en suivant ton calendrier à tout moment, directement depuis ton poignet."
  },
  personalizedWorkoutBuilder: {
    title: "Créateur d'entraînement personnalisé",
    desc: "Choisis entre la course à pied, le vélo, la natation ou la musculation, et crée ta séance d'entraînement avec une intensité et des intervalles personnalisés."
  },
  preDesignedWorkoutsPlans: {
    title: "Entra\xEEnements et plans \n    pr\xE9-con\xE7us",
    desc: "Télécharge gratuitement des plans d'entraînement et des séances d'entraînement créés par des athlètes élite et leurs entraîneurs. Importe-les facilement sur ta montre et apprends des pros."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/stories.js
/* harmony default export */ const fr_stories = ({
  homeTitle: 'Histoires de COROS',
  homeDesc: "Découvrez des suggestions d'entraînement et des témoignages d'athlètes d'élite et d'entraîneurs qui vous aideront à optimiser votre entraînement et à atteindre vos objectifs sportifs avec COROS.",
  viewAllStories: 'TOUTES LES HISTOIRES',
  learnMore: 'EN SAVOIR PLUS',
  searchCorosStories: 'CHERCHER DES HISTOIRES COROS',
  search: 'CHERCHER',
  viewMoreStories: "VOIR PLUS D'HISTOIRES",
  shareThisStory: 'PARTAGER CETTE HISTOIRE',
  by: 'Écrit par',
  minRead: 'Temps de lecture : {0} min',
  resultsFound: '{0} résultats'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/hrm.js
/* harmony default export */ const fr_hrm = ({
  share: 'Capteur de Fréquence Cardiaque COROS',
  shareText: 'Des données précises sans compromis sur le confort.',
  menu: 'Capteur de FC COROS',
  homeWatch: 'Capteur de FC COROS',
  homeWatchDesc: 'Des données précises sans compromis sur le confort',
  precise: 'DES DONNÉES PRÉCISES.\nUN PUR CONFORT.',
  intro: "Compatible avec tous les appareils Bluetooth compatibles avec la fréquence cardiaque, le capteur de fréquence cardiaque COROS offre plus de 38 heures de mesure continue et précise de la fréquence cardiaque pour suivre tes séances d'entraînement avec un tel confort qu'on l'oublie.",
  easyToWear: 'FACILE À PORTER.\nAUCUNE DISTRACTION.',
  sleek: 'Élégant et confortable',
  sleekText: "Plus simple \xE0 porter qu'une ceinture thoracique, notre brassard en tissu souple se pose \xE0 plat autour de ton bras et reste en place gr\xE2ce \xE0 sa surface rugueuse. Le design discret \xE9vite de s'accrocher aux v\xEAtements, ce qui vous permet d'oublier que \n    tu le portes.",
  sleekText_mobile: "Plus simple à porter qu'une ceinture thoracique, notre brassard en tissu souple se pose à plat autour de ton bras et reste en place grâce à sa surface rugueuse. Le design discret évite de s'accrocher aux vêtements, ce qui vous permet d'oublier que tu le portes.",
  flexible: 'Ajustement flexible',
  flexibleText: "Régle la position et la tension du brassard élastique durable à ton bras en faisant simplement glisser la boucle jusqu'à ce qu'elle soit bien ajustée. La fermeture velcro sécurisée te permet de retirer rapidement le capteur pour laver facilement le brassard.",
  accuracy: 'CONÇU POUR LA PRÉCISION. \nCONSTRUIT POUR DURER.',
  sensor: 'Capteur de pointe',
  sensorText: 'Notre capteur optique multicanal dernière génération fournit un signal de haute qualité. Logé dans un boîtier robuste mais élégant et protégé par un couvercle résistant aux rayures, notre capteur fournira des données fiables et précises sur la fréquence cardiaque pendant des années.',
  band: 'Brassard de haute qualité',
  bandText: "Les capteurs optiques de fréquence cardiaque fonctionnent mieux lorsqu'ils sont maintenus fermement contre la peau. Notre brassard est conçu pour placer le capteur contre ton bras afin d'empêcher la lumière extérieure de pénétrer et de maintenir la qualité du signal, quelle que soit ton activité.",
  noButtons: 'PAS DE BOUTONS.\nPAS DE PROBLÈMES.',
  power: 'Une puissance durable',
  powerText: 'Avec 38 heures de fonctionnement complet ou 80 jours en veille sur une seule charge, le capteur de fréquence cardiaque COROS est conçu pour durer. Consulte le niveau de la batterie sur ta montre ou ton application COROS et utilise le câble magnétique pour recharger rapidement.',
  detection: 'Détection du port',
  detectionText: "Grâce à la détection de port intégrée, le cardiofréquencemètre COROS s'allume et s'éteint automatiquement en fonction du moment où il est porté. Il te permet de te connecter automatiquement aux appareils couplés à ton application chaque fois que tu commences une séance d'entraînement.",
  connections: 'Connexions multiples',
  connectionsText: "Con\xE7u pour fonctionner en toute simplicit\xE9 avec tes montres et applications COROS pr\xE9f\xE9r\xE9es, il peut \xE9galement s'appairer simultan\xE9ment jusqu'\xE0 trois appareils, y compris des montres non COROS et d'autres appareils d'entra\xEEnement en salle compatibles Bluetooth, des compteurs \n    de v\xE9lo, etc.",
  connectionsText_mobile: "Conçu pour fonctionner en toute simplicité avec tes montres et applications COROS préférées, il peut également s'appairer simultanément jusqu'à trois appareils, y compris des montres non COROS et d'autres appareils d'entraînement en salle compatibles Bluetooth, des compteurs de vélo, etc.",
  why: 'Pourquoi le bras ?',
  whyText: "Les capteurs optiques de fréquence cardiaque utilisent la lumière pour mesurer le flux sanguin dans les capillaires situés sous la peau. Le haut du poignet est un endroit pratique pour une montre, mais ce n'est pas le meilleurs pour les capteurs. Le port sur le bras offre au capteur optique une quantité optimale de flux sanguin pour recueillir des données sur la fréquence cardiaque avec une précision équivalente à celle d'une ceinture thoracique traditionnelle.",
  box: 'CE QUE CONTIENT LA BOÎTE'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/chamonix.js
/* harmony default export */ const fr_chamonix = ({
  menuTitle: 'COROS à Chamonix',
  shareTitle: 'COROS à Chamonix | 28 août - 3 septembre',
  shareDesc: "Rencontre l'équipe COROS à Chamonix et participe à nos événements exclusifs en compagnie de nos meilleurs athlètes élite, ou visite notre stand à l'Ultra-Trail Village Expo pour découvrir nos derniers produits.",
  bannerTitle: 'COROS À CHAMONIX',
  bannerTitleText: '28 août - 3 septembre',
  intro: "Si tu te rends à Chamonix pour l'UTMB, COROS t'invite à participer à une semaine bien remplie d'événements exclusifs où tu pourras côtoyer certains de nos meilleurs athlètes élite. Inscris-toi ci-dessous pour réserver ta place, ou visite notre stand à l'Ultra-Trail Village Expo pour t'inscrire en personne et découvrir notre dernière édition limitée de l'APEX 2 Pro.",
  scheduleTitle: 'PROGRAMME',
  scheduleDesc: "La majorité de nos événements se déroulera à l'hôtel La Folie Douce, à proximité de la ligne d'arrivée. Le nombre de places est limité, donc réserve ta place dès aujourd'hui !",
  scheduleDescLink: "l'hôtel La Folie Douce",
  courseTitle: 'FICHIERS GPX DES PARCOURS',
  courseDesc: "Tu cours à Chamonix ? Télécharge un fichier GPX sur ta montre COROS pour pouvoir t'orienter facilement.",
  openWithCorosApp: "Ouvrir avec l'app COROS",
  downloadGpxFile: 'Télécharger le fichier GPX',
  boothTitle: 'PASSE SUR LE STAND COROS',
  boothDesc: "Rencontre un membre de l'équipe COROS qui pourra répondre à tes questions les plus techniques, et découvre ou achète l'une de nos montres conçues pour la montagne, y compris notre nouvelle édition limitée de l'APEX 2 Pro.",
  whoTitle: 'QUI FAIT LA COURSE ?',
  whoDesc: "COROS est fier de sponsoriser des athlètes du monde entier qui participent aux courses de l'UTMB.",
  register: "S'INSCRIRE"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/chamonix_edition.js
/* harmony default export */ const fr_chamonix_edition = ({
  shareTitle: 'APEX 2 Pro Montre GPS Outdoor Édition Chamonix',
  shareDesc: 'Pour les athlètes outdoor qui voyagent vite et léger.',
  productName: 'COROS APEX 2 Pro Chamonix',
  mobileProductName: 'COROS APEX 2 Pro Chamonix',
  title: 'APEX 2 Pro \nÉDITION CHAMONIX',
  intro: "Si tu aspires à t'entraîner dur et à aller vite sur les sentiers, il n'y a pas d'endroit plus emblématique que\nChamonix. Foyer spirituel du trail running et porte d'entrée vers les sentiers épiques du Mont Blanc,\ncette édition spéciale de l'APEX 2 Pro rend hommage à l'un des plus bels endroits\nau monde pour s'entraîner et s'élancer sur les sentiers.",
  introMobile: "Si tu aspires à t'entraîner dur et à aller vite sur les sentiers, il n'y a pas d'endroit plus emblématique que Chamonix. Foyer spirituel du trail running et porte d'entrée vers les sentiers épiques du Mont Blanc, cette édition spéciale de l'APEX 2 Pro rend hommage à l'un des plus bels endroits au monde pour s'entraîner et s'élancer sur les sentiers.",
  limited: 'ÉDITION LIMITÉE',
  limitedText: '3 000 exemplaires \ndans le monde',
  alpine: 'COULEURS INSPIRÉES PAR LES ALPES',
  alpineText: 'Les couleurs de la haute montagne sont loin du vert des pentes inférieures, le ciel bleu perçant se marie avec le gris de la roche rencontrant le glacier.',
  alpineMobile: 'COULEURS INSPIRÉES PAR LES ALPES',
  alpineMobileText: 'Les couleurs de la haute montagne sont loin du vert des pentes inférieures, le ciel bleu perçant se marie avec le gris de la roche \nrencontrant le glacier.',
  mont: 'ÉPROUVÉE AUTOUR DU \nMONT BLANC',
  montText: "Les utilisateurs COROS ont enregistré plus d'un million de mètres de dénivelé positif à partir de Chamonix. Dotée de notre technologie la plus récente, de fonctions innovantes, et d'une autonomie légendaire, tu peux être sûr que l'APEX 2 Pro \nne te laissera pas tomber.",
  montMobile: 'ÉPROUVÉE AUTOUR \nDU MONT BLANC',
  montMobileText: "Les utilisateurs COROS ont enregistré plus d'un million de mètres de dénivelé positif à partir de Chamonix. Dotée de notre technologie la plus récente, de fonctions innovantes, et d'une autonomie légendaire, tu peux être sûr que l'APEX 2 Pro ne te laissera pas tomber.",
  reach: 'ATTEINS TOUS LES SOMMETS',
  reachText: "Conçue pour être performante sur tous les types de terrain, l'APEX 2 Pro est construite avec des technologies révolutionnaires pour atteindre tes objectifs les plus ambitieux. Avec des matériaux durables, une antenne repensée, un capteur optique nouvelle génération et une plus grande autonomie de la batterie, tu peux aller vite et loin.",
  reachMobile: 'ATTEINS TOUS LES SOMMETS',
  reachMobileText: "Conçue pour être performante sur tous les types de terrain, l'APEX 2 Pro est construite avec des technologies révolutionnaires pour atteindre tes objectifs les plus ambitieux. Avec des matériaux durables, une antenne repensée, un capteur optique nouvelle génération et une plus grande autonomie de la batterie, tu peux \naller vite et loin.",
  noMatter: "QUOI QU'IL ARRIVE,\nTU SERAS PRÉPARÉ.",
  noMatterText: "La beauté des grands espaces s'accompagne aussi de risques : le temps orageux, le mal de l'altitude, l'obscurité, la déshydratation - des dangers potentiels du trekking à travers les montagnes. L'APEX 2 Pro édition Chamonix te prépare à toutes les situations pour que tu puisses rester en sécurité et informé \nen fonçant vers le sommet.",
  noMatterMobile: "QUOI QU'IL ARRIVE,\nTU SERAS PRÉPARÉ.",
  noMatterMobileText: "La beauté des grands espaces s'accompagne aussi de risques : le temps orageux, le mal de l'altitude, l'obscurité, la déshydratation - des dangers potentiels du trekking à travers les montagnes. L'APEX 2 Pro édition Chamonix te prépare à toutes les situations pour que tu puisses rester en sécurité et informé en fonçant vers le sommet.",
  findYour: 'TROUVE TA VOIE',
  findYourText: "Grâce à la cartographie mondiale hors ligne COROS, aux checkpoints, à la planification \nd'itinéraires personnalisés et à bien d'autres choses encore, tu peux accéder en toute \nconfiance aux informations de navigation essentielles dans les endroits les plus \nreculés. Le cadran numérique de l'APEX 2 Pro Chamonix Edition permet de \nzoomer et de dézoomer facilement, tandis que l'écran tactile te \npermet de faire glisser la carte avec ton doigt.",
  findYourMobile: 'TROUVE TA VOIE',
  findYourMobileText: "Grâce à la cartographie mondiale hors ligne COROS, aux checkpoints, à la planification d'itinéraires personnalisés et à bien d'autres choses encore, tu peux accéder en toute confiance aux informations de navigation essentielles dans les endroits les plus reculés. Le cadran numérique de l'APEX 2 Pro Chamonix Edition permet de zoomer et de dézoomer facilement, tandis que l'écran tactile te permet de faire glisser la carte avec ton doigt.",
  box: 'QUE CONTIENT LA BOÎTE ?',
  cable: 'Câble de chargement',
  nylonWatchBand: 'Bracelet de montre en nylon',
  shopAllColors: 'Voir toutes les couleurs',
  recommandedProduct: 'Choisissez des accessoires Chamonix'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pace3.js
/* harmony default export */ const fr_pace3 = ({
  productName: 'COROS PACE 3 Montre Sport GPS',
  productNameShort: 'COROS PACE 3',
  valencia_productNameShort: 'COROS PACE 3 Valencia',
  trainingPlansAndWorkoutsLinks1WordPc: "plans d'entraînement",
  intro: 'LA CHAMPIONNE\nINCONTESTÉE DES\nPOIDS LÉGERS',
  introText: "Supérieure en tous points à la PACE 2, la PACE 3 est encore plus puissante.\nSuis ton entraînement et ta récupération avec une montre légère et\nconfortable, dotée d'une technologie avancée, d'une précision de donnée\nexceptionnelle et du logiciel d'entraînement COROS. La COROS PACE 3\nouvre la voie à la découverte de ton potentiel.",
  goTheDistance: 'CONÇUE POUR TOUTES\nLES DISTANCES',
  goTheDistanceText: 'Conçue pour augmenter l’autonomie de la batterie, la PACE 3 optimise le temps passé à ton poignet et minimise le temps passé à la recharger.',
  batteryAfter: "BATTERIE APRÈS 10 HEURES \nD'UTILISATION EN MODE GPS",
  batteryAfterFootnote: 'GPS',
  t247Comfort: 'UN CONFORT AU QUOTIDIEN',
  t247ComfortText: 'Super légère avec une boîtier élégant, la PACE 3 est\nfaite pour être portée toute la journée et toute la\nnuit en tout confort.',
  followYourOwnPath: 'TRACE TA PROPRE VOIE',
  followYourOwnPathText: 'Sors de ton quartier en toute confiance grâce à un ensemble d\'outils puissants, notamment la navigation "Turn-by-Turn" (virage par virage).',
  nextGenerationGps: 'GPS\nNOUVELLE\nGÉNÉRATION',
  nextGenerationGpsText: 'Une puce satellite redessinée avec le mode double\nfréquence te permettra de conserver la précision\nde tes données GPS, même dans les grandes villes\ncomme Paris ou New York.',
  lookGood: 'ÉLÉGANCE & PERFORMANCE',
  lookGoodText: "Chaque poignet est unique et chacun a des besoins différents, c'est pourquoi la PACE 3 offre le choix entre des bracelets en silicone et en nylon de haute qualité et élégants. Choisis celui qui te convient le mieux, ou achète-en plusieurs pour changer de look.",
  lookGoodFeatures1: ['SILICONE', 'SÉCHAGE RAPIDE', 'ENTRETIEN FACILE', 'DURABLE'],
  lookGoodFeatures2: ['NYLON', 'RESPIRANT', 'LÉGER', 'CONFORTABLE'],
  accurateActivityModes: "DES MODES\nD'ACTIVITÉ\nSUPPLÉMENTAIRES",
  accurateActivityModesText: "Cours, fais du vélo, nage, fais de la musculation et\ndes sports d'hiver. La PACE 3 offre une gamme\nétendue de modes d'activité qui sont optimisés\npour fournir des mesures précises.",
  routePlanningMadeEasy: "LA PLANIFICATION D'ITINÉRAIRES EN TOUTE SIMPLICITÉ",
  routePlanningMadeEasyText: "Trace facilement des itinéraires personnalisés, ou recherche une\ndestination et synchronise l'app instantanément avec la PACE 3\nsur la page Explorer de l'appli COROS.",
  neverMissABeat: 'NE LOUPE JAMAIS UN BATTEMENT',
  neverMissABeatText: "Qu'il s'agisse de suivre ton sommeil, ta SpO2 ou l'intensité de ton entraînement, notre\ncapteur optique de fréquence cardiaque nouvelle génération te fournira les mesures\nles plus précises possibles au poignet.",
  neverMissABeatFeatures: ['5 LEDs', '4 PHOTODÉTECTEURS', 'VERRE DE PROTECTION', 'OXYMÈTRE DE POULS OPTIQUE'],
  trainingDoesntEndAtBedtime: "L'ENTRAÎNEMENT NE S'ARRÊTE PAS À L'HEURE DU COUCHER",
  trainingDoesntEndAtBedtimeText: 'Avec un confort 24h/24, des capteurs précis et une autonomie impressionnante, la PACE 3 fournit des données détaillées sur la récupération pendant ton sommeil nuit après nuit.',
  trainingDoesntEndAtBedtimeFeatures: 'MESURE LES CYCLES DU SOMMEIL : ÉVEIL,\nREM, SOMMEIL LÉGER ET SOMMEIL PROFOND',
  trainingDoesntEndAtBedtimeFeatures2: 'CALCULE TA FRÉQUENCE CARDIAQUE\nAU REPOS',
  alwaysSeeTheBrightSide: 'REGARDE TOUJOURS\nLE BON CÔTÉ',
  alwaysSeeTheBrightSideFeatures: ['ÉCRAN TRANSFLECTIF POUR UNE\nMEILLEURE VISIBILITÉ EN PLEIN SOLEIL', 'ÉCRAN EN VERRE MINÉRAL DE\n1,2 POUCE TOUJOURS ALLUMÉ', "MODE NUIT POUR UNE BONNE \nLISIBILITÉ, MÊME DANS L'OBSCURITÉ", 'ÉCRAN TACTILE POUR UNE \nUTILISATION INTUITIVE'],
  sweatSwimShower: 'TRANSPIRE\nNAGE',
  sweatSwimShowerText: "Se mouiller n'est pas un problème pour la PACE 3\nqui résiste à l'eau jusqu'à 5 ATM.",
  moreThanAWatch: "PLUS QU'UNE MONTRE",
  moreThanAWatchText: "Lorsque tu achètes une PACE 3, tu accèdes également à l'ensemble du système\nd'entraînement COROS sans frais supplémentaires.",
  trainingPlansAndWorkouts: "PLANS D'ENTRAÎNEMENT ET\nSÉANCES D'ENTRAÎNEMENT",
  trainingPlansAndWorkoutsText: "Du 5 km à l'ultra. Télécharge gratuitement des plans d'entraînement et des séances d'entraînement pour t'aider à atteindre tes objectifs.",
  corosCoaches: 'COROS COACHES',
  corosCoachesText: "De vrais entraîneurs. De vrais conseils. Obtiens des conseils personnalisés de la part de notre équipe d'experts.",
  trainingHub: 'TRAINING HUB',
  trainingHubText: "Outil d'analyse avancée de l'entraînement en\ncommunication directe avec ton entraîneur.\nValidé par le NN Running Team d’Eliud Kipchoge.",
  beyondYourTraining: 'AU-DELÀ DE TON ENTRAÎNEMENT',
  beyondYourTrainingText: 'Synchronise ta montre directement avec tes applis de santé et de fitness préférées comme Strava, Nike Run Club, Apple Health et Health Connect. Reste connecté en affichant les messages et les appels téléphoniques entrants, ou utilise "Trouver mon téléphone" pour localiser ton appareil égaré, et commande tes caméras GoPro et Insta360 directement depuis ton poignet.',
  whatsInTheBox: 'QUE CONTIENT LA BOÎTE ?',
  chargingCable: 'Câble de chargement',
  watchBand: 'Bracelet de montre',
  shareTitle: 'COROS PACE 3 montre GPS de sport',
  shareDesc: "Pour les athlètes multisports qui s'entraînent dur et qui vont vite.",
  homeProductPageDesc: "Pour les athlètes multisports qui\ns'entraînent dur et qui vont vite",
  watchInfoHeader: 'MONTRE GPS DE SPORT',
  weight: 'Poids (avec bracelet en nylon)',
  width: 'Épaisseur',
  inStandardGpsMode: '*Mode Full GPS standard',
  trainingPlansAndWorkoutsLinks1Word: "plans d'entraînement",
  trainingPlansAndWorkoutsLinks2Word: "d'entraînement",
  corosCoachesLinksWord: "notre équipe d'experts",
  trainingPlansAndWorkoutsLinks1Link: 'https://fr.coros.com/plans',
  trainingPlansAndWorkoutsLinks2Link: 'https://fr.coros.com/workouts',
  corosCoachesLinksLink: 'https://us.coros.com/stories/coros-coaches/c/coros-coaches-your-personal-training-support',
  mobile_intro: 'LA CHAMPIONNE\nINCONTESTÉE DES\nPOIDS LÉGERS',
  mobile_introText: "Supérieure en tous points à la PACE 2, la PACE 3 est encore plus puissante. Suis ton entraînement et ta récupération avec une montre légère et confortable, dotée d'une technologie avancée, d'une précision de donnée exceptionnelle et du logiciel d'entraînement COROS. La COROS PACE 3 ouvre la voie à la découverte de ton potentiel.",
  mobile_goTheDistance: 'CONÇUE POUR TOUTES\nLES DISTANCES',
  mobile_goTheDistanceText: 'Conçue pour augmenter l’autonomie de la batterie, la PACE 3 optimise le temps passé à ton poignet et minimise le temps passé à la recharger.',
  mobile_batteryAfter: "BATTERIE APRÈS 10 HEURES \nD'UTILISATION EN MODE GPS",
  mobile_batteryAfterFootnote: 'GPS',
  mobile_t247Comfort: 'UN CONFORT AU QUOTIDIEN',
  mobile_t247ComfortText: 'Super légère avec une boîtier élégant, la PACE 3 est faite pour être portée toute la journée et toute la nuit en tout confort.',
  mobile_followYourOwnPath: 'TRACE TA PROPRE VOIE',
  mobile_followYourOwnPathText: 'Sors de ton quartier en toute confiance grâce à un ensemble d\'outils puissants, notamment la navigation "Turn-by-Turn" (virage par virage).',
  mobile_nextGenerationGps: 'GPS NOUVELLE\nGÉNÉRATION',
  mobile_nextGenerationGpsText: 'Une puce satellite redessinée avec le mode double fréquence te permettra de conserver la précision de tes données GPS, même dans les grandes villes comme Paris ou New York.',
  mobile_lookGood: 'ÉLÉGANCE & PERFORMANCE',
  mobile_lookGoodText: "Chaque poignet est unique et chacun a des besoins différents, c'est pourquoi la PACE 3 offre le choix entre des bracelets en silicone et en nylon de haute qualité et élégants. Choisis celui qui te convient le mieux, ou achète-en plusieurs pour changer de look.",
  mobile_lookGoodFeatures1: ['SILICONE', 'SÉCHAGE RAPIDE', 'ENTRETIEN FACILE', 'DURABLE'],
  mobile_lookGoodFeatures2: ['NYLON', 'RESPIRANT', 'LÉGER', 'CONFORTABLE'],
  mobile_accurateActivityModes: "DES MODES D'ACTIVITÉ\nSUPPLÉMENTAIRES",
  mobile_accurateActivityModesText: "Cours, fais du vélo, nage, fais de la musculation et\ndes sports d'hiver. La PACE 3 offre une gamme\nétendue de modes d'activité qui sont optimisés\npour fournir des mesures précises.",
  mobile_routePlanningMadeEasy: "LA PLANIFICATION D'ITINÉRAIRES EN TOUTE SIMPLICITÉ",
  mobile_routePlanningMadeEasyText: "Trace facilement des itinéraires personnalisés, ou\nrecherche une destination et synchronise l'app\ninstantanément avec la PACE 3 sur la page\nExplorer de l'appli COROS.",
  mobile_neverMissABeat: 'NE LOUPE JAMAIS UN BATTEMENT',
  mobile_neverMissABeatText: "Qu'il s'agisse de suivre ton sommeil, ta SpO2 ou l'intensité de ton entraînement, notre capteur optique de fréquence cardiaque nouvelle génération te fournira les mesures les plus précises possibles au poignet.",
  mobile_neverMissABeatFeatures: ['5 LEDs', '4 PHOTODÉTECTEURS', 'VERRE DE PROTECTION', 'OXYMÈTRE DE POULS OPTIQUE'],
  mobile_trainingDoesntEndAtBedtime: "L'ENTRAÎNEMENT NE S'ARRÊTE PAS À L'HEURE DU COUCHER",
  mobile_trainingDoesntEndAtBedtimeText: 'Avec un confort 24h/24, des capteurs précis et une\nautonomie impressionnante, la PACE 3 fournit des\ndonnées détaillées sur la\nrécupération pendant ton\nsommeil nuit après nuit.',
  mobile_trainingDoesntEndAtBedtimeFeatures: 'MESURE LES CYCLES DU SOMMEIL : ÉVEIL,\nREM, SOMMEIL LÉGER ET SOMMEIL PROFOND',
  mobile_trainingDoesntEndAtBedtimeFeatures2: 'CALCULE TA FRÉQUENCE CARDIAQUE\nAU REPOS',
  mobile_alwaysSeeTheBrightSide: 'REGARDE TOUJOURS\nLE BON CÔTÉ',
  mobile_alwaysSeeTheBrightSideFeatures: ['ÉCRAN TRANSFLECTIF POUR UNE\nMEILLEURE VISIBILITÉ EN PLEIN SOLEIL', 'ÉCRAN EN VERRE MINÉRAL DE\n1,2 POUCE TOUJOURS ALLUMÉ', 'ÉCRAN TACTILE POUR UNE \nUTILISATION INTUITIVE', "MODE NUIT POUR UNE BONNE \nLISIBILITÉ, MÊME DANS L'OBSCURITÉ"],
  mobile_sweatSwimShower: 'TRANSPIRE\nNAGE',
  mobile_sweatSwimShowerText: "Se mouiller n'est pas un problème pour la PACE 3 qui résiste à l'eau jusqu'à 5 ATM.",
  mobile_moreThanAWatch: "PLUS QU'UNE MONTRE",
  mobile_moreThanAWatchText: "Lorsque tu achètes une PACE 3, tu accèdes également à l'ensemble du système d'entraînement COROS sans frais supplémentaires.",
  mobile_trainingPlansAndWorkouts: "PLANS D'ENTRAÎNEMENT ET SÉANCES D'ENTRAÎNEMENT",
  mobile_trainingPlansAndWorkoutsText: "Du 5 km à l'ultra. Télécharge gratuitement des plans d'entraînement et des séances d'entraînement pour t'aider à atteindre tes objectifs.",
  mobile_corosCoaches: 'COROS COACHES',
  mobile_corosCoachesText: "De vrais entraîneurs. De vrais conseils. Obtiens des conseils personnalisés de la part de notre équipe d'experts.",
  mobile_trainingHub: 'TRAINING HUB',
  mobile_trainingHubText: "Outil d'analyse avancée de l'entraînement en communication directe avec ton entraîneur. Validé par le NN Running Team d’Eliud Kipchoge.",
  mobile_beyondYourTraining: 'AU-DELÀ DE TON ENTRAÎNEMENT',
  mobile_beyondYourTrainingText: 'Synchronise ta montre directement avec tes applis de santé et de fitness préférées comme Strava, Nike Run Club, Apple Health et Health Connect. Reste connecté en affichant les messages et les appels téléphoniques entrants, ou utilise "Trouver mon téléphone" pour localiser ton appareil égaré, et commande tes caméras GoPro et Insta360 directement depuis ton poignet.',
  mobile_weight: 'Poids',
  mobile_width: 'Épaisseur',
  mobile_inStandardGpsMode: '*Mode Full GPS standard'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pace3_ek.js
/* harmony default export */ const fr_pace3_ek = ({
  introText: "Il n'y a pas de plus grand coureur ni de plus grand ambassadeur de la course à pied qu'Eliud Kipchoge. \nSon palmarès est unique et il a placé la barre très haut. Avec cette édition limitée de notre COROS PACE 3, \nnous rendons hommage à une légende, à son héritage et à son rêve.",
  dream: "LE RÊVE D'ELIUD",
  dreamText: "Quelle que soit la vitesse à laquelle tu cours, \nEliud est convaincu que la course à pied a un \neffet positif. Au-delà des avantages évidents \nliés à l'amélioration de notre santé et de notre \nbien-être, la course à pied a le pouvoir \nd'enrichir nos vies et de nous rapprocher les \nuns des autres. Où que tu sois, choisir de \nparticiper à un monde qui court, c'est choisir \nde construire un monde meilleur.",
  words: ['Un monde qui court est un monde sain. ', 'Un monde qui court est un monde riche. ', 'Un monde qui court est un monde en paix. ', 'Un monde qui court est un monde joyeux.', 'Mon rêve est de faire de ce monde un monde qui court.'],
  inspiredByHome: 'INSPIRÉE PAR SON PAYS',
  inspiredByHomeText: "Avec des couleurs qui représentent son drapeau national et un design qui reprend les imprimés géométriques traditionnels du Kenya, nous rendons hommage à l'endroit où Eliud s'entraîne et où il se sentira toujours chez lui.",
  trainLikeAPro: 'ENTRAÎNE-TOI \nCOMME UN PRO',
  trainLikeAProText: "Avec la COROS PACE 3 édition Eliud \nKipchoge, tu bénéficies également de \nla solution d'entraînement COROS sans \nfrais supplémentaires. Découvre \ncomment COROS aide les athlètes élite \ncomme Eliud à battre des records du \nmonde grâce à ses fonctionnalitées \net ses specs matérielles.",
  clickToLearnMore: 'Clique ici pour en savoir plus sur la COROS PACE 3',
  yourBestTrainingPartner: "TON MEILLEUR PARTENAIRE D'ENTRAÎNEMENT",
  iconsText: ['Ultra légère', 'Longue autonomie de batterie', 'GPS précis', "Modes d'activité supplémentaires", 'Capteurs dernière génération', "Support d'entraînement complet"],
  limitedRelease: 'ÉDITION LIMITÉE',
  limitedReleaseText: 'La production mondiale de PACE 3 édition Eliud Kipchoge est limitée en nombre. Alors, comme Eliud, \ntu as intérêt à être rapide si tu veux pouvoir porter cette montre à ton poignet.',
  mobile_introText: "Il n'y a pas de plus grand coureur ni de plus \ngrand ambassadeur de la course à pied qu'Eliud \nKipchoge. Son palmarès est unique et il a placé \nla barre très haut. Avec cette édition limitée de \nnotre COROS PACE 3, nous rendons hommage \nà une légende, à son héritage et à son rêve.",
  mobile_dream: "LE RÊVE D'ELIUD",
  mobile_dreamText: "Quelle que soit la vitesse à laquelle tu cours, \nEliud est convaincu que la course à pied a un \neffet positif. Au-delà des avantages évidents \nliés à l'amélioration de notre santé et de notre \nbien-être, la course à pied a le pouvoir \nd'enrichir nos vies et de nous rapprocher les \nuns des autres. Où que tu sois, choisir de \nparticiper à un monde qui court, c'est choisir \nde construire un monde meilleur.",
  mobile_words: ['Un monde qui court est un monde sain. ', 'Un monde qui court est un monde riche. ', 'Un monde qui court est un monde en paix. ', 'Un monde qui court est un monde joyeux.', 'Mon rêve est de faire de ce monde un monde qui court.'],
  mobile_inspiredByHome: 'INSPIRÉE PAR SON PAYS',
  mobile_inspiredByHomeText: "Avec des couleurs qui représentent son drapeau national et un design qui reprend les imprimés géométriques traditionnels du Kenya, nous rendons hommage à l'endroit où Eliud s'entraîne et où il se sentira toujours chez lui.",
  mobile_trainLikeAPro: 'ENTRAÎNE-TOI COMME \nUN PRO',
  mobile_trainLikeAProText: "Avec la COROS PACE 3 édition EK, tu bénéficies également de la solution d'entraînement COROS sans frais supplémentaires. Découvre comment COROS aide les athlètes élite comme Eliud à battre des records du monde grâce à ses fonctionnalitées et ses specs matérielles.",
  mobile_clickToLearnMore: 'Clique ici pour en savoir plus sur la COROS PACE 3',
  mobile_yourBestTrainingPartner: "TON MEILLEUR PARTENAIRE D'ENTRAÎNEMENT",
  mobile_iconsText: ['Ultra légère', 'Longue autonomie de batterie', 'GPS précis', "Modes d'activité supplémentaires", 'Capteurs dernière génération', "Support d'entraînement complet"],
  mobile_limitedRelease: 'ÉDITION LIMITÉE',
  mobile_limitedReleaseText: 'La production mondiale de PACE 3 édition Eliud \nKipchoge est limitée en nombre. Alors, comme \nEliud, tu as intérêt à être rapide si tu veux pouvoir \nporter cette montre à ton poignet.',
  shareTitle: 'COROS PACE 3 montre GPS de sport edition Eliud Kipchoge',
  shareDesc: "Pour les athlètes multisports qui s'entraînent dur et qui vont vite.",
  productNameShort: 'COROS PACE 3 EK',
  productMenuTitle: 'COROS PACE 3 Édition Eliud Kipchoge'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/pod2_2024.js
/* harmony default export */ const fr_pod2_2024 = ({
  intro: 'COURS AU-DELÀ DES LIMITES DU GPS',
  introText: "Le COROS POD 2 est un capteur léger et résistant à l'eau qui \nfournit des données de course hyper précises à partir de ton \npied ou des mouvements de ton corps. Il se connecte à ta \nmontre COROS pour fournir des mesures en temps réel, des \ninsights après la course et une analyse de ta technique de \ncourse, afin que tu disposes des meilleures informations \npendant et après ta course.",
  allAboutAccuracy: 'LA PRÉCISION AVANT TOUT',
  allAboutAccuracyText: "Le COROS POD 2 résout les problèmes les plus courants de la technologie des montres GPS, notamment le décalage des \ndonnées, la faiblesse du signal et l'imprécision en intérieur. En suivant le mouvement de ton pied, le COROS POD 2 \naméliore la précision et la sensibilité à l'allure pour suivre avec précision tes performances dans n'importe quelle situation.",
  sensitiveInstantPace: 'Une allure sensible et instantanée.',
  sensitiveInstantPaceText: "Les séances d'entraînement en fractionné sont plus efficaces avec des données d'allure instantanées, mais les signaux GPS peuvent souffrir d'un retard pouvant aller jusqu'à 10 secondes. Le COROS POD 2 transmet des données précises sur l'allure à partir de ton pied, de sorte que la fonction d'alerte d'allure de ta montre COROS peut t'aider à rester précisément dans ta zone d'allure cible.",
  accurateIndoorData: 'Données précises en intérieur.',
  accurateIndoorDataText: "La technologie GPS ne fonctionne pas pour les entraînements sur tapis de course, et aucune montre ne peut enregistrer précisément l'allure et la distance sur tapis de course à elle seule. Le COROS POD 2 résout ce problème en se calibrant automatiquement pour mesurer ta foulée et en transmettant des données précises de course sur tapis directement à ta montre COROS.",
  preciseOnTheHills: 'Précis en montée.',
  preciseOnTheHillsText: "L'Allure d'effort est une métrique propre à COROS qui permet de quantifier l'effort que tu fournis lorsque tu cours sur un terrain vallonné. Le COROS POD 2 rend l'Allure d'effort encore plus précis et réactif que le GPS en fournissant des données instantanées à ta montre COROS. Pour en savoir plus sur l'Allure d'effort, clique ici.",
  preciseOnTheHillsTextLinkText: 'clique ici',
  preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  understandYourRunningForm: 'ANALYSE TA TECHNIQUE DE COURSE',
  understandYourRunningFormText: "Es-tu un coureur terrestre ou un coureur aérien ? Fixé à ta ceinture, le COROS POD 2 t'aidera à le découvrir en effectuant un test de technique de course simple et rapide. Les résultats du test sont conçus pour t'aider à améliorer ta technique et te permettre de courir plus efficacement. Pour en savoir plus sur le test de technique de course, clique ici.",
  understandYourRunningFormTextLinkText: 'clique ici',
  understandYourRunningFormTextLink: 'https://support.coros.com/hc/fr/articles/22933404044564-Ex%C3%A9cution-du-Test-de-Formulaire',
  monitorOutsideTemperature: 'MESURE LA TEMPÉRATURE EXTÉRIEURE',
  monitorOutsideTemperatureText: "Le COROS POD 2 enregistre les relevés de température météorologique en temps réel, ce qui te permet de comprendre en détail l'évolution de ton environnement tout au long de ta course. Tu peux utiliser ces points de données pour analyser davantage tes courses lorsque tu t'entraînes dans des climats ou des saisons différents.",
  simpleSecure: 'SIMPLE & SÛR',
  simpleSecureText: "Grâce à un fonctionnement automatique sans bouton et des options de fixation sécurisée sur les lacets ou à la ceinture, \ntu peux être sûr que ton COROS POD 2 sera performant jusqu'à la fin de tes sorties, même les plus extrêmes.",
  longBatteryLife: 'LONGUE DURÉE DE VIE \nDE LA BATTERIE',
  longBatteryLifeText: "Le COROS POD 2 est équipé d'une batterie puissante conçue pour durer. Il tient 25 heures en fonctionnement continu ou 150 heures au total avec la station de charge portable pour recharger la batterie.",
  data1: '25',
  data1Unit: 'heures',
  data1Text: 'UNE SEULE CHARGE',
  data2: '150',
  data2Unit: 'heures',
  data2Text: 'AVEC LA STATION DE CHARGE',
  lightweightWeatherproof: "LÉGER & RÉSISTANT À L'EAU",
  lightweightWeatherproofText: "Avec seulement 5,6 g, tu ne remarqueras même pas le COROS POD 2 lors de tes entraînements ou de tes courses, et il résistera à des températures allant de -10°C à 60°C, avec une résistance à l'eau allant jusqu'à 3 ATM.",
  data3: '5,6',
  data3Unit: 'g',
  data3Text: 'POIDS DU CAPTEUR',
  data4: '3',
  data4Unit: 'ATM',
  data4Text: "RÉSISTANCE À L'EAU",
  setupMadeEasy: 'INSTALLATION FACILE',
  setupMadeEasyText: "Le COROS POD 2 peut être porté sur ta chaussure ou accroché à ta ceinture, et se met en veille pour préserver la batterie \nlorsqu'il n'est pas en mouvement.",
  pair: 'APPAIRAGE',
  pairText: "Ajoute le COROS POD 2 à ton application COROS pour qu'il s'apparie automatiquement avec les montres connectées.",
  clip: 'FIXATION',
  clipText: 'Attache-le à ta chaussure ou à ta ceinture, et la détection automatique ajustera les caractéristiques.',
  go: "C'EST PARTI",
  goText: "Commence ton activité de course comme d'habitude et reçois des mesures précises en temps réel.",
  box: 'QUE CONTIENT LA BOÎTE ?',
  boxText: "Le COROS POD 2 est livré avec tout ce dont tu as besoin, notamment deux clips à fixer sur les chaussures, un support en \nsilicone pour la ceinture, une station d'accueil pour le chargement, un câble de chargement \nUSB-A vers USB-C et un étui compact.",
  generalFaQs: 'GÉNÉRALE',
  generalFaQsLink: 'https://support.coros.com/hc/fr/articles/10351744085012-COROS-POD-2-Questions-Fr%C3%A9quentes',
  runningFormTestFaQs: 'TEST DE TECHNIQUE DE COURSE',
  runningFormTestFaQsLink: 'https://support.coros.com/hc/fr/articles/22933404044564-Ex%C3%A9cution-du-Test-de-Formulaire',
  frequentlyAskedQuestions: 'QUESTIONS\nFRÉQUEMMENT\nPOSÉES',
  mobile_intro: 'COURS AU-DELÀ DES LIMITES DU GPS',
  mobile_introText: "Le COROS POD 2 est un capteur léger et résistant à l'eau qui fournit des données de course hyper précises à partir de ton pied ou des mouvements de ton corps. Il se connecte à ta montre COROS pour fournir des mesures en temps réel, des insights après la course et une analyse de ta technique de course, afin que tu disposes des meilleures informations pendant et après ta course.",
  mobile_allAboutAccuracy: 'LA PRÉCISION AVANT TOUT',
  mobile_allAboutAccuracyText: "Le COROS POD 2 résout les problèmes les plus \ncourants de la technologie des montres GPS, \nnotamment le décalage des données, la faiblesse \ndu signal et l'imprécision en intérieur. En suivant \nle mouvement de ton pied, le COROS POD 2 \naméliore la précision et la sensibilité à l'allure \npour suivre avec précision tes performances \ndans n'importe quelle situation.",
  mobile_sensitiveInstantPace: 'Une allure sensible et instantanée.',
  mobile_sensitiveInstantPaceText: "Les séances d'entraînement en fractionné sont plus efficaces avec des données d'allure instantanées, mais les signaux GPS peuvent souffrir d'un retard pouvant aller jusqu'à 10 secondes. Le COROS POD 2 transmet des données précises sur l'allure à partir de ton pied, de sorte que la fonction d'alerte d'allure de ta montre COROS peut t'aider à rester précisément dans ta zone d'allure cible.",
  mobile_accurateIndoorData: 'Données précises en intérieur.',
  mobile_accurateIndoorDataText: "La technologie GPS ne fonctionne pas pour les entraînements sur tapis de course, et aucune montre ne peut enregistrer précisément l'allure et la distance sur tapis de course à elle seule. Le COROS POD 2 résout ce problème en se calibrant automatiquement pour mesurer ta foulée et en transmettant des données précises de course sur tapis directement à ta montre COROS.",
  mobile_preciseOnTheHills: 'Précis en montée.',
  mobile_preciseOnTheHillsText: "L'Allure d'effort est une métrique propre à COROS qui permet de quantifier l'effort que tu fournis lorsque tu cours sur un terrain vallonné. Le COROS POD 2 rend l'Allure d'effort encore plus précis et réactif que le GPS en fournissant des données instantanées à ta montre COROS. Pour en savoir plus sur l'Allure d'effort, clique ici.",
  mobile_preciseOnTheHillsTextLinkText: 'clique ici',
  mobile_preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  mobile_understandYourRunningForm: 'ANALYSE TA TECHNIQUE \nDE COURSE',
  mobile_understandYourRunningFormText: "Es-tu un coureur terrestre ou un coureur aérien ? Fixé à ta ceinture, le COROS POD 2 t'aidera à le découvrir en effectuant un test de technique de course simple et rapide. Les résultats du test sont conçus pour t'aider à améliorer ta technique et te permettre de courir plus efficacement. Pour en savoir plus sur le test de technique de course, clique ici.",
  mobile_understandYourRunningFormTextLinkText: 'clique ici',
  mobile_understandYourRunningFormTextLink: 'https://support.coros.com/hc/fr/articles/22933404044564-Ex%C3%A9cution-du-Test-de-Formulaire',
  mobile_monitorOutsideTemperature: 'MESURE LA TEMPÉRATURE EXTÉRIEURE',
  mobile_monitorOutsideTemperatureText: "Le COROS POD 2 enregistre les relevés de température météorologique en temps réel, ce qui te permet de comprendre en détail l'évolution de ton environnement tout au long de ta course. Tu peux utiliser ces points de données pour analyser davantage tes courses lorsque tu t'entraînes dans des climats ou des saisons différents.",
  mobile_simpleSecure: 'SIMPLE & SÛR',
  mobile_simpleSecureText: "Grâce à un fonctionnement automatique sans bouton et des options de fixation sécurisée sur les lacets ou à la ceinture, tu peux être sûr que ton COROS POD 2 sera performant jusqu'à la fin de tes sorties, même les plus extrêmes.",
  mobile_longBatteryLife: 'LONGUE DURÉE DE VIE \nDE LA BATTERIE',
  mobile_longBatteryLifeText: "Le COROS POD 2 est équipé d'une batterie \npuissante conçue pour durer. Il tient 25 heures \nen fonctionnement continu ou 150 heures au \ntotal avec la station de charge portable pour \nrecharger la batterie.",
  mobile_data1: '25',
  mobile_data1Unit: 'heures',
  mobile_data1Text: 'UNE SEULE CHARGE',
  mobile_data2: '150',
  mobile_data2Unit: 'heures',
  mobile_data2Text: 'AVEC LA STATION DE CHARGE',
  mobile_lightweightWeatherproof: "LÉGER & RÉSISTANT À L'EAU",
  mobile_lightweightWeatherproofText: "Avec seulement 5,6 g, tu ne remarqueras même pas le COROS POD 2 lors de tes entraînements ou de tes courses, et il résistera à des températures allant de -10°C à 60°C, avec une résistance à l'eau allant jusqu'à 3 ATM.",
  mobile_data3: '5,6',
  mobile_data3Unit: 'g',
  mobile_data3Text: 'POIDS DU CAPTEUR',
  mobile_data4: '3',
  mobile_data4Unit: 'ATM',
  mobile_data4Text: "RÉSISTANCE À L'EAU",
  mobile_setupMadeEasy: 'INSTALLATION FACILE',
  mobile_setupMadeEasyText: "Le COROS POD 2 peut être porté sur ta \nchaussure ou accroché à ta ceinture, et se met \nen veille pour préserver la batterie lorsqu'il \nn'est pas en mouvement.",
  mobile_pair: 'APPAIRAGE',
  mobile_pairText: "Ajoute le COROS POD 2 à ton application COROS pour qu'il s'apparie automatiquement avec les montres connectées.",
  mobile_clip: 'FIXATION',
  mobile_clipText: 'Attache-le à ta chaussure ou à ta ceinture, et la détection automatique ajustera les caractéristiques.',
  mobile_go: "C'EST PARTI",
  mobile_goText: "Commence ton activité de course comme d'habitude et reçois des mesures précises en temps réel.",
  mobile_box: 'QUE CONTIENT LA BOÎTE ?',
  mobile_boxText: "Le COROS POD 2 est livré avec tout ce dont tu as \nbesoin, notamment deux clips à fixer sur les \nchaussures, un support en silicone pour la \nceinture, une station d'accueil pour le \nchargement, un câble de chargement \nUSB-A vers USB-C et un étui compact.",
  mobile_generalFaQs: 'GÉNÉRALE',
  mobile_generalFaQsLink: 'https://support.coros.com/hc/fr/articles/10351744085012-COROS-POD-2-Questions-Fr%C3%A9quentes',
  mobile_runningFormTestFaQs: 'TEST DE TECHNIQUE DE COURSE',
  mobile_frequentlyAskedQuestions: 'QUESTIONS\nFRÉQUEMMENT\nPOSÉES',
  shareTitle: 'COROS PACE 3 montre GPS de sport edition Eliud Kipchoge',
  shareDesc: "Pour les athlètes multisports qui s'entraînent dur et qui vont vite.",
  productNameShort: 'COROS POD 2',
  productMenuTitle: 'COROS PACE 3 Édition Eliud Kipchoge',
  faq: 'FAQ'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/sasha.js
/* harmony default export */ const fr_sasha = ({
  bannerTitle: 'Pour COROS APEX 2 & PACE 2',
  section: {
    brief: {
      title: "prends les devants et d\xE9passe tes peurs",
      desc: "D\xE8s son plus jeune \xE2ge, la grimpeuse pro Sasha Digiulian savait qu'elle allait accomplir de grandes choses. Elle a commenc\xE9 le sport \xE0 l'\xE2ge de 6 ans, et comme il y avait alors peu de mod\xE8les f\xE9minins dans sa discipline, elle a d\xFB prendre les devants et tracer sa propre voie. \xC0 seulement 17 ans, elle a remport\xE9 son premier championnat national et est devenue championne du monde un an plus tard."
    },
    "abstract": {
      desc: "Aujourd'hui, Sasha est une figure de r\xE9f\xE9rence pour les jeunes femmes qui cherchent \xE0 se surpasser dans le sport et ailleurs. Ses exploits continuent d'inspirer les jeunes femmes en d\xE9montrant qu'avec du d\xE9vouement, de la pers\xE9v\xE9rance et en sachant prendre les devants, on peut r\xE9aliser tout ce que l'on veut - devenir une athl\xE8te de classe mondiale, une entrepreneuse, une auteure, une \xE9cologiste, et bien davantage."
    },
    inspire: {
      title: "d\xE9marque-toi avec\n      confiance",
      desc: "Avec un peu de confiance, tout est possible. Le bracelet en nylon COROS x Sasha pour les montres APEX 2 et PACE 2 est con\xE7u \n      pour sortir du lot et inspirer l'action. La couleur rose que Sasha adore est dominante et refl\xE8te parfaitement sa personnalit\xE9 \n      lumineuse, ainsi que sa volont\xE9 de se faire entendre, de faire entendre les autres et de d\xE9fendre ses convictions.",
      mobileDesc: "Avec un peu de confiance, tout est possible. \n      Le bracelet en nylon COROS x Sasha pour les \n      montres APEX 2 et PACE 2 est con\xE7u pour sortir \n      du lot et inspirer l'action. La couleur rose que \n      Sasha adore est dominante et refl\xE8te \n      parfaitement sa personnalit\xE9 lumineuse, ainsi \n      que sa volont\xE9 de se faire entendre, de faire \n      entendre les autres et de d\xE9fendre \n      ses convictions.",
      subDesc: "La partie externe comporte un motif inspir\xE9 d'une corde d'escalade qui renvoie \xE0 son mantra personnel TAKE THE LEAD \n      (\"Prends les devants\"). \xC0 l'int\xE9rieur, un graphique repr\xE9sente sa cha\xEEne de montagnes pr\xE9f\xE9r\xE9e, Flatiron, \xE0 Boulder, \n      dans le Colorado, l\xE0 o\xF9 Sasha vit et s'entra\xEEne. Quel que soit le sport que tu pratiques, le bracelet de \n      Sasha peut \xEAtre un rappel constant \xE0 aller de l'avant avec confiance, d\xE9vouement et joie."
    },
    shop: {
      title: "le pack avec bracelet et livre est offert pour tout achat d'apex 2",
      desc: "Le mantra TAKE THE LEAD de Sasha est \xE9galement le titre du livre qu'elle a r\xE9cemment publi\xE9. Pour une dur\xE9e limit\xE9e et jusqu'\xE0 \xE9puisement des stocks, tu peux obtenir gratuitement un exemplaire du livre de Sasha et le bracelet COROS x Sasha pour tout achat d'une montre APEX 2. "
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/fr/index.js





















































/* harmony default export */ const fr = ({
  pod2_2024: fr_pod2_2024,
  sasha: fr_sasha,
  pace3_ek: fr_pace3_ek,
  pace3: fr_pace3,
  chamonix_edition: fr_chamonix_edition,
  chamonix: fr_chamonix,
  hrm: fr_hrm,
  stories: fr_stories,
  pace2_2023: fr_pace2_2023,
  carabiner: fr_carabiner,
  apex2credit: fr_apex2credit,
  app3Langdingpage: fr_app3_langdingpage,
  ekGiveaway: fr_ek_giveaway,
  kilianEdition: fr_kilianEdition,
  convos: fr_convos,
  evolab: fr_evolab,
  specs: fr_specs,
  accessories: fr_accessories,
  apexPro: fr_apexPro,
  getApp: fr_getApp,
  declarationOfConformity: fr_declarationOfConformity,
  home: fr_home,
  pod: fr_pod,
  pod2: fr_pod2,
  apex: fr_apex,
  apex2: fr_apex2,
  tradeIn: fr_tradeIn,
  athleteDetails: fr_athleteDetails,
  athlete: fr_athlete,
  warranty: fr_warranty,
  contact: fr_contact,
  vertix: fr_vertix,
  products: fr_products,
  pace2: fr_pace2,
  progress: fr_progress,
  plans: fr_plans,
  retail: fr_retail,
  privacy: fr_privacy,
  terms: fr_terms,
  ek: (fr_ek_default()),
  vertix2: (fr_vertix2_default()),
  map: (fr_map_default()),
  trainingHub: fr_trainingHub,
  common: fr_common,
  login: fr_login,
  datalist: fr_datalist,
  yourproduct: fr_yourproduct,
  aboutPage: fr_about,
  events: fr_events,
  shop: fr_shop,
  coaches: fr_coaches,
  careers: fr_careers,
  workouts: fr_workouts,
  CommonHeaderMenu1name: 'PRODUITS',
  CommonHeaderMenu1nav1: 'COROS VERTIX 2',
  CommonHeaderMenu1nav2: 'COROS VERTIX',
  CommonHeaderMenu1nav3: 'COROS APEX Pro',
  CommonHeaderMenu1nav4: 'COROS APEX',
  CommonHeaderMenu1nav5: 'COROS PACE 2',
  CommonHeaderMenu1nav6: 'COROS PACE 2 EK',
  CommonHeaderMenu1nav7: 'COROS POD',
  CommonHeaderMenu1nav8: 'Accessoires',
  CommonHeaderMenu1nav9: 'Autres',
  CommonHeaderMenu1nav10: 'COROS PACE',
  CommonHeaderMenu1nav11: 'SafeSound-MOUNTAIN',
  CommonHeaderMenu1nav12: 'SafeSound-ROAD',
  CommonHeaderMenu1nav13: 'SafeSound-URBAN',
  CommonHeaderMenu1nav14: 'OMNI',
  CommonHeaderMenu1nav15: 'LINX',
  CommonHeaderMenu1nav16: 'COROS PACE 2 Speed Series',
  CommonHeaderMenu2name: 'COMMUNAUTÉ',
  coros_convos: 'COROS Convos',
  CommonHeaderMenu2nav1: 'COROS STORIES',
  CommonHeaderMenu2nav2: 'COROS PRO ATHLETE',
  CommonHeaderMenu2nav3: "PROGRAMME D'ÉCHANGE",
  CommonHeaderMenu2nav4: 'ENTRAÎNEMENT VÉRIFIÉ',
  CommonHeaderMenu2nav5: "PLANS D'ENTRAINEMENT",
  CommonHeaderMenu2nav6: 'COROS TRAINING HUB',
  menu_convos: 'CONVOS',
  CommonHeaderMenu3name: 'SUPPORT',
  CommonHeaderMenu3nav1: 'CONNEXION UTILISATEUR',
  CommonHeaderMenu3nav2: "CENTRE D'AIDE",
  CommonHeaderMenu3nav3: 'GARANTIE',
  CommonHeaderMenu3nav4: 'NOTES DE MISE A JOUR',
  CommonHeaderMenu3nav5: 'Comparateur de montres',
  CommonHeaderMenu3nav6: 'CARTES',
  CommonHeaderMenu4name: 'À PROPOS DE',
  CommonHeaderMenu4nav1: 'À PROPOS DE NOUS',
  CommonHeaderMenu4nav2: "DANS L'ACTUALITE",
  CommonHeaderMenu4nav3: 'CONTACT',
  CommonHeaderMenu4nav4: 'EVENEMENTS',
  CommonHeaderMenu4nav5: 'CARRIÈRES',
  CommonHeaderMenu5name: 'Trouver un magasin',
  CommonHeaderMenu6name: 'Changer de pays',
  CommonFooterDealerLogin: 'Connexion revendeur',
  CommonFooterDealerReturnRefund: 'Retour et remboursement',
  CommonFooterDealerWatchComparison: 'Comparaison des montres',
  CommonFooterDealerTermsConditions: 'Conditions générales',
  CommonFooterDealerReleaseNotes: 'Notes de mise à jour',
  CommonFooterDealerPrivacyPolicy: 'Politique de confidentialité',
  CommonFooterDealerWheretoDownload: 'Où télécharger',
  CommonFooterDealercopyright: '© 2022 | COROS Wearables, Inc.',
  Commonshopnow: 'SHOP NOW',
  Commonspeecs: 'SPECS',
  Commoncomparisonchart: 'TABLEAU COMPARATIF',
  SignupforNews: "S'inscrire pour recevoir des nouvelles",
  price: 'Prix',
  EVENTStitle: 'Événement de lancement des nouveaux produits COROS',
  EVENTSkeywords: 'Événement de lancement des nouveaux produits COROS - 17 août 2021',
  EVENTSdescription: 'Événement de lancement des nouveaux produits COROS - 17 août 2021',
  EVENTStittext1: 'ÉVÉNEMENT DE LANCEMENT DES NOUVEAUX PRODUITS COROS',
  EVENTStitdate: '17 août 21',
  EVENTSaftertit: 'Voici ce que nous avons annoncé',
  EVENTSaftervertix2tit: 'COROS VERTIX 2',
  EVENTSaftervertix2subtit: "Montre GPS d'aventure",
  EVENTSafterpace2tit: 'COROS PACE 2',
  EVENTSafterpace2titsub: 'Montre GPS Sport <br>Édition Eliud Kipchoge',
  STORIEStitle: "COROS STORIES | Le chemin vers l'exploration de la perfection",
  STORIESkeywords: "COROS STORIES | Le chemin vers l'exploration de la perfection",
  STORIESdescription: 'Nous vous présentons les histoires les plus intrigantes et les plus inspirantes du monde, ainsi que les conseils dont vous avez besoin pour obtenir des performances optimales.',
  compproduct: 'Produit',
  compproductvertix2: "Montre d'aventure GPS VERTIX 2",
  compproductvertix: "Montre d'aventure GPS VERTIX",
  compproductapexpro: 'Montre GPS multisports APEX Pro Premium',
  compproductapex46: 'Montre GPS APEX 46mm Premium Multisport',
  compproductapex42: 'Montre GPS APEX 42mm Premium Multisport',
  compproductpace2: 'COROS PACE 2 Premium GPS Sport Watch',
  compvertix2name: "Montre d'aventure GPS VERTIX 2",
  compvertixname: "Montre d'aventure GPS VERTIX",
  compapexproname: 'Montre GPS multisports APEX Pro Premium',
  compapex46name: 'Montre GPS APEX 46mm Premium Multisport',
  compapex42name: 'Montre GPS APEX 42mm Premium Multisport',
  comppace2name: 'COROS PACE 2 Premium GPS Sport Watch',
  compdispsize: "Taille de l'écran",
  compdispsizevertix2: '1,4 in. 280 x 280 (64 couleurs)',
  compdispsizevertix: '1,2 pouces. 240 x 240 (64 couleurs)',
  compdispsizeapexpro: '1,2 pouces. 240 x 240 (64 couleurs)',
  compdispsizeapex46: '1,2 pouces. 240 x 240 (64 couleurs)',
  compdispsizeapex42: '1,1 in. 218 x 218 (64 couleurs)',
  compdispsizepace2: '1,2 pouces. 240 x 240 (64 couleurs)',
  compdisptype: "Type d'affichage",
  compdisptypevertix2: 'Écran tactile LCD à mémoire permanente',
  compdisptypevertix: 'Écran tactile LCD à mémoire permanente',
  compdisptypeapexpro: 'Écran tactile LCD à mémoire permanente',
  compdisptypeapex46: 'Mémoire LCD toujours active',
  compdisptypeapex42: 'Mémoire LCD toujours active',
  compdisptypepace2: 'Mémoire LCD toujours active',
  compscreenmaterial: "Matériau de l'écran",
  compscreenmaterialvertix2: 'Revêtement de type diamant Verre saphir',
  compscreenmaterialvertix: 'Revêtement de type diamant Verre saphir',
  compscreenmaterialapexpro: 'Verre saphir',
  compscreenmaterialapex46: 'Verre saphir',
  compscreenmaterialapex42: 'Verre saphir',
  compscreenmaterialpace2: 'Corning® Glass',
  compbezelmaterial: 'Matériau de la lunette',
  compbezelmaterialvertix2: 'Alliage de titane de grade 5 avec revêtement PVD',
  compbezelmaterialvertix: 'Alliage de titane de grade 5',
  compbezelmaterialapexpro: 'Alliage de titane de grade 5',
  compbezelmaterialapex46: 'Alliage de titane de grade 5',
  compbezelmaterialapex42: 'Acier inoxydable',
  compbezelmaterialpace2: 'Polymère renforcé par des fibres',
  compcovermaterial: 'Matériel de couverture',
  compcovermaterialvertix2: 'Alliage de titane avec revêtement PVD',
  compcovermaterialvertix: 'Alliage de titane',
  compcovermaterialapexpro: 'Aluminium',
  compcovermaterialapex46: 'Aluminium',
  compcovermaterialapex42: 'Aluminium',
  compcovermaterialpace2: 'Polymère renforcé par des fibres',
  compstrapmaterial: 'Matériau de la sangle',
  compstrapmaterialvertix2: 'Silicone/Nylon',
  compstrapmaterialvertix: 'Silicone/Nylon',
  compstrapmaterialapexpro: 'Silicone/Nylon',
  compstrapmaterialapex46: 'Silicone/Nylon',
  compstrapmaterialapex42: 'Silicone/Nylon',
  compstrapmaterialpace2: 'Silicone/Nylon',
  compquickreleasefitband: 'Bracelet à libération rapide/adaptée',
  compquickreleasefitbandvertix2: '26mm',
  compquickreleasefitbandvertix: '22mm',
  compquickreleasefitbandapexpro: '22mm',
  compquickreleasefitbandapex46: '22mm',
  compquickreleasefitbandapex42: '20mm',
  compquickreleasefitbandpace2: '20mm',
  compphysicalsize: 'Taille physique',
  compphysicalsizevertix2: '50,3 x 50,3 x 15,7mm',
  compphysicalsizevertix: '47 x 47 x 15,6 mm',
  compphysicalsizeapexpro: '47 x 47 x 13,4 mm',
  compphysicalsizeapex46: '46 x 46 x 11,9 mm',
  compphysicalsizeapex42: '42 x 42 x 11,75mm',
  compphysicalsizepace2: '42 x 42 x 11,7 mm',
  compweightwithsiliconeband: 'Poids avec bracelet en silicone',
  compweightwithsiliconebandvertix2: '89g',
  compweightwithsiliconebandvertix: '76g',
  compweightwithsiliconebandapexpro: '59g',
  compweightwithsiliconebandapex46: '55.3g',
  compweightwithsiliconebandapex42: '49g',
  compweightwithsiliconebandpace2: '35g-36g',
  compweightwithnylonband: 'Poids avec bracelet en nylon',
  compweightwithnylonbandvertix2: 'N/A',
  compweightwithnylonbandvertix: '63g',
  compweightwithnylonbandapexpro: '49g',
  compweightwithnylonbandapex46: '45g',
  compweightwithnylonbandapex42: '38g',
  compweightwithnylonbandpace2: '29g-30g',
  compphoneconnection: 'Connexion téléphonique',
  compphoneconnectionvertix2: 'Bluetooth',
  compphoneconnectionvertix: 'Bluetooth',
  compphoneconnectionapexpro: 'Bluetooth',
  compphoneconnectionapex46: 'Bluetooth',
  compphoneconnectionapex42: 'Bluetooth',
  compphoneconnectionpace2: 'Bluetooth',
  compaccessoryconnection: 'Connexion des accessoires',
  compaccessoryconnectionvertix2: 'Bluetooth',
  compaccessoryconnectionvertix: 'ANT+/Bluetooth',
  compaccessoryconnectionapexpro: 'ANT+/Bluetooth',
  compaccessoryconnectionapex46: 'ANT+/Bluetooth',
  compaccessoryconnectionapex42: 'ANT+/Bluetooth',
  compaccessoryconnectionpace2: 'ANT+/Bluetooth',
  compwaterresistance: "Résistance à l'eau",
  compwaterresistancevertix2: '10ATM (100 mètres/328 pieds)',
  compwaterresistancevertix: '15ATM (150 mètres/492 pieds)',
  compwaterresistanceapexpro: '10ATM (100 mètres/328 pieds)',
  compwaterresistanceapex46: '10ATM (100 mètres/328 pieds)',
  compwaterresistanceapex42: '10ATM (100 mètres/328 pieds)',
  compwaterresistancepace2: '5ATM (50 mètres/164 pieds)',
  compworkingtemperature: 'Température de fonctionnement',
  compworkingtemperaturevertix2: 'De -30°C à 50°C (-22°F à 122°F)',
  compworkingtemperaturevertix: 'De -20°C à 60°C (-4°F à 140°F)',
  compworkingtemperatureapexpro: '14°F à 140°F (-10°C à 60°C)',
  compworkingtemperatureapex46: '14°F à 140°F (-10°C à 60°C)',
  compworkingtemperatureapex42: '14°F à 140°F (-10°C à 60°C)',
  compworkingtemperaturepace2: 'De -20°C à 60°C (-4°F à 140°F)',
  compstoragetemperature: 'Température de stockage',
  compstoragetemperaturevertix2: 'De -30°C à 60°C (-22°F à 140°F)',
  compstoragetemperaturevertix: 'De -30°C à 70°C (-22°F à 158°F)',
  compstoragetemperatureapexpro: 'De -20°C à 70°C (de -4°F à 158°F)',
  compstoragetemperatureapex46: 'De -20°C à 65°C (-4°F à 149°F)',
  compstoragetemperatureapex42: 'De -20°C à 65°C (-4°F à 149°F)',
  compstoragetemperaturepace2: 'De -20°C à 65°C (-4°F à 149°F)',
  compchargingtime: 'Temps de charge',
  compchargingtimevertix2: 'Moins de 2 heures',
  compchargingtimevertix: 'Moins de 2 heures',
  compchargingtimeapexpro: 'Moins de 2 heures',
  compchargingtimeapex46: 'Moins de 2 heures',
  compchargingtimeapex42: 'Moins de 2 heures',
  compchargingtimepace2: 'Moins de 2 heures',
  compultramaxGPSmode: 'Mode GPS UltraMax',
  compultramaxGPSmodevertix2: '240 heures',
  compultramaxGPSmodevertix: '150 heures',
  compultramaxGPSmodeapexpro: '100 heures',
  compultramaxGPSmodeapex46: '100 heures',
  compultramaxGPSmodeapex42: '80 heures',
  compultramaxGPSmodepace2: '60 heures',
  compstandardfull: 'GPS complet standard (GPS/QZSS)',
  compstandardfullvertix2: '140 heures',
  compstandardfullvertix: '60 heures',
  compstandardfullapexpro: '40 heures',
  compstandardfullapex46: '35 heures',
  compstandardfullapex42: '25 heures',
  compstandardfullpace2: '30 heures',
  compallsystemson: 'Tous systèmes activés (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsonvertix2: '90 heures',
  compallsystemsonvertix: 'N/A',
  compallsystemsonapexpro: 'N/A',
  compallsystemsonapex46: 'N/A',
  compallsystemsonapex42: 'N/A',
  compallsystemsonpace2: 'N/A',
  compallsystemsdualfrequencyon: 'Tous systèmes + double fréquence activée (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsdualfrequencyonvertix2: '50 heures',
  compallsystemsdualfrequencyonvertix: 'N/A',
  compallsystemsdualfrequencyonapexpro: 'N/A',
  compallsystemsdualfrequencyonapex46: 'N/A',
  compallsystemsdualfrequencyonapex42: 'N/A',
  compallsystemsdualfrequencyonpace2: 'N/A',
  compdailyuse: 'Utilisation quotidienne',
  compdailyusevertix2: '60 jours',
  compdailyusevertix: '45 jours',
  compdailyuseapexpro: '30 jours',
  compdailyuseapex46: '30 jours',
  compdailyuseapex42: '24 jours',
  compdailyusepace2: '20 jours',
  comphrmonitoring: 'Suivi de FC 24/24 7/7',
  compopticalheartratemonitor: 'Moniteur optique de fréquence cardiaque',
  compbarometricaltimeter: 'Altimètre barométrique',
  compaccelerometer: 'Accéléromètre',
  compgyroscope: 'Gyroscope',
  compcompass: 'Boussole',
  compcorosevoLab: "COROS EvoLab (VO2 Max, Fatigue, Charge d'entraînement, Allure seuil, etc)",
  comprecoverytime: 'Temps de récupération',
  compinterval: 'Fractionné, Triathlon, Entraînement multisport',
  compswimmingheartrate: 'Fréquence cardiaque en natation',
  compsleepmonitoring: 'Suivi du sommeil',
  compphonenotifications: 'Notifications téléphoniques',
  comp3rdpartyintegration: "Intégration d'app tiers (Strava, TrainingPeaks, etc.)",
  compthickglovescompatible: 'Compatible avec les gants épais',
  compstructuredworkouts: "Entraînements structurés et programmes d'entraînement",
  comprunningpowerfromthewrist: 'Puissance de course au poignet',
  compstrydcompatible: 'Compatible avec Stryd',
  compphonenotificationsduringworkouts: "Notifications téléphoniques pendant les séances d'entraînement",
  compbodytemperaturemonitorsupport: 'Support de moniteur de température corporelle (CORE)',
  compbacklightalwaysnnnode: 'Mode rétro-éclairage permanent',
  compsapphireglass: 'Verre saphir',
  compbreadcrumbnavigation: "Navigation par fil d'Ariane",
  compbacktostartnavigation: 'Retour au départ',
  comp247blood: "Surveillance de l'oxygène sanguin 24/7 en haute altitude",
  compopticalpulseoxmonitor: "Moniteur optique d'oxymétrie de pouls",
  compdedicatedbacklightbutton: 'Bouton de rétro-éclairage dédié',
  comptouchscreenmode: 'Mode écran tactile',
  compaltitudemode: 'Mode Altitude',
  compextremedurability: 'Durabilité extrême',
  compallsatellitedualfrequency: 'Puce GNSS dual-fréquence tout-satellite',
  compgloballandscapemaplayer: 'Couche de carte paysage mondial',
  compregionaltopomaplayer: 'Couche de carte topographique régionale',
  compregionaltopomaplayervertix: 'Peut-être disponible avant 2022',
  compregionaltopomaplayerapexpro: 'Peut-être disponible avant 2022',
  comphybridmaplayer: 'Couche de carte hybride',
  compelectrocardiogramsensor: "Capteur d'électrocardiogramme",
  comphrvindex: 'Indice VFC',
  compWiFi: 'Wi-Fi',
  compmusic: 'Musique',
  compinsta360cameracontrol: 'Contrôle de la caméra',
  compvirtualrun: 'Course virtuelle',
  comppowermetercalibration: 'Calibrage du Power Meter ANT+',
  compsupportedworkoutmodes: "Modes d'entraînement pris en charge",
  comprun: 'Course',
  compindoorrun: 'Course sur tapis',
  comptrackrun: 'Piste',
  compbike: 'Vélo',
  compindoorbike: "Vélo d'intérieur",
  compopenwater: 'Eau libre',
  comppoolswim: 'Natation en piscine',
  compflatwater: 'Eau calme',
  comprowing: 'Aviron',
  compGPScardio: 'GPS Cardio',
  compgymcardio: 'Gym Cardio',
  comptriathlon: 'Triathlon',
  compindoorrower: 'Rameur indoor',
  compstrength: 'Musculation',
  comptraining: 'Entraînement (programmes structurés)',
  comptrainingplan: "Plan d'entraînement",
  compmultisport: 'Multisport',
  compsupportedgnss: 'GNSS pris en charge (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compwalk: 'Marche',
  comptrailrun: 'Trail',
  comphike: 'Randonnée',
  compmountainclimb: 'Escalade en montagne',
  compski: 'Ski',
  compsnowboard: 'Snowboard',
  compxcski: 'Ski de fond',
  compskitouring: 'Ski de randonnée',
  compspeedsurfing: 'Speedsurfing',
  compwindsurfing: 'Planche à voile',
  compwhitewater: 'Eau calme',
  compyes: '√',
  compbacklightbuttonshortcut: 'Raccourci avec le bouton de rétro-éclairage',
  compmultipitchclimb: 'Escalade multi-pitch',
  ////展会
  Emailtittext1: 'ADRESSE EMAIL',
  Emailsubmit: "S'INSCRIRE",
  Emailtitle: "Semi-marathon d'OC",
  Emailkeywords: "Semi-marathon d'OC",
  Emaildescription: "Semi-marathon d'OC",
  ////////////////////////////////////////////////////////
  //首页
  index: {
    title: 'COROS-Home',
    keywords: 'mots-clés',
    description: '中文-desc-VERTIX',
    helloworld: "mot d'ordre",
    herder: 'en-tête',
    footer: 'footer'
  },
  //关于我们
  about: {
    title: 'test à propos de nous',
    keywords: 'mots-clés',
    description: "description de l'entreprise"
  },
  // vertix2

  select: 'Veuillez sélectionner',
  "continue": 'Continuer'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/vertix.js
/* harmony default export */ const es_vertix = ({
  name: 'COROS VERTIX',
  accessories: 'ACCESSORIES',
  readMore: 'READ MORE',
  'Rugged YET premium': {
    title: 'Rugged YET premium',
    desc: 'A featherlight, corrosion free titanium frame and bezel showcase our commitment to durability. The quality of the VERTIX allows you to attack the world’s harshest elements without sacrificing your style.'
  },
  'Virtually scratch proof screen': {
    title: 'Virtually scratch proof screen',
    desc: 'Sapphire glass screen with Diamond-Like Coating gives VERTIX the most resilient screen available.'
  },
  'The ONLY GPS watch with a 150-meter waterproof rating': {
    title: 'The ONLY GPS watch with a 150-meter waterproof rating',
    desc: '15 ATM rated: withstands pressures equivalent to a depth of 150 meters.'
  },
  'Ultra-light Durability': {
    title: 'Ultra-light Durability',
    desc: 'VERTIX body weighs just 54 grams, making it the lightest watch in its class.'
  },
  'VERTIX is your Sherpa': {
    title: 'VERTIX is your Sherpa',
    desc: '24/7 blood oxygen monitoring With Altitude Mode, VERTIX is the only watch to provide daily acclimatization evaluation and suggests when it is safe to climb higher.'
  },
  'Industry leading performance in extreme cold': {
    title: 'Industry leading performance in extreme cold',
    desc: 'Works down to -4°F/-20°C with less than a 30% depreciation in battery performance VERTIX lasts for 21 hours in GPS mode under -22°F/-30°C extreme testing.'
  },
  'EASY use in ANY condition': {
    title: 'EASY use in ANY condition',
    desc: 'Completely new engineered Digital Dial for one finger control, even with thick climbing gloves or under water.'
  },
  'Track your path': {
    title: 'Track your path',
    desc: 'Now supports offline mapping, and includes: Landscape, Topo and Hybrid modes. By using touch screen and the digital dial, users can explore our new mapping function. You can track your path over maps. This is a completely revamped navigation experience on your wrist.'
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: 'With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and onto your watch. With the new training mode, your best efforts are well within your reach.'
  },
  'Light up the Night’s Sky': {
    title: 'Light up the Night’s Sky',
    desc: 'Night Mode – a new always on mode for nighttime activities. While manual options still remain for quick bursts of the backlight, Night Mode, leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark, but dim enough to maintain superior battery performance throughout your run or ride even needed all night long. Don’t worry, it turns off automatically when you finish you workout, or at sunrise.'
  },
  'Stay on Track': {
    title: 'Stay on Track',
    desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run on it.'
  },
  'Ice Breaker': {
    title: 'Ice Breaker',
    desc: 'Break the Ice in any group setting with this one of a kind watch.'
  },
  'Stand out in a Crowd': {
    title: 'Stand out in a Crowd',
    desc: 'The exclusive azure titanium bezel is a showstopper while the transparent fibre case creates a watch that is as elegant on your wrist as it is powerful on your adventure.'
  },
  'Handled With Care': {
    title: 'Handled With Care',
    desc: 'While strong enough to handle the harshest elements mother nature throws at it, the translucent fibre frame is hand assembled to ensure the best possible quality.'
  },
  batteryLife: {
    title: 'Battery life beyond your imagination',
    desc: 'With battery life strong enough for a Himalayan expedition or a thru-hike on the John Muir Trail all without a charge.',
    reqular: {
      title: '45d',
      desc: '45 days of regular use'
    },
    gps: {
      title: '60h',
      desc: '60 hours full GPS mode'
    },
    ultraMax: {
      title: '150h',
      desc: '150 hours UltraMax mode'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/products.js
/* harmony default export */ const es_products = ({
  pageMeta: {
    title: 'Descubra los relojes GPS COROS Premium',
    keywords: 'Maratón ultra cross country carrera reloj inteligente notificaciones montañismo calorías seguimiento del sueño distancia impermeable millas monitor de ritmo cardíaco GPS Running Natación Triatlón Entrenamiento Camping Senderismo Ejercicio Fitness Tracker Brújula',
    description: 'Relojes deportivos con GPS de alta calidad construidos para corredores, aventureros y todos los atletas. COROS lidera la revolución del entrenamiento atlético a través de la tecnología avanzada.'
  },
  learnMore: 'CONOCE MÁS',
  compareEntrance: 'Comparativa de modelos',
  pageTitle: 'relojes coros gps',
  pageSubtitle: 'y sensores de entrenamiento',
  pageDesc: 'Cada reloj GPS de la línea COROS ha sido diseñado, \n    probado y perfeccionado para el atleta, por el atleta.\n    Nuestros relojes combinan hardware de alta calidad\n    con tecnología innovadora para proporcionar a los \n    atletas de resistencia el equipo en el que confían\n    en los entornos más extremos del mundo.',
  pace2: {
    name: 'COROS PACE 2',
    header: 'RELOJ DEPORTIVO GPS',
    desc: 'Para atletas multideportivos\nque van rápido y lejos'
  },
  pace2_ek: {
    name: 'COROS PACE 2 EK',
    header: 'EDICIÓN ELIUD KIPCHOGE',
    desc: 'El reloj de Eliud inspira a entrenar un poco más y a Carrera un poco más rápido'
  },
  apex2: {
    name: 'COROS APEX 2',
    header: 'RELOJ GPS OUTDOOR',
    desc: 'Para atletas de montaña que\nentrenan duro y llegan lejos'
  },
  apex2pro: {
    name: 'COROS APEX 2 Pro',
    header: 'RELOJ GPS OUTDOOR',
    desc: 'Para atletas de montaña que\nentrenan duro y llegan lejos'
  },
  apex_42: {
    name: 'COROS APEX',
    header: 'RELOJ GPS MULTIDEPORTE PREMIUM',
    desc: 'Para los atletas al aire libre\nque viajan ligeros y rápidos'
  },
  apex_46: {
    name: 'COROS APEX',
    header: 'RELOJ GPS MULTIDEPORTE PREMIUM',
    desc: 'Para atletas al aire libre\nque viajan ligeros y rápidos'
  },
  apex_pro: {
    name: 'COROS APEX Pro',
    header: 'RELOJ GPS OUTDOOR',
    desc: 'Para atletas de resistencia\nen entornos difíciles'
  },
  vertix: {
    name: 'COROS VERTIX',
    header: 'RELOJ GPS DE AVENTURA',
    desc: 'Nuestro reloj original\npara aventureros extremos'
  },
  vertix2: {
    name: 'COROS VERTIX 2',
    header: 'RELOJ DE AVENTURA GPS',
    desc: 'Para atletas que\nlo quieren todo'
  },
  pod: {
    name: 'COROS POD',
    header: 'DISPOSITIVO DE OPTIMIZACIÓN DEL RENDIMIENTO',
    desc: 'Métricas avanzadas de carrera para\noptimizar su rendimiento'
  },
  pod2: {
    name: 'COROS POD 2',
    header: 'DISPOSITIVO DE OPTIMIZACIÓN DEL RENDIMIENTO',
    desc: 'Precisión de siguiente nivel\npara todos los corredores'
  },
  hrm: {
    name: 'Pulsómetro COROS',
    header: 'SENSOR ÓPTICO DE FRECUENCIA CARDIACA',
    desc: 'Precisión de datos desde la\ncomodidad de su brazo'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/plans.js
/* harmony default export */ const es_plans = ({
  plan: 'PLAN',
  roadRunning: 'Carrera',
  getItNow: 'descarguelo ahora',
  bannerTitle: 'planes de entrenamiento',
  running: {
    '12-Week Beginner Half-Marathon Training Plan': {
      title: 'Plan de iniciación en media maratón 12 semanas',
      desc: "Este plan de 12 semanas basado en la FC se centra en aumentar el volumen con vistas a una primera media marat\xF3n. Los corredores deben estar preparados para correr 5 veces a la semana entre 25 y 45 km. Las sesiones de los mi\xE9rcoles y los domingos son espec\xEDficas para la media marat\xF3n, pero no dudes en modificar los horarios para adaptarlos a tu agenda. No dudes en ponerte en contacto con nosotros en coach@coros.com para hacernos llegar tus comentarios e impresiones sobre tu entrenamiento."
    },
    '12-Week Intermediate Half-Marathon Training Plan': {
      title: 'Plan intermedio de media maratón 12 semanas',
      desc: "Este plan de 12 semanas basado en la FC se centra en aumentar el volumen mediante entrenamiento aer\xF3bico y de tempo. Los corredores deben estar preparados para correr 5 veces a la semana entre 25 y 50 km. Las sesiones de los mi\xE9rcoles y los domingos son espec\xEDficas para la media marat\xF3n, pero si\xE9ntete libre de cambiar el horario para adaptarlo a tu agenda. No dudes en ponerte en contacto con nosotros en coach@coros.com para hacernos llegar tus comentarios e impresiones sobre tu entrenamiento."
    },
    '12-Week Advanced Half-Marathon Training Plan': {
      title: 'Plan avanzado de media maratón 12 semanas',
      desc: "Este plan de 12 semanas basado en la FC se centra en mejorar tu ritmo de media marat\xF3n y tu comodidad en condiciones de alta intensidad. Los corredores deben estar preparados para correr 6 veces por semana entre 30 y 70 km. Las sesiones de los mi\xE9rcoles, viernes y domingos son espec\xEDficas para la media marat\xF3n, pero si\xE9ntete libre de cambiar el programa para adaptarlo a tu horario. No dudes en ponerte en contacto con nosotros en coach@coros.com para hacernos llegar tus comentarios e impresiones sobre tu entrenamiento."
    },
    '20-Week Beginner Marathon Training Plan': {
      title: 'Plan de entrenamiento de maratón 20 semanas - Iniciación ',
      desc: "Este plan de 20 semanas basado en la frecuencia cardiaca se centra en la construcci\xF3n de volumen para un primer marat\xF3n al final del plan. Los corredores deben estar preparados para correr hasta 5 veces por semana de 20 a 65 kil\xF3metros. Los entrenamientos de los jueves y los domingos son las sesiones espec\xEDficas para el marat\xF3n, pero si\xE9ntase libre de alternarlas en funci\xF3n de su horario. Dado que el plan se basa en sus Zonas de Umbral de FC, le animamos a que complete un test del nivel de estado de carrera al principio para asegurarse de que est\xE1 entrenando en las zonas correctas. No dude en ponerse en contacto con nosotros a trav\xE9s de coach@coros.com para obtener informaci\xF3n y comentarios sobre su entrenamiento."
    },
    '20-Week Intermediate Marathon Training Plan': {
      title: 'Plan de entrenamiento de maratón 20 semanas - Intermedio',
      desc: "Este plan de 20 semanas basado en la frecuencia cardiaca se centra en la construcci\xF3n de volumen para un primer marat\xF3n al final del plan. Los corredores deben estar preparados para correr hasta 5 veces por semana de 24 a 72 kil\xF3metros. Los entrenamientos de los jueves y los domingos son las sesiones espec\xEDficas para el marat\xF3n, pero si\xE9ntase libre de alternarlas en funci\xF3n de su horario. Dado que el plan se basa en sus Zonas de Umbral de FC, le animamos a que complete un test del nivel de estado de carrera al principio para asegurarse de que est\xE1 entrenando en las zonas correctas. No dude en ponerse en contacto con nosotros a trav\xE9s de coach@coros.com para obtener informaci\xF3n y comentarios sobre su entrenamiento."
    },
    '20-Week Advanced Marathon Training Plan': {
      title: 'Plan de entrenamiento de maratón 20 semanas - Avanzado ',
      desc: "Este programa de 20 semanas basado en la frecuencia cardiaca se centra en mejorar su ritmo umbral mediante entrenamientos de alta intensidad y volumen. Los corredores deben estar preparados para correr 6 veces por semana entre 35 y 90 km. Los entrenamientos de los martes y los viernes son las sesiones espec\xEDficas de alta intensidad, pero si\xE9ntase libre de cambiar el horario para adaptarlo a su agenda. Dado que el plan se basa en sus Zonas de Umbral de FC, le animamos a que complete un test del nivel de estado de carrera al principio para asegurarse de que est\xE1 entrenando en las zonas correctas. No dude en ponerse en contacto con nosotros a trav\xE9s de coach@coros.com para obtener informaci\xF3n y comentarios sobre su entrenamiento."
    },
    '16-Week Beginner Marathon Training Plan': {
      title: 'Plan de entrenamiento de maratón 16 semanas - Iniciación ',
      desc: "Este plan de 16 semanas basado en la frecuencia cardiaca se centra en la construcci\xF3n de volumen para un primer marat\xF3n al final del plan. Los corredores deben estar preparados para correr hasta 5 veces por semana de 25 a 65 kil\xF3metros. Los entrenamientos de los jueves y los domingos son las sesiones espec\xEDficas para el marat\xF3n, pero si\xE9ntase libre de alternarlas en funci\xF3n de su horario. Dado que el plan se basa en sus Zonas de Umbral de FC, le animamos a que complete un test del nivel de estado de carrera al principio para asegurarse de que est\xE1 entrenando en las zonas correctas. No dude en ponerse en contacto con nosotros a trav\xE9s de coach@coros.com para obtener informaci\xF3n y comentarios sobre su entrenamiento."
    },
    '16-Week Intermediate Marathon Training Plan': {
      title: 'Plan de entrenamiento de maratón 16 semanas - Intermedio',
      desc: "Este plan de 16 semanas basado en la frecuencia cardiaca se centra en la construcci\xF3n de volumen para un primer marat\xF3n al final del plan. Los corredores deben estar preparados para correr hasta 5 veces por semana de 30 a 70 kil\xF3metros. Los entrenamientos de los jueves y los domingos son las sesiones espec\xEDficas para el marat\xF3n, pero si\xE9ntase libre de alternarlas en funci\xF3n de su horario. Dado que el plan se basa en sus Zonas de Umbral de FC, le animamos a que complete un test del nivel de estado de carrera al principio para asegurarse de que est\xE1 entrenando en las zonas correctas. No dude en ponerse en contacto con nosotros a trav\xE9s de coach@coros.com para obtener informaci\xF3n y comentarios sobre su entrenamiento."
    },
    '16-Week Advanced Marathon Training Plan': {
      title: 'Plan de entrenamiento de maratón 16 semanas - Avanzado ',
      desc: "Este programa de 16 semanas basado en la frecuencia cardiaca se centra en mejorar su ritmo umbral mediante entrenamientos de alta intensidad y volumen. Los corredores deben estar preparados para correr 6 veces por semana entre 30 y 90 km. Los entrenamientos de los martes y los viernes son las sesiones espec\xEDficas de alta intensidad, pero si\xE9ntase libre de cambiar el horario para adaptarlo a su agenda. Dado que el plan se basa en sus Zonas de Umbral de FC, le animamos a que complete un test del nivel de estado de carrera al principio para asegurarse de que est\xE1 entrenando en las zonas correctas. No dude en ponerse en contacto con nosotros a trav\xE9s de coach@coros.com para obtener informaci\xF3n y comentarios sobre su entrenamiento."
    },
    '12-week Intermediate Mountain Training Plan': {
      title: "Plan de entrenamiento intermedio para monta\xF1a de 12 semanas",
      desc: "El plan intermedio de 12 semanas de Kilian Jornet est\xE1 dise\xF1ado para ayudar a los atletas a desarrollar su resistencia y su capacidad para rendir en distancias m\xE1s largas. Con una mezcla de intensidad, carreras aer\xF3bicas largas y un enfoque en el desnivel, los atletas que se centran en sus eventos de trail o recorridos en terreno ondulado se preparar\xE1n en consecuencia para sus objetivos. Los atletas deben ser capaces de correr 2 horas antes de comenzar este plan."
    },
    '12-Week Advanced Mountain Training Plan': {
      title: "Plan de entrenamiento avanzado para monta\xF1a de 12 semanas",
      desc: "El plan avanzado de 12 semanas de Kilian Jornet est\xE1 dise\xF1ado para aumentar la resistencia del atleta y su capacidad para rendir durante periodos m\xE1s largos. Con una mezcla de intensidad, carreras aer\xF3bicas largas, y un enfoque en el desnivel, los atletas que tienen como objetivo eventos de trail o recorridos en terreno ondulado se preparar\xE1n en consecuencia para sus objetivos. Hay varios d\xEDas largos en este plan de m\xE1s de 4 horas, por lo que es el mejor para aquellos que buscan eventos m\xE1s largos/ultra."
    },
    '12-Week Molly Seidel Marathon Plan': {
      title: 'Plan de 12 semanas para maratón de Molly Seidel',
      desc: 'Este plan está diseñado para mostrar los entrenamientos clave que Molly Seidel utiliza para preparar sus carreras de maratón. Junto con los entrenamientos clave proporcionados por el entrenador de Molly, Jonathon Green, este plan también asegurará que los atletas construyan el volumen adecuado necesario para correr un maratón a su potencial. Si busca entrenar como los profesionales, este es un gran plan que le guiará en cada paso del camino. Si desea un enfoque más individualizado, visite verdetrackclub.com y póngase en contacto con el entrenador Green para que le ayude.'
    },
    '2:45-3:00 12-Week Marathon Plan': {
      title: 'Plan de maratón 2:45-3:00 en 12 semanas',
      desc: 'Este es un plan de entrenamiento agresivo que inicia a los atletas en el rango de 30-40 millas/semana (50-65km) y aumenta hasta 60 millas/semana (100km). Los entrenamientos consisten en sesiones de intervalos a mitad de semana, volumen base y carreras largas a ritmo específico de maratón. Los atletas que comiencen este programa deben tener un volumen base de 30-40 millas (50-65km) semanales. Los atletas adquirirán conciencia de un ritmo de 6:18-6:52/milla (3:55-4:16/km) que les hará correr un maratón de menos de 3 horas.'
    },
    '3:15-3:35 12-Week Marathon Plan': {
      title: 'Plan de maratón 3:15-3:35  en 12 semanas',
      desc: 'Este plan de entrenamiento está diseñado para aumentar el volumen de los atletas hasta las 50 millas/semana (80Km) mientras los prepara para correr una maratón de 3:15-3:35. Los atletas completarán una mezcla de intervalos de umbral a mitad de semana, millas base de resistencia aeróbica para volumen y entrenamientos específicos de maratón para marcar su ritmo. Los atletas deben tener una base de 30-40 millas/semana (50-65km) antes de empezar este plan.'
    },
    '4:00-4:30 12-Week Marathon Plan': {
      title: 'Plan de maratón 4:00-4:30 en 12 semanas',
      desc: 'Este plan comienza con 26 millas (40km) /semana y aumenta hasta 40millas (65km)/semana antes de su reducción progresiva hacia el maratón. La mayor parte de este plan tiene a los atletas corriendo a su ritmo cardíaco de resistencia aeróbica, o a un ritmo específico de maratón para un final de maratón de 4:00-4:30 (9:09-10:17/ritmo de milla - 5:42-6:24/km)). Los atletas deben ser capaces de correr 25-30 millas (40-50km)/semana antes de comenzar este programa. A medida que los atletas progresan en el plan de entrenamiento, deben utilizar los entrenamientos específicos de maratón para tener una expectativa realista del día de la carrera. Si es capaz de realizar todos los entrenamientos específicos por debajo de 9:09/milla(5:42/km) de ritmo, entonces quizás un maratón sub 4 esta a su alcance. Si le cuesta mantener un ritmo de 10:17/milla(6:24/km), entonces quizá por encima de 4:30 sea más realista. Siéntase libre de ajustar los días específicos según sea necesario, ¡mientras deja los días de resistencia aeróbica en su sitio!'
    },
    'Beginner Marathon Plan': {
      title: 'Plan de maratón para principiantes',
      desc: 'Este plan de entrenamiento está diseñado para el individuo que comienza un nuevo bloque de entrenamiento y busca Carrera su primer maratón. Tal vez usted corrió un 10k, o 1/2 maratón en el pasado y quiere saltar en la distancia. Este plan comienza con 13 millas/semana y aumenta hasta 50 millas/semana en la semana 18. Diseñado para construir de una manera segura y eficiente, los atletas pueden estar tranquilos sabiendo que estarán en camino de Carrera 26.2 millas después de las 20 semanas. Si actualmente estás por encima del volumen de entrenamiento de las primeras semanas, mantén tu volumen actual hasta que llegues al punto donde el plan tiene más millas. ¡Simplemente continúe a partir de ahí y disfrute de los resultados! ¡Asegúrate de compartir tu viaje con nosotros y haznos saber cómo va tu entrenamiento! #exploreperfection'
    },
    '6-Week Mountain Running Training Plan': {
      title: 'Plan de entrenamiento de carreras de montaña de 6 semanas',
      desc: 'Plan de entrenamiento de 6 semanas para carreras de montaña diseñado para aumentar tu capacidad de mantener intensidades más altas en terrenos accidentados y técnicos. Este plan se centra en días más largos con intensidades bajas/moderadas. Contiene una acumulación de 2 bloques sin tiempo de taper, pero altamente específico para una amplia variedad de proyectos de montaña. Los atletas deben estar preparados para 6 días de carrera de hasta 80 km (50 millas) semanales. Es obligatorio el acceso a terrenos montañosos.'
    },
    '12-Week 100 Mile Ultra Training Plan': {
      title: 'Plan de entrenamiento de 12 semanas de 100 Millas Ultra',
      desc: 'Para los atletas que quieran empezar este plan de entrenamiento, recomendamos que tengan al menos 80 de condición física básica y una media de más de 40 millas/semana corriendo. Si aún no estás en este nivel, por favor sigue uno de nuestros otros planes de entrenamiento para alcanzar este punto. Este plan está diseñado para desarrollar la condición física de los atletas en el transcurso de 12 semanas y tenerlos listos para Carrera una ultramaratón de 100 millas. El plan consiste en fuerza y carrera para asegurar que los atletas tengan la fuerza muscular y la resistencia necesarias. Los entrenamientos clave de cada semana son las carreras largas de los fines de semana. Si necesitas cambiar tu horario, está bien, pero céntrate en los días largos y en desarrollar tu resistencia aeróbica.'
    },
    '10-Week Return to Running Training Plan': {
      title: 'Plan de entrenamiento de 10 semanas para volver a Carrera',
      desc: 'El objetivo de este plan de entrenamiento es ayudar a los usuarios a volver a Carrera. Este plan se compone de caminatas, caminatas/carreras y carreras. Este plan llevará a los usuarios a través de una progresión gradual de entrenamiento y les ayudará a volver a Carrera de forma constante después de 10 semanas de entrenamiento. Asegúrese de comenzar a su propio ritmo y nivel de comodidad. Los días de entrenamiento pueden cambiarse en el calendario según sea necesario. Este plan está diseñado para ayudarle a adaptar el entrenamiento a su estilo de vida. Después de las 10 semanas de seguir este plan, podrás seguir un plan específico de carrera si lo prefieres. Asegúrese de mantenerlo divertido y dentro de los parámetros prescritos. La mejor manera de alcanzar el objetivo de 10 semanas es a través de la consistencia y el entrenamiento manejable. ¡Lo has conseguido! ¡Disfruta del viaje!'
    },
    '8-Week Off-Season Training Plan': {
      homeRecommendedTitle: 'Plan de entrenamiento de 8 semanas fuera de temporada',
      title: 'Plan de entrenamiento de 8 semanas fuera de temporada',
      desc: 'Este plan está diseñado para mantener a los atletas en movimiento durante la temporada baja. Incorporaremos 15-25millas/semana de carrera junto con actividades de entrenamiento cruzado. Los atletas pueden mezclar cualquier actividad de entrenamiento cruzado en la que se indique "ciclismo". El objetivo general será tener a los atletas sanos y motivados cuando lleguen a su próxima temporada de entrenamiento. Asegúrese de mantener las cosas relativamente fáciles durante esta parte del año. Esto tiene como objetivo ayudar a la recuperación mientras se mantiene en forma.'
    },
    '8 Week Threshold Development': {
      title: '8 semanas de desarrollo del umbral',
      desc: 'El objetivo de este plan de entrenamiento es aumentar el tiempo en el umbral y el VO2 a lo largo de las semanas. El volumen semanal se mantendrá relativamente constante y sólo un aumento de la intensidad servirá para crear un cambio. Los atletas deben estar preparados para Carrera 5-6 días a la semana con un volumen de 25-40 millas a la semana. El énfasis de cada semana estará en el umbral clave o en las series de VO2. Las carreras de base están pensadas para mantener el volumen y ayudar a los atletas a recuperarse. No hay que sobrepasar los ritmos de carrera fáciles. Al final de estas 8 semanas, realice una prueba de 5k. Si su ritmo de umbral ha cambiado, debería ver nuevas zonas y ser capaz de volver a aplicar este plan de entrenamiento si se desea más trabajo de umbral.'
    },
    '12 Week Run Speed Development': {
      title: '12 semanas de desarrollo de la velocidad de carrera',
      desc: 'Este plan está diseñado para corredores con un kilometraje base semanal de 25-40 millas (40-65km). A lo largo de este plan, el volumen semanal se mantendrá alrededor de 25-30 millas cada semana. Los corredores pueden añadir más volumen de base según sea necesario, pero deben centrarse en los entrenamientos de velocidad. Debido a la naturaleza del entrenamiento para la velocidad de carrera, se recomienda que los atletas tomen días de recuperación adicionales si sus piernas están doloridas o fatigadas por los entrenamientos anteriores. Al final de estas 12 semanas, los corredores deberían ver un aumento en su umbral, v02 y eficiencia en la carrera. Realizar una carrera de 5k, 10k o media maratón siguiendo este plan debería resultar en tiempos más rápidos.'
    },
    '50k Trail Run Training Plan': {
      title: 'Plan de entrenamiento de 50k Trail Run',
      desc: 'Este plan de entrenamiento comienza con 25 millas/semana y llega a 60+ millas al final. Las primeras 10 semanas de este plan están diseñadas para desarrollar la resistencia aeróbica de los atletas. Las últimas 10 semanas son específicas para las exigencias del trail running y están pensadas para alcanzar la máxima condición física antes de la competición. Debido a que todos los eventos de trail son diferentes, se recomienda que los atletas corran por senderos o en condiciones que imiten el día de la carrera. Este plan asegurará que tu forma física esté preparada, pero los individuos deben buscar ganancias verticales o elementos que ayuden a maximizar su preparación. Como siempre, si un corredor necesita días libres adicionales, por favor tómelos. Los días clave en este plan son los miércoles y los fines de semana. Debes hacer de ellos tu máxima prioridad. Que lo disfrutes.'
    },
    'Beginner Sprint Distance Triathlon Plan': {
      title: 'Plan de triatlón de distancia sprint para principiantes',
      desc: 'Un plan de 12 semanas diseñado para ayudar a los usuarios a completar 800 metros de natación, 12,4 millas de ciclismo y 3,1 millas de carrera. Este plan utilizará el entrenamiento del ritmo cardíaco para asegurar un entrenamiento adecuado y eficiente. Los atletas deben conocer la técnica básica de natación antes de comenzar. Los atletas también deben ser capaces de entrenar 4-5 veces a la semana durante 30-45 minutos al día antes de comenzar este plan.'
    },
    '12 Week Half Marathon HR Plan': {
      homeRecommendedTitle: 'Media Maratón\nEntrenamiento de 12 semanas',
      title: 'Plan de 12 semanas de entrenamiento para la media maratón',
      desc: 'Este plan está diseñado tanto para principiantes como para corredores intermedios. Los corredores deben sentirse cómodos corriendo 4 veces por semana y tener un volumen semanal de 10-15 millas. El plan utilizará las zonas de frecuencia cardíaca para asegurar un entrenamiento adecuado y eficiente. Al final del plan, el usuario Carreraá 50 kilómetros por semana y habrá aumentado su resistencia aeróbica y su capacidad para mantener los esfuerzos de tempo.'
    },
    'Beginner Runner Base Plan (Imperial)': {
      title: 'Plan Base para Corredores Principiantes (Imperial)',
      desc: 'Un plan de 10 semanas diseñado para un corredor principiante o intermedio, que llega a los 50 kilómetros por semana. Asumiendo que el ritmo se mantiene durante toda la semana, las carreras más largas están pensadas para sentirse naturalmente más duras que otros días, lo cual es de esperar. Este plan está en imperial.'
    },
    '12 Week 5000m Training Plan (Metric)': {
      title: 'Plan de entrenamiento de 12 semanas para 5.000 metros (métrico)',
      desc: 'Un plan de 12 semanas creado por la olímpica estadounidense Kim Conley. Los corredores deben estar preparados para Carrera 6-7 veces a la semana. El sábado es un día de descanso, pero se puede Carrera hasta 60 minutos si es necesario. Este plan está en sistema métrico.'
    },
    'Beginner Runner Base Plan (Metric)': {
      title: 'Plan básico para corredores principiantes (métrico)',
      desc: 'Un plan de 10 semanas diseñado para un corredor principiante o intermedio, que llega hasta 30 millas por semana. Asumiendo que el ritmo se mantiene durante toda la semana, las carreras más largas están pensadas para sentirse naturalmente más duras que otros días, lo que es de esperar. Este plan está en sistema métrico.'
    },
    'Sub-3:15 Marathon': {
      title: 'Maratón por debajo de 3:15',
      desc: 'Un plan de 8 semanas diseñado para corredores de maratón de 3:30 con alta resistencia aeróbica para Carrera un maratón por debajo de 3:15. Los corredores deben estar preparados para Carrera 5-6 días a la semana.'
    },
    'Sub-25 5K': {
      title: 'Sub-25 5K',
      desc: 'Un plan de 14 semanas diseñado para corredores que quieren Carrera un 5k en 25 minutos. Los corredores deben estar preparados para Carrera 5 días a la semana.'
    },
    'Competitive 10K': {
      title: '10K de competición',
      desc: 'Un plan de 12 semanas diseñado para que los corredores competitivos entrenen para carreras de 10K. Los corredores deben estar preparados para Carrera entre 30-40 millas por semana.'
    },
    'Half Marathon': {
      title: 'Media Maratón',
      desc: 'Un plan de 15 semanas diseñado para que los corredores de competición entrenen para una media maratón. Los corredores deben estar preparados para Carrera entre 55-70 millas por semana.'
    },
    Marathon: {
      title: 'Maratón',
      desc: 'Un plan de 12 semanas diseñado para corredores que quieren alcanzar su máxima forma para la maratón. Si ha estado corriendo menos de 50 kilómetros por semana, debe seguir el plan de entrenamiento básico para llegar a los 50 kilómetros por semana.El objetivo principal de este plan es mejorar su ritmo de lactancia a través del tempo, los intervalos de lactancia y las carreras largas de progresión. Las prioridades secundarias incluyen aumentar las carreras largas y el kilometraje total.'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/contact.js
/* harmony default export */ const es_contact = ({
  pageTitle: 'CONTACTAR CON NOSOTROS',
  companyName: 'COROS Wearables, Inc.',
  mail: 'Correo',
  mailValue: '3 Peters Canyon Rd\n    Suite 100\n    Irvine, CA 92606\n    ESTADOS UNIDOS',
  phone: 'Teléfono',
  phoneValue: '+1 (855) 934-4411',
  businessHours: 'Horario de atención al público',
  businessHoursValue: 'Lunes - Viernes 9AM - 6PM Hora del Pacífico',
  salesSupport: 'Soporte de ventas y socios',
  salesSupportValue: 'sales@coros.com',
  consumerSupport: 'Soporte al consumidor',
  consumerSupportValue: 'support@coros.com',
  careerOpportunities: 'Oportunidades profesionales',
  careerOpportunitiesValue: 'careers@coros.com',
  mediaRelations: 'Relaciones con los medios de comunicación',
  mediaRelationsValue: 'press@coros.com',
  distributors: 'Distribuidores globales de COROS',
  area: {
    hk: 'Hong Kong',
    au_nz: 'Australia y Nueva Zelanda',
    ar: 'Argentina',
    BeNeLux: 'BeNeLux',
    bg: 'Bulgaria',
    br: 'Brasil',
    ca: 'Canadá',
    cl: 'Chile',
    co: 'Colombia',
    ec: 'Ecuador',
    ee_lv_lt: 'Estonia, Letonia, Lituania',
    fr: 'Francia',
    de: 'Alemania',
    gt: 'Guatemala',
    gr: 'Grecia',
    id: 'Indonesia',
    il: 'Israel',
    it: 'Italia',
    in_np_bd: 'India',
    jp: 'Japón',
    my: 'Malasia',
    mt: 'Malta',
    mu: 'Mauricio',
    mx: 'México',
    me: 'Oriente Medio',
    nordics: 'Países nórdicos (Suecia, Noruega, Finlandia, Dinamarca, Islandia)',
    pl: 'Polonia, Hungría, República Checa, Eslovaquia, Eslovenia, Croacia, Serbia',
    ph: 'Filipinas',
    qa: 'Qatar',
    ro: 'Rumanía',
    ru: 'Rusia',
    sg: 'Singapur',
    za: 'Sudáfrica',
    es: 'España, Portugal, Andorra',
    ch: 'Suiza',
    th: 'Tailandia',
    uk: 'Reino Unido',
    vn: 'Vietnam',
    ve: 'Venezuela'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/warranty.js
/* harmony default export */ const es_warranty = ({
  title: 'Garantía limitada',
  desc: 'Una empresa de tecnología deportiva de alto rendimiento que ayuda a los atletas a entrenarse para dar lo mejor de sí mismos.',
  pageTitle: 'GARANTÍA',
  'getting warranty service': {
    title: 'Cómo obtener el servicio de garantía',
    content: 'Los productos COROS se fabrican con los más altos estándares de calidad posibles. Sin embargo, en el caso poco frecuente de que uno sufra problemas de calidad, respaldamos nuestros productos. COROS ofrece una garantía de 2 años desde la fecha de activación para los relojes y una garantía de 6 meses para los POD. Los cascos están cubiertos por una garantía de 1 año. Todos los accesorios están cubiertos por una garantía de 90 días.\n\n        Si tiene un problema con su producto debido a un defecto de fabricación, COROS le ayudará a sustituir su producto o a solucionar su problema.\n\n        Sólo tiene que ponerse en contacto con nosotros por teléfono o por correo electrónico para ayudar a completar una reclamación de garantía y le ayudaremos a completar la garantía de manera oportuna.'
  },
  returns: {
    title: 'Devoluciones',
    content: 'COROS ofrece una política de devoluciones con garantía de 30 días para los pedidos de coros.com únicamente. Si por alguna razón no está satisfecho, puede devolver su compra en un plazo de 30 días a partir de la fecha de entrega para obtener un reembolso completo del precio de compra. Los productos deben devolverse en su estado físico original con todos los accesorios y embalajes. COROS no cubre los gastos de envío de los productos que se devuelven para su reembolso. Póngase en contacto con el servicio de atención al cliente para conocer los procedimientos de devolución y las aprobaciones. Los pedidos fuera del plazo de devolución no serán aceptados ni aprobados. El reembolso aprobado tarda hasta 5 días hábiles en aparecer en su cuenta bancaria. Los gastos de envío originales y de aduana no son reembolsables.'
  },
  'out-of-warranty service': {
    title: 'Servicio fuera de garantía',
    content: 'COROS ofrece servicios de reparación/sustitución para relojes fuera de garantía con el siguiente coste.',
    extraContent: 'La unidad de reemplazo tiene una garantía de 180 días y será nueva o equivalente a nueva en cuanto a rendimiento y fiabilidad.\n\nHaga clic aquí para ver los detalles de la política y el servicio fuera de garantía.'
  },
  warranty: {
    title: 'Garantía',
    content: 'COROS Wearables Inc. ("COROS") garantiza que el Producto (definido a continuación) entregado en virtud del presente documento al comprador original ("Comprador original") de COROS.com o de un distribuidor autorizado de COROS (cada uno de ellos un "Distribuidor autorizado") estará libre de defectos de material y de mano de obra que afecten negativamente al rendimiento del Producto en condiciones normales de uso, de acuerdo con los términos descritos a continuación. Esta garantía limitada sólo es válida para el comprador original, no es transferible y no se extiende a ningún producto usado o que no haya sido adquirido en COROS.com o en un distribuidor autorizado.\n\n        Productos cubiertos y duración de la garantía\n\n        A efectos de esta Garantía Limitada, "Productos" y "Producto" significan el/los producto(s) individual(es) de COROS descrito(s) a continuación con el siguiente prefijo:'
  },
  'Limited Warranty Term': {
    title: 'Duración de la Garantía Limitada',
    content: 'La duración de la Garantía Limitada se limita a dos años a partir de la fecha original de compra para los relojes, un año para los cascos y noventa días para los accesorios.\n\n        Nada en las instrucciones o información del producto se interpretará como una garantía expresa de ningún tipo con respecto a los productos. Ningún agente, empleado, distribuidor, representante o revendedor está autorizado a modificar o ampliar esta Garantía Limitada ni a hacer declaraciones o reclamaciones vinculantes, ya sea en publicidad, presentaciones o de otro modo, en nombre de COROS con respecto a los Productos o a esta Garantía Limitada.\n\n        Nada de lo dispuesto en esta Garantía Limitada afecta a los derechos legales de los consumidores a los que no se puede renunciar ni limitar por contrato. Esta Garantía Limitada le otorga derechos legales específicos, y también puede tener otros derechos que varían de un estado a otro o de una provincia a otra.\n\n        Si alguna parte de esta Garantía Limitada se considera ilegal o inaplicable, dicha ilegalidad o inaplicabilidad parcial no afectará a la aplicabilidad del resto de la Garantía Limitada.\n\n        Estos términos de la Garantía Limitada se regirán en todos los aspectos por las leyes de los Estados Unidos y del Estado de California, sin tener en cuenta los conflictos de principios legales. Se renuncia específicamente a la Convención de las Naciones Unidas sobre los Contratos de Compraventa Internacional de Mercaderías. Los tribunales estatales y/o federales residentes en el Condado de Orange, California, tendrán jurisdicción exclusiva sobre cualquier disputa o reclamación que surja de estos términos de la Garantía Limitada.'
  },
  'not covered': {
    title: 'Lo que no está cubierto por esta Garantía Limitada',
    content: 'Esta Garantía Limitada se aplica únicamente a los Productos utilizados de acuerdo con esta Garantía Limitada y la documentación publicada por COROS, y no cubre:\n\n        Productos modificados fuera de las especificaciones de fábrica y/o que no estén en condiciones de fábrica.\n\n        Productos con modificaciones en el número de serie y/o en las etiquetas de identificación de fábrica, ya sean retiradas, reubicadas, falsificadas, desfiguradas, dañadas, alteradas o hechas ilegibles.\n\n        Daños en el cuerpo del producto, ya sea que esté cortado, rayado, deformado, doblado, agrietado, abollado o roto.\n\n        Cualquier daño a los componentes, hardware y/o ensamblaje de los Productos, incluyendo, pero sin limitarse a, daños causados como resultado de negligencia, abuso, accidentes, mal uso o estrés físico, eléctrico o electromecánico inusual.\n\n        Cualquier falta de hardware, componentes y/o ensamblajes del Producto.\n\n        Daños cosméticos considerados fuera del uso razonable causados por arañazos profundos, cortes, grietas, abolladuras, decoloración, negligencia, caída o mal manejo del Producto.\n\n        Productos expuestos a líquidos, residuos de líquidos o entornos excesivamente húmedos que provoquen óxido, humedad, manchas, corrosión o derrames de líquidos en los componentes, el hardware o la electrónica. Quemaduras o inflamación de componentes como resultado de un accidente o derrame de líquidos.\n\n        Uso directo de pintura, inmersión de la fuente de alimentación en aceite, uso de adhesivos o colas en cualquier parte del Producto, uso de soldadura en el Producto, electrónica y/o modificación de componentes.\n\n        Exposición a residuos de alquitrán de cigarrillos, humedad, arena, suciedad o exceso de residuos.\n\n        Productos que dejen de funcionar debido a un accidente, colisión con un objeto o herramienta, uso de fuerza excesiva, negligencia en el cuidado, exposición al fuego o al calor anormal, inundaciones, suciedad, tormentas de viento, rayos, terremotos, condiciones meteorológicas excesivas u otros actos de Dios, robo, fusibles quemados, uso inadecuado de cualquier fuente eléctrica o circuitos eléctricos sobrecargados.\n\n        Defectos o daños resultantes del uso de un producto de terceros en conjunción o conexión con accesorios, productos, software o equipos periféricos secundarios no suministrados para el uso con el Producto o aprobados por COROS.\n\n        Los defectos o daños resultantes de pruebas, funcionamiento, mantenimiento, instalación, servicio o ajuste inadecuados que no hayan sido suministrados o aprobados por COROS.\n\n        El uso de un embalaje de envío inadecuado o el uso de un material de embalaje inadecuado que provoque daños en el Producto durante el tránsito con el mensajero de envío del Comprador Original o del Comprador de Segunda Mano.\n\n        Productos comprados a revendedores o distribuidores no autorizados, que incluyen, sin limitación, mercados en línea como eBay (excepto la tienda oficial de COROS en eBay), Amazon (excepto la tienda oficial de COROS en Amazon Marketplace) y otros sitios web de subastas y/o mercados en línea. Si no está seguro de si un distribuidor es un distribuidor autorizado, póngase en contacto con COROS para confirmarlo.\n\n        Recurso exclusivo y reembolsos limitados\n\n        Salvo lo dispuesto específicamente a continuación, su único recurso para un Producto defectuoso será la reparación o sustitución de dicho Producto defectuoso de acuerdo con los términos y condiciones de esta Garantía Limitada.\n\n        COROS sólo ofrece reembolsos para los productos adquiridos directamente en su sitio web oficial COROS.com si dichos productos se devuelven en un plazo de 30 días a partir de la entrega.\n\n        En el caso de los productos no adquiridos en COROS.com, las solicitudes de reembolso, si las hay, están sujetas a la política de reembolso del distribuidor autorizado y deben tramitarse a través de la política de devoluciones del distribuidor autorizado original. COROS no aceptará ninguna devolución ofrecida a través de los distribuidores autorizados.\n\n        COROS no cubre los gastos de envío de los productos que se devuelven para su reembolso.'
  },
  'how to obtain': {
    title: 'Cómo obtener el servicio de garantía',
    content: 'Para obtener el servicio de garantía bajo esta Garantía Limitada, debe ponerse en contacto con COROS para recibir un número de Autorización de Devolución de Mercancía ("RMA") antes de devolver el producto a COROS de acuerdo con el Proceso RMA de COROS. Póngase en contacto con el servicio de asistencia técnica de COROS en el teléfono +1 (855) 934-4411 o póngase en contacto con nosotros por correo electrónico en support@coros.com.'
  },
  'product warranty replacement': {
    title: 'Sustitución de la garantía del producto',
    content: 'COROS se reserva el derecho de verificar la validez de su garantía y su solicitud de servicio de garantía.\n\n        COROS se reserva el derecho de facturarle los gastos de envío y de servicio por cualquier Producto incompleto, dañado o modificado que se devuelva a COROS y que requiera reparación o sustitución o que no esté cubierto por esta Garantía Limitada. Los gastos de servicio son variables y se basan en el coste real de los materiales y la mano de obra razonablemente necesarios para sustituir las piezas que faltan o devolver las modificadas a su estado original de fábrica.\n\n        Los productos enviados para RMA serán reparados y devueltos o sustituidos por un producto recertificado y probado de igual o mayor rendimiento.\n\n        Esta Garantía Limitada de COROS comienza a partir de la fecha en que el producto fue comprado originalmente, tal y como se verificó mediante una prueba de compra proporcionada y/o confirmada por un distribuidor autorizado.\n\n        Todos los productos devueltos a los compradores originales o a los compradores de segunda mano por el departamento de RMA de COROS son productos recertificados y probados exhaustivamente. Las piezas y/o productos de sustitución pueden incluir piezas o productos nuevos o restaurados y están garantizados sólo hasta la expiración del período de garantía original. Las piezas y/o Productos de reemplazo cumplirán con el estándar de rendimiento y fiabilidad de un Producto nuevo o de una pieza del mismo modelo, sin embargo, dichos Productos y/o piezas pueden tener pequeños arañazos, pequeñas abolladuras, otros defectos cosméticos o un uso evidente.\n\n        Si es necesario un RMA dentro de los 30 días de la fecha de entrega de un Producto nuevo en caja, se enviará a cambio un reemplazo OEM nuevo en caja al Comprador Original, sujeto a disponibilidad.'
  },
  'shipping to coros for warranty': {
    title: 'Envío a COROS para la garantía'
  },
  'warranty replacement shipping': {
    title: 'Envío de la sustitución en garantía',
    content: 'COROS enviará a la dirección confirmada en el momento de la aprobación de su RMA.\n\n        Si su reemplazo de garantía no puede ser entregado debido a que la dirección no es válida o la entrega no se realiza debido a la falta de acceso, a una dirección desconocida, a obstáculos de seguridad o a áreas cerradas, usted es responsable de una tarifa de redirección o reenvío que variará dependiendo de su región. Debe ponerse en contacto con COROS antes del envío para que le ayuden a evitar este cargo. COROS no se responsabiliza de los paquetes entregados en una dirección obsoleta.\n\n        Si el producto es devuelto a COROS debido a la falta de entrega, usted será responsable de pagar los gastos de envío adicionales para el reenvío. COROS le anima a revisar su dirección de envío antes de enviar cualquier solicitud de RMA.\n\n        En todas las sustituciones de RMA se indicará "Sustitución en garantía" en el paquete para ayudar a evitar cualquier impuesto, derecho y/o tasas de corretaje a través de las aduanas o de otro modo. COROS no se responsabiliza de las tasas cobradas por el organismo gubernamental del país de destino, los intermediarios u otros terceros. COROS no se hace responsable de ningún paquete no reclamado que sea retenido por su organismo gubernamental para el despacho de aduanas o de otro modo que quede abandonado como resultado de la denegación del cumplimiento del despacho.\n\n        El correo postal no se recomienda para el envío de ningún producto COROS. Si su paquete se recibe con daños físicos, no se puede procesar una reclamación debido a las limitaciones de los servicios postales, y el paquete será devuelto al remitente sin opciones alternativas.\n\n        Nos reservamos el derecho de actualizar esta Garantía Limitada\n\n        Hemos realizado y seguiremos realizando cambios en la política a lo largo del tiempo. Asegúrese de leer este documento con atención y vuelva a consultar las actualizaciones. COROS se reserva el derecho de cambiar esta política sin previo aviso. Última actualización 18 de marzo de 2020.'
  },
  registration: ' REGISTRO DE LA GARANTÍA',
  contact: {
    us: {
      area: 'Estados Unidos',
      phone: '+1 (855) 934-4411 (9am-6pm PST, L-V)',
      email: 'support@coros.com',
      desc: 'Si necesita asistencia fuera de los Estados Unidos y Canadá, póngase en contacto con la información anterior y le dirigiremos a la mejor asistencia localizada.'
    },
    uk: {
      area: 'Reino Unido',
      address: '2pure Ltd, 4 Royston Road, Deans Industrial Estate, Livingston, West Lothian, EH54 8AH, Reino Unido',
      phone: '+0844 811 2001',
      email: 'support@coros.com',
      question: 'consumersupport@2pure.co.uk',
      desc: 'Si necesita asistencia fuera de los Estados Unidos y el Reino Unido, póngase en contacto con support@coros.com y le dirigiremos a la mejor asistencia local.'
    },
    ca: {
      area: 'Canadá',
      phone: '+1-438-794-8360 (9am-5pm ET)',
      email: 'contact@abritu-sport.com'
    }
  },
  checkWarranty: {
    title: 'Comprobar la cobertura del dispositivo - COROS',
    desc: 'Seleccione su tipo de dispositivo e introduzca el ID de 6 dígitos del dispositivo para revisar el estado de la garantía de COROS.',
    snGuide: {
      title: '¿No encuentra el número de serie?',
      desc: 'Cada producto COROS tiene un ID de dispositivo de 6 dígitos. La mayoría de los productos también tienen un número de serie de 10 dígitos. A continuación, encontrará diferentes formas de localizarlos.',
      tips: [{
        title: 'ID del dispositivo',
        tips: ['Una vez conectado a la app COROS → Página de perfil → pulse en el icono del dispositivo.', "En su COROS Watch \u2192 Sistema \u2192 M\xE1s ajustes \u2192 Informaci\xF3n del dispositivo \u2192 ID del dispositivo."]
      }, {
        title: 'Número de serie',
        tips: ['Impreso en la pegatina del envase (si procede)', "Impreso en el dispositivo (si procede)"]
      }]
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/about.js
/* harmony default export */ const es_about = ({
  201802: {
    time: 'Febrero de 2018',
    desc: 'COROS traslada su sede en Estados Unidos de Virginia al sur de California.'
  },
  201808: {
    time: 'Agosto de 2018',
    desc: 'El ultracorredor Dominic Grossman y Sally McRae se unen a COROS como los dos primeros atletas profesionales de la marca.'
  },
  201902: {
    time: 'Febrero de 2019',
    desc: "COROS APEX gana el premio de los editores de Runner's World 2019."
  },
  201905: {
    time: 'Mar-19',
    desc: 'COROS APEX galardonada como la mejor de su clase por la Guía del Comprador de Triathlete 2019.'
  },
  201908: {
    time: 'Agosto de 2019',
    desc: 'El equipo COROS se pone en marcha en el UTMB 2019 - Las atletas COROS Hillary Allen de Estados Unidos termina en segundo lugar en el TDS y Maite Maora de España termina en tercer lugar en el UTMB completo.'
  },
  201910: {
    time: 'Oct-19',
    desc: 'COROS APEX Pro recibe el premio Best In Gear de BelieveInTheRun.'
  },
  202001: {
    time: 'Enero de 2020',
    desc: 'COROS amplía su equipo de atletas profesionales para incluir a escaladores y alpinistas profesionales liderados por el legendario Steve House.'
  },
  202002: {
    time: 'Febrero de 2020',
    desc: 'COROS ficha a sus primeros atletas profesionales de carretera, liderados por el 2x olímpico Des Linden, junto con el plusmarquista estadounidense Parker Stinson, la 12x All American Emma Bates, Kellyn Taylor y Reed Fischer.'
  },
  202005: {
    time: 'Mayo de 2020',
    desc: 'COROS lanza los modos de fuerza y entrenamiento. Un complejo programa de construcción de intervalos con la posibilidad de compartir con compañeros de entrenamiento y descargar entrenamientos de atletas profesionales. Además, el modo de fuerza incluye una biblioteca de más de 200 tipos de entrenamiento junto con instrucciones animadas para realizar cada ejercicio.'
  },
  202007: {
    time: 'Julio de 2020',
    desc: 'COROS lanza la edición limitada del COROS VERTIX Mojito con sólo 200 unidades fabricadas en todo el mundo. El reloj incorpora la nueva correa de nylon, que es un 50% más ligera que la correa de silicona estándar. Las correas de nylon se lanzan en 4 colores y estarán disponibles para todos los estilos de relojes COROS.'
  },
  202208: {
    time: 'Agosto de 2022',
    desc: 'Kilian Jornet consigue su cuarta victoria en el Ultra Trail Mont Blanc, superando las 20 horas y estableciendo un nuevo récord de recorrido. Mathieu Blanchard, de Francia, consiguió un segundo podio consecutivo al terminar en segundo lugar a pocos minutos de Jornet, por debajo de las 20 horas y rompiendo el anterior récord del recorrido. Ambos atletas utilizaron el COROS APEX Pro para seguir sus carreras de récord.'
  },
  20160907: {
    time: '7 de septiembre de 2016',
    desc: 'COROS lanza su primer producto: LINX Smart Cycling Helmet y 1.135 backers se comprometen con 319.765 dólares poco después del lanzamiento de la campaña de Kickstarter.'
  },
  20171205: {
    time: '5 de diciembre de 2017',
    desc: 'COROS lanza su segundo producto y recauda 130.974 dólares de 835 backers durante la campaña de Indiegogo para el OMNI Smart Cycling Helmets.'
  },
  20180515: {
    time: '15 de mayo de 2018',
    desc: 'COROS lanza su primer reloj GPS: PACE Multisport GPS Watch.'
  },
  20181209: {
    time: '9 de diciembre de 2018',
    desc: 'La ultracorredora Camille Herron lleva el COROS APEX 46mm durante su carrera de 24 horas para batir el récord mundial. A su reloj le queda un 32% de batería.'
  },
  20190109: {
    time: '9 de enero de 2019',
    desc: 'COROS lanza la Edición Limitada del Récord Mundial APEX 24h para celebrar el logro del récord de Camille Herron cubriendo 163 millas en 24 horas, un récord que luego eclipsaría.'
  },
  20190514: {
    time: '14 de mayo de 2019',
    desc: 'COROS lanza el reloj de aventura con GPS VERTIX: el reloj más potente de la marca hasta la fecha, con 60 horas de duración de la batería del GPS, además del primer reloj de la gama que incluye un pulsioxímetro.'
  },
  20190523: {
    time: '23 de mayo de 2019',
    desc: 'VERTIX sigue a Roxanne Vogel como su reloj de escalada mientras establece el récord de escalada del Monte Everest de puerta a puerta más rápido.'
  },
  20190917: {
    time: '17 de septiembre de 2019',
    desc: 'COROS lanza el reloj GPS multideporte APEX Pro Premium.'
  },
  20200113: {
    time: '13 de enero de 2020',
    desc: 'Los atletas profesionales de COROS Hilaree Nelson y Jim Morisson llevan su reloj VERTIX en un empuje de un día al pico más alto de la Antártida, el Monte Vinson. El reloj de gama alta de la marca se pone a prueba en algunas de las condiciones más duras del mundo.'
  },
  20200229: {
    time: '29 de febrero de 2020',
    desc: 'COROS cuenta con más de 10 atletas profesionales y embajadores en las pruebas de maratón olímpicas de 2020 en Atlanta, GA. La recién fichada Desiree Linden lideró el equipo con un 4º puesto.'
  },
  20200825: {
    time: '25 de agosto de 2020',
    desc: 'COROS lanza el PACE 2, el reloj con GPS más ligero jamás fabricado, junto con varias características de software clave que incluyen datos de potencia de carrera basados en la muñeca, la primera integración nativa y completa de Stryd por parte de cualquier empresa de wearables y la ampliación de la plataforma de entrenamiento de COROS para incluir planes de entrenamiento diarios/semanales/mensuales completos.'
  },
  20201104: {
    time: '4 de noviembre de 2020',
    desc: 'COROS introduce varias actividades nuevas de deportes acuáticos, incluyendo un modo único de Speedsurfing codesarrollado con la principal autoridad en speedsurfing - GPS-Speedsurfing.com. La lista de modos de deportes acuáticos es: Speedsurfing, Windsurfing, Whitewater, Flatwater, Rowing y Indoor Rower.'
  },
  20201124: {
    time: '24 de noviembre de 2020',
    desc: 'COROS ficha al plusmarquista mundial de maratón Eliud Kipchoge para su equipo de atletas profesionales. Además del patrocinio individual de Eliud, COROS también ha anunciado que se convertirá en el socio oficial de relojes GPS del NN Running Team, que incluye a algunos de los mejores corredores de pista y carretera del mundo (incluido Eliud Kipchoge).'
  },
  20210112: {
    time: '12 de enero de 2021',
    desc: 'COROS lanza con éxito el Desert Sol VERTIX, una edición limitada de colores de temporada del modelo insignia. Este lanzamiento simboliza un renacimiento, un resurgir de las cenizas de 2020, que es muy posiblemente el año más difícil de nuestra generación.'
  },
  20210118: {
    time: '18 de enero de 2021',
    desc: 'Siempre en evolución, COROS comienza el nuevo año con una emocionante actualización de firmware que incluye puntos de control de navegación, centésimas de segundo para las vueltas y entrenamientos personalizados en el modo de pista. La App COROS también recibe actualizaciones que incluyen el seguimiento del tiempo y capas de mapas mejoradas.'
  },
  20210127: {
    time: '27 de enero de 2021',
    desc: 'COROS lanza un segundo producto con éxito durante el primer mes de 2021, el APEX PRO WHITE. El APEX PRO WHITE se inspira en el contraste entre el hielo y la roca de los lagos Mammoth, un querido patio de recreo de los atletas y empleados de COROS.'
  },
  20210520: {
    time: '20 de mayo de 2021',
    desc: 'COROS lanza la PACE 2 Speed Series. La serie Speed está diseñada junto a los mejores y más rápidos atletas del mundo. Disponible en tres colores de temporada; Evergreen, Track Red y Medal Gold.'
  },
  20210629: {
    time: '29 de junio de 2021',
    desc: 'COROS lanza la plataforma científica deportiva EvoLab. Tras innumerables horas de investigación, desarrollo e ingeniería, con el esfuerzo conjunto de nuestros miles de probadores públicos, COROS EvoLab, ya está disponible para todos los usuarios de relojes COROS.'
  },
  20210722: {
    time: '22 de julio de 2021',
    desc: 'La atleta profesional de COROS, Sally McRae, gana el Badwater 135. Sally se impuso en la categoría femenina con un tiempo de 30:48:47, terminando dos horas y 49 minutos por delante del segundo clasificado.'
  },
  20210802: {
    time: '2 de agosto de 2021',
    desc: 'COROS ficha al mundialmente conocido escalador Tommy Caldwell para su lista de atletas profesionales. Tommy ha sido apodado el "Rey de El Cap" y es una leyenda viva en el mundo de la escalada. Ha escalado por todo el mundo y ha establecido algunas de las rutas de escalada en roca más duras de los Estados Unidos.'
  },
  20210808: {
    time: '8 de agosto de 2021',
    desc: 'El sábado 8 de agosto, Eliud Kipchoge se impuso en el maratón masculino (2:08.38) y defendió su título de los Juegos Olímpicos de 2016 en Brasil. EK sigue inspirando a la comunidad mundial de corredores y demostrando que #NoHumanIsLimited.'
  },
  20210817: {
    time: '17 de agosto de 2021',
    desc: 'COROS lanza con éxito sus nuevos relojes VERTIX 2 y Eliud Kipchoge PACE 2 a la comunidad mundial de corredores y deportistas. El VERTIX 2 cuenta con una tecnología innovadora que incluye 140 horas de duración de la batería en modo GPS. La edición limitada del EK PACE 2 está diseñada con buen gusto utilizando colores rojos y verdes inspirados en los colores nacionales de la Kenia natal de Eliud. Este ha sido el mayor lanzamiento de varios productos en la historia de COROS.'
  },
  20211014: {
    time: '14 de octubre de 2021',
    desc: 'COROS introduce el modo de escalada en varios largos en el VERTIX 2. Este nuevo modo de entrenamiento está diseñado específicamente para actividades técnicas de escalada en varios largos, lo que permite a los usuarios registrar los recuentos de largos y los grados, a la vez que se realiza un seguimiento de la aproximación, la escalada y los descensos por separado.'
  },
  20211122: {
    time: '22 de noviembre de 2021',
    desc: 'COROS lanza una importante actualización de firmware que añade la compatibilidad con mapas Topo/Paisaje, el modo caminata, la compatibilidad con Galileo, el acceso directo a la tecla LUZ y el control de la cámara a VERTIX y APEX Pro.  '
  },
  20220120: {
    time: '20 de enero de 2022',
    desc: 'COROS lanza otra importante actualización de firmware que incluye el ritmo ajustado, el modo de carrera virtual, la compatibilidad con el sensor de temperatura y la calibración de la temperatura, además de múltiples mejoras en el rendimiento y los algoritmos. '
  },
  20220125: {
    time: '25 de enero de 2022',
    desc: 'COROS presenta y comienza a distribuir el mosquetón VERTIX 2. Diseñado para satisfacer las necesidades de los escaladores extremos, el mosquetón se ha convertido en un accesorio imprescindible para los exploradores al aire libre en largas caminatas o escaladas para acceder y ver rápidamente las métricas clave en su VERTIX 2.'
  },
  20220307: {
    time: '7 de marzo de 2022',
    desc: 'COROS ficha a los mundialmente conocidos atletas de montaña Kílian Jornet y Emelie Forsberg para su equipo de atletas profesionales. Kílian y Emily han ganado colectivamente múltiples campeonatos importantes, incluyendo UTMB, Hardrock 100, Sky Running World Series y Ski Mountaineering World Series. También cuentan con innumerables e importantes récords de ascenso y descenso de montaña y de tiempo más rápido conocido (FKT).'
  },
  20220516: {
    time: '16 de mayo de 2022',
    desc: 'COROS lanza una importante actualización de firmware, que incluye el seguimiento del movimiento ocular rápido, el índice de esfuerzo percibido para las actividades, Find My Phone/Watch, y múltiples mejoras de rendimiento y algoritmos.'
  },
  pageTitle: 'ACERCA DE COROS',
  desc: 'COROS es una empresa de tecnología deportiva de rendimiento que ayuda a los atletas a entrenar para dar lo mejor de sí mismos. Para COROS todo gira en torno al aire libre, la montaña y un estilo de vida activo y apasionado. Combinamos hardware de alta calidad con tecnología innovadora para proporcionar a los atletas de resistencia el equipo en el que confían en los entornos más extremos del mundo. La tecnología avanzada con una experiencia de usuario eficiente e intuitiva es nuestro núcleo: cuando usas un producto COROS, sabes que estás recibiendo una herramienta que ha sido diseñada, probada y perfeccionada para el atleta, por el atleta. Los usuarios de COROS han establecido Récords Mundiales y han estado en el punto más alto de la tierra, llevando nuestros productos al extremo. En COROS, la creación y la innovación no tienen fin. Nuestros clientes, los atletas hacen COROS - forme parte de nuestra comunidad @COROSGlobal en Facebook e Instagram.',
  milestones: 'HITOS DE COROS',
  '201911_1': {
    time: 'Noviembre de 2019',
    desc: 'COROS VERTIX es premiado como el Mejor Reloj Altímetro por Outdoor Gear Lab.'
  },
  '201911_2': {
    time: 'Noviembre de 2019',
    desc: "COROS APEX gana el premio al equipo del año 2019 de Runner's World."
  },
  '20191112_1': {
    time: '12 de noviembre de 2019',
    desc: 'COROS lanza el Dispositivo de Optimización del Rendimiento (POD) que proporciona métricas avanzadas de carrera.'
  },
  '20191112_2': {
    time: '12 de noviembre de 2019',
    desc: 'COROS lanza el primer modo Track Running de su clase a sus líneas de relojes. Un algoritmo propio permite al usuario seleccionar su carril con una precisión nunca antes experimentada por un reloj GPS en una pista estándar de 400 metros.'
  },
  '20181025_1': {
    time: '25 de octubre de 2018',
    desc: 'COROS lanza su tercera generación de cascos ciclistas inteligentes: SafeSound Road, Urban y Mountain.'
  },
  '20181025_2': {
    time: '25 de octubre de 2018',
    desc: 'COROS lanza el reloj GPS multideporte APEX Premium en dos tamaños: 46 mm y 42 mm que permiten una mayor personalización del usuario.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pace2.js
/* harmony default export */ const es_pace2 = ({
  title: 'Reloj GPS COROS PACE 2',
  desc: 'Nuestro reloj más ligero para atletas multideporte que van rápido y lejos.',
  viewPlans: 'Plan de entrenamiento verificado',
  viewWorkouts: 'Programa de entrenamiento verificado',
  accessories: 'ACCESORIOS',
  section: {
    light: {
      title: 'Tan ligero que podría volar',
      desc: 'Con sólo 29g con la correa de nylon COROS, COROS PACE 2 es el reloj GPS más ligero del mundo en su lanzamiento. No dejes que te pese más de lo que necesitas, con el COROS PACE 2 estarás preparado para tu nueva marca personal, ya sea en una carrera o en la sala de pesas.'
    },
    processor: {
      title: 'Una fuerza a tener en cuenta',
      desc: 'COROS PACE 2 tiene un procesador 1,5 veces más potente, ofrece 5 veces más de RAM y 4 veces más de almacenamiento que el COROS PACE original, lo que deja mucho espacio para ampliar las funciones. COROS PACE 2 será su compañero de entrenamiento a largo plazo.',
      pace: 'PROCESADOR COROS PACE',
      pace2: 'PROCESADOR COROS PACE 2',
      compareDesc: ['ADEMÁS', 'MÁS', 'ALMACENAMIENTO']
    },
    counts: {
      title: 'Cada segundo cuenta',
      desc: 'Sabemos que cada segundo cuenta cuando estás compitiendo por una nueva marca personal, por lo que COROS te ayuda a pasar menos tiempo luchando por conseguir la información importante que necesitas. Con un nuevo diseño, que incluye el dial digital COROS, COROS PACE 2 crea una experiencia de usuario aún más sencilla. Obtén tus parciales, comprueba tu FC o planifica tu próximo entrenamiento, todo ello con un solo dedo.'
    },
    packs: {
      title: 'Un golpe de efecto',
      desc: 'Gracias a la magia de la eficiencia de la tecnología de baterías de COROS GPS, COROS PACE 2 ofrece 30 horas de duración completa de la batería del GPS. Esto supone un aumento del 20% respecto al COROS PACE original. Si necesita que la batería dure aún más, cambie a UltraMax para obtener casi la mitad de consumo de batería.'
    },
    endurance: {
      title: 'Resistencia en tu muñeca',
      desc: 'COROS PACE 2 ofrece 20 días de uso diario. Eso son 20 días de seguimiento de la frecuencia cardiaca y del sueño, de activación de la luz de fondo, de medición de pasos, de recepción de notificaciones e incluso de alarmas diarias. Así que deja tu cargador y viaja con confianza a tu próxima carrera, partido o vacaciones familiares.'
    },
    night: {
      title: 'Ilumina el cielo de la noche',
      desc: 'El modo nocturno es nuestro modo siempre activo para las actividades nocturnas. Deja la luz de fondo encendida durante todo tu entrenamiento. Una luz lo suficientemente brillante como para que tus ojos puedan ajustarse y leer en la oscuridad, pero lo suficientemente tenue como para mantener un rendimiento superior de la batería a lo largo de tu carrera o caminata, incluso cuando se necesita toda la noche. No te preocupes, se apaga automáticamente cuando terminas tu entrenamiento, o una hora después del amanecer.'
    },
    laps: {
      title: 'Vueltas en tierra o en el mar',
      desc: 'Tanto si nadas en la piscina como si entrenas en el mar, con una resistencia al agua de 50 metros, puedes llevar el COROS PACE 2 para realizar un seguimiento de tus actividades tanto en el agua como en tierra.'
    },
    possibilities: {
      title: 'Nuevas posibilidades',
      desc: 'Con una reducción de peso de aproximadamente el 50% con respecto a la correa de silicona, la correa de nylon de COROS es más transpirable y ofrece nuevas opciones de color, ofreciéndole un sinfín de oportunidades para hacer su propia declaración personal. Las correas de nailon también permiten un ajuste más cómodo y ceñido, lo que debería mejorar la ya de por sí elevada precisión de la frecuencia cardíaca, especialmente durante los largos y sudorosos entrenamientos en días cálidos.'
    },
    athlete: {
      title: 'Algo para cada atleta',
      desc: 'COROS PACE 2 está repleto de los modos de deporte que has estado buscando. Ve más allá de la carrera, la ciclismo o la natación estándar y prueba el nuevo modo de fuerza, o explora la precisión del modo de pista o mójate con el nuevo modo de agua plana.'
    },
    trainer: {
      title: 'Tu nuevo entrenador personal',
      desc: 'El programa de entrenamiento de fuerza cuenta con más de 200 ejercicios ya incorporados para la parte superior del cuerpo, la parte inferior, el trabajo del tronco y mucho más. COROS PACE 2 detecta automáticamente los movimientos de tu cuerpo y controla tu ritmo cardíaco y las calorías quemadas.'
    },
    muscleHeatmap: {
      title: 'Mapa de calor muscular',
      desc: 'Una vez que hayas terminado, echa un vistazo al nuevo mapa de calor muscular para ver qué grupos musculares tuvieron más acción en una vista diaria, semanal o mensual, para ayudarte a determinar tu próximo bloque de entrenamiento.'
    },
    learn: {
      title: 'Aprende de los mejores y comparte',
      desc: '¿Tienes un entrenamiento que te encanta? No te lo guardes para ti, compártelo con tus amigos con el toque de tu dedo en la App COROS. Tenemos entrenamientos prediseñados y planes de entrenamiento de atletas COROS y sus entrenadores disponibles de forma gratuita en COROS.com. Sólo tienes que descargarla para empezar tu próximo entrenamiento.'
    },
    follow: {
      title: 'Sigue a tu corazón',
      desc: 'No todas las actividades hacen fluir la sangre de la misma manera. Las carreras fáciles son más constantes, mientras que las sesiones de intervalos y el levantamiento de pesas presentan más picos y valles. COROS ha desarrollado algoritmos de FC únicos para cada modo de actividad con el fin de ofrecerte la mejor precisión de frecuencia cardiaca en la muñeca.'
    },
    track: {
      title: 'Cada segundo cuenta',
      mobileTitle: 'Mantente en la pista',
      desc: 'Un recorrido estándar es de 400 metros, así que ¿por qué los dispositivos GPS parecen no acertar? Con el nuevo modo Track Run de COROS, se utiliza un algoritmo propio tan preciso como un cronómetro para garantizar que tus carreras en pista y tus entrenamientos se midan con precisión, independientemente del carril que elijas. Se acabaron los zigzags aleatorios a través del campo, o los giros bruscos en ángulo, y se sustituyeron por las suaves rectas y curvas de la pista, tal y como tú corres.'
    },
    smart: {
      title: 'Potente e inteligente',
      desc: 'Los relojes COROS ofrecen todo lo que esperas de un reloj deportivo con GPS, además de algunos de los aspectos más deseables de un reloj inteligente, como las notificaciones telefónicas, el identificador de llamadas, el seguimiento del sueño y el análisis del nivel de fitness.'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/terms.js
/* harmony default export */ const es_terms = ({
  termsofservice: 'CONDICIONES DE SERVICIO',
  lastUpdate: 'Última actualización: 7 de octubre de 2020',
  baseTOS: 'Estas Condiciones de servicio ("Condiciones") rigen el uso que usted hace de los productos COROS, nuestros sitios web, incluido www.coros.com ,el software integrado en los dispositivos COROS, el software COROS, las aplicaciones móviles COROS y otros servicios COROS (colectivamente, el "Servicio COROS").  Debe aceptar estas Condiciones para crear una cuenta COROS y utilizar el Servicio COROS. Si no tiene una cuenta, acepta estas Condiciones al visitar www.coros.com o utilizar cualquier parte del Servicio COROS. Si no acepta alguna de estas condiciones, no cree una cuenta COROS, ni visite www.coros.com ni utilice el Servicio COROS.',
  whoCanUse: {
    title: 'Quién puede utilizar COROS',
    desc: 'Para utilizar el Servicio COROS, debe tener al menos quince (15) años de edad. Si tiene al menos quince (15) años pero es menor de edad en su lugar de residencia, debe revisar las Condiciones y hacer que su padre, madre o tutor legal complete el registro en su nombre para que pueda utilizar el Servicio COROS. La persona que complete el registro debe ser legalmente competente. Si tiene preguntas sobre si un producto o una aplicación puede ser una Conexión autorizada, póngase en contacto con info@coros.com'
  },
  account: {
    title: 'Registro y cuenta de acceso',
    desc: 'Para poder utilizar plenamente el Servicio COROS, debe crear una cuenta proporcionándonos una dirección de correo electrónico válida y una contraseña segura. También puede crear una cuenta o iniciar sesión utilizando cuentas de terceros. Según el acuerdo de las cuentas de terceros, tendremos acceso a su nombre de usuario, a su imagen en miniatura y a su sexo. Usted es responsable de toda la actividad que se produzca en relación con su cuenta. COROS no se hace responsable de ninguna pérdida o daño causado por el hecho de que usted no mantenga la seguridad de las credenciales de su cuenta.\n    Es posible que tengamos que ponernos en contacto con usted en relación con su uso del Servicio COROS. Estas comunicaciones forman parte del Servicio COROS y usted no puede optar por no recibirlas. Puede gestionar y optar por no recibir otras comunicaciones y mantener su dirección de correo electrónico actualizada desde la configuración de su cuenta.'
  },
  equipment: {
    title: 'Equipo necesario',
    desc: 'El uso completo del Servicio COROS depende de que usted utilice un ordenador con el software adecuado o un dispositivo móvil compatible y acceso a Internet. El mantenimiento y la seguridad de este equipo pueden influir en el rendimiento del Servicio COROS y es su responsabilidad garantizar el funcionamiento del equipo. COROS no se hace responsable de ninguna pérdida o daño causado por su falta de mantenimiento de la seguridad de su equipo.'
  },
  disclaimers: {
    title: 'Descargo de responsabilidad',
    desc: 'No garantizamos que el Servicio COROS satisfaga sus necesidades o esté disponible de forma ininterrumpida, segura o sin errores. No garantizamos la calidad, exactitud, puntualidad, veracidad, integridad o fiabilidad del Servicio COROS. No garantizamos que todos los errores del Servicio COROS sean corregidos y actualizados de manera oportuna.\n    El Servicio COROS no pretende diagnosticar, tratar, curar o prevenir ninguna enfermedad. Todo el Contenido COROS" proporcionado por el Servicio COROS, incluyendo texto, gráficos, imágenes, música, software, audio, vídeo, obras de autoría de cualquier tipo, e información u otros materiales, no puede utilizarse para sustituir la información y el asesoramiento de su médico u otros profesionales. Se prohíbe el uso del contenido de COROS por razones médicas, o en cualquier envase o etiqueta.\n    Si padece una enfermedad médica o cardíaca, consulte a su médico antes de utilizar el Servicio COROS, realizar un programa de ejercicios o cambiar su dieta. Si experimenta una emergencia médica, deje de utilizar el Servicio COROS y consulte con un profesional médico. No nos hacemos responsables de ningún problema de salud que pueda resultar de los programas de entrenamiento, consultas, productos o eventos que conozca a través del Servicio COROS. Si participa en cualquier programa de ejercicios que reciba o conozca a través del Servicio COROS, acepta que lo hace bajo su propio riesgo y que participa voluntariamente en estas actividades.\n    Usted acepta que es responsable de cualquier riesgo personal o patrimonial que conlleven sus actividades, incluyendo, pero sin limitarse a, el ciclismo, la carrera, la natación o los planes de entrenamiento proporcionados por el Servicio COROS. COROS no es responsable de ningún riesgo relacionado con las lesiones personales y los daños a la propiedad.\n    Usted acepta que COROS no es responsable de ningún resultado causado por no enviar el mensaje SOS. No garantizamos que el mensaje SOS se envíe bajo ninguna circunstancia. Usted acepta que al utilizar los productos COROS, el mensaje SOS depende de la red celular, del mantenimiento del servidor y de otras cuestiones imprevisibles.\n    Usted acepta que el Servicio COROS carga su información y datos de actividad a servidores de Terceros bajo la Política de Terceros. El Servicio COROS puede ofrecerle la oportunidad de vincular su cuenta COROS, los datos COROS o el Servicio COROS con Servicios de Terceros. Aunque le ofrezcamos esta oportunidad, reconoce que cualquier Servicio de Terceros que utilice en relación con el Servicio COROS no forma parte del Servicio COROS. Usted reconoce que estas Condiciones y la Política de Privacidad de COROS no se aplican a los Servicios de Terceros. Usted es responsable de leer y comprender los términos y condiciones y la política de privacidad que se aplica a su uso de cualquier Servicio de Terceros".'
  },
  UOS: {
    title: 'Uso del Servicio',
    desc: 'El contenido del Servicio de COROS, como el texto, los gráficos, las imágenes, el audio, el vídeo y otros materiales, así como los nombres de dominio, el eslogan y la organización están protegidos por derechos de autor, marcas comerciales y otras leyes similares en Estados Unidos y otros países, y son propiedad de COROS o están bajo su control. El uso no autorizado del Servicio de COROS puede violar los derechos de autor, la marca registrada y otras leyes.\n    No puede intentar obtener acceso no autorizado a ninguna parte o característica del Servicio de COROS, ni a ningún otro sistema o red conectado al Servicio o a cualquier servidor de COROS, ni a ninguno de los servicios ofrecidos en el Servicio o a través de él por ningún medio ilegítimo.\n    No puede utilizar el Servicio de COROS para ningún propósito que sea ilegal o esté prohibido por estas Condiciones de servicio, ni para ninguna otra actividad que infrinja los derechos de COROS o de otros.\n    Usted se compromete a no utilizar ningún dispositivo, software o rutina para interferir o intentar interferir en el correcto funcionamiento del Servicio de COROS, o en el uso del Servicio por parte de cualquier otra persona.'
  },
  feedbackPolicy: {
    title: 'Política de comentarios',
    desc: 'Si envía comentarios, ideas u opiniones a COROS, acepta que COROS y sus empleados puedan utilizarlos sin ninguna restricción ni compensación para usted. No renunciamos a ningún derecho de uso de ideas o comentarios similares o relacionados previamente conocidos por nosotros, desarrollados por COROS, u obtenidos de fuentes distintas a usted. Puede ponerse en contacto con nosotros a través de info@coros.com. Por favor, no nos envíe ningún comentario sin su autorización. Nuestra política de comentarios también forma parte de las Condiciones.'
  },
  distribution: {
    title: 'Resolución de disputas',
    desc: 'Usted acepta que cualquier disputa entre usted y COROS que surja o esté relacionada con estas Condiciones de servicio, el Servicio COROS o cualquier otro producto o servicio de COROS (colectivamente, Disputas") se regirá por el procedimiento de arbitraje que se describe a continuación.\n    Ley aplicable: Las Condiciones del Servicio y la resolución de cualquier Disputa se regirán e interpretarán de acuerdo con las leyes del Estado de California, sin tener en cuenta su conflicto de leyes y principios.\n    Resolución informal de conflictos: Queremos resolver sus preocupaciones sin necesidad de un caso legal formal. Antes de presentar una reclamación contra COROS, usted se compromete a intentar resolver la Disputa de manera informal poniéndose en contacto con info@coros.com. Intentaremos resolver la Disputa de manera informal poniéndonos en contacto con usted a través del correo electrónico. Si la disputa no se resuelve en un plazo de 15 días tras su presentación, usted o COROS podrán iniciar un procedimiento formal.\n    No hay acciones colectivas: Usted sólo puede resolver las Disputas con COROS de forma individual, y no puede presentar una reclamación como demandante o miembro de una clase en una acción colectiva, consolidada o representativa. Los arbitrajes de clase, las acciones de clase, las acciones de abogado general privado y la consolidación con otros arbitrajes no están permitidos bajo este acuerdo.\n    Limitación de las reclamaciones: Independientemente de cualquier estatuto o ley que disponga lo contrario, cualquier reclamación o causa de acción que surja de o esté relacionada con su uso de los productos COROS o del Servicio COROS debe presentarse en el plazo de un (1) año desde que surgió dicha reclamación o causa de acción, o de lo contrario dicha reclamación o causa de acción prescribirá permanentemente."'
  },
  violation: {
    title: 'Violación de estas condiciones de uso',
    desc: 'Usted reconoce y acepta que COROS puede preservar cualquier transmisión o comunicación suya con COROS a través del Servicio COROS, y también puede revelar dichos datos si así lo exige la ley o COROS determina que dicha preservación o revelación es razonablemente necesaria para (1) cumplir con un proceso legal, (2) hacer cumplir estas Condiciones de Servicio, (3) responder a reclamaciones de que cualquiera de dichos datos viola los derechos de otros, o (4) proteger los derechos, la propiedad o la seguridad personal de COROS, sus empleados, los usuarios del Servicio COROS y el público.\n    Usted acepta que COROS puede, a su entera discreción y sin previo aviso, cancelar su acceso al Servicio de COROS y/o bloquear su acceso futuro al Servicio de COROS si determinamos que ha violado estas Condiciones de Servicio u otros acuerdos o directrices que puedan estar asociados a su uso del Servicio de COROS. También acepta que cualquier violación por su parte de estas Condiciones de Servicio constituirá una práctica comercial ilegal y desleal, y causará un daño irreparable a COROS, para el que los daños monetarios serían inadecuados, y consiente que COROS obtenga cualquier medida cautelar o equitativa que COROS considere necesaria o apropiada en tales circunstancias. Estos recursos son adicionales a cualquier otro recurso que COROS pueda tener por ley o por equidad.\n    Usted acepta que COROS puede, a su entera discreción y sin previo aviso, cancelar su acceso al Servicio de COROS, por causa, que incluye (pero no se limita a) (1) solicitudes de las fuerzas de seguridad, (2) una solicitud suya (eliminación de la cuenta por iniciativa propia), (3) la interrupción o modificación material del Servicio de COROS o de cualquier servicio ofrecido en o a través del Servicio de COROS, o (4) cuestiones o problemas técnicos inesperados.\n    Si COROS emprende alguna acción legal contra usted como resultado de su violación de estas Condiciones de servicio, COROS tendrá derecho a recuperar de usted, y usted acepta pagar, todos los honorarios razonables de los abogados y los costes de dicha acción, además de cualquier otra reparación concedida a COROS. Usted acepta que COROS no será responsable ante usted ni ante ningún tercero por la terminación de su acceso al Servicio COROS como resultado de cualquier violación de estas Condiciones de Servicio.'
  },
  security: {
    title: 'Seguridad; dispositivos perdidos o inutilizados',
    desc: 'Usted es el único responsable de mantener la seguridad de su Dispositivo COROS. Acepta que COROS no tiene ninguna responsabilidad si pierde o comparte el acceso a su Dispositivo COROS. Acepta que COROS no tiene ninguna responsabilidad si realiza modificaciones no autorizadas en su dispositivo COROS.\n    Si pierde o le roban su dispositivo COROS, póngase en contacto con la policía local. También puede ponerse en contacto con COROS para bloquear el dispositivo y suspender la capacidad de sincronización de datos y de conexión con el Servicio COROS. Póngase en contacto con support@coros.com si ha encontrado un Dispositivo COROS perdido o si su Dispositivo COROS está bloqueado por error debido a un informe inexacto. COROS se reserva el derecho de bloquear los dispositivos COROS si (1) el usuario viola cualquier acuerdo que COROS haya suscrito colectivamente o (2) el usuario es objeto de pedidos/actividades fraudulentas. Si el usuario informa o COROS sospecha de actividades fraudulentas o abusivas, se compromete a cooperar con COROS en cualquier investigación.'
  },
  orders: {
    title: 'Pedidos',
    desc: 'Aunque COROS hará todo lo posible por suministrarle los Productos y/o Servicios que figuran en la Confirmación de Pedido, puede haber ocasiones en las que COROS no pueda suministrar estos Productos y/o Servicios porque, por ejemplo, (1) dichos Productos o Servicios ya no se fabrican o no están disponibles, (2) COROS no puede obtener los componentes pertinentes, (3) ha habido un error de precio o (4) ha habido intenciones/prácticas maliciosas durante el proceso de pedido. En tales circunstancias, COROS se pondrá en contacto con usted y podrá sugerirle Productos o Servicios alternativos que pueda desear comprar (al mismo o diferente precio). En caso de error en el precio, COROS le comunicará el precio correcto. Si no acepta la sustitución propuesta por COROS o la modificación del precio, COROS cancelará el Pedido y le devolverá cualquier dinero que haya pagado a COROS en relación con el Pedido. El reembolso de dicho dinero será el límite de la responsabilidad de COROS hacia usted si COROS no puede entregar los Productos y/o Servicios solicitados por usted.\n    COROS se reserva el derecho de cancelar su pedido si se detecta cualquier actividad fraudulenta. COROS le informará si cancela su pedido por los motivos mencionados anteriormente. Cualquier pago que haya realizado le será reembolsado.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/athlete.js
/* harmony default export */ const es_athlete = ({
  pageTitle: 'ATLETAS PROFESIONALES DE COROS',
  mobilePageTitle: 'EXPLORA TU INSPIRACIÓN INTERIOR CON LOS ATLETAS PROFESIONALES DE COROS',
  pageDesc: 'El equipo COROS Pro Team son nuestros usuarios más potentes y viven para explorar lo imposible. Todos ellos han utilizado los productos COROS de forma intensiva en los recorridos más duros del mundo. Y lo que es más importante, comparten la misma pasión de construir los mejores productos para los atletas de todo el mundo.\n\nCOROS también está orgulloso de ser el socio oficial de relojes GPS del NN Running Team.',
  trailAthletes: 'Atletas de Trail',
  roadAthletes: 'Atletas de carretera',
  alpineAthletes: 'Atletas de aire libre'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/athleteDetails.js
/* harmony default export */ const es_athleteDetails = ({
  more: 'Más deportistas',
  athletes: 'Atletas profesionales',
  dane_jackson: {
    name: 'Dane Jackson',
    country: 'EE.UU.',
    achievement: 'Primer descenso de la cascada del Salto Maule en Chile, de 134 pies\n    7 Descensos de cascadas de más de 100 pies\n    4 veces ganador del Campeonato North Fork\n    3 veces ganador del Gran Premio de Aguas Blancas\n    4 veces ganador de la Green Race\n    3 veces campeón del mundo de estilo libre\n    Decenas de victorias en competiciones en todo el mundo\n    Poseedor del récord del curso en 3 carreras\n    Lleva un COROS VERTIX 2.',
    desc: 'Dane Jackson ha experimentado algunos de los mejores kayaks que el mundo puede ofrecer. El kayak es la verdadera vocación de Dane, y lo ha estado haciendo durante más de 20 años. Tennessee es la base de Dane, pero pasa más de 6 meses del año viajando a los mejores lugares para su deporte. A menudo disfruta de expediciones a México, Nueva Zelanda, Kenia y Canadá. Sus ríos favoritos son el Zambeze, el Ottawa y el Nilo. Atribuye a su padre, Eric Jackson, el mérito de haberle llevado hasta donde está como deportista.\n    Dane está considerado el mejor kayakista de aguas bravas del mundo, con más de 80 medallas de primer puesto en competiciones de todo el mundo. Su habilidad y determinación le han llevado a la cima.'
  },
  adrian_ballinger: {
    name: 'Adrian Ballinger',
    country: 'USA',
    achievement: 'Ha hecho cumbre en el Everest y en el K2 sin oxígeno suplementario\n    Primer descenso en esquí del Manaslu, el octavo pico más alto del mundo\n    Fundó Alpenglow Expeditions\n    Diecisiete cumbres de picos de 8000 metros\n    Único estadounidense que ha completado tres descensos en esquí de picos de 8000 metros\n    Lleva un COROS VERTIX 2.',
    desc: 'Adrian Ballinger es un escalador y esquiador de gran montaña, y un guía de montaña certificado. Adrian lleva 25 años guiando profesionalmente a grupos en las montañas más altas del mundo y es el fundador de Alpenglow Expeditions, que lleva a más de 6000 personas al año a esquiar, escalar y hacer montañismo, en Tahoe y en todo el mundo. Ha dirigido más de 150 expediciones internacionales de escalada en seis continentes y ha hecho 17 cumbres exitosas de picos de 8.000 metros, incluyendo 8 cumbres del Monte Everest. Es conocido por ser el pionero en el uso de la preaclimatación para las expediciones comerciales, que reduce a la mitad el tiempo que se suele emplear en una expedición, a la vez que lidera el cambio de la industria hacia normas éticas al guiar las montañas más altas del mundo.\n\n    Como deportista, Adrian es el único estadounidense que ha realizado con éxito tres descensos en esquí de picos de 8.000 metros, incluido el primer descenso en esquí del Manaslu desde su cumbre. También es el cuarto estadounidense que ha hecho cumbre en el Everest y en el K2 sin utilizar oxígeno suplementario. Recientemente, tras un año de concentración en la escalada en roca en medio de la pandemia de Covid, Adrian escaló su primer 8a/5.13b, Fall of Man, en el Virgin River Gorge. Adrian aspira a destacar en las tres disciplinas tradicionales de los guías de montaña: alpinismo, escalada en roca y esquí.'
  },
  kilian_journet: {
    name: 'Kilian Jornet',
    country: 'ESPAÑA',
    achievement: '4 x Campeón del UTMB\n5 x Campeón del Hardrock Hundred\n4 x Campeón del Mundo de Esquí de Montaña\n3 x Campeón del Mundo de Sky Running\nInnumerables récords de ascenso/descenso de montaña y FKTs',
    desc: 'Podría decirse que no hay un atleta de montaña más completo en el mundo que Kilian Jornet. Criado en los Pirineos, Kilian empezó a escalar montañas con sólo 3 años. Irrumpió en la escena de las carreras de montaña/trail al final de su adolescencia y en 2007 ganó su primera de las 10 Sky Running World Series. Al año siguiente ganaría la prestigiosa UTMB por primera vez entre 2008 y 2011. Es difícil encontrar una carrera importante de montaña o trail que Kilian no haya ganado, habiendo sido coronado campeón de Western States, Sierre-Zinal, Pikes Peak Marathon, Zegama, Hardrock, Marathon du Mont Blanc y muchas, muchas más.\n\nTal vez lo que hace a Kilian tan especial como atleta es que no sólo es un corredor de categoría mundial, sino también un especialista en esquí de montaña, disciplina en la que ha competido desde 2002 y en la que ha ganado campeonatos europeos y mundiales en todas las categorías de edad. Kilian reside ahora en Noruega con su pareja Emelie Forsberg y sus dos hijas.'
  },
  emelie_forsberg: {
    name: 'Emelie Forsberg',
    country: 'SUECIA',
    achievement: '4 veces campeón de las series mundiales de SkyRunner\n6 x Medallista del Campeonato Mundial de Esquí de Montaña\n2 x Campeón de la Transvulcania\nTitular de FKT en el Mont Blanc, Matterhorn, Grand Teton, y varias otras rutas de subida y bajada',
    desc: 'Viviendo en Noruega y representando a Suecia, Emelie es una de las atletas de montaña más completas del mundo, centrada en el trail running y el esquí de montaña. Al principio, Emelie se identificaba más como escaladora, antes de empezar a Carrera por la montaña por puro placer. Compitió en su primera carrera de trail seria en 2009 y desde entonces ha estado entre las mejores del mundo en distancias que van desde el kilómetro vertical hasta las 100 millas. La carrera de Emelie en el esquí de montaña comenzó unos años más tarde, en 2012, cuando se lanzó a una carrera con unos esquís prestados y terminó tercera. Desde entonces, ha subido al podio en varias carreras del Campeonato Europeo y Mundial.\n\nEmelie dio a luz a su primera hija y a la de su pareja, Kilian Jornet, en marzo de 2019, y a su segunda hija en abril de 2021. Ahora tiene los ojos puestos en volver a entrenar y a competir al máximo nivel en 2022 y más allá.'
  },
  emma_coburn: {
    name: 'Emma Coburn',
    country: 'ESTADOS UNIDOS',
    achievement: 'Campeona del Mundo 2017 - 3.000 metros obstáculos\nMedallista de plata del Campeonato del Mundo 2019 - 3.000 metros obstáculos\nMedallista de bronce en los Juegos Olímpicos de 2016 - 3.000 metros obstáculos\n9 veces campeón nacional de la USATF\n6 x NCAA All American',
    desc: "Nativa de Crested Butte y Boulder, CO - Emma asistió a la Universidad de Colorado donde fue 3 veces Campeona Nacional y 6 veces All American. 9 veces campeona nacional de la USATF en su prueba estrella, los 3.000 metros obstáculos, Emma cuenta con el pleno de medallas en el escenario mundial, habiendo obtenido el bronce en los Juegos Olímpicos de Río, la plata en los Campeonatos del Mundo de 2019 y en 2017 obtuvo la medalla de oro y el título de campeona del mundo. Emma entrena con el equipo Boss y es entrenada por su marido Joe Bosshard, que se está convirtiendo rápidamente en uno de los mejores entrenadores del país. Más allá de la pista, Emma es una inspiración y un modelo a seguir para muchos, ya que muestra su espíritu emprendedor con sus propias empresas, incluyendo un libro de cocina recientemente publicado y la carrera Emma Coburn's Elk Run 5k, que ha recaudado importantes fondos para apoyar a los que luchan contra el cáncer en el condado de Gunnison, Colorado."
  },
  emily_infeld: {
    name: 'Emily Infeld',
    country: 'ESTADOS UNIDOS',
    achievement: '2015 World Championships 10,000m- 3rd place\n2016 Olímpico 10,000m\n2017 Campeonato del Mundo de 10.000 metros - 6º puesto\n11 veces All American \nCampeona de la NCAA',
    desc: 'Emily tiene un buen currículum que se remonta a sus días de instituto en Ohio, donde fue campeona nacional y poseedora del récord estatal de la milla. Corrió en la universidad de Georgetown, donde fue campeona de la NCAA de 3k en 2012, 11 veces All-American y llevó al equipo de campo a través al título nacional de 2011. Su carrera después de la universidad también ha tenido grandes momentos, quizás ninguno mayor que su medalla de bronce en los 10.000 metros en los Campeonatos del Mundo de 2015 en Pekín. Emily es olímpica en 2016 y volvió a representar a Estados Unidos en los Campeonatos del Mundo de 2017, donde terminó en sexto lugar como la mejor estadounidense de la prueba.'
  },
  eliud_kipchoge: {
    name: 'Eliud Kipchoge',
    country: 'Kenia',
    achievement: 'Récord mundial de maratón (2:01:09) - Berlín 2022\nPrimer/único MARATONIANA que baja de las 2 horas - (1:59:40) - Viena 2019\n10 veces campeón del mundo de maratón\n2 veces medallista en el Campeonato del Mundo\n3 veces medallista olímpico\nEsposo, padre de tres hijos.',
    desc: 'Eliud Kipchoge entrena con el mantra - "Ningún ser humano es limitado" y lo ha demostrado de primera mano en su carrera deportiva. Con tan solo 18 años, Eliud ganó una medalla en el Campeonato del Mundo en los 5.000 metros, y posteriormente ganaría otras tres medallas mundiales en la distancia. Sin embargo, fue en 2013 cuando Eliud empezó a dar señales de lo que vendría en el futuro, al ganar y batir el récord de la carrera en su maratón de debut. Es casi difícil de creer lo que seguiría: 11 victorias oficiales en maratón, incluyendo 8 Marathon Majors, y los Juegos Olímpicos, dos veces estableciendo récords de curso en el Maratón de Londres, y por supuesto su carrera de récord mundial en el Maratón de Berlín en 2018 (donde también rompió los récords mundiales de 30k, 35k y 40k en el camino). A pesar de todos estos logros, ni siquiera mencionan el que quizás sea el mayor logro de Eliud como corredor: convertirse en el primer y único humano en Carrera la distancia del maratón en menos de 2 horas, estableciendo la mejor marca mundial de 1:59:40 en el INEOS Challenge en un recorrido cerrado en Viena Austria en octubre de 2019. Eliud fue la persona keniana del año 2018 de las Naciones Unidas, y el atleta masculino del año 2018 y 2019 de la IAAF (ahora WAF). Por último, pero ciertamente no menos importante, Eliud es un marido y padre de tres hijos, que vive y entrena cerca de Eldoret, Kenia.'
  },
  molly: {
    name: 'Molly Seidel',
    country: 'ESTADOS UNIDOS',
    achievement: 'Medallista de bronce olímpico (Tokio 2020)\n4ª en el maratón de Nueva York 2021, la mujer estadounidense más rápida de todos los tiempos (2:24:42)\n4 veces campeona de la NCAA\n6 veces All-American de la NCAA',
    desc: 'Molly Seidel es la definición de garra y perseverancia. En su primer maratón, Molly quedó en segundo lugar en las Pruebas Olímpicas de Estados Unidos 2020 para asegurar su puesto en el Equipo de Estados Unidos, donde obtuvo una medalla de bronce en Tokio. \n   Molly no es ajena a los focos; fue campeona de Foot Locker Cross Country en el instituto y cuatro veces campeona de la NCAA en la Universidad de Notre Dame. A pesar de sus logros, es conocida por su personalidad realista, su ingenioso sentido del humor y su amor por los donuts y la cerveza artesanal. Hoy en día, puedes encontrarla entrenando en Flagstaff, AZ, con el Verde Track Club.'
  },
  desiree_linden: {
    name: 'Desiree Linden',
    country: 'USA',
    achievement: 'Campeona del Maratón de Boston 2018\nDos veces olímpica\n9 veces entre los 5 primeros en los World Marathon Majors\nDos veces subcampeona en las pruebas de maratón de Estados Unidos\nAficionado al café y propietario de Linden X Two\nConocedor del whisky. Adicto a la música. Fanático de los libros. Viajero del mundo.',
    desc: 'En abril de 2018, Des Linden desafió los vientos en contra y la lluvia torrencial para convertirse en la primera campeona femenina estadounidense en el maratón de Boston desde 1985. Su victoria fue una para los libros de récords, ya que superó el campo y las peores condiciones en la historia de la carrera. Des, ha sido dos veces MARATONIANA olímpica de EE.UU., terminando séptima en los Juegos Olímpicos de Río. Comenzó en el instituto Hilltop de Chula Vista, California, donde obtuvo honores estatales. Linden asistió a la Universidad del Estado de Arizona, donde fue una de las mejores atletas de Estados Unidos, tanto en campo a través como en atletismo. Tras su graduación, se trasladó a Rochester, Michigan, para unirse al proyecto de distancia de Hansons Brooks. Actualmente entrena en el norte de Michigan y sigue representando a Brooks. En 2019, Des regresó al maratón de Boston terminando en quinto lugar, y más tarde ese otoño lideró el campo del maratón de Nueva York a través de la media maratón en 1:11:40 y terminó en sexto lugar como el mejor estadounidense en el cuarto tiempo estadounidense más rápido de la historia en el histórico curso de cinco ciudades. Autoproclamada aficionada al bacon, entre sus aficiones se encuentran leer y escribir, coleccionar diversos whiskys, beber café Linden X Two, hacer los primeros lanzamientos en los partidos de las Grandes Ligas, relajarse con sus perros Atlas y Boston, escuchar buena música y Carrera más que su marido, el también MARATONIANA y veterano de Kona, Ryan Linden.'
  },
  grayson_murphy: {
    name: 'Grayson Murphy',
    country: 'USA',
    achievement: '5 x NCAA All-American en la Universidad de Utah \n2º americano 2019 Boilermaker 15k \nTitular del récord escolar de la Universidad de Utah - 3k Steeple, 5.000m (en interior y exterior), 10.000m',
    desc: 'Entrenando en su ciudad natal de Salt Lake City, Utah, y miembro del Proyecto de Distancia de Idaho, Grayson se centra principalmente en las carreras de carretera y trail. Grayson se graduó en 2018 en la Universidad de Utah con una licenciatura en Ingeniería Civil y fue 5 veces All-American en campo a través y pista. Sus PR en la pista incluyen 32:28 en los 10k, 15:44 en los 5k y 9:44 en la carrera de obstáculos. Recientemente, Grayson terminó como la segunda estadounidense en la Boilermaker 15k en Utica, NY - la carrera de 15k más grande del país. De cara al futuro, Grayson espera mejorar todos sus récords y participar en una amplia variedad de carreras de trail, montaña, carretera y campo a través.'
  },
  emma_bates: {
    name: 'Emma Bates',
    country: 'EE.UU.',
    achievement: 'Maratón de Chicago 2019 - 1ª americana\nCampeona del maratón de Estados Unidos en 2019\n12 veces NCAA D1 All-American\nCampeona de 10.000 metros de la NCAA DI en 2014',
    desc: 'Entrenando en Boise, Idaho y miembro del proyecto Idaho Distance, Emma se centra principalmente en las carreras de media y larga distancia en carretera. Emma se graduó en la Universidad Estatal de Boise, donde fue 12 veces All-American de la División 1 de la NCAA y campeona de la NCAA en 2014 en los 10.000 metros. Desde entonces, Emma ha pasado a ganar los campeonatos de maratón femeninos de Estados Unidos de 2018, además de quedar en cuarto lugar en el maratón de Chicago de 2019 con un mejor tiempo personal de 2:25:27. La mentalidad de "espíritu libre" de Emma le ha permitido convertirse en una de las mejores corredoras de Estados Unidos con un futuro increíblemente brillante.'
  },
  parker_stinson: {
    name: 'Parker Stinson',
    country: 'ESTADOS UNIDOS',
    achievement: 'Récord de los 25k de Estados Unidos en 2019\nMaratón de Chicago 2019 - (1ª estadounidense)\n9 veces NCAA D1 All-American',
    desc: 'Titular del récord de Estados Unidos en 25k, Parker reside en Boulder, Colorado. Es un nueve veces All-American de la Universidad de Oregón, donde también terminó tercero en los 5.000 metros en campeonatos NCAA consecutivos. En su juventud, Parker fue tres veces campeón junior (sub-19) de 10.000 metros. Algunos de sus últimos logros incluyen la victoria en el Campeonato USATF 2019 de 25k y terminar como el mejor estadounidense en el Maratón de Chicago 2019 con un mejor tiempo personal de 2:10:53. Con la ayuda de COROS, Parker espera seguir superando sus límites para convertirse en un atleta aún más fuerte.'
  },
  reed_fischer: {
    name: 'Reed Fischer',
    country: 'USA',
    achievement: 'El 20º medio maratón más rápido de la historia de Estados Unidos\nPrimer estadounidense en la media maratón de Houston Aramco 2019\n4º puesto en los Campeonatos de 10.000 metros de la USATF\nCampeonatos Dos veces miembro del equipo de Estados Unidos',
    desc: 'Originario de Minnesota, Reed actualmente vive y entrena con Tinman Elite en Boulder, Colorado. Como miembro fundador de este joven y emocionante equipo, Reed descubrió su habilidad para las distancias más largas en las carreteras. Autoproclamado tardío, terminó su carrera en la Universidad de Drake con un 9º puesto en los Campeonatos de la NCAA de 2017. Reed, que ha sido seleccionado en cero ocasiones para el primer equipo estadounidense, se ha convertido en uno de los corredores más prometedores del país. Con tan solo 24 años, Reed estableció una marca personal de media maratón de 1:01:37 y está planeando llevar ese impulso a su carrera de maratón.'
  },
  coree_woltering: {
    name: 'Coree Woltering',
    country: 'Estados Unidos',
    achievement: '1º - Superior Spring 50k 2019\n2º - American River 50m y Quick Silver 50k 2018\n4ª - Superior 100 Mile 2018\nIce Age Trail (1147 millas) FKT - 2020',
    desc: 'Coree vive y entrena en Ottowa, Illinois un raro Ultra Runner de élite del medio oeste. A pesar de que ahora se inclina por las pruebas más largas, comenzó su carrera corriendo distancias de 400 y 800 metros en la pista, lo que le hace estar preparado para cualquier distancia en cualquier superficie. La carrera más larga de Coree antes de inscribirse en su primer maratón en 2014 fue de solo 16 millas, pero llegaría a Carrera un tiempo de debut muy respetable de 2:37. Un año después, ganó todas las ultra de trail en las que se inscribió. Si avanzamos unos años, en 2018 terminó en el puesto 25 en la infame Western States. En su logro más reciente, Coree estableció un FKT en el Ice Age Trail completando la ruta de 1147 millas en solo 21 días, 13 horas y 35 minutos. Además de Carrera, Coree es padre, paracaidista y un modelo a seguir para cualquiera que defienda la diversidad en el mundo del aire libre'
  },
  john_kelly: {
    name: 'John Kelly',
    country: 'Estados Unidos',
    achievement: 'Campeón de los Maratones Barkley 2017\n2018 Campeón mundial de grupos de edad de carreras largas de la ITU  \nCampeón de la columna vertebral 2020\n1º en completar La gran ronda" en el Reino Unido\nRécord mundial Guinness de "Maratón más rápido vestido como un personaje de videojuego" (Maratón de Boston 2016)"',
    desc: 'John se especializa en eventos montañosos de varios días como The Barkley Marathons, The Spine Race, Tor Des Geants, y FKTs largos como su reciente proyecto Grand Round que conectó todas las 3 grandes rondas de carreras de otoño del Reino Unido. Creció en el este de Tennessee, donde comenzó su amor por las montañas, y actualmente vive en el Reino Unido con su mujer y sus cuatro hijos, donde es el director de tecnología y cofundador de una empresa tecnológica. John continuará explorando las montañas y sus propios límites, desafiándose a sí mismo con objetivos que superen sus límites. Espera poder transmitir estas pasiones a sus hijos y a otras personas, promoviendo el aprecio y la preservación de los lugares salvajes y el valor que aportan a nuestra sociedad.'
  },
  camille_herron: {
    name: 'Camille Herron',
    country: 'Estados Unidos',
    achievement: "3 veces clasificada para las pruebas de maratón olímpicas ('08, '12, '16)\n2 veces campeona del mundo (50K, 100K)\nCampeona de la Maratón Comrades 2017\nMejor marca de 100 millas en trail, 12:42:40\n4 récords mundiales (50 millas, 12 horas, 100 millas, 24 horas) y 8 récords americanos.",
    desc: 'Camille se está consolidando como la ultracorredora femenina más rápida de la historia en muchas distancias y superficies. Su velocidad, versatilidad, dureza y habilidad para ganar la están convirtiendo en una leyenda de este deporte. Es entrenada por su marido, Conor, y vive en Warr Acres, OK/Alamosa, CO con sus pastores alemanes, Hawi y Winny. Es entrenadora, asistente de investigación en la OUHSC, oradora pública y embajadora, y desde 2012 es secretaria del Comité de Carreras de Larga Distancia Femeninas de la USATF.'
  },
  hayden_hawks: {
    name: 'Hayden Hawks',
    country: 'Estados Unidos',
    achievement: '2016 Speedgoat 50km- 1er lugar\n2016/2017 TNF SF 50mile- 2º/3º puesto\n2017 CCC 100km- 1er lugar y CR\n2018 Lavaredo Ultra Trail 120km- 1er lugar\nZion Traverse Tiempo más rápido conocido (FKT) 48 millas.',
    desc: 'Atleta profesional de ultra/montaña de Cedar City, Utah. A Hayden le encanta pasar sus días explorando las montañas, los cañones y los desiertos en los Parques Nacionales y las tierras públicas cerca de su casa en el sur de Utah. También le gusta viajar y ver el mundo con las dos personas que más significan para él, su mujer y su hijo pequeño. Ha tenido éxito en todas las modalidades de carrera en las que se ha especializado a lo largo de los años, incluyendo el atletismo, el cross, la carrera en carretera, la carrera de montaña y, ahora, la ultramaratón. Le encanta Carrera y todo lo relacionado con ello. '
  },
  tim_tollefson: {
    name: 'Tim Tollefson',
    country: 'Estados Unidos',
    achievement: 'Dos veces clasificado para las pruebas de maratón olímpicas de EE.UU. \n2014 Campeón Nacional de Trail 50k de Estados Unidos\n2016 UTMB, 3er lugar\n2017 UTMB, 3er lugar\nCampeón de Australia de Ultra Trail 2017',
    desc: 'Tim Tollefson es un atleta de montaña que vive en Mammoth Lakes, Ca con su encantadora esposa, Lindsay. Después de una exitosa carrera en carretera como dos veces clasificado para las pruebas de maratón olímpicas de Estados Unidos, Tim hizo la transición al trail running. En tan solo 3 años, ganó el título nacional de trail de 50k de la USATF en 2014, representó al equipo de Estados Unidos en los Campeonatos Mundiales de Ultra Trail de la IAU, ganó el Ultra Trail de Australia y terminó dos veces en tercera posición en el mundialmente conocido Ultra Trail du Mont Blanc (UTMB), el ultramaratón de 100 millas más profundo y competitivo de cada año. Tim también trabaja a tiempo completo como fisioterapeuta al servicio de la activa población local de la Sierra Oriental y de los atletas visitantes. De cara al futuro, Tim espera seguir desarrollándose como un atleta de alto nivel en el trail running, el esquí de montaña y las actividades de alta montaña, a la vez que conecta con un mayor número de participantes a nivel mundial para promover el disfrute de las actividades de montaña durante toda la vida a través del deporte limpio.'
  },
  magda_boulet: {
    name: 'Magda Boulet',
    country: 'Estados Unidos',
    achievement: 'Subcampeona de maratón en las pruebas olímpicas de 2008\nMaratón PB 2:26.22 (Rotterdam 2010)\nCampeona de los Estados del Oeste en 2015 \n2015 Corredora norteamericana de ultrafondo del año\n2017 Subcampeón de los Estados del Oeste \n2017 Subcampeona de los 102k de Terewara',
    desc: 'Magda creció en Polonia y emigró a los Estados Unidos en 2001, obteniendo la ciudadanía ese mismo año. Obtuvo una licenciatura en biodinámica humana en la UC Berkeley y un máster en fisiología del ejercicio en Cal State Hayward. Entrenada por el legendario Jack Daniels, Magda ha cosechado enormes éxitos tanto en las carreteras como en los senderos. Magda se clasificó para los Juegos Olímpicos de 2008 en Pekín con su segundo puesto en las pruebas olímpicas. Su mejor marca en maratón, 2:26.22, conseguida en el maratón de Rotterdam de 2010, la sitúa en el puesto 11 de todos los tiempos de las mujeres estadounidenses en la distancia de 26,2. En 2013 Magda hizo la transición al trail y al ultra running y tan solo 2 años después ganó la prestigiosa Western States 100 en su primera prueba en la distancia. Una serie de otras sólidas actuaciones la hicieron merecedora del premio North American Ultra Runner of the Year en 2015. Magda vive en Oakland, California, con su marido Richie y su hijo Owen. Cuando no está compitiendo puedes encontrarla liderando la innovación y el desarrollo de productos para GU Energy Labs.'
  },
  sally_mcrae: {
    name: 'Sally McRae',
    country: 'Estados Unidos',
    achievement: '10 veces campeona de Ultramaratón\n20 veces finalista del podio en todo el mundo\n2 veces top 10 en los Western States 100.',
    desc: 'Sally McRae es una esposa y madre de dos hijos que persigue sus sueños y aventuras. Corredora profesional de trail running que compite en montañas de todo el mundo; entrenadora a tiempo parcial, escritora y conferenciante, que anima a los demás a vivir la vida al máximo.'
  },
  hillary_allen: {
    name: 'Hillary Allen',
    country: 'Estados Unidos',
    achievement: 'Victoria en la carrera Cortina Trail 2018\nRécord de recorrido, TNF Endurance Challenge Chile 80km 2018\n2ª en la clasificación mundial de ultrafondo de Sky Running 2017\nRécord de recorrido, Maderia Skyrace 2017\n3er puesto en la Transvulcania 2017\nEquipo de carreras de montaña de Estados Unidos 2016\n3er puesto, Ultra Skyrunning World Series 2016\nRécord de la carrera, TNF Cortina Trail 2016\nCampeón de la Ultra Skyrunning de los Estados Unidos 2015\nRécord de recorrido, Speedgoat 50k 2015',
    desc: 'La gente no llama a Hillary Allen la "Hillygoat" por nada: ha demostrado rápidamente su capacidad como corredora rápida en las montañas, especialmente cuando el sendero se vuelve hacia el cielo. Originalmente jugadora de tenis, Allen no empezó a Carrera hasta la escuela de posgrado, cuando necesitó una salida para despejar su mente mientras cursaba su licenciatura en neurociencia. Se unió a unos cuantos corredores locales y nunca miró atrás, consiguiendo rápidamente resultados en el podio de carreras de larga distancia. Desde entonces, sus carreras la han llevado por todo el mundo, donde sigue acumulando podios y batiendo récords, manteniendo una actitud humilde y un gran sentido del humor.'
  },
  sage_canaday: {
    name: 'Sage Canaday',
    country: 'Estados Unidos',
    achievement: '2 veces clasificada para las pruebas olímpicas de EE.UU. en el maratón \n3 veces campeona de los 50 km de Speedgoat \n3 veces campeón nacional de la USATF (100 km de trail, carrera de montaña y maratón de trail) \n2 veces campeón de los 100 km de Tarawera \n2 veces Campeón de 50 millas del Lago Sonoma \nGanador de The North Face 50-mile Endurance Challenge San Francisco \nCampeón mundial de larga distancia de montaña en 2014 (ascenso a Pikes Peak en 2:10)',
    desc: 'Sage ha sido un corredor de "montaña-ultra-trail" o "MUT" desde 2012, cuando se mudó a Boulder Colorado. Anteriormente, corría principalmente en carretera y en pista, donde fue el clasificado más joven en las pruebas de maratón olímpico de Estados Unidos en 2007, a la edad de 21 años. Tras pasar a los senderos y las montañas, en 2012 se convirtió en el campeón de Estados Unidos de carreras de montaña y, unos años más tarde, añadió las pruebas de 100 km de trail y maratón de trail a su lista de títulos nacionales de Estados Unidos. A nivel internacional, ganó los 100 km de Tarawera en Nueva Zelanda en dos ocasiones y fue Campeón del Mundo de Carreras de Montaña de Larga Distancia en la Subida a Pikes Peak en 2014.  También ganó la prestigiosa carrera de 50 millas North Face Endurance Challenge en San Francisco y es tres veces ganador de la Speedgoat 50km. De cara al futuro, Sage busca competir en las carreras de montaña-ultra-trail más competitivas del mundo.'
  },
  cody_reed: {
    name: 'Cody Reed',
    country: 'Estados Unidos',
    achievement: '2014 NCAA Cross Country Nationals \n2014 Campeonatos de la Conferencia Indoor Big Sky (en Flagstaff) 3k 2º puesto \n2016 Tamalpa Headlands 50k 1er puesto \n2017 Way Too Cool 1er puesto \n2018 Western States 7º puesto',
    desc: 'Cody Reed vive y entrena en las montañas y en los cañones alrededor de Flagstaff, Arizona, con los Coconino Cowboys. Ha estado corriendo de forma competitiva desde la escuela secundaria, pero no fue hasta 2016 que Cody decidió probar una carrera de trail y no ha mirado atrás desde entonces. Cody ha podido viajar por el mundo haciendo lo que le gusta y difundiendo lo bueno que es el trail running y las carreras.'
  },
  harry_jones: {
    name: 'Harry Jones',
    country: 'Reino Unido',
    achievement: '',
    desc: 'Harry empezó a Carrera en la pista como junior antes de pasar al mundo del ultra trail running. Se ha centrado principalmente en la distancia de 100 km durante los últimos dos años y ha subido al podio en varias carreras internacionales, incluyendo el tercer puesto en el Tarawera Ultramarathon, el Cappadocia Ultra-Trail y el Ultra-Trail Australia. En su tiempo libre, Harry trabaja como entrenador de running y YouTuber, documentando sus entrenamientos y carreras por todo el mundo. Actualmente está entrenando para su mayor reto hasta el momento: su primera carrera de 100 millas en el UTMB en agosto de 2019.'
  },
  zach_bitter: {
    name: 'Zach Bitter',
    country: 'USA',
    achievement: 'Titular de récords mundiales y americanos\nCampeón nacional de 2012 y 2015 (50 millas)\nCampeón Nacional 2014 (100 millas)\nRecorrido de 50 millas del JFK - 9º tiempo más rápido',
    desc: 'Zach Bitter es un atleta de resistencia extrema y entrenador. Zach tiene el récord mundial de 100 millas (11 horas 19 minutos 13 segundos) y de 12 horas (104,88 millas). Zach ha corrido por todo el mundo; incluso ha representado al equipo de Estados Unidos en los Campeonatos Mundiales de 100 km en tres ocasiones. Cuando no está en la carretera o en la pista, a Zach le gusta mezclarse en los senderos. Ha ganado las 100 millas de Javelina y las 100 millas de San Diego.'
  },
  audrey_tanguy: {
    name: 'Audrey Tanguy',
    country: 'Francia',
    achievement: '2019 Lavaredo Ultra Trail (Italia) - 2º\n2019 MIUT Ultra Trail de Madère - 3ª\n2019 TransJeju Corée (50 km) - 1º\n2018 y 2019 Trace des Ducs de Savoie (74) - 1º\n2018 90 kms du Mont Blanc (74) - 2º',
    desc: 'Audrey Tanguy tiene su base en los Alpes franceses donde entrena para ser una de las mejores corredoras de Trail de Europa. Sus logros como corredora de Trail y Montaña son impresionantes, con podios en el Marathon Du Mont-Blanc, Lavaredo Ultra Trail y dos veces en el Madeira Island Ultra Trail (MUIT). Lo más extraordinario es que ha sido dos veces campeona de la UTMB-TDS. Con su pasión por el trail-running, Audrey espera seguir defendiendo sus títulos, a la vez que emprende nuevas aventuras.'
  },
  scotty_hawker: {
    name: 'Scotty Hawker',
    country: 'Nueva Zelanda',
    achievement: '5º - 2019 Hong Kong 100km, Hong Kong\n1º - 2019 Mt Solitary Ultra 45km, Australia\n3º - 2019 Retezat Skyrace 28km, Rumanía\n3º - 2019 Lavaredo Ultra Dolomites, Italia \n2º - 2019 Grossglockner Ultra Trail 50km, Austria \n3ª - 2019 UTMB, Francia\n1º - 2019 Maesalong 10km, Tailandia',
    desc: 'Scotty Hawker es un corredor de trail y ultramaratón de Christchurch, Nueva Zelanda. Actualmente pasa 6 meses del año viajando por Europa con su mujer y su hija de tres años. Les encanta explorar nuevos países y eso le da a Scotty la oportunidad de alinearse en algunos de los eventos de trail y ultramaratón más competitivos del mundo. En 2019, Scotty coronó una gran temporada de carreras con un 3er puesto en el prestigioso Ultra Trail du Mont Blanc. Después de un año increíblemente desafiante en 2018 y de estar a punto de abandonar el deporte, fue un resultado muy luchado y ha dejado a Scotty con una nueva confianza mientras se prepara para la temporada 2020. Scotty también es entrenador y ayuda a atletas de todo el mundo a prepararse para carreras de distancia de trail y ultramaratón. A Scotty le encanta poder compartir sus conocimientos y su experiencia en el deporte del trail running con los demás y considera que entrenar le da equilibrio en la vida junto con ser un atleta.'
  },
  tommy_caldwell: {
    name: 'Tommy Caldwell',
    country: 'USA',
    achievement: 'Primer ascenso libre de la pared del amanecer de El Capitán Yosemite\nPrimer ascenso libre de la pared del diedro\nEscalada libre de la Nariz en 11 horas\nRécord de velocidad de la Nariz en 1 hora y 58 minutos\nPrimera ascensión de la Travesía del Fitz Roy en la Patagonia',
    desc: 'National Geographic llamó a Caldwell "posiblemente el mejor escalador de roca del planeta". Tommy ha escalado por todo el mundo y ha establecido algunas de las rutas de escalada en roca más duras de Estados Unidos. Ya sea la Pared del Amanecer, la Travesía del Fitz o el récord de velocidad de La Nariz, Tommy es imparable y sigue demostrando lo que es posible cuando se empuja el cuerpo humano.'
  },
  john_price: {
    name: 'John Price',
    country: 'Canadá',
    achievement: '',
    desc: 'John Price es un fotógrafo y escalador que ha pasado los últimos seis años viajando por todo el mundo, mientras que su base está en Canadá.  En los últimos cuatro años, Price ha estado escalando y fotografiando activamente ascensos en roca, hielo y alpinos por toda Norteamérica, los rincones más remotos del Himalaya, el Japón rural, escaladas en hielo en China y extensamente por las Rocosas canadienses.  Actualmente reside en Canmore, Alberta, donde trabaja como fotógrafo independiente de aventura, estilo de vida y paisaje.'
  },
  luke_smithwick: {
    name: 'Luke Smithwick',
    country: 'USA',
    achievement: '',
    desc: 'Un periodista apodó recientemente al alpinista y esquiador profesional de COROS Luke Smithwick, "uno de los escaladores del Himalaya más prolíficos de los últimos tiempos". Con 73 expediciones al Himalaya en los últimos 9 años, está centrado en el esquí de exploración y el alpinismo en la cordillera. Smithwick ha esquiado más de 30 primeros descensos estéticos a pie en el Himalaya, desarrollando una profundidad de conocimiento y un currículum de esquí que pocos poseen en el camino.  Su hogar es Victor, Idaho, al pie de los Tetons.  Llega al equipo profesional de COROS con grandes planes para 2020 y más allá.'
  },
  hilaree_nelson: {
    name: 'Hilaree Nelson',
    country: 'USA',
    achievement: '',
    desc: 'Combinando su pasión por la exploración, las aventuras en la montaña y el esquí, Hilaree Nelson ha viajado a algunas de las cordilleras más exóticas del planeta. Su carrera como expedicionaria la ha llevado a realizar muchas "primicias" en el mundo del esquí de montaña, entre las que se incluyen la unión de dos picos de 8000 metros (el Everest y el Lhotse) de una sola vez, los primeros descensos en esquí en la isla de Baffin, el primer ascenso y descenso en esquí de un americano al pico Papsura en la India y, más recientemente, el primer descenso en esquí del cuarto pico más alto del mundo, el Lhotse. Es la capitana del equipo de atletas de North Face, una líder activa en materia de clima con Protect Our Winters, y una ávida defensora de lugares salvajes como el Refugio Nacional de Vida Silvestre del Ártico. Es partidaria de la filosofía de que los lugares salvajes que quedan tienen una enorme importancia para el bienestar del planeta y de la psique humana. Recientemente nombrada por Men\'s Journal como una de las mujeres más aventureras de los últimos 25 años, así como la Aventurera del Año 2018 de National Geographic, Hilaree completa sus esfuerzos deportivos compartiendo sus numerosas historias en escenarios de todo el país con la esperanza de inspirar la imaginación y la pasión en las personas que encuentra. Hilaree también es madre de dos niños salvajes y encuentra su cordura en las montañas de San Juan, cerca de su casa en Telluride, Colorado.'
  },
  jim_morrison: {
    name: 'Jim Morrison',
    country: 'USA',
    achievement: '',
    desc: 'Jim Morrison cimentó su reputación como uno de los mejores alpinistas de todos los tiempos con el primer descenso del Lhotse Couloir, en 2018, una de las últimas líneas de esquí de gran altitud que quedan en el mundo. Décadas antes de ese hito, Morrison acumulaba toda una vida de experiencia en el esquí por todo el mundo. Desde Chamonix hasta Alaska y el Himalaya indio, Morrison ha escalado y esquiado algunos de los picos más exigentes del mundo, incluyendo un primer descenso de Papsura, una nueva línea de esquí en Cho Oyu, así como una cumbre y un descenso parcial en esquí del Monte Everest. Además de su tiempo en las montañas, Morrison es también un empresario de éxito, que posee y gestiona un negocio de construcción de casas de lujo en Lake Tahoe. Además, contribuye a su comunidad como miembro del consejo de administración de su distrito aeroportuario local y participa activamente en la organización medioambiental sin ánimo de lucro Protect Our Winters.'
  },
  jason_antin: {
    name: 'Jason Antin',
    country: 'USA',
    achievement: '',
    desc: 'Jason Antin, originario de Nueva Inglaterra y ahora residente en Colorado, dedica todo su tiempo a conciliar la vida laboral con la personal. Además de ayudar a lanzar un puñado de empresas emergentes centradas en las actividades al aire libre, también dedica gran parte de su tiempo a trabajar como guía técnico de escalada para Alpenglow Mountain guides y Denver Mountain Guiding. Además, es entrenador de fuerza y acondicionamiento en The Alpine Training Center en Boulder, CO, donde prepara a sus atletas para los rigores físicos y mentales de las montañas. Fuera del reloj, Jason comparte su hogar en Golden, CO con su esposa Jenny y su hija de 3 años Avery. Disfruta moviéndose rápidamente en las montañas sobre todos los medios que la madre naturaleza comparte con nosotros, ya sean senderos de roca, hielo o nieve'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/retail.js
/* harmony default export */ const es_retail = ({
  retailTitle: 'Localizador de tiendas',
  findADealer: 'ENCUENTRE UN\nDISTRIBUIDOR',
  loading: 'Cargando Software Localizador de Tiendas'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/privacy.js
/* harmony default export */ const es_privacy = ({
  privacyTitle: 'Política de privacidad',
  title: 'POLÍTICA DE PRIVACIDAD',
  updateDate: 'Última actualización：8/15/2020',
  updateDesc: 'Esta política de privacidad explica cómo COROS Wearables Inc. ("COROS", "nosotros" o "nuestro") recopila, utiliza y divulga información sobre usted. Esta política de privacidad se aplica a la información que recopilamos cuando usted utiliza nuestros productos y servicios, incluidos nuestros sitios web y aplicaciones móviles (colectivamente, los "Servicios") o cuando interactúa con nosotros de cualquier otro modo. Para obtener detalles sobre las opciones que ofrecemos en relación con nuestras prácticas de información, consulte "Sus opciones" más adelante. Si tiene alguna pregunta sobre esta política de privacidad, póngase en contacto con nosotros en info@coros.com.',
  infoTitle: 'Recogida de información',
  providedInfo: {
    title: 'Información que usted nos proporciona',
    desc: 'Recogemos la información que usted nos proporciona directamente a través de los Servicios o de otra manera. Por ejemplo, recopilamos información cuando usted crea una cuenta, actualiza su perfil, se inscribe en nuestro boletín de noticias, utiliza nuestro dispositivo para un entrenamiento, sincroniza su historial de entrenamiento con nuestro servidor, realiza una compra, solicita asistencia al cliente o nos proporciona información de cualquier otra forma. Los tipos de información que podemos recopilar incluyen su nombre, dirección de correo electrónico, dirección de envío o de facturación, información sobre el método de pago, historial de entrenamiento y cualquier otra información que usted decida proporcionar.'
  },
  collectForService: {
    title: 'Información que recopilamos automáticamente cuando usted utiliza los servicios',
    desc: 'Cuando usted accede o utiliza nuestros Servicios, recopilamos automáticamente información sobre usted, incluyendo\n    - Información de registro: Recogemos archivos de registro en relación con su uso de los Servicios, incluyendo el tipo de navegador que utiliza, las horas de acceso, las páginas visitadas, su dirección IP y la página que visitó antes de navegar a nuestros sitios web.\n    - Información sobre el dispositivo: Recogemos información sobre el ordenador o dispositivo móvil que utiliza para acceder a nuestros Servicios, incluyendo el modelo de hardware, el sistema operativo y la versión, los identificadores únicos del dispositivo y la información de la red móvil.\n    - Información sobre la ubicación: Podemos recopilar información sobre su ubicación a través de varias tecnologías, incluyendo la derivación de la ubicación aproximada de la dirección IP. Con su consentimiento, también podemos recopilar una ubicación más precisa a través de nuestra aplicación móvil.\n    - Después de utilizar la App COROS para cargar los datos de seguimiento rutinario de su dispositivo y el movimiento, los datos se cargarán en el almacén del servidor, y los datos cargados incluirán los pasos, las calorías, la frecuencia cardíaca, el tiempo de actividad, los datos de actividad y la trayectoria de la actividad. Puedes desactivar el interruptor del GPS al final del reloj, y ya no podrás registrar tu trayectoria y cargar el almacenamiento del servidor cuando te muevas. Si utiliza la función de representación de mapas, enviaremos la información de su ubicación al proveedor de servicios de representación de mapas que puede dibujar y mostrar su ubicación en el mapa según el acuerdo, estos proveedores no están autorizados a compartir o utilizar estos datos para ningún otro propósito.\n    - Para utilizar COROS Training Hub, inicie sesión con las mismas credenciales de cuenta utilizadas para iniciar sesión en la App COROS. Si tiene acceso como entrenador, puede crear equipos e invitar a otros usuarios a unirse a su equipo mediante enlaces de invitación o códigos QR. Tendrá la posibilidad de establecer permisos de privacidad para ocultar o permitir que su equipo vea su información personal y sus datos de entrenamiento en la página de información personal en COROS Training Hub. También puede establecer permisos de privacidad para permitir a los entrenadores editar su calendario, ver sus datos de entrenamiento y dejar comentarios para supervisar su progreso de entrenamiento en COROS Training Hub. COROS no es responsable del contenido de los mensajes generados dentro de COROS Training Hub. COROS no es responsable de la conducta de ningún usuario de COROS (en línea o fuera de línea).\n    - Informe de fallos de la aplicación e informe de uso de funciones: cuando su App COROS no funciona correctamente, su aplicación puede enviar informes de fallos a nuestro equipo para su análisis. Este informe es anónimo y no contiene ninguna información personal. La aplicación también recoge datos sobre el comportamiento de los usuarios de forma anónima para proporcionar información a los desarrolladores sobre las funciones más populares y así poder tomar las mejores decisiones para el desarrollo de futuros productos.\n    - Contacto de emergencia: Cuando se utiliza la función de contacto de emergencia del casco, se introduce de antemano el contacto telefónico y la información de la memoria para el contacto de emergencia, que sólo se utiliza cuando se lleva el casco y Conectado a  la aplicación de viaje, el casco reconoce esta emergencia y pide a la aplicación que solicite al servidor que envíe un mensaje al contacto de emergencia. No expondremos este contacto para otros fines. En caso de un accidente que desencadene el envío de un mensaje de texto, incluiremos la información de ubicación en el mensaje enviado y la hora local en que se produjo el accidente al contacto de emergencia previamente establecido. No nos hacemos responsables del fallo en la entrega de los SMS SOS debido a la interrupción del servicio de la compañía de SMS o a la falta de respuesta. Información recopilada por las cookies y otras tecnologías de seguimiento: Nosotros y nuestros proveedores de servicios utilizamos varias tecnologías para recopilar información, incluidas las cookies y las balizas web. Las cookies son pequeños archivos de datos que se almacenan en su disco duro o en la memoria de su dispositivo y que nos ayudan a mejorar nuestros Servicios y su experiencia, a ver qué áreas y características de nuestros Servicios son populares y a contar las visitas. Las balizas web son imágenes electrónicas que pueden utilizarse en nuestros Servicios o correos electrónicos y que ayudan a entregar las cookies, contar las visitas y comprender el uso y la eficacia de las campañas.'
  },
  collectFromOther: {
    title: 'Información que obtenemos de otras fuentes',
    desc: 'También podemos obtener información de otras fuentes. Por ejemplo, si usted crea o entra en su cuenta a través de un servicio de medios sociales, recibiremos cierta información de ese servicio, como su nombre, información de la cuenta o lista de amigos, de acuerdo con los procedimientos de autorización determinados por ese servicio. Uso de la información Podemos combinar la información que recopilamos sobre usted y utilizarla para\n    - Proporcionar, mantener y mejorar nuestros Servicios y desarrollar nuevos productos y servicios;\n    - Proporcionar y entregar los productos o servicios que usted solicite o compre;\n    - Enviarle avisos, actualizaciones, alertas, confirmaciones, respuestas del servicio de atención al cliente y otros mensajes de apoyo y administrativos;\n    - Comunicarnos con usted sobre productos, servicios, ofertas, promociones u otra información que consideremos de su interés;\n    - Supervisar y analizar las tendencias, el uso y las actividades relacionadas con nuestros Servicios;\n    - Detectar, investigar y prevenir transacciones fraudulentas y otras actividades ilegales y proteger los derechos y la propiedad de COROS y otros; y\n    - Personalizar y mejorar los Servicios y proporcionar contenidos o funciones que se ajusten a su perfil o intereses.'
  },
  sharingInfo: {
    title: 'Intercambio de información',
    desc: 'Podemos compartir información sobre usted de la siguiente manera o como se describe en esta Política de Privacidad:\n    - Con proveedores de servicios que realicen trabajos en nuestro nombre;\n    - Si decide conectar su cuenta de COROS a otros servicios de terceros, como Strava, TrainingPeaks u otros servicios que no estén explícitamente incluidos en la lista de sincronización automática, sus datos se enviarán automáticamente a ellos. Puede desactivar la configuración de sincronización automática en su App COROS en cualquier momento, pero los datos enviados a la plataforma de terceros permanecerán allí a menos que se eliminen de su servidor.\n    - Si usted participa en áreas interactivas de nuestros Servicios, cierta información sobre usted puede ser mostrada públicamente a través de los Servicios, como su nombre de usuario y la información de su perfil;\n    - En respuesta a una solicitud de información, si creemos que la divulgación se realiza de acuerdo con cualquier ley, reglamento o proceso legal aplicable, o si así lo exige;\n    - Si creemos que sus acciones son incompatibles con nuestros acuerdos o políticas de usuario, o para proteger los derechos, la propiedad y la seguridad de COROS u otros;\n    - En relación con, o durante las negociaciones de, cualquier fusión, venta de activos de la empresa, financiación o adquisición de la totalidad o una parte de nuestro negocio por otra empresa;\n    - Entre COROS y nuestras empresas matrices, afiliadas, subsidiarias y otras empresas bajo control y propiedad común, actuales y futuras;\n    - Con su consentimiento o bajo su dirección, también podemos compartir información agregada o desidentificada, que no puede ser razonablemente utilizada para identificarle.'
  },
  advancedRawData: {
    title: 'Datos brutos del entrenamiento avanzado',
    desc: 'Los datos brutos de los entrenamientos avanzados, incluidos los datos de origen del GPS de su dispositivo COROS, la frecuencia cardíaca, el rendimiento de la batería, etc., se almacenan en su dispositivo COROS. Es posible que se le pida que envíe los datos sin procesar a través de la App COROS a nuestro equipo cuando se ponga en contacto con el servicio de atención al cliente o la resolución de problemas. Además, nuestro equipo requiere el envío de datos brutos para determinar el fallo del hardware en respuesta a las reclamaciones de garantía.'
  },
  socialSharingFeat: {
    title: 'Funciones para compartir en redes sociales',
    desc: 'Los Servicios pueden ofrecer funciones para compartir en redes sociales y otras herramientas integradas (por ejemplo, con otras redes sociales), que le permiten compartir las acciones que realiza en nuestros Servicios con otros medios, y viceversa. El uso de dichas funciones permite compartir información con sus conexiones o con el público, dependiendo de la configuración que usted establezca con la entidad que proporciona la función para compartir en redes sociales. Para obtener más información sobre la finalidad y el alcance de la recopilación y el tratamiento de datos en relación con las funciones de intercambio social, visite las políticas de privacidad de las entidades que proporcionan estas funciones.'
  },
  ad: {
    title: 'Servicios de análisis y publicidad prestados por terceros',
    desc: 'Podemos utilizar a terceros para proporcionar servicios de análisis y publicidad para nuestros sitios web y servicios en línea. Estas entidades pueden utilizar cookies, balizas web, identificadores de dispositivos y otras tecnologías para recopilar información sobre su uso de los Servicios y otros sitios web y servicios en línea, incluida su dirección IP, navegador web, información de la red móvil, páginas visitadas, tiempo de permanencia en las páginas o en las aplicaciones, enlaces pulsados e información de conversión. Esta información puede ser utilizada por COROS y otros para analizar y rastrear la actividad de uso, determinar la popularidad de ciertas características y ofrecer anuncios y contenidos adaptados a sus intereses. Para obtener más información sobre los anuncios basados en los intereses, incluida la forma de optar por que no se utilice su información de navegación en la web para los anuncios basados en los intereses, visite www.aboutads.info/choices. Su dispositivo móvil también puede incluir una función que le permite restringir el uso de cierta información recopilada a través de las aplicaciones con el fin de ofrecer anuncios basados en intereses.'
  },
  deleteAccount: {
    title: 'Eliminación de su cuenta',
    desc: 'Puede enviar un correo electrónico a support@coros.com para solicitar la eliminación de su cuenta de COROS, incluidos todos los datos personales. En este correo electrónico también puede solicitar una copia de su historial de entrenamientos en formato de archivo .fit.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/tradeIn.js
/* harmony default export */ const es_tradeIn = ({
  title: 'Aplicación COROS Trade In',
  desc: 'Una empresa de tecnología deportiva de alto rendimiento que ayuda a los atletas a entrenarse para dar lo mejor de sí mismos.',
  pageTitle: 'SOLICITUD DE CANJE',
  pageDesc: 'Canjee un reloj GPS en funcionamiento de cualquier marca, incluida COROS, por un crédito de hasta 100 dólares para la compra de un nuevo reloj COROS. Cada reloj que se canjea se aplica a una sola compra de un nuevo reloj.\n\nUna vez que la unidad de canje haya sido enviada a nosotros, no podrá ser devuelta o reembolsada si cambia de opinión.',
  residentsDescNotify: 'El programa no está disponible actualmente en los Estados Unidos. Inscríbase para recibir notificaciones por correo electrónico cuando el programa vuelva a estar disponible. ',
  residentsDesc: 'El programa está actualmente disponible sólo para residentes en Estados Unidos. ',
  nextSteps: ['Nuestro equipo revisará su información y le proporcionará un valor estimado por correo electrónico.', 'Si decides aceptar la oferta, realiza el pedido de tu nuevo reloj con el precio original.', 'Envíe la unidad de intercambio con la etiqueta de envío prepagada proporcionada por COROS, junto con la confirmación de su pedido por correo electrónico.', 'Le devolveremos el valor de su trade in a su pedido una vez que recibamos su envío.', 'Esta oferta no se puede combinar con otros descuentos.', 'Disfrute de su nuevo reloj COROS actualizado.'],
  howItWorks: ['Enviar información', 'Reciba una oferta con valor', 'Haga un pedido del nuevo reloj y envíe su reloj de intercambio', 'Obtenga un reembolso cuando recibamos su reloj de intercambio'],
  notifyButton: 'NOTIFICARME',
  notifyPlaceholder: 'NOTIFICAR CUANDO ESTÉ DISPONIBLE'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/apex.js
/* harmony default export */ const es_apex = ({
  title: 'Reloj GPS COROS APEX',
  desc: 'Nuestro reloj más versátil para atletas al aire libre, que viajan ligeros y rápidos.',
  accessories: 'ACCESSORIES',
  battery_life: {
    title: 'Ultra-Durable\nBattery Life',
    desc: "Make constantly charging your watch a thing of the past. With APEX, you will have a watch that is built to last above and beyond your workout. In UltraMax setting, the battery is carefully\n        engineered to last up to 100 hours using GPS. While using normal mode will yield up to 35 hours, and regular usage up to 30 days."
  },
  'Built in Premium': {
    title: 'Built in Premium',
    desc: "Transitioning from the workplace to training is easy with the APEX's intelligent build and design. With finish options including titanium alloy and stainless steel bezel alongside a sapphire\n        glass face for extreme protection, you are prepared for any and every environment."
  },
  'Simplicity at its Finest': {
    title: 'Simplicity at its Finest',
    desc: "Changing screens and using devices can be overwhelming with traditional buttons, especially in the middle of a workout. With the digital dial, you can easily navigate through the APEX,\n        allowing you to focus on the important things like finishing your run or prepping your next set."
  },
  'Training Efficiency Without Injury': {
    title: 'Train Smarter With EvoLab',
    desc: "Unique metrics to track critical aspects of your training. Creating a comprehensive picture of your training to help you perform to the very best of your ability. Tired from a recent training session? View your Fatigue and Recovery metrics to see if recent workout stress is within our recommended ranges. Preparing for a race but unsure how to estimate the impact of training or fitness? Utilize our predictive tools within COROS Training Hub to estimate your Base Fitness and Training Load measurements, allowing you to peak at just the right time."
  },
  'Navigation Track': {
    title: 'Navigation Track',
    desc: "Equipped with track and navigation features, APEX can be your best tool when you need directions the most. Routes are uploaded and displayed on grid as a bread crumb trail with real time\n        information on heading and elevation and alerts to help you get back on course."
  },
  'Smart Learning Stride Length': {
    title: 'Smart Learning Stride Length',
    desc: "Introducing COROS' very own, Intelligent Stride Algorithm. This unique algorithm embodies machine learning at its core to record your personal range of motion while running. This will\n        build your very own stride model that will be used for indoor running or areas of weak GPS signal (such as tunnels)."
  },
  gpsAbilities: ['Learn Running Habits\nDuring Normal GPS', 'Estimate Running Distance And\nTrack When GPS Is Weak Or Lost'],
  'Your Complete Training Guide': {
    title: 'Your Complete Training Guide',
    desc: "Based on a unique algorithm with lactate threshold, VO2 Max and HR, the COROS Trainer dials-in your running training every day. Using your personal historical data along with metrics from\n      your latest activity, such as pace, distance and HR - COROS Trainer will calculate a perceived effort and recommend a time for full recovery."
  },
  'ANY WORKOUT, ANYWHERE': {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: "With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or\n      Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training\n      partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and\n      onto your watch. With the new training mode, your best efforts are well within your reach."
  },
  'Stay on Track': {
    title: 'Stay on Track',
    desc: "A standard track is 400m, so why can\u2019t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts\n      are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the\n      track \u2013 just like how you run on it."
  },
  pod: 'Working with COROS Performance Optimization Device (POD), APEX is able to provide advanced running metrics in real time, including power and form data to help turn you into a smarter and more efficient runner.',
  podLinkText: 'Check out COROS POD',
  battery: {
    size46: {
      normal: "35 Hours Normal\n            GPS Mode",
      ultra: "70 Hours\n            UltraMax GPS Mode",
      regular: "30 Days\n            Regular Use"
    },
    size42: {
      normal: "25 Hours Normal\n            GPS Mode",
      ultra: "60 Hours\n            UltraMax GPS Mode",
      regular: "24 Days\n            Regular Use"
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/apex2.js
/* harmony default export */ const es_apex2 = ({
  apex2title: 'COROS APEX 2/2 Pro',
  title: 'Reloj GPS para exteriores COROS APEX 2/2 Pro',
  desc: 'Para los atletas de exteriores que entrenan duro y se mueven rápido.',
  apex2Accessories: 'ACCESORIOS APEX 2',
  apex2proAccessories: 'ACCESORIOS APEX 2 Pro',
  productTitle: 'PARA EL ENTRENAMIENTO Y LA \nAVENTURA',
  productDesc1: "Dise\xF1ados para rendir en todo tipo de terrenos, los relojes GPS APEX 2 y APEX 2 Pro est\xE1n\n  construidos con tecnolog\xEDas revolucionarias para tus objetivos m\xE1s ambiciosos.",
  productDesc2: "Con un exterior a\xFAn m\xE1s duradero, antena GPS redise\xF1ada para un mayor rendimiento una\n    experiencia de navegaci\xF3n mejorada, un sensor \xF3ptico de frecuencia card\xEDaca de \xFAltima\n    generaci\xF3n y una bater\xEDa GPS de larga duracci\xF3n, los relojes APEX 2 y APEX 2 Pro son las\n    herramientas m\xE1s potentes para guiar tu entrenamiento y seguir tus movimientos en la\n    naturaleza. Prep\xE1rate para entrenar de forma m\xE1s inteligente y llegar m\xE1s lejos.",
  productDescMobile1: 'Diseñados para rendir en todo tipo de terrenos \n los relojes GPS para exteriores APEX 2 y APEX 2 Pro \n están construidos con tecnologías revolucionarias para tus \n objetivos más ambiciosos.',
  productDescMobile2: 'Con un exterior aún más duradero, antena GPS rediseñada \n para un mayor rendimiento,  experiencia de navegación mejorada, sensor óptico de frecuencia cardíaca de \n de última generación y una mayor duración de la batería del GPS, los \n APEX 2 y APEX 2 Pro son las herramientas más \n herramientas de muñeca más potentes para guiar tu entrenamiento y \n seguir tus movimientos en la naturaleza. Consigue \n prepárate para entrenar de forma más inteligente y llegar más lejos.',
  explorationTitle: 'SUPERA LOS LÍMITES DE LA \n EXPLORACIÓN',
  explorationDesc: 'El reloj deportivo definitivo para las actividades al aire libre equilibra la durabilidad y la funcionalidad,\n por lo que hemos diseñado cuidadosamente cada detalle pensando en el rendimiento. \n Con el APEX 2 y el APEX 2 Pro, tendrás un reloj que dura\ntanto como tú. Y más.',
  designLabel1: 'Titanio de grado 5 Bisel\ncon revestimiento de PVD',
  designLabel2: 'Compatible para uso con guantes \n Esfera digital de gran tamaño',
  designLabel3: 'Cristal de zafiro \n Cristal de zafiro resistente a los arañazos',
  explorationDescMobile: 'El reloj deportivo definitivo para exteriores equilibra \n durabilidad y funcionalidad, por lo que hemos \n diseñado cuidadosamente cada uno de los detalles con\n el rendimiento en mente. Con el APEX 2 y el \n APEX 2 Pro, tendrás un reloj que durará\ntanto como tú. Y más.',
  designTitle: 'Diseñado para la durabilidad',
  designDesc: 'Una pantalla de cristal de zafiro y un bisel de aleación de titanio de grado 5 protegen los \n componentes electrónicos dentro del APEX 2 y el APEX 2 Pro. Mientras que el cristal de zafiro permanece \n prácticamente sin arañazos, un nuevo revestimiento de PVD ofrece doble resistencia a los arañazos en el \n bisel en comparación con su predecesor.',
  designDescMobile: 'Una pantalla de cristal de zafiro y un bisel de aleación\n de titanio de grado 5 protegen los componentes electrónicos del \n APEX 2 y APEX 2 Pro. Mientras que el cristal de zafiro \n se mantiene prácticamente libre de arañazos, un nuevo revestimiento de PVD \n ofrece doble resistencia a los arañazos en el bisel\nen comparación con su predecesor.',
  temperatureResistanTitle: 'Resistente a la temperatura',
  temperatureResistanDesc: 'Cualquier clima, en cualquier lugar. El APEX 2 funciona en la muñeca \n a temperaturas que van de -20℃ a 50℃, para que puedas\nprobar los límites de la exploración.',
  temperatureResistanDescMobile: 'Cualquier clima, en cualquier lugar. El APEX 2 funciona en la muñeca \n a temperaturas que van de -20℃ a 50℃, para que puedas\nprobar los límites de la exploración.',
  temperatureResistanLower: '-20',
  temperatureResistanUpper: '50',
  temperatureUnit: '℃',
  waterproofTitle: 'Resistente al agua',
  waterproofDesc: "Lluvia, nieve, charcos, barro, lo que sea. \n    El APEX 2 se mantiene seco en cualquier \n       condici\xF3n. Construido con una resistencia\n       al agua de 5 ATM, este reloj tambi\xE9n soporta\n       presiones hasta una profundidad de 50 metros.",
  waterproofDescMobile: 'Lluvia, nieve, charcos \n barro, lo que sea. El \n APEX 2 se mantiene seco en cualquier \n condición. Construido con una resistencia al agua de 5 \n ATM de resistencia al agua, \n este reloj también \n soporta presiones \n hasta una profundidad de 50 metros.',
  dialTitle: 'Esfera fácil de usar',
  dialDesc: 'Nuestro sencillo diseño de botones cuenta con una gran esfera digital, para que puedas cambiar fácilmente\nlos ajustes de tu reloj con unos simples clics, incluso con guantes.',
  dialDescMobile: 'Nuestro sencillo diseño de botones cuenta con una gran esfera digital \n para que puedas cambiar fácilmente los ajustes de tu \n reloj con unos simples clics, incluso con guantes.',
  batteryTitle: 'Mayor duración de la batería',
  batteryDesc: 'Gracias al bajo consumo de energía del último diseño del sistema de señal satelital \n conseguimos una mayor duración de la batería del GPS en comparación con el APEX original. El APEX 2 proporciona\n40 horas de duración completa de la batería del GPS, mientras que el APEX 2 Pro proporciona 66 horas.\nAdemás, el reloj tarda menos de 2 horas en pasar de cero a carga completa.',
  batteryDescKeyword: '66 horas',
  batteryDescMobile: 'Gracias al bajo consumo de energía del \n último diseño del sistema de señal de satélite, conseguimos una mayor \n duración de la batería del GPS en comparación con el APEX original. El \n APEX 2 proporciona 40 horas de duración de la batería GPS completa \n mientras que el APEX 2 Pro proporciona 66 horas. Además, el \n tarda menos de 2 horas en pasar de \n cero a carga completa.',
  batteryDescMobileKeyword: '66 horas',
  batteryCompareImprove: 'Hasta',
  batteryCompareImproveTitle: 'Mayor duración de la batería del GPS',
  navTitle: 'NAVEGA POR LA NATURALEZA \n COMO NUNCA ANTES',
  navDesc: 'El APEX 2 hace las veces de reloj preparado para tus aventuras en senderos cerca de casa o para \n escalar montañas glaciares. Está equipado con funciones de navegación de primera categoría \n para que sepas exactamente dónde estás en la naturaleza y cómo\nvolver a tu destino original.',
  navDescMobile: 'El APEX 2 funciona como un reloj preparado para tus \n aventuras cerca de casa o para escalar montañas \n glaciares. Está equipado con funciones de \n funciones de navegación, para que sepas exactamente\nexactamente dónde estás en la naturaleza y cómo volver\na tu destino original.',
  gpsTitle: 'Precisión GPS de siguiente nivel',
  gpsTitleMobile: 'Siguiente nivel  \nde precisión del GPS',
  gpsDesc: "Junto con la antena que da un 50% m\xE1s de rendimiento \n    y el conjunto de chips GNSS para todos los sat\xE9lites, el \n   APEX 2 recibe se\xF1ales de los cinco principales sistemas \n   de sat\xE9lites para datos m\xE1s precisos. Adem\xE1s, el APEX 2 \n   Pro cuenta con la \xFAltima tecnolog\xEDa de doble frecuencia \n   para el seguimiento en  \n    lugares m\xE1s dif\xEDciles.",
  gpsDescMobile: "Junto con la nueva antena con\n    un 50% m\xE1s de rendimiento \n    y el chipset GNSS All-Sat\xE9lite,\n    el APEX 2 recibe se\xF1ales de \n     los cinco principales sistemas\n    de sat\xE9lites para obtener los \n    datos m\xE1s precisos. Adem\xE1s, \n    el APEX 2 Pro cuenta con\n    la \xFAltima tecnolog\xEDa de doble \n     tecnolog\xEDa para el seguimiento en  \n     lugares m\xE1s dif\xEDciles.",
  outdoorNavTitle: 'No te pierdas nunca más',
  outdoorNavDesc: 'Nuestro sistema de navegación altamente intuitivo te ofrece las herramientas que necesitas cuando exploras la naturaleza. Con \n mapas topográficos y paisajísticos globales gratuitos sin conexión, puedes acceder a información de navegación crítica\nen los lugares más remotos. El dial digital del COROS APEX 2 y APEX 2 Pro facilita \n acercar y alejar el mapa, mientras que la pantalla táctil permite arrastrar el mapa con el dedo.',
  outdoorNavLabel1: 'Movimientos solares.',
  outdoorNavLabel2: 'Perfil de elevación.',
  outdoorNavLabel3: 'Distancia al destino.',
  outdoorNavLabel4: 'Alerta de desvío.',
  outdoorNavLabel5: 'Punto de control.',
  outdoorNavLabel6: 'Coordenadas GPS exactas.',
  outdoorNavScene1: 'Mantente un paso por delante del sol. Muévete rápidamente antes de que oscurezca, o adelántate al amanecer.',
  outdoorNavScene2: 'Conoce los cambios de elevación de tu recorrido antes o durante la actividad. ',
  outdoorNavScene3: 'Obtén una motivación adicional al conocer tu distancia hasta el siguiente punto de control o destino final.',
  outdoorNavScene4: 'Recibe alertas cuando te desvíes de la ruta con información sobre la distancia y el rumbo para volver al camino.',
  outdoorNavScene5: 'Marca lugares importantes, como fuentes de agua, puestos de socorro o puntos de almacenamiento de equipo para una futura navegación.',
  outdoorNavScene6: 'Accede a tu ubicación GPS actual, a la presión atmosférica y a la altitud estimada.',
  plan: 'Planifica tu próxima aventura',
  planDesc1: "Basta con abrir la app, comienza a dibujar tu ruta preferida y deja que \nel planificador de rutas elija tu ruta \xF3ptima bas\xE1ndose en los senderos \nm\xE1s cercanos o calles disponibles. Comprueba la distancia y la elevaci\xF3n, \ngu\xE1rdala, transfi\xE9rela a tu reloj o comp\xE1rtela con tus amigos. ",
  planDesc2: 'Actualmente, el ecosistema COROS es compatible con populares \n constructores de rutas de terceros, como Strava y Komoot.',
  planDescMobile1: "Basta con abrir la app, comienza a dibujar tu ruta preferida y deja que \nel planificador de rutas elija tu ruta \xF3ptima bas\xE1ndose en los senderos \nm\xE1s cercanos o calles disponibles. Comprueba la distancia y la elevaci\xF3n, \ngu\xE1rdala, transfi\xE9rela a tu reloj o comp\xE1rtela con tus amigos.",
  planDescMobile2: 'Actualmente, el ecosistema COROS es compatible con populares \n constructores de rutas de terceros, como Strava y Komoot.',
  prepareTitle: 'Pase lo que pase, estarás preparado',
  prepareTitleMobile: 'Pase lo que pase \n estarás preparado',
  prepareDesc: "La belleza de la naturaleza tambi\xE9n conlleva riesgos. El tiempo tormentoso, el mal de altura \n la oscuridad, la deshidrataci\xF3n... son situaciones potenciales que pueden ocurrir en \nla naturaleza. El APEX 2 y el APEX 2 Pro te preparan para cualquier situaci\xF3n para que\n puedas mantenerte seguro e informado mientras llegas a la cima.",
  prepareDescMobile: 'Con la belleza de la naturaleza también vienen los riesgos. \n El tiempo tormentoso, el mal de altura, la oscuridad, \n deshidratación, son todas realidades potenciales del \n de las caminatas por la naturaleza. El APEX 2 y el \n APEX 2 Pro te preparan para cualquier situación, para que puedas \n mantenerte seguro e informado mientras llegas a la cumbre.',
  nutritionAlert: "ALERTA DE \nNUTRICI\xD3N",
  sunMovements: "MOVIMIENTOS\nSOLARES",
  stormAlert: 'ALERTA\nDE TORMENTA',
  cameraControl: 'CONTROL DE\nLA CÁMARA',
  altitudeMode: 'MODO\nALTITUD',
  nightMode: 'MODO NOCHE\nMODO NOCTURNO',
  fitnessTitle: 'CONSTRUYE TU FORMA FÍSICA, \n LIBERA TU MEJOR YO',
  fitnessDesc: "Sea cual sea tu pr\xF3xima aventura, el COROS APEX 2 y el APEX 2 Pro, combinados \n    con el sistema de ciencia deportiva COROS EvoLab, pueden ayudarte a progresar o a \n    establecer una nueva marca personal. Con el respaldo de los mejores atletas de resistencia del mundo nuestra \n    soluci\xF3n de entrenamiento te ayuda a mejorar tu forma f\xEDsica en casa o en el gimnasio, para que \n    est\xE9s preparado para la vida al aire libre.",
  fitnessDescMobile: 'Cualquiera que sea su próxima aventura, el COROS \n APEX 2 y APEX 2 Pro, junto con el sistema de ciencia deportiva COROS \n sistema de ciencia deportiva EvoLab, pueden ayudarte a progresar \n a progresar o a establecer una nueva marca personal. Con el respaldo de los \n de los mejores atletas de resistencia del mundo, nuestra \n nuestra solución de entrenamiento te ayuda a mejorar tu forma física en casa o en el \n en el gimnasio, para que estés preparado para la vida al aire libre.',
  sensorTitle: 'Nuestro sensor de frecuencia cardíaca más preciso hasta la fecha',
  sensorDesc: 'Cuanto más precisos sean tus datos de frecuencia cardíaca, tendrás mejores datos de entrenamiento. Nuestro nuevo sensor óptico de frencuencia cardíaca de muñeca cuenta con un sistema de 5 LEDs con 4 fotodetectores en un diseño personalizado, protegido por una cubierta suave y resistente a los arañazos. Con algoritmos avanzados de eliminación del ruido de la señal, APEX 2 y APEX 2 PRO ofrecen un nuevo nivel de precisión de frecuencia cardíaca. Tanto si te mueves rápido a través de cañones como si duermes en una tienda de campaña para recuperarte, los nuevos relojes APEX 2 registran tu rendimiento sin perder el ritmo... literalmente.',
  sensorDescMobile: 'Cuanto más precisos sean tus datos de frecuencia cardíaca, tendrás mejores datos de entrenamiento. Nuestro nuevo sensor óptico de frencuencia cardíaca de muñeca cuenta con un sistema de 5 LEDs con 4 fotodetectores en un diseño personalizado, protegido por una cubierta suave y resistente a los arañazos. Con algoritmos avanzados de eliminación del ruido de la señal, APEX 2 y APEX 2 PRO ofrecen un nuevo nivel de precisión de frecuencia cardíaca. Tanto si te mueves rápido a través de cañones como si duermes en una tienda de campaña para recuperarte, los nuevos relojes APEX 2 registran tu rendimiento sin perder el ritmo... literalmente.',
  trackRecoverTitle: 'Controla tu recuperación',
  trackRecoverDesc: 'Una recuperación adecuada te permite entrenar más duro. Monitoriza \n tu calidad de sueño con el APEX 2 y el APEX 2 Pro, \n que registran el sueño profundo, ligero y REM, todas las etapas \n etapas cruciales de tu ciclo de sueño. Cuando te despiertes, haz una \n medición rápida de la variabilidad del ritmo cardíaco (VFC) para \n determinar el grado de preparación de tu cuerpo para afrontar los \n factores de estrés del día. Si estás entrenando en altitud, activa el modo de altitud o comprueba manualmente tu nivel de oxígeno en sangre (SpO2) para \n controlar la adaptación de tu cuerpo.',
  trackRecoverDescMobile: 'Una recuperación adecuada te permite entrenar más duro. Monitoriza \n tu calidad de sueño con el APEX 2 y el APEX 2 Pro, \n que registran el sueño profundo, ligero y REM, todas las etapas \n etapas cruciales de tu ciclo de sueño. Cuando te despiertes, toma \n una rápida medición de la variabilidad del ritmo cardíaco (VFC) \n para determinar cómo de preparado está tu cuerpo para afrontar \n los factores de estrés del día. Si estás entrenando en \n altitud, activa el Modo Altitud o comprueba manualmente \n manualmente tu nivel de oxígeno en sangre (SpO2) para \n la adaptación de tu cuerpo.',
  trainingSolutionTitle: 'Una solución de entrenamiento sin precedentes',
  trainingSolutionTitleMobile: 'Una solución de entrenamiento \n solución de entrenamiento',
  trainingSolutionDesc: 'Desde su lanzamiento, COROS EvoLab y COROS Training Hub han ayudado a numerosas hazañas atléticas\nque han batido récords: el récord mundial de maratón de Eliud Kipchoge de Eliud Kipchoge, el nuevo\nrécord mundial de maratón de Kilian Jornet e innumerables récords de ultra running, incluyendo 24 horas,\n100 millas, y más. Con COROS APEX 2 y APEX 2 Pro, tendrás acceso a conocimientos de entrenamiento de\nclase mundial, al igual que los profesionales.',
  trainingSolutionDescMobile: 'Desde su lanzamiento, COROS EvoLab y COROS \n Training Hub han ayudado a numerosas hazañas\n ha asistido a numerosas hazañas atléticas que han batido récords: el récord mundial de maratón de Eliud Kipchoge \n maratón de Eliud Kipchoge, el nuevo récord del UTMB de Kilian Jornet \n de Kilian Jornet, y un sinfín de récords de ultramaratón, \n incluyendo 24 horas, 100 millas, y más. Con \n COROS APEX 2 y APEX 2 Pro, tendrás acceso \n a conocimientos de entrenamiento de clase mundial, al igual que los profesionales.',
  traninghubTitle: 'Crea entrenamientos estructurados \n y planes de entrenamiento',
  traninghubDesc: "Tener un plan establecido hace que el entrenamiento sea\nm\xE1s eficiente y te permite controlar las ganancias de\nfitness a lo largo del tiempo. Accede a entrenamientos y \nplanes aprobados por atletas, o crea los tuyos propios a \ntrav\xE9s de nuestra App m\xF3vil y de escritorio. Reciba los\nentrenamientos de tu entrenador directamente en COROS \nTraining Hub, que podr\xE1s revisar inmediatamente una vez \nque tu reloj se sincronice.",
  trainingLabel1: 'Estado general del entrenamiento.',
  trainingLabel2: 'Predictor de carrera.',
  trainingLabel3: 'Carga total de 7 días.',
  trainingLabel4: 'Ritmo de esfuerzo.',
  trainingLabel5: 'Enfoque del entrenamiento.',
  trainingLabel6: 'Cronómetro de recuperación.',
  trainingDesc1: 'Comprende cómo está reaccionando tu cuerpo al entrenamiento reciente con información sobre la fatiga y el estado físico.',
  trainingDesc2: 'Una estimación de la velocidad a la que puedes correr 5k, 10k, media maratón y maratón completa.',
  trainingDesc3: 'Comprende las cargas de entrenamiento de la semana pasada y comprueba si están en la zona recomendada.',
  trainingDesc4: 'Gestiona tu esfuerzo independientemente de las cuestas arriba o abajo para ayudar mejor a tu entrenamiento y carrera.',
  trainingDesc5: 'Resumen de las mejoras de tu carrera en función de la carga de entrenamiento e intensidad.',
  trainingDesc6: 'Recibe información sobre el tiempo necesario para la recuperación completa y para comenzar un entrenamiento fácil o duro.',
  repsTrackTitle: 'Sesiones de fuerza más fáciles',
  repsTrackDesc: "\xBFCansado de llevar la cuenta? COROS realiza un seguimiento de tus \n    repeticiones autom\xE1ticamente para que no tengas que hacerlo. \n    Selecciona entre m\xE1s de 200 ejercicios precargados para crear tu \n    sesi\xF3n de fuerza ideal. Comparte tus entrenamientos con amigos \n    y compa\xF1eros de entrenamiento a trav\xE9s de mensajes de texto, correo \n    electr\xF3nico, redes sociales o en persona utilizando un c\xF3digo QR en \n    la app COROS.",
  repsTrackDescMobile: "\xBFCansado de llevar la cuenta? COROS realiza un seguimiento de tus \n    repeticiones autom\xE1ticamente para que no tengas que hacerlo. \n    Selecciona entre m\xE1s de 200 ejercicios precargados para crear tu \n    sesi\xF3n de fuerza ideal. Comparte tus entrenamientos con amigos \n    y compa\xF1eros de entrenamiento a trav\xE9s de mensajes de texto, correo \n    electr\xF3nico, redes sociales o en persona utilizando un c\xF3digo QR en \n    la app COROS.",
  packagelist: [{
    name: 'COROS APEX 2/2 Pro',
    num: '1'
  }, {
    name: 'Cable de carga ',
    num: '1'
  }, {
    name: 'Correa de nylon para el reloj ',
    num: '1'
  }],
  comingSoon: 'PRÓXIMAMENTE',
  filterDifferentDialog: {
    intro: 'Aunque los relojes APEX 2 y APEX 2 Pro comparten muchas especificaciones similares, los relojes tienen algunas diferencias importantes a destacar:',
    list1: ['COROS APEX 2', 'tiene una pantalla de 1,2 pulgadas y dura 45 horas en modo GPS completo.'],
    list2: ['COROS APEX 2 Pro', 'tiene una pantalla más grande, mayor duración de la batería y doble frecuencia para mejorar la precisión del seguimiento.'],
    link: ['Visita la', 'tabla comparativa', 'para conocer todos los detalles de las especificaciones.']
  },
  dustyPinkDesc: "Al amanecer o al atardecer recorriendo diversos paisajes de arena,\n  tierra y roca, el APEX 2 Dusty Pink rinde homenaje a uno de los colores\n  m\xE1s inspiradores de la naturaleza que a menudo s\xF3lo existe durante un\n  breve momento m\xE1gico. Disfrute de la vista de esta impresionante\n  edici\xF3n limitada en su mu\xF1eca mientras duren las existencias.",
  gobiDescs: ["Conocido por su \xE1rido paisaje, su terreno implacable y sus condiciones extremas, el vasto\n    desierto de Gobi presta su nombre a un reloj de edici\xF3n limitada que felizmente llamar\xEDa hogar a este lugar.", "Con funciones de navegaci\xF3n avanzadas, una duraci\xF3n de la bater\xEDa l\xEDder en su clase, una gran resistencia y mucho m\xE1s,\n    el COROS APEX 2 Pro Gobi est\xE1 dise\xF1ado para prosperar donde pocos se atreven a pisar. As\xED que all\xE1 donde le lleve su rastro,\n    aseg\xFArese de hacerse con una de las 1500 unidades disponibles antes de que desaparezcan como las movedizas arenas del desierto."],
  gobiDescsMobile: ["Conocido por su \xE1rido paisaje, su terreno implacable y\n    sus condiciones extremas, el vasto desierto de Gobi\n    presta su nombre a un reloj de edici\xF3n limitada que\n    felizmente llamar\xEDa hogar a este lugar.", "Con funciones de navegaci\xF3n avanzadas, una duraci\xF3n\n    de la bater\xEDa l\xEDder en su clase, una gran resistencia y\n    mucho m\xE1s, el COROS APEX 2 Pro Gobi est\xE1 dise\xF1ado\n    para prosperar donde pocos se atreven a pisar. As\xED que\n    all\xE1 donde le lleve su rastro, aseg\xFArese de hacerse con\n    una de las 1500 unidades disponibles antes de que\n    desaparezcan como las movedizas arenas del desierto."]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pod.js
/* harmony default export */ const es_pod = ({
  title: 'COROS POD',
  desc: 'Nuestro dispositivo compañero para la captura y el análisis avanzados de datos.',
  performanceTitle: 'Performance Optimization Device',
  performanceDesc: 'Can you ever have enough data? We didn’t think so, which is why we created the COROS Performance Optimization Device aka the COROS POD. The COROS POD provides all of the advanced running analytics you crave complementing your COROS GPS Watch to help keep you healthy and fit.',
  useDemo: 'The COROS POD is easy to use, simply shake to activate, pair with your watch or the COROS app and clip on vertically to your waist in the center of your back.',
  features: [{
    title: 'Left/Right balance',
    desc: 'We would all love to have an even 50/50 split between our left and right legs, however for many reasons, this is less typical than you would think. Knowing which side of your body you tend to favor can help you identify potential injuries before they occur and can be useful in correcting your running form.'
  }, {
    title: 'Stride Ratio',
    desc: "Stride Ratio is your Stride Height divided by your Stride Length. Let’s find the ideal ratio to make sure you aren’t jumping up and down or trying to enter a long jump competition. An ideal Stride Ratio ensures that you are using your body's energy to propel yourself forward as efficiently as possible. "
  }, {
    title: 'Stride Height',
    desc: 'Also known as vertical oscillation, stride height measures how high your body lifts off the ground during your running stride. Why does this matter? While it is important to make sure you are pushing off the ground, you also want to make sure more of your energy is used to move your forward rather than up in the air. Too low or too high can indicate opportunities for improvement – let’s find your sweet spot.'
  }, {
    title: 'Ground Time',
    desc: 'The key difference between running and walking is that when running, there is a period of time that both feet are off the ground. The more time your feet are on the ground, the less time you are moving forward. An efficient stride spends enough time on the ground to power up for the next stride and not a millisecond more. '
  }, {
    title: 'Form Power',
    desc: 'What’s Form Power – this is essentially the amount of power wasted due to inefficiencies in your running form. Just like ground contact time above, the lower the number, the better and more efficient the runner. Be sure to see how your form power changes as your body fatigues during a run as breakdowns in form are likely to occur. So remember, better efficiency = less wasted energy = lower form power.  '
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pod2.js
/* harmony default export */ const es_pod2 = ({
  title: 'COROS POD 2 - Corre más allá del GPS',
  desc: 'Precisión de siguiente nivel para todos los corredores.',
  shopify_product_extra_desc_1: '*Pídalo ahora. El envío comienza en 10-15 días laborables.',
  shopify_product_extra_desc_2: '*Consulte la hoja de especificaciones para obtener información sobre la compatibilidad del reloj.',
  name: 'COROS POD 2',
  subtitle: 'CORRE MÁS ALLÁ DE\nLOS LÍMITES DEL GPS',
  product_detail: 'Conozca el nuevo COROS POD 2. Un accesorio de reloj ligero y resistente al agua que se sujeta a la zapatilla o a la cintura para obtener un nivel superior de precisión en los datos de carrera. Con un hardware de sensores optimizado y algoritmos de software intuitivos, el COROS POD 2 mide su carrera directamente a partir de los movimientos de su pie o cuerpo. Conectado a  tu reloj COROS para proporcionar datos en tiempo real, para que siempre puedas entrenar o correr con la información correcta.',
  problem: 'EL PROBLEMA',
  problem_desc: 'La tecnología GPS es increíble, pero no es perfecta.',
  problem_desc_mobile: 'La tecnología GPS es increíble \n pero no es perfecta.',
  problem_scene1: 'Los edificios altos interfieren con los datos del satélite',
  problem_scene2: 'Los cambios de ritmo pueden tener un retraso de hasta 10 segundos',
  problem_scene2_mobile: 'Los cambios de ritmo pueden tener un retraso',
  problem_scene3: 'Correr en cinta son \n sólo conjeturas',
  solution: 'NUESTRA SOLUCIÓN',
  solution_desc: 'El COROS POD 2 resuelve los problemas más comunes de la tecnología de los relojes GPS durante la carrera, incluyendo el retraso de los datos, la señal débil y la interrupción de los satélites. Al seguir el movimiento directamente desde el pie, el COROS POD\n  2 mejora la precisión y la sensibilidad al ritmo para ayudarte a entrenar de forma más inteligente y eficiente.',
  more: 'MÁS',
  more1: 'MÁS',
  more2: 'MÁS',
  more3: 'MÁS',
  more4: 'MÁS',
  sensitive: 'RITMO SENSIBLE AL INSTANTE',
  datalag: 'Di adiós al retraso de datos',
  datalag_desc: "Con el avanzado aceler\xF3metro del COROS POD 2, recibir\xE1s datos directamente \n    de tu pie para crear el ritmo m\xE1s sensible que se muestra en tu reloj. \n    El COROS POD 2 elimina el retraso de hasta 10 segundos que provocan por los \n    sensores de mu\xF1eca de los relojes GPS. Con la alerta de ritmo \n    incorporada, su reloj COROS emparejado con el COROS POD 2 le garantiza que \n    puede mantenerse dentro de su ritmo deseado en tiempo casi real, en \n    lugar de esperar a que los datos se pongan al d\xEDa, incluso cuando no \n    hay se\xF1al de GPS.",
  accurate: 'PRECISIÓN EN INTERIORES',
  accurate_subtitle: 'Una forma fiable de medir la distancia en interiores',
  accurate_desc: "Con la detecci\xF3n precisa del ritmo, el COROS POD 2 mide la distancia exacta \n    que has corrido, incluso en interiores. Al trazar el movimiento de tu pie \n    en el espacio en un plano XYZ, el COROS POD 2 se calibra autom\xE1ticamente \n    autom\xE1ticamente para calcular tu zancada y la distancia que has corrido \n    en en una cinta de Carrera o en una pista cubierta. COROS POD 2 ser\xE1 \n    tu compa\xF1ero de perfecto para los entrenamientos de cinta en invierno, \n    o cuando el tiempo es malo.",
  consistent: 'CONSISTENTE EN LAS CIUDADES',
  gps: 'Seguimiento mejorado donde la señal GPS es débil',
  gps_desc: "La tecnolog\xEDa GPS puede sufrir interferencias. Correr a trav\xE9s de  t\xFAneles o \n  los primeros kil\xF3metros del marat\xF3n de Chicago entre  rascacielos no s\xF3lo \n  interrumpe los datos de ritmo y distancia de tu reloj  sino que tambi\xE9n crea \n  pistas de GPS desordenadas. Ah\xED es donde entra el COROS POD 2.  Con los datos \n  recogidos de varios sensores internos, el COROS POD 2 es capaz de  corregir \n  autom\xE1ticamente las interrupciones del GPS, como los picos de ritmo y las \n  ca\xEDdas. Su reloj COROS trabaja en colaboraci\xF3n con el COROS POD 2 para mejorar  \n  la consistencia de los datos durante sus carreras.",
  precise: 'PRECISIÓN EN TERRENOS ACCIDENTADOS',
  comprehensive_metric: 'Una métrica completa para todo tu entrenamiento',
  comprehensive_metric_desc: "No todos los terrenos para correr son perfectamente planos. El Ritmo de \n    Esfuerzo es una m\xE9trica \xFAnica de m\xE9trica de COROS que le indica el \n    esfuerzo que realmente est\xE1 realizando en un terreno accidentado. Con \n    la entrada de datos instant\xE1nea de COROS POD 2, su Ritmo de Esfuerzo \n    es a\xFAn m\xE1s preciso. El COROS POD 2 hace que tu Ritmo de Esfuerzo sea 5 veces \n    m\xE1s sensible que el GPS est\xE1ndar, para que puedas tomar decisiones en \n    fracciones de segundo y analizar mejor tu esfuerzo general una vez que \n    el entrenamiento ha terminado.",
  learn_effort_pace: 'Más información sobre el ritmo esfuerzo',
  beyond_gps: 'MÁS ALLÁ DEL GPS',
  beyond_gps_desc: 'El COROS POD 2 no se detiene ahí. Ofrece métricas de carrera avanzadas en un \n diseño ligero y elegante que es fácil de usar y durará más que tus carreras más largas.',
  even: 'INCLUSO',
  even1: 'INCLUSO',
  running_insights: 'MÁS INFORMACIÓN SOBRE LA CARRERA',
  beyound_gps_desc1: 'Mediante la detección inteligente de la posición de uso (zapatilla o cintura)\n el COROS POD 2 proporciona métricas clave para ayudarte a entender mejor \n tu forma de Carrera, tu forma y tu técnica.',
  stride_height: 'Altura de la zancada',
  balance: 'Equilibrio izquierda/derecha',
  ground_contact_time: 'Tiempo de contacto con el suelo',
  stride_ratio: 'Relación de zancada',
  monitor: 'MONITOR',
  temperature: 'TEMPERATURA EXTERIOR',
  monitor_desc: "El COROS POD 2 registra las lecturas de la temperatura ambiente a lo largo de tu carrera \n    para que sepas exactamente el calor o el fr\xEDo que hac\xEDa durante tu actividad. \n    Puedes utilizar estos puntos de datos para analizar m\xE1s a fondo tus carreras \n    mientras entrenas  en diferentes climas, o durante diferentes estaciones.",
  battery: 'DURACIÓN DE LA BATERÍA',
  battery_1: 'QUE NO SE PUEDE SUPERAR',
  battery_desc: 'El COROS POD 2 está equipado con una potente batería que se mantiene cargada durante \n semanas. Junto con la base de carga portátil que proporciona hasta 5 \n cargas completas, nunca tendrás que preocuparte por una batería baja.',
  continuous_running: 'Hasta 25 horas de funcionamiento continuo',
  total_running: 'Hasta 150 horas de funcionamiento total \n (con base de carga)',
  lightweight: 'LIGERO',
  and: 'Y',
  weatherproof: 'RESISTENTE A LA INTEMPERIE',
  light_waterproof_desc: "Con un peso de s\xF3lo 5,6 g, ni siquiera notar\xE1s que llevas el COROS POD 2  cuando entrenes \n    o compitas. Ya sea en la carretera o en la monta\xF1a, el COROS POD 2 puede soportar los \n    elementos, desde temperaturas bajo cero  temperaturas bajo cero hasta el calor \n    intenso (de 14\xB0F a 140\xB0F / de -10\xB0C a 60\xB0C), y es resistente al agua hasta 3 ATM.",
  setup: 'CONFIGURACIÓN SENCILLA',
  setup_desc: 'El COROS POD 2 puede llevarse en el zapato o enganchado a la cintura,\ny se pondrá en reposo para conservar la batería cuando no esté en movimiento.',
  pair: 'EMPAREJAR',
  pair_desc: 'Añade COROS POD 2 a tu App COROS \n para emparejarlo con los relojes conectados \n automáticamente.',
  clip: 'CLIP',
  clip_desc: 'Colócalo en tu zapatilla o en la cintura. Déjalo \nen tu zapatilla después de Carrera si quieres.',
  go: 'IR A',
  go_desc: 'Una vez completada la configuración inicial \n puedes correr con normalidad para obtener \n métricas instantáneas en tiempo real.',
  in_the_box: 'QUÉ HAY EN LA CAJA',
  in_the_box_desc: 'El COROS POD 2 viene con todo lo que necesitas, incluyendo dos clips para zapatillas\n clip de silicona para la cintura, base de carga, cable de carga de USB-A a USB-C \n y un estuche compacto.',
  faq: 'PREGUNTAS FRECUENTES',
  faq_list1: [{
    ask: '¿Puedo utilizar el COROS POD 2 con relojes que no sean COROS?',
    ans: 'El COROS POD 2 solo es compatible con los relojes COROS.'
  }, {
    ask: '¿Mide el COROS POD 2 la potencia de carrera?',
    ans: 'No, el COROS POD 2 utiliza el Ritmo de Esfuerzo, una métrica mucho más fácil y personalizada de entender, para que sepas exactamente cuánto está trabajando tu cuerpo.'
  }, {
    ask: '¿Cómo puede el COROS POD 2 mejorar mi entrenamiento?',
    ans: 'El COROS POD 2 puede ayudarte en el entrenamiento proporcionándote información más precisa para revisar después de cada entrenamiento. Entra en tu\n      <a class="color-danger" href="https://coros.com/traininghub">COROS Training Hub</a> cuenta para ver métricas y datos que te ayuden a identificar tus puntos fuertes y débiles. Esta herramienta está\n      diseñada para ofrecerte los mejores datos posibles para que puedas seguir mejorando tu entrenamiento y tu rendimiento.'
  }, {
    ask: '¿Cómo puede ayudarme el COROS POD 2 en las carreras?',
    ans: 'El COROS POD 2 puede ayudarte en tus carreras de dos maneras. Puedes utilizar el Ritmo de Esfuerzo para conocer mejor tu esfuerzo independientemente de los cambios de elevación del terreno. Por lo tanto, un ritmo más preciso y\n      ritmo más preciso y sensible puede ayudarte a marcar mejor tu ritmo. Con el COROS POD 2, puedes conocer tu ritmo sin retraso del GPS para asegurarte de que nunca vas por encima o por debajo de tu ritmo previsto.'
  }]
});
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/es/ek.js
var es_ek = __webpack_require__(38059);
var es_ek_default = /*#__PURE__*/__webpack_require__.n(es_ek);
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/es/vertix2.js
var es_vertix2 = __webpack_require__(84216);
var es_vertix2_default = /*#__PURE__*/__webpack_require__.n(es_vertix2);
// EXTERNAL MODULE: ./app/web/component/layout/index/i18n/es/map.js
var es_map = __webpack_require__(14673);
var es_map_default = /*#__PURE__*/__webpack_require__.n(es_map);
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/trainingHub.js
/* harmony default export */ const es_trainingHub = ({
  title: 'COROS Training Hub',
  keywords: 'entrenamiento, analizar, atleta, entrenador, atleta, rendimiento, comunicación, resistencia, fitness, fatiga, maratón, triatlón',
  description: 'Nuestra plataforma gratuita de análisis y entrenamiento para los usuarios de COROS.',
  desc: 'Basándose en el marco de COROS EvoLab, el COROS Training Hub le ofrece ahora a usted o a su entrenador las herramientas para entrenar al más alto nivel, de forma gratuita. El acceso instantáneo a sus datos a través del portal web de COROS Training Hub le ofrece la posibilidad de analizar las métricas pasadas y presentes, comunicarse e interactuar con su entrenador, elaborar un plan de entrenamiento y unirse o gestionar un equipo.',
  visualize: {
    title: 'entender tu pasado\n        analiza tu presente\n        crea tu futuro',
    desc: "Visualiza todos tus datos dentro del COROS Training Hub para \n    que usted o su entrenador puedan maximizar la eficiencia y \n    asegurarse de que su estado de forma est\xE1 preparado para \n    alcanzar tu pr\xF3ximo objetivo."
  },
  plans: {
    title: 'sigue un plan',
    desc: "El an\xE1lisis predictivo junto con nuestra funci\xF3n de arrastrar y \n    soltar arrastrar y soltar te permite a ti o a tu entrenador crear \n    entrenamientos individualizados y y planes de entrenamiento \n    individualizados con facilidad."
  },
  interact: {
    title: 'interacción perfecta',
    desc: "Los comentarios de los entrenamientos y las notificaciones \n    push que se sincronizan con tu App COROS permiten\ncomunicaci\xF3n bidireccional entre el atleta y el atleta \n    y el entrenador."
  },
  team: {
    title: 'entrenar con un equipo',
    desc: "Ya sea un equipo establecido o un grupo de\n    grupo de corredores virtual, el COROS Training Hub le da la opci\xF3n \n    de ver el entrenamiento de todo tu equipo para mejorar \n    la motivaci\xF3n, la responsabilidad y el sentido de comunidad."
  },
  knowMore: {
    title: 'conozca\n        coros training hub',
    desc: 'Por favor, visite el Centro de Ayuda de COROS para un recorrido en profundidad de las características de COROS Training Hub.\n\nCOROS Training Hub está disponible para los entrenadores a través del registro que aparece a continuación. Los entrenadores tendrán acceso a crear equipos, gestionar atletas, desarrollar y asignar planes de entrenamiento, además de utilizar otras funciones de la plataforma. Para obtener acceso, los entrenadores tendrán que enviar sus credenciales de entrenador y pasar por un tutorial con nuestro equipo de ciencias del deporte. '
  },
  coachSignup: 'registro de entrenadores',
  athleteSignup: 'REGISTRO DE ATLETAS',
  login: 'INICIAR SESIÓN',
  privacy: 'política de privacidad',
  readPrivacy: 'He leído y estoy de acuerdo con la',
  forgot: 'Olvidar contraseña',
  rememderMe: 'Recordarme',
  loginFailed: 'Correo electrónico o contraseña no válidos.',
  notOpen: 'El servicio aún no está abierto',
  email: 'Correo electrónico',
  password: 'Contraseña',
  welcomeBack: '¡BIENVENIDO!',
  launch: 'LANZAR APP',
  logOut: 'Cerrar sesión',
  agreeNotify: 'Por favor, lea y compruebe primero la política de privacidad y las condiciones de servicio'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/home.js
/* harmony default export */ const es_home = ({
  title: 'COROS | Tecnología deportiva de alto rendimiento',
  desc: 'Innovación para corredores, aventureros y atletas de todos los deportes.',
  localeswitchtips: '¿Redirigir a su ubicación?',
  insName: 'COROS_ESP',
  vertix2: {
    name: 'COROS VERTIX 2',
    desc: 'Para atletas que\nlo quieren todo'
  },
  pace2: {
    name: 'COROS PACE 2',
    desc: 'Para atletas multideportivos\nque van rápido y lejos'
  },
  apexPro: {
    name: 'COROS APEX Pro',
    desc: 'Para atletas de resistencia\nen entornos difíciles'
  },
  apex: {
    name: 'COROS APEX',
    desc: 'Para atletas al aire libre\nque viajan ligeros y rápidos'
  },
  apex2: {
    name: 'COROS APEX 2/2 Pro',
    desc: 'Para atletas de montaña que\nentrenan duro y llegan lejos'
  },
  vertix: {
    name: 'COROS VERTIX',
    desc: 'Nuestro reloj original\npara aventureros extremos'
  },
  pod: {
    name: 'COROS POD',
    desc: 'Métricas avanzadas de carrera para optimizar tu rendimiento'
  },
  pod2: {
    name: 'COROS POD 2',
    desc: 'Precisión de siguiente nivel\npara todos los corredores'
  },
  trainingHub: {
    title: 'COROS TRAINING HUB',
    desc: 'Comprende tu pasado, analiza tu presente y crea tu futuro con nuestra potente plataforma de entrenamiento. Crea planes de entrenamiento y trabaja con tu entrenador desde cualquier lugar y en cualquier momento.'
  },
  story: {
    title: 'HISTORIAS DESTACADAS'
  },
  viewAllPlans: 'VER TODOS LOS PLANES',
  plans: {
    title: 'PLANES DE ENTRENAMIENTO',
    desc: 'Saca el máximo partido a tu reloj y a tu cuerpo con nuestros planes de entrenamiento diseñados por el entrenador y aprobados por los atletas.'
  },
  banners: [{
    title: 'EXPLORA LA PERFECCIÓN\nDESCUBRE EL POTENCIAL',
    linkDesc: 'VER TODOS LOS RELOJES GPS'
  }],
  learnMore: 'CONOCE MÁS',
  buy: 'COMPRAR',
  readMore: 'CONTINUAR LEYENDO',
  watch: 'VER AHORA',
  outOfStock: 'FUERA DE STOCK'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/common.js
/* harmony default export */ const es_common = ({
  header: {
    support: 'Soporte',
    stories: 'Historias',
    products: 'productos',
    training_science: 'Entrenamiento',
    technology: 'Tecnología',
    people: 'Personas',
    trainingHub: 'Centro de entrenamiento',
    plans: 'Planes de entrenamiento',
    workouts: 'Entrenamientos',
    trainingBlog: 'Historias',
    retail: 'Localizador de tiendas',
    athlete: 'Atletas Profesionales',
    shopNow: 'COMPRAR AHORA',
    specs: 'CARACTERÍSTICAS',
    login: 'INICIAR SESIÓN',
    review: 'RESEÑAS',
    overview: 'RESUMEN',
    all_watches: 'Todos los relojes GPS',
    pod2: 'COROS POD 2',
    checkWarranty: 'Estado de la garantía',
    menu1: {
      name: 'PRODUCTO',
      subnav: {
        nav1: 'COROS VERTIX 2',
        nav2: 'COROS VERTIX',
        nav3: 'COROS APEX Pro',
        nav4: 'COROS APEX',
        nav5: 'COROS PACE 2',
        nav6: 'COROS PACE 2 EK',
        nav7: 'COROS POD',
        nav8: 'Accesorios',
        nav9: 'Otros',
        nav10: 'COROS PACE',
        nav11: 'SafeSound-MOUNTAIN',
        nav12: 'SafeSound-ROAD',
        nav13: 'SafeSound-URBAN',
        nav14: 'OMNI',
        nav15: 'LINX'
      }
    },
    menu2: {
      name: 'COMUNIDAD',
      subnav: {
        nav1: 'HISTORIAS DE COROS',
        nav2: 'COROS PRO ATHLETE',
        nav3: 'PROGRAMA DE INTERCAMBIO',
        nav4: 'ENTRENAMIENTO VERIFICADO',
        nav5: 'PLANES DE ENTRENAMIENTO'
      }
    },
    menu3: {
      name: 'APOYO',
      subnav: {
        nav1: 'INICIO DE SESIÓN DE USUARIO',
        nav2: 'CENTRO DE AYUDA',
        nav3: 'GARANTÍA',
        nav4: 'NOTAS DE LIBERACIÓN',
        nav5: 'COMPARACIÓN DE RELOJES'
      }
    },
    menu4: {
      name: 'ACERCA DE',
      subnav: {
        nav1: 'SOBRE NOSOTROS',
        nav2: 'EN LAS NOTICIAS',
        nav3: 'CONTACTO',
        nav4: 'EVENTOS',
        nav5: 'CARRERAS'
      }
    },
    menu5: {
      name: 'LOCALIZACIÓN DE TIENDAS'
    },
    menu6: {
      name: 'PAÍS',
      subnav: {
        nav1: 'Estados Unidos (inglés)',
        nav2: 'Reino Unido (inglés)',
        nav3: 'Canadá (English)',
        nav4: 'Francia (Français)',
        nav5: 'Alemania (Deutsch)',
        nav6: '中国(中文)',
        nav7: '日本(日本語)'
      }
    },
    storiesTesting: 'Test de Producto'
  },
  footer: {
    subscribeEmailError: 'Introduce una direccion valida de correo electrónico.',
    apex2credit: 'Solicitud Crédito APEX 2',
    DealerLogin: 'Inicio de sesión del distribuidor',
    ReturnRefund: 'Devolución y reembolso',
    WatchComparison: 'Comparativa de relojes',
    TermsConditions: 'Términos y condiciones',
    ReleaseNotes: 'Notas de prensa',
    PrivacyPolicy: 'Política de privacidad',
    CookieSettings: 'Cookies',
    WheretoDownload: 'Descargas',
    copyright: '2020 | COROS Wearables Inc.',
    trainingHub: 'COROS Training Hub',
    evolab: 'COROS EvoLab',
    coach: 'Soluciones',
    warranty: 'Garantía',
    helpCenter: 'Centro de ayuda',
    maps: 'Mapas',
    software: 'Software',
    hardware: 'Hardware',
    support: 'Soporte',
    company: 'LA COMPAÑÍA',
    news: 'Historias',
    inTheNews: 'En las noticias',
    countries: 'Selecciona ubicación',
    about: 'Sobre nosotros',
    careers: 'Carrera profesional',
    contact: 'Contacto',
    joinUs: 'DESCUBRIR',
    subscripPlaceholder: 'INTRODUCE TU CORREO ELECTRÓNICO',
    pod2: 'COROS POD 2',
    selectYourLocation: 'Seleccione su ubicación',
    subscribe: {
      success: {
        title: '¡Gracias!',
        desc: '¡Suscripción realizada con éxito!'
      },
      error: {
        title: '¡Uy!',
        desc: '¡Uy! Algo ha ido mal. Por favor, inténtelo de nuevo.'
      },
      title: 'Recibe las ultimas noticias de COROS'
    }
  },
  country: {
    usa: 'EE.UU.',
    kingdom: 'reino',
    newzealand: 'nuevazelandia'
  },
  home: 'Inicio',
  shopnow: 'comprar',
  loginNow: 'iniciar sesión',
  speecs: 'ESPECIFICACIONES',
  comparisonchart: 'TABLA DE COMPARACIÓN',
  video: {
    play: 'Reproducción',
    pause: 'Pausa',
    replay: 'Ver de nuevo'
  },
  race: {
    courseDetails: 'Recorridos'
  },
  subscribeBIS: {
    notifyMe: 'notifíqueme',
    requireEmail: 'Introduzca su dirección de email.',
    emailPlaceholder: 'Tu dirección de correo.',
    invalidEmail: 'Email inválido. Por favor, inténtelo de nuevo.',
    emailMeWhenAvailable: 'enviarme un email cuando esté disponible',
    success: 'Se ha suscrito a este artículo.',
    tooManyReq: 'Espere unos segundos e inténtelo de nuevo.',
    serverError: 'El servidor no funciona. Vuelva a intentarlo más tarde.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/declarationOfConformity.js
/* harmony default export */ const es_declarationOfConformity = ({
  apex46: 'COROS APEX 46mm',
  apex42: 'COROS APEX 42mm',
  safeSound: 'COROS SafeSound'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/getApp.js
/* harmony default export */ const es_getApp = ({
  title: 'CONSIGA LA APP',
  desc: 'Aplicación de fitness para todos',
  subDesc: 'La App COROS es una parte esencial de su experiencia COROS. \n  Utilízala para gestionar tu dispositivo y sincronizar tus datos para obtener análisis de rendimiento en profundidad.',
  appExamples: [{
    title: 'controle su progreso',
    text: 'Reciba información diaria sobre la frecuencia cardiaca, el gasto energético, el sueño y mucho más.'
  }, {
    title: 'crea tus rutas',
    text: 'Comienza nuevas aventuras con herramientas de navegación y sincroniza fácilmente las rutas en tu reloj.'
  }, {
    title: 'fije sus objetivos',
    text: 'Entrene de forma más inteligente con el estado de carrera, el predictor de carrera, la gestión de su fatiga y otras herramientas.'
  }, {
    title: 'planifique su futuro',
    text: 'Cree, modifique y comparta entrenamientos estructurados y planes de entrenamiento.'
  }, {
    title: 'conozca su ruta',
    text: 'Revise las métricas de actividad avanzadas, las rutas GPS y las tendencias de sus entrenamientos.'
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/apexPro.js
/* harmony default export */ const es_apexPro = ({
  title: 'Reloj GPS COROS APEX Pro',
  desc: 'Nuestro reloj premium para atletas de resistencia en entornos difíciles.',
  name: 'COROS APEX Pro',
  accessories: 'ACCESSORIES',
  trailTested: {
    title: "Trail Tested\nAthlete Approved",
    desc: 'Titanium frame, Sapphire glass screen and 100m waterproof rating provide ultimate durability. At just 59g including the watch band, you can take the APEX Pro on just about any adventure you can dream of.'
  },
  battery: {
    desc: 'The APEX Pro offers 40 hours of full GPS battery life – a 14% increase over the original APEX. Now you can get through that Mountain 100 miler without having to debate about switching into Ultra Max Mode.'
  },
  mountainGuide: {
    title: 'A Mountain Guide on Your Wrist',
    desc: '24/7 blood oxygen monitoring with Altitude Mode, APEX Pro follows the VERTIX as the only watches to provide hourly acclimatization evaluations. Your watch will let you know when you should keep climbing, or when you should head back down to a lower altitude.'
  },
  touchFeat: {
    title: 'The Navigation Experience',
    desc: 'Now supports offline mapping, and includes: Landscape, Topo and Hybrid modes. By using touch screen and the digital dial, users can explore our new mapping function. You can track your path over maps. This is a completely revamped navigation experience on your wrist.',
    videos: ['How to use basic navigation features', 'How to use advanced navigation features', 'How to use checkpoint during navigation']
  },
  trainingMode: {
    title: 'ANY WORKOUT, ANYWHERE',
    desc: 'With COROS Training mode, you can create, share and even download workouts from professional athletes and coaches. Build your own workout in the COROS App for Running, Cycling, Swimming or Strength Training with virtually no limitations. Select from more than 200+ preloaded exercises to create your ideal strength training session. Share your workouts with friends and training partners via text, email, social media or even direct to the app using a QR code. Lastly follow hand-picked workouts from professional athletes and coaches by downloading from coros.com and onto your watch. With the new training mode, your best efforts are well within your reach.'
  },
  nightMode: {
    title: 'Light up the Night’s Sky',
    desc: 'Night Mode – a new always on mode for nighttime activities. While manual options still remain for quick bursts of the backlight, Night Mode, leaves the backlight on for the entirety of your workout. A light bright enough so your eyes can adjust and read in the dark, but dim enough to maintain superior battery performance throughout your run or ride even needed all night long. Don’t worry, it turns off automatically when you finish you workout, or at sunrise.'
  },
  stayTrack: {
    title: 'Stay on Track',
    desc: 'A standard track is 400m, so why can’t GPS devices seem to get it right? With the new Track Run Mode from COROS, a proprietary algorithm, is used to make sure your track runs and workouts are measured accurately regardless of which lane you choose. Gone are the random zigzags across the field, or sharp angled turns, replaced with the smooth straightaways and curves of the track – just like how you run on it.'
  },
  batteryDetails: {
    duration: ['Up to', '14% longer', 'battery life'],
    subDesc: "Built for\n    the Long\u2026er Run"
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/accessories.js
/* harmony default export */ const es_accessories = ({
  title: 'Accesorios',
  desc: 'Una empresa de tecnología deportiva de alto rendimiento que ayuda a los atletas a entrenarse para dar lo mejor de sí mismos.',
  buy: 'COMPRAR AHORA',
  'vertix2-nylon-band': 'COROS VERTIX 2 Banda de nylon',
  'vertix2-silicone-band': 'COROS VERTIX 2 Banda de silicona',
  pod: 'COROS POD',
  'vertix-charging-cable': 'Cable de carga COROS APEX/VERTIX',
  'keychain-watch-charger': 'Cargador de reloj COROS Keychain',
  'vertix-nylon-band': 'Correa de nylon COROS VERTIX',
  'vertix-silicone-band': 'Correa de silicona COROS VERTIX',
  'charging-cable': 'Cable de carga COROS',
  'apex-pro-nylon-band': 'COROS APEX 46mm/APEX Pro Banda de Nylon',
  'apex-pro-silicone-band': 'COROS APEX 46mm/APEX Pro Banda de Silicona',
  'pace2-nylon-band': 'COROS APEX 42mm/PACE 2 Banda de Nylon',
  'pace2-silicone-band': 'COROS APEX 42mm/PACE 2 Banda de Silicona',
  hrm: 'Pulsómetro COROS',
  detailPageDesc: 'Compre accesorios elegantes y de alta calidad para sus relojes y sensores COROS.',
  sortOptions: {
    priceLowToHigh: 'Precio de bajo a alto',
    priceHighToLow: 'Precio de alto a bajo',
    manual: 'Recomendación'
  },
  selectProductType: 'Compatibilidad',
  tips4noProductType: 'Seleccione primero el producto compatible.',
  selectAccessoryType: 'Tipos de accesorio',
  resetFilter: 'Reiniciar',
  sortBy: 'Ordenar por',
  filters: 'Filtros',
  confirmFilter: 'Confirme'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/specs.js
/* harmony default export */ const es_specs = ({
  model: 'Número de parte',
  navigation: 'Navegación',
  sensors: 'Sensores',
  batteryLife: 'Duración de la batería',
  supportedWorkouts: 'Actividades soportadas',
  yes: 'Sí',
  comparePageTitle: 'COMPARATIVA DE RELOJES',
  comparePlaceholder: 'Seleccione un reloj para comparar',
  'FULL WATCH COMPARISON': 'comparativa completa de relojes',
  'Hide Duplicated Details': 'Ocultar detalles duplicados',
  compareLabel: {
    'Size and Weight': 'Tamaño y peso',
    Dimensions: 'Dimensiones',
    'POD Dimensions': 'Dimensiones',
    Weight: 'Peso',
    Display: 'Pantalla',
    'Display Size': 'Tamaño de la pantalla',
    'Display Resolution': 'Resolución de la pantalla',
    'Display Type': 'Tipo de pantalla',
    Materials: 'Materiales',
    'Screen Material': 'Material de la pantalla',
    'Bezel Material': 'Material del bisel',
    'Cover Material': 'Material de la cubierta',
    'Band Material': 'Material de la correa',
    'Watch Band': 'Correa del reloj',
    Width: 'Ancho',
    'Installation Type': 'Tipo de instalación',
    Design: 'Diseño',
    Button: 'Botones',
    Connectivity: 'Conectividad',
    Phone: 'Teléfono',
    Accessories: 'Accesorios',
    'Data Sync': 'Sincronización de datos',
    Durability: 'Durabilidad',
    'Water Resistance': 'Resistencia al agua',
    'Working Temperature': 'Temperatura de trabajo',
    'Storage Temperature': 'Temperatura de almacenamiento',
    Battery: 'Batería',
    'UltraMax GPS Mode': 'Modo GPS UltraMax',
    'Standard Full GPS': 'GPS estándar completo\n(GPS/QZSS)',
    'All Systems On': 'Todos los sistemas activados\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'All Systems + Dual Frequency On': 'Doble frecuencia\n(GPS, GLONASS, Galileo, Beidou, QZSS)',
    'Daily Use': 'Uso diario',
    'Charging Time': 'Tiempo de carga',
    'Geo Location': 'Geolocalización',
    'Satellite Systems': 'Sistemas de satélites',
    'GNSS Chipset': 'Chipset GNSS',
    Navigation: 'Navegación',
    'Map Layer': 'Capa de mapa',
    'Additional Features': 'Características adicionales',
    'Data Tracking': 'Seguimiento de datos',
    Sensors: 'Sensores',
    'Training Features': 'Funciones de entrenamiento',
    'Daily Features': 'Funciones diarias',
    '3rd Party Integration': 'Integración de terceros',
    'System Languages': 'Idiomas del sistema',
    'Supported Activity Modes': 'Modos de actividad soportados',
    Run: 'Carrera',
    Mountain: 'Montaña',
    Bike: 'Ciclismo',
    Water: 'Agua',
    Winter: 'Invierno',
    Cardio: 'Cardio',
    Special: 'Especial',
    Compatibility: 'Compatibilidad',
    'Supported Devices': 'Dispositivos compatibles',
    'Features & Metrics': 'Características y métricas',
    'Charging Dock Capacity': 'Capacidad de la base de carga',
    'Charging Dock Cable': 'Cable de la base de carga',
    'Activity Mode': 'Modo de actividad',
    'Standby Mode': 'Modo de espera',
    'COROS App': 'App COROS',
    'COROS Watch': 'Reloj COROS',
    'Case Material': 'Material de la caja',
    'Foot Clip Material': 'Material del clip de pie',
    'Waist Clip Material': 'Material del clip de la correa',
    'Weight - COROS POD 2': 'Peso - COROS POD 2',
    'Weight - Charging Dock': 'Peso - Base de carga',
    Fit: 'Ajuste',
    'Hrm Dimensions': 'Dimensiones',
    'Hrm Weight - Case Only': 'Peso - Sólo dispositivo',
    'Hrm Weight - Case + Band': 'Peso - Dispositivo + Banda',
    'Hrm Band Material': 'Material de la banda',
    'Hrm Optical Heart Rate Hardware': 'Hardware de frecuencia cardíaca óptica',
    'Hrm Band Circumference': 'Tamaño del brazo',
    'Hrm Wearing Position': 'Posición de uso',
    'Hrm Wireless Connection': 'Conexión inalámbrica',
    'Hrm Supported Devices': 'Dispositivos compatibles',
    'Hrm Data Sync': 'Sincronización de datos',
    'Hrm Water Resistance': 'Impermeabilidad',
    'Hrm Working Temperature': 'Temperatura de funcionamiento',
    'Hrm Storage Temperature': 'Temperatura de almacenamiento',
    'Hrm Charging Temperature': 'Temperatura de carga',
    'Hrm Activity Mode': 'En uso',
    'Hrm Standby Mode': 'En espera',
    'Hrm Battery Capacity': 'Capacidad de la batería',
    'Hrm Charging Time': 'Tiempo estimado de carga',
    'Hrm Charging Cable': 'Cable de carga',
    'Internal Memory': 'Memoria interna',
    'Activity Memory': 'Memoria de actividad',
    'Compatible Apps': 'Apps Compatibles',
    'Display Language': 'Idioma',
    Memory: 'Memoria',
    Climb: 'Escalada',
    batteryDesc: 'Última actualización: 5/2/2024',
    'Dura Dimensions': 'Dimensiones',
    'Dura Weight - Device': 'Peso - Cuerpo',
    'Dura Weight - Mount': 'Peso - Soporte',
    'Dura Display Size': 'Tamaño de la pantalla',
    'Dura Display Resolution': 'Resolución de la pantalla',
    'Dura Display Type': 'Tipo de pantalla',
    'Dura Screen': 'Pantalla',
    'Dura Body': 'Cuerpo',
    'Dura Mount': 'Soporte',
    'Dura Length': 'Longitud',
    'Dura Compatible Handlebars': 'Manillares compatibles',
    'Dura Button': 'Botones',
    'Dura Phone': 'Phone',
    'Dura Accessories': 'Accesorios',
    'Dura Accessory Types': 'Conexiones para accesorios',
    'Dura Data Sync': 'Sincronización de datos',
    'Dura Water & Dust Resistance': 'Resistencia al agua y al polvo',
    'Dura Working Temperature': 'Temperatura de trabajo',
    'Dura Storage Temperature': 'Temperatura de almacenamiento',
    'Dura All Systems On': 'Todos los sistemas activados',
    'Dura All Systems + Dual Frequency On': 'Doble frecuencia',
    'Dura Solar Efficiency': 'Eficiencia solar',
    'Dura Charging Time': 'Tiempo de carga',
    'Dura Internal Memory': 'Memoria interna',
    'Dura Activity Memory': 'Memoria de actividad',
    'Dura Satellite Systems': 'Sistemas de satélites',
    'Dura GNSS Chipset': 'Chipset GNSS',
    'Dura Map Layer': 'Capa de mapa',
    'Dura Additional Features': 'Características adicionales',
    'Dura Sensors': 'Sensores',
    'Dura Training Features': 'Funciones de entrenamiento',
    'Dura Safety Features': 'Características de Seguridad',
    'Dura Compatible Apps': 'Apps Compatibles',
    'Dura Display Language': 'Idioma',
    'Dura Outdoor': 'Exterior',
    'Dura Electric': 'Eléctrico',
    'Dura Indoor': 'Interior',
    'Dura Size and Weight': 'Tamaño y peso',
    'Dura Display': 'Pantalla',
    'Dura Materials': 'Materiales',
    'Dura Out-Front Handlebar Mount': 'Soporte exterior para manillar',
    'Dura Design': 'Diseño',
    'Dura Connectivity': 'Conectividad',
    'Dura Durability': 'Durabilidad',
    'Dura Battery': 'Batería',
    'Dura Memory': 'Memoria',
    'Dura Geo Location': 'Geolocalización',
    'Dura Navigation': 'Navegación',
    'Dura Data Tracking': 'Seguimiento de datos',
    'Dura 3rd Party Integration': 'Integración de terceros',
    'Dura System Languages': 'Idiomas del sistema',
    'Dura Supported Activity Modes': 'Modos de actividad soportados',
    'Size - Nylon': 'Talla - Nailon',
    'Size - Silicone': 'Talla - Silicona'
  },
  pace2: {
    displaySizeVal: '1,2 pulgadas. 240 x 240 (64 colores)',
    displayType: 'Pantalla LCD con memoria siempre activa',
    displayMaterialVal: 'Vidrio mineral',
    bezelVal: 'Polímero reforzado con fibra',
    coverVal: 'Polímero reforzado con fibra',
    strapVal: 'Silicona/Nylon',
    sensorsVal: ' Pulsómetro óptico\nAltímetro barométrico\nAcelerómetro\nBrújula\nGiroscopio\nTermómetro\n',
    waterResistanceVal: '5ATM (50 metros/164 pies)',
    workingTemp: '-4°F a 140°F (-20°C a 60°C)',
    storageTempVal: '-4°F a 149°F (-20°C a 65°C)',
    chargingVal: 'Menos de 2 horas',
    batteryLifeVal: '20 días de uso regular\n30 horas en modo GPS completo\n60 horas en modo UltraMax',
    workoutsVal: 'Carrera, cinta, pista, ciclismo, ciclo indoor, piscina, aguas abiertas, triatlón, cardio gym, cardio con GPS, multideporte, fuerza, entrenamiento, agua plana, remo, maquina de remo, caminata'
  },
  comparsion: {
    pace3: {
      dimensionsVal: '41,9 x 41,9 x 11,7mm\nGrosor sin inclur sensor óptico de frecuencia cardíaca',
      weightVal: ['39g\nCon banda de silicona', '30g\nCon banda de nylon'],
      displaySizeVal: '1,2 pulgadas',
      displayResolutionVal: '240 x 240\n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Vidrio mineral',
      bezelMaterialVal: 'Polímero reforzado con fibra',
      coverMaterialVal: 'Polímero reforzado con fibra',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '135mm - 205mm (Estándar)|||150mm - 235mm (Largo)',
      sizeSiliconeVal: '130mm - 215mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / app COROS',
      waterResistanceVal: '5 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-20°C a 50°C',
      storageTemperatureVal: '-20°C a 60°C',
      standardFullGpsVal: ['38 horas\nConectado a GPS y al QZSS', '10 horas (con música)\nConectado a GPS y QZSS con música'],
      allSystemsOnVal: ['25 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo', '9 horas (con música)\nConectado a los 5 sistemas de satélite al mismo tiempo con música'],
      allSystemsDualFrequencyOnVal: ['15 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo en doble frecuencia', '7 horas (con música)\nConectado a los 5 sistemas de satélites al mismo tiempo en doble frecuencia con música'],
      dailyUseVal: ['17 días\nPara el seguimiento diario y del sueño', '15 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '4GB',
      activityMemoryVal: '1200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Todos los satélites en doble frecuencia',
      mapLayerVal: ['Migas de pan', '—'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', '—'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', 'Música\nReproduce música sin conexión cuando se empareja con auriculares Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', '—', '—', '—'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', '—'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    vertix2: {
      dimensionsVal: '50,3 x 50,3 x 15,7mm',
      weightVal: ['89g\nCon banda de silicona', '72g\nCon banda de nylon'],
      displaySizeVal: '1,4 pulgadas',
      displayResolutionVal: '280 x 280 \n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5 con revestimiento de PVD',
      coverMaterialVal: 'Aleación de titanio con revestimiento de PVD',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital\nMayor tamaño y durabilidad', 'Botón de retroceso', 'Botón de retroiluminación dedicado'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / app COROS',
      waterResistanceVal: '10 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-30°C a 50°C',
      storageTemperatureVal: '-30°C a 60°C',
      standardFullGpsVal: ['127 horas\nConectado a GPS y al QZSS', '32 horas (con música)\nConectado a GPS y QZSS con música'],
      allSystemsOnVal: ['89 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo', '29 horas (con música)\nConectado a los 5 sistemas de satélite al mismo tiempo con música'],
      allSystemsDualFrequencyOnVal: ['49 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo en doble frecuencia', '23 horas (con música)\nConectado a los 5 sistemas de satélites al mismo tiempo en doble frecuencia con música'],
      dailyUseVal: ['43 días\nPara el seguimiento diario y del sueño', '39 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Todos los satélites en doble frecuencia',
      mapLayerVal: ['Paisaje\nMapas globales descargables', 'Topo\nMapas regionales descargables'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', 'Sensor de electrocardiograma'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', 'Música\nReproduce música sin conexión cuando se empareja con auriculares Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['Escalada Exterior\nSeguimiento de datos mejorado para la escalada en varias pendientes y en grandes paredes', 'Escalada Interior\nPermite escalada a plomo, con polea y boulder con recuento automático de rutas y caídas', 'Montañismo', 'Búlder'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', 'Aguas Bravas', 'Speedsurfing', 'Windsurf'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    vertix2s: {
      dimensionsVal: '50,3 x 50,3 x 16mm',
      weightVal: ['87g\nCon banda de silicona', '70g\nCon banda de nylon'],
      displaySizeVal: '1,4 pulgadas',
      displayResolutionVal: '280 x 280 \n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5 con revestimiento de PVD',
      coverMaterialVal: 'Aleación de titanio con revestimiento de PVD',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '26mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital\nMayor tamaño y durabilidad', 'Botón de retroceso', 'Botón de retroiluminación dedicado'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / app COROS',
      waterResistanceVal: '10 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-30°C a 50°C',
      storageTemperatureVal: '-30°C a 60°C',
      standardFullGpsVal: ['118 horas\nConectado a GPS y al QZSS', '32 horas (con música)\nConectado a GPS y QZSS con música'],
      allSystemsOnVal: ['73 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo', '27 horas (con música)\nConectado a los 5 sistemas de satélite al mismo tiempo con música'],
      allSystemsDualFrequencyOnVal: ['43 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo en doble frecuencia', '22 horas (con música)\nConectado a los 5 sistemas de satélites al mismo tiempo en doble frecuencia con música'],
      dailyUseVal: ['40 días\nPara el seguimiento diario y del sueño', '36 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Todos los satélites en doble frecuencia',
      mapLayerVal: ['Paisaje\nMapas globales descargables', 'Topo\nMapas regionales descargables'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', 'Sensor de electrocardiograma'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', 'Música\nReproduce música sin conexión cuando se empareja con auriculares Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['Escalada Exterior\nSeguimiento de datos mejorado para la escalada en varias pendientes y en grandes paredes', 'Escalada Interior\nPermite escalada a plomo, con polea y boulder con recuento automático de rutas y caídas', 'Montañismo', 'Búlder'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', 'Aguas Bravas', 'Speedsurfing', 'Windsurf'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    pace2: {
      dimensionsVal: '42 x 42 x 11,7mm',
      weightVal: ['35g-36g\nCon banda de silicona', '29g-30g\nCon banda de nylon'],
      displaySizeVal: '1,2 pulgadas',
      displayResolutionVal: '240 x 240\n64 colores',
      displayTypeVal: 'Memoria LCD siempre activa',
      screenMaterialVal: 'Vidrio mineral',
      bezelMaterialVal: 'Polímero reforzado con fibra',
      coverMaterialVal: 'Polímero reforzado con fibra',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'App COROS',
      waterResistanceVal: '5 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-20°C a 60°C',
      storageTemperatureVal: '-20°C a 65°C',
      standardFullGpsVal: ['27 horas\nConectado a GPS y al QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 días\nPara el seguimiento diario y del sueño', '11 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '—',
      activityMemoryVal: '200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Monofrecuencia',
      mapLayerVal: ['Migas de pan', '—'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', '—'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', '—', '—'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', '—', '—', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', '—'],
      climbVal: ['—', '—', '—', '—'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', '—', '—', '—'],
      winterVal: ['—', '—', '—', '—'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    pod2: {
      podDimensionsVal: '27,1 x 33,9 x 8,6mm',
      weightCorosPod2Val: '5.6g\nSin ninguno de los clips',
      weightChargingDockVal: '17.6g',
      caseMaterialVal: 'Polímero reforzado con fibra\nTanto  el COROS POD 2 como la base de carga',
      footClipMaterialVal: 'Polímero reforzado con fibra',
      waistClipMaterialVal: 'Silicona',
      corosAppVal: 'Bluetooth',
      corosWatchVal: 'Bluetooth',
      dataSyncVal: 'Datos de actividad en tiempo real al reloj COROS',
      waterResistanceVal: '3 ATM\nSólo para COROS POD 2 y no aplicable a la base de carga',
      workingTemperatureVal: '14°F a 140°F (-10°C a 60°C)',
      storageTemperatureVal: '-4°F a 158°F (-20°C a 70°C)',
      activityModeVal: '25 horas\nHasta 150 horas de funcionamiento total con la base de carga',
      standbyModeVal: '40 días',
      chargingTimeVal: 'Menos de 2 horas\nTanto para el COROS POD 2 como para la base de carga',
      chargingDockCapacityVal: '5 cargas',
      chargingDockCableVal: 'USB tipo C',
      sensorsVal: ['Altímetro barométrico', 'Termómetro', 'Geomagnético', 'Acelerómetro', 'Giroscopio'],
      supportedDevicesVal: ['Relojes COROS excepto COROS PACE 1\nLa compatibilidad con COROS APEX 42mm/46mm llegó a principios de noviembre mediante actualizaciones de firmware', 'KIPRUN GPS 500/GPS 900'],
      featuresMetricsVal: ['Optimización del track GPS\nCarrera / Pista', 'Distancia\nCarrera / pista / cinta', 'Ritmo\nCarrera / pista / Cinta', 'Ritmo de esfuerzo\nCarrera / Trail', 'Cadencia\nCarrera / Trail / Pista cubierta', 'Longitud de zancada\nCarrera / pista / cinta', 'Temperatura\nCarrera / pista / trail / cinta', 'Ganancia/Pérdida de altura\nCarrera / Trail', 'Altitud\nCarrera / Trail', 'Grado\nCarrera / Trail', 'Equilibrio L/R\nCarrera / pista / pista cubierta', 'Tiempo de contacto con el suelo\nCarrera / pista / trail / pista cubierta', 'Altura de zancada\nCarrera / pista / trail / pista Cubierta', 'Relación de zancada\nCarrera / pista / trail / pista Cubierta']
    },
    apex2: {
      dimensionsVal: '43,0 x 42,8 x 12,8mm',
      weightVal: ['53g\nCon banda de silicona', '42g\nCon banda de nylon'],
      displaySizeVal: '1,2 pulgadas',
      displayResolutionVal: '240 x 240\n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5 con revestimiento de PVD',
      coverMaterialVal: 'Aleación de titanio',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', 'Botón de retroiluminación dedicado'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / app COROS',
      waterResistanceVal: '5 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-20°C a 50°C',
      storageTemperatureVal: '-20°C a 60°C',
      standardFullGpsVal: ['40 horas\nConectado a GPS y al QZSS', '10 horas (con música)\nConectado a GPS y QZSS con música'],
      allSystemsOnVal: ['25 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo', '9 horas (con música)\nConectado a los 5 sistemas de satélite al mismo tiempo con música'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['14 días\nPara el seguimiento diario y del sueño', '13 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '8GB',
      activityMemoryVal: '1200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Todos los satélites Monofrecuencia',
      mapLayerVal: ['Paisaje\nMapas globales descargables', 'Topo\nMapas regionales descargables'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', 'Sensor de electrocardiograma'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', 'Música\nReproduce música sin conexión cuando se empareja con auriculares Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['—', 'Escalada Interior\nPermite escalada a plomo, con polea y boulder con recuento automático de rutas y caídas', 'Montañismo', 'Búlder'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', 'Aguas Bravas', 'Speedsurfing', 'Windsurf'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    apex2pro: {
      dimensionsVal: '46,1 x 46,5 x 14mm',
      weightVal: ['66g\nCon banda de silicona', '53g\nCon banda de nylon'],
      displaySizeVal: '1,3 pulgadas',
      displayResolutionVal: '260 x 260\n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5 con revestimiento de PVD',
      coverMaterialVal: 'Aleación de titanio',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Estándar)|||130mm - 195mm (Corto)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', 'Botón de retroiluminación dedicado'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'Bluetooth',
      dataSyncVal: 'Wi-Fi / app COROS',
      waterResistanceVal: '5 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-20°C a 50°C',
      storageTemperatureVal: '-20°C a 60°C',
      standardFullGpsVal: ['66 horas\nConectado a GPS y al QZSS', '18 horas (con música)\nConectado a GPS y QZSS con música'],
      allSystemsOnVal: ['41 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo', '15 horas (con música)\nConectado a los 5 sistemas de satélite al mismo tiempo con música'],
      allSystemsDualFrequencyOnVal: ['24 horas\nConectado a GPS, GLONASS, Galileo, Beidou y QZSS al mismo tiempo en doble frecuencia', '12 horas (con música)\nConectado a los 5 sistemas de satélites al mismo tiempo en doble frecuencia con música'],
      dailyUseVal: ['24 días\nPara el seguimiento diario y del sueño', '21 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '32GB',
      activityMemoryVal: '1200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Todos los satélites en doble frecuencia',
      mapLayerVal: ['Paisaje\nMapas globales descargables', 'Topo\nMapas regionales descargables'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', 'Sensor de electrocardiograma'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', 'Música\nReproduce música sin conexión cuando se empareja con auriculares Bluetooth compatibles'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['Escalada Exterior\nSeguimiento de datos mejorado para la escalada en varias pendientes y en grandes paredes', 'Escalada Interior\nPermite escalada a plomo, con polea y boulder con recuento automático de rutas y caídas', 'Montañismo', 'Búlder'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', 'Aguas Bravas', 'Speedsurfing', 'Windsurf'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    vertix: {
      dimensionsVal: '47 x 47 x 15,6mm',
      weightVal: ['76g\nCon banda de silicona', '63g\nCon banda de nylon'],
      displaySizeVal: '1,2 pulgadas',
      displayResolutionVal: '240 x 240\n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5',
      coverMaterialVal: 'Aleación de titanio',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '155mm - 225mm',
      sizeSiliconeVal: '130mm - 240mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital\nMayor tamaño y durabilidad', 'Botón de retroceso', 'Botón de retroiluminación dedicado'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'App COROS',
      waterResistanceVal: '10 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-20°C a 60°C',
      storageTemperatureVal: '-30°C a 70°C',
      standardFullGpsVal: ['58 horas\nConectado a GPS y al QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['27 días\nPara el seguimiento diario y del sueño', '22 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '4GB',
      activityMemoryVal: '200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Monofrecuencia',
      mapLayerVal: ['Paisaje\nMapas globales descargables', 'Topo\nMapas regionales descargables'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', '—'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['—', 'Escalada Interior\nPermite escalada a plomo, con polea y boulder con recuento automático de rutas y caídas', 'Montañismo', 'Búlder'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', 'Aguas Bravas', 'Speedsurfing', 'Windsurf'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    apexPro: {
      dimensionsVal: '47 x 47 x 13,4mm',
      weightVal: ['59g\nCon banda de silicona', '49g\nCon banda de nylon'],
      displaySizeVal: '1,2 pulgadas',
      displayResolutionVal: '240 x 240\n64 colores',
      displayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5',
      coverMaterialVal: 'Aluminio',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Estándar)|||130mm - 195mm (Corto)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', 'Botón de retroiluminación dedicado'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'App COROS',
      waterResistanceVal: '10 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-10°C a 60°C',
      storageTemperatureVal: '-20°C a 70°C',
      standardFullGpsVal: ['37 horas\nConectado a GPS y al QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['18 días\nPara el seguimiento diario y del sueño', '14 días (con estrés diario)\nControla el nivel de estrés durante todo el día'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '4GB',
      activityMemoryVal: '200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Monofrecuencia',
      mapLayerVal: ['Paisaje\nMapas globales descargables', 'Topo\nMapas regionales descargables'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', 'Pulsioxímetro óptico', '—'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Estado de Carrera', 'FC Reposo', 'Ritmo cardíaco bajo el agua', 'Control de cámaras de acción\nCompatible con determinadas cámaras GoPro e Insta360', 'Liebre virtual', 'Carrera virtual', 'Test de técnica de carrera\nRequiere COROS POD/POD 2', 'Modo de altitud\nEvaluación periódica de la SpO2 y del estado físico cuando se está a gran altura', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento', 'Reflejo de la pantalla'],
      dailyFeaturesVal: ['Estrés diario', 'Análisis de salud', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', 'Buscar mi teléfono', 'Buscar mi reloj', 'Modo de luz de fondo siempre encendida', 'VFC', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['—', 'Escalada Interior\nPermite escalada a plomo, con polea y boulder con recuento automático de rutas y caídas', 'Montañismo', 'Búlder'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', 'Aguas Bravas', 'Speedsurfing', 'Windsurf'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Maquina de Remo', 'Caminata', 'Comba'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    apex46: {
      dimensionsVal: '46 x 46 x 11,9mm',
      weightVal: ['55.3g Con banda de silicona', '45g\nCon banda de nylon'],
      displaySizeVal: '1,2 pulgadas',
      displayResolutionVal: '240 x 240\n64 colores',
      displayTypeVal: 'Memoria LCD siempre activa',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5',
      coverMaterialVal: 'Aluminio',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '22mm',
      sizeNylonVal: '145mm - 220mm (Estándar)|||130mm - 195mm (Corto)',
      sizeSiliconeVal: '145mm - 220mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'App COROS',
      waterResistanceVal: '10 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-10°C a 60°C',
      storageTemperatureVal: '-20°C a 65°C',
      standardFullGpsVal: ['35 horas\nConectado a GPS y al QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['30 días', '—'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '—',
      activityMemoryVal: '200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Monofrecuencia',
      mapLayerVal: ['Migas de pan', '—'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', '—'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', '—', '—'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', '—', '—', 'Ritmo cardíaco bajo el agua', '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', '—', '—', '—', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, portugués',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['—', '—', 'Montañismo', '—'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', '—', '—', '—'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Indoor Rower', '—', '—'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    apex42: {
      dimensionsVal: '42 x 42 x 11,75mm',
      weightVal: ['49g\nCon banda de silicona', '38g\nCon banda de nylon'],
      displaySizeVal: '1,1 pulgadas',
      displayResolutionVal: '218 x 218\n64 colores',
      displayTypeVal: 'Memoria LCD siempre activa',
      screenMaterialVal: 'Cristal de zafiro',
      bezelMaterialVal: 'Aleación de titanio de grado 5',
      coverMaterialVal: 'Aluminio',
      bandMaterialVal: 'Silicona / Nylon',
      widthVal: '20mm',
      sizeNylonVal: '135mm - 205mm',
      sizeSiliconeVal: '130mm - 210mm',
      installationTypeVal: 'Liberación rápida',
      buttonVal: ['Dial digital', 'Botón de retroceso', '—'],
      phoneVal: 'Bluetooth',
      accessoriesVal: 'ANT+ / Bluetooth',
      dataSyncVal: 'App COROS',
      waterResistanceVal: '10 ATM\nApto para actividades en aguas superficiales y no para buceo',
      workingTemperatureVal: '-10°C a 60°C',
      storageTemperatureVal: '-20°C a 65°C',
      standardFullGpsVal: ['25 horas\nConectado a GPS y al QZSS', '—'],
      allSystemsOnVal: ['—', '—'],
      allSystemsDualFrequencyOnVal: ['—', '—'],
      dailyUseVal: ['24 días', '—'],
      chargingTimeVal: 'Menos de 2 horas',
      internalMemoryVal: '—',
      activityMemoryVal: '200 horas\nEstimación basada en actividades al aire libre',
      satelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      gnssChipsetVal: 'Monofrecuencia',
      mapLayerVal: ['Migas de pan', '—'],
      additionalFeaturesVal: ['Check point', 'Volver al inicio', 'Alerta de desvio', '—'],
      sensorsVal: ['Pulsómetro óptico\nPuede no funcionar sobre tatuajes', 'Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula 3D', 'Termómetro\nSoporta temperatura corporal en actividades (con accesorio compatible)', '—', '—'],
      trainingFeaturesVal: ['Ritmo Esfuerzo\nUna métrica personalizada que representa el verdadero esfuerzo al correr', 'EvoLab\nRecuperación, fatiga, carga de entrenamiento, predictor de carrera, VO2 máximo, zonas de umbral y más métricas', 'Alertas de actividad\nPara la cadencia, la distancia, el ritmo, la frecuencia cardíaca, la potencia y más métricas', 'Entrenamiento por intervalos', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', '—', '—', 'Ritmo cardíaco bajo el agua', '—', '—', '—', '—', '—', '—', '—'],
      dailyFeaturesVal: ['—', '—', 'Alerta de mensaje/llamada\nPara el uso diario y durante el entrenamiento', 'Sueño\nCon seguimiento de REM', 'Alarma', 'Temporizador', 'Cronómetro', 'Alertas diarias\nIncluye calorías activas, tiempo de ejercicio, tormenta y más alertas', 'Firmware actualizable\nCon Wi-Fi y la app COROS', '—', '—', '—', '—', '—'],
      compatibleAppsVal: 'Nike Run Club, Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon\nHaga clic aquí para ver la lista completa',
      displayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, portugués',
      runVal: ['Carrera', 'Cinta', 'Pista', 'Trail'],
      climbVal: ['—', '—', 'Montañismo', '—'],
      bikeVal: ['Ciclismo', 'Ciclo Indoor'],
      waterVal: ['Aguas Abiertas', 'Piscina', 'Aguas Tranquilas', 'Remo', '—', '—', '—'],
      winterVal: ['Esquí', 'Snowboard', 'Esquí XC', 'Esquí de travesía'],
      cardioVal: ['GPS Cardio', 'Cardio Gym', 'Senderismo', 'Indoor Rower', '—', '—'],
      specialVal: ['Triatlón', 'Multideporte', 'Fuerza', 'Entrenamiento', 'Plan de entrenamiento']
    },
    hrm: {
      hrmDimensionsVal: '42.5 x 28.4 x 9.1mm',
      hrmWeightCaseOnlyVal: '9.7g',
      hrmWeightCaseBandVal: '19g',
      hrmBandMaterialVal: 'Fibra de poliéster, nailon y elastano',
      hrmOpticalHeartRateHardwareVal: '5 luces LED con 4 fotodetectores',
      hrmBandCircumferenceVal: '18 - 32 cm (7.09-12.6 pulgadas)',
      hrmWearingPositionVal: 'Bíceps',
      hrmWirelessConnectionVal: 'Bluetooth',
      hrmSupportedDevicesVal: 'Dispositivos compatibles con Bluetooth que reciben datos de frecuencia cardiaca\nAdmite la conexión simultánea de 3 dispositivos',
      hrmDataSyncVal: 'Datos de frecuencia cardiaca en tiempo real',
      hrmWaterResistanceVal: '3 ATM',
      hrmWorkingTemperatureVal: '-20°C a 50°C (-4°F a 122°F)',
      hrmStorageTemperatureVal: '-20°C a 60°C (-4°F a 140°F)',
      hrmChargingTemperatureVal: '0°C a 45°C (32°F a 113°F)',
      hrmActivityModeVal: '38 horas',
      hrmStandbyModeVal: '80 días',
      hrmBatteryCapacityVal: '55 mAh',
      hrmChargingTimeVal: '2 horas',
      hrmChargingCableVal: 'USB Type-A\nSe conecta al sensor mediante una interfaz magnética'
    },
    dura: {
      duraDimensionsVal: '99,5 x 60,8 x 15,7mm\nExcluido el soporte',
      duraWeightDeviceVal: '102g',
      duraWeightMountVal: '53g',
      duraDisplaySizeVal: '2.7 pulgadas',
      duraDisplayResolutionVal: '400 x 240\n64 colores',
      duraDisplayTypeVal: 'Pantalla táctil con memoria siempre activa LCD',
      duraScreenVal: 'Vidrio compuesto duradero',
      duraBodyVal: 'Polímero reforzado',
      duraMountVal: 'Polímero reforzado',
      duraLengthVal: '70mm\nDesde el centro del manillar hasta el extremo frontal del soporte',
      duraCompatibleHandlebarsVal: '25.4mm / 31.8mm',
      duraButtonVal: ['Dial digital', 'Botón atrás'],
      duraPhoneVal: 'Bluetooth',
      duraAccessoriesVal: 'ANT+ / Bluetooth\nHasta 12 conexiones simultáneas con BLE',
      duraAccessoryTypesVal: 'Pulsómetros, potenciómetros, rodillos inteligentes, sensores de velocidad y cadencia, Radar Garmin Varia, cambios de bicicletas eléctricas, sistemas de transmisión electrónica Shimano/SRAM\nHaga clic aquí para ver la lista completa',
      duraDataSyncVal: 'Wi-Fi / App COROS',
      duraWaterDustResistanceVal: 'IP67',
      duraWorkingTemperatureVal: '-20℃ ~ 60℃',
      duraStorageTemperatureVal: '-30℃ ~ 70℃',
      duraAllSystemsOnVal: '120 horas\nExcluyendo carga solar',
      duraAllSystemsDualFrequencyOnVal: '70 horas\nExcluyendo carga solar',
      duraSolarEfficiencyVal: '1 hora al sol directo genera hasta 2 horas de tiempo de pedaleo adicional',
      duraChargingTimeVal: '2.5 horas (15℃ ~ 45℃)|||4 horas (0℃ ~ 15℃)\nCarga desactivada en el resto de temperaturas',
      duraInternalMemoryVal: '32GB',
      duraActivityMemoryVal: '1200 horas\nEstimación basada en actividades al aire libre',
      duraSatelliteSystemsVal: 'GPS, GLONASS, Galileo, Beidou, QZSS',
      duraGnssChipsetVal: 'Todos los satélites en doble frecuencia (L1 + L5)',
      duraMapLayerVal: 'Mapas topográficos y paisajísticos precargados',
      duraAdditionalFeaturesVal: ['Puntos de Control', 'Volver al inicio', 'Alerta de desvio', 'Control de mapas mediante pantalla táctil', 'Giro a giro', 'Redireccionamiento inteligente\nConectado a la App', 'Detalles de la subida'],
      duraSensorsVal: ['Altímetro barométrico', 'Acelerómetro', 'Giroscopio', 'Brújula', 'Sensor de temperatura'],
      duraTrainingFeaturesVal: ['Gestión del Entrenamiento\nCarga de Entrenamiento, Estado de Forma Base, Impacto de la Carga', 'Recomendación de la carga de Entrenamiento', 'Test UPF (FTP)', 'Temporizador de recuperación', 'Alertas de actividad\nPara la cadencia, la distancia, el pulso, la potencia y más métricas', 'Entrenamientos pre-planificados', 'Planes de entrenamiento', 'Desplazamiento táctil\nDesliza para desplazar las páginas de datos durante el entrenamiento'],
      duraSafetyFeaturesVal: ['Seguimiento del grupo\nConectado a la App', 'Alertas de seguridad\nConectado a la App', 'Alarma de bicicleta\nConectado a la App'],
      duraCompatibleAppsVal: 'Strava, Komoot, TrainingPeaks, Ride With GPS, Relive, Final Surge, Decathlon',
      duraDisplayLanguageVal: 'Inglés, chino simplificado, chino tradicional, alemán, español, francés, polaco, tailandés, japonés, coreano, portugués, italiano, ruso',
      duraOutdoorVal: ['Carretera', 'Grável', 'Montaña (BTT)'],
      duraElectricVal: ['Bici eléctrica', 'MTB eléctrica'],
      duraIndoorVal: 'Rodillo'
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/evolab.js
/* harmony default export */ const es_evolab = ({
  title: 'COROS EvoLab',
  desc: 'Nuestra plataforma de ciencia deportiva para evaluar su forma física, fatiga y rendimiento.',
  pages: [{
    title: 'COROS EvoLab',
    desc: ['¿Cómo influyen sus entrenos en la forma física? COROS EvoLab los evalúa junto a su recuperación y más para ofrecerle el mejor análisis de su estado físico. EvoLab es gratis para los usuarios de COROS. Se centra en su estado de forma general a lo largo de la temporada, con funciones adicionales específicas para la medición de su rendimiento en carrera en carretera.', 'EvoLab es la evolución de la evaluación personal de la condición física en su reloj.']
  }, {
    title: 'Carga de entrenamiento',
    desc: ['En tiempo real, su reloj le mostrará el nivel de impacto que una sesión de entrenamiento o actividad está teniendo en su cuerpo. Este número desde 0 aumenta en función de la intensidad y duración de su actividad. Compare su carga de entrenamiento en el menú del historial de tu reloj para el entrenamiento de hoy comparado con actividades similares en el pasado.']
  }, {
    title: 'Efecto del entrenamiento',
    desc: ['El entrenamiento suele separarse en dos categorías clave: Aeróbico - construcción de cardio, o Anaeróbico - trabajo de velocidad. El punto de separación es el Umbral de Lactato. EvoLab puntuará su efecto de entrenamiento aeróbico y anaeróbico individualmente de 0 a 5 en tiempo real en su reloj.']
  }, {
    title: 'Estado de forma e impacto de carga',
    desc: ['Un buen entreno hoy no indica estar preparado para hacer marca personal. Tampoco, un mal entreno descarrila un gran bloque de entrenamiento. EvoLab analiza el impacto de carga (7 días anteriores) y el estado de forma (6 semanas anteriores). Su reloj le recomendará un rango de carga de entrenamiento total de 7 días basado en su historial para obtener los mejores resultados.']
  }, {
    title: 'Fatiga',
    desc: ['Cada atleta responde de manera diferente a las cargas. Una semana de 100km es fácil para Eliud Kipchoge, pero es demasiado para muchos. La cantidad de forma física que queda en el cuerpo tras la carga se llama fatiga. La fatiga hace que el cuerpo se canse, pero lo fortalece. Esto es el ciclo del entrenamiento, y EvoLab puntua la fatiga de 0 a 100 y clasifica esa puntuación en 5 zonas diferentes. ¿Tiene una carrera pronto? Asegúrese de pasar de la zona de optimización a la zona de rendimiento o, como se podría llamar, de la reducción de la fatiga.']
  }, {
    title: 'Funciones Específicas de Carrera',
    desc: ['• EvoLab evalúa la preparación actual para maratón, con una puntuación para comparar con compañeros de entrenos.', '• EvoLab identifica si el entreno más reciente mejora la forma física general.', '• EvoLab clasifica las actividades para indicar a qué parte se le da prioridad.']
  }, {
    title: 'Nivel de Maratón',
    desc: ['EvoLab te proporciona una puntuación de 0 a 100 que muestra tu nivel como maratoniano. Aunque esta métrica se basa en gran medida en los 42 kilometeros (¡100 equivale a una maratón de 2 horas!), es un buen nivel para ver el estado físico general de carrera.']
  }, {
    title: 'Rendimiento de Carrera',
    desc: ['¿Quiere ver una métrica más dinámica? Un rendimiento en carrera de entre el 80% y el 120% muestra cómo se compara la carrera de hoy con la forma física general. Multiples factores influyen en que una carrera sea estupenda: el sueño, la recuperación, la nutrición, el estrés, el clima y otros. Si ve puntuaciones del 100% o más, no hay duda, ¡Su estado de forma está mejorando!']
  }, {
    title: 'Predictor de carrera',
    desc: ['Tanto si entrena para 5k, 10k, media o maratón, EvoLab proporciona su predicción en tiempo y el ritmo de la carrera en su GPS. Algunas carreras afectan a las predicciones de una distancias pero no a otras, al igual que el entreno se dirige a distancias específicas.']
  }, {
    title: 'Enfoque del entrenamiento',
    desc: ['No todas las carreras son iguales. Cada una tiene su  enfoque, y aunque esperamos que cada una sirva para su propósito, EvoLab utiliza frecuencia cardíaca, ritmo y otras métricas del reloj para decirle qué tipo de entrenamiento fue el de más impacto en una carrera en particular. No se trata del tipo de carrera realizado, sino del esfuerzo de entrenamiento que ha mejorado.']
  }, {
    title: 'Análisis avanzado de datos',
    desc: ['EvoLab proporciona una herramienta simplificada para revisar las métricas de fitness y su tendencia. Vaya a su App COROS, visite la página de su perfil personal y verá cómo mejora con el tiempo. También hay una visión clara de su tendencia de fitness estacional, para que encuentre su pico y rinda al máximo.']
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/convos.js
/* harmony default export */ const es_convos = ({
  shopTheirWatches: 'COMPRE SUS RELOJES',
  careerHighlights: 'LO MÁS DESTACADO DE SU CARRERA',
  watches: {
    pace2: {
      name: 'COROS PACE 2 Blue Steel',
      desc: 'Para atletas multideportivos\nque van rápido y lejos'
    },
    pace2molly: {
      name: 'COROS PACE 2 Molly',
      desc: 'Para atletas multideportivos\nque van rápido y lejos'
    }
  },
  eps: [{
    title: 'EMMA BATES - LA MARATONIANA AMERICANA MÁS RÁPIDA, 2021',
    mobileTitle: 'EMMA BATES\nLA AMERICANA MÁS RÁPIDA\nMARATÓN, 2021',
    desc: 'Esta estrella emergente estableció el tiempo de maratón más rápido de una mujer estadounidense (2:24:20) en 2021 con su segundo puesto en el maratón de Chicago. Dan de COROS se sentó con Emma en un COROS CONVO para hablar de su carrera de récord y desgranarla para entender a una de las atletas más emocionantes del running a un nivel más profundo.',
    title4highlights: 'PUNTOS DESTACADOS DE SU CARRERA',
    highlights: ['2021 Maratón más rápido - Mujer americana', '2021 Maratón de Chicago - 1ª americana', '2019 Maratón de Chicago - 1ª americana', 'Campeona del maratón de Estados Unidos en 2019', 'Campeona de 10.000 metros de la NCAA D1 en 2014', '12 veces NCAA D1 de USA'],
    shopDesc: 'COMPRAR EL RELOJ GPS DE EMMA\nCOROS APEX 42mm'
  }, {
    title1: 'HANS FLORINE\nRÉCORD MUNDIAL DE ESCALADA EN LA GRAN MURALLA',
    title2: 'CAMILLE HERRON \n RÉCORD MUNDIAL ULTRA RUNNER',
    titleMobile1: 'HANS FLORINE',
    titleMobile2: 'RÉCORD MUNDIAL DE \nESCALADA EN LA GRAN MURALLA',
    titleMobile3: 'CAMILLE HERRON',
    titleMobile4: 'RÉCORD MUNDIAL \nULTRA RUNNER',
    desc: 'En el episodio 2 de nuestros COROS Convos, el legendario\nescalador de grandes paredes Hans Florine y la leyenda de\nlos Ultra en ciernes, Camille Herron intercambian anécdotas\nde su juventud, debaten sobre el espíritu competitivo,\ndesgranan nuestro cambiante mundo y exploran el\npropósito más profundo que se encuentra en la\nsuperación de las lesiones y la adversidad.',
    highlights: 'LO MÁS DESTACADO DE SU CARRERA',
    highlights1: 'CAMILLE HERRON',
    highlights1list: ['3 veces Campeona del Mundo (50K, 100K, 24hr)', '2 veces Campeona del Mundo por equipos (100K, 24hr)', 'Campeona Nacional de 50K/50mi/100mi en carretera', 'Campeona de maratón "Uphill" de Comrades', 'Actual 11 veces plusmarquista estadounidense', 'Mejor marca mundial actual de 50 millas (5:38:41)', 'Mejor Trail de 100 millas para mujeres (12:42:40)'],
    highlights2: 'HANS FLORINE',
    highlights2list: ["8 récords de velocidad en 'La Nariz", 'Autor de "En la nariz"', '3 veces ganador de la medalla de oro en los X Games', '12 veces Campeón Nacional de Escalada de Velocidad', '2 veces Campeón Nacional de Escalada de Dificultad', '1991 Campeón del Mundo de Escalada de Velocidad', '1990 Campeón Nacional de EE.UU.']
  }, {
    title1: 'TOMMY CALDWELL\nESCALADOR LEGENDARIO DE VELOCIDAD Y GRANDES PAREDES',
    title2: 'KILIAN JORNET\nEL MEJOR ATLETA DE RESISTENCIA EN MONTAÑA DE TODOS LOS TIEMPOS',
    titleMobile1: ["TOMMY CALDWELL", "ESCALADOR LEGENDARIO DE VELOCIDAD", "Y GRANDES PAREDES"],
    titleMobile2: ["KILIAN JORNET", "EL MEJOR ATLETA DE RESISTENCIA EN MONTA\xD1A DE", "TODOS LOS TIEMPOS"],
    desc: 'El episodio 3 reúne a dos de los más grandes atletas de montaña de\n      todos los tiempos juntos por primera vez. Rodado el día después de\n      la victoria de Kilian en Hardrock 100, donde pulverizó el récord del recorrido,\n      hablan de mucho mientras comparan experiencias\n      y miran hacia su futuro. ¿Qué pueden aprender el uno del otro? \n     ¿Dónde encuentran la inspiración? ¿Cómo logran\n      éxito, y ¿colaborarán alguna vez? Encuentre respuestas a\n      estas preguntas y más en este trascendental COROS Convo.',
    highlights1: 'TOMMY',
    highlights1list: ['Primera ascensión libre de la Pared del Amanecer', 'Primera Escalada Libre de la Pared del diedro', 'Escalada libre de la Nariz en 11hrs', 'Récord de velocidad de la Nariz en 1h 58min', 'Primer ascenso a la Travesía del Fitz Roy'],
    highlights2: 'KILIAN',
    highlights2list: ['4 veces campeón del UTMB', '5 veces campeón de la Hardrock Hundred', '4 × Campeón del Mundo de esquí de montaña', '3 × Campeón del Mundo de Sky Running', 'Record de velocidad, escaló el Monte Everest dos veces en 1 semana'],
    withoutSupplementalOxygen: 'sin oxígeno suplementario'
  }, {
    title1: 'MOLLY SEIDEL\nCAMPEONA UNIVERSITARIA CONVERTIDA EN MEDALLISTA OLÍMPICA',
    title2: 'DES LINDEN\nLEGENDARIA MARATONISTA ESTADOUNIDENSE Y 2 VECES OLÍMPICA',
    titleMobile1: ['MOLLY SEIDEL', 'CAMPEONA UNIVERSITARIA CONVERTIDA', 'EN MEDALLISTA OLÍMPICA'],
    titleMobile2: ['DES LINDEN', 'LEGENDARIA MARATONISTA ESTADOUNIDENSE', 'Y 2 VECES OLÍMPICA'],
    desc: 'El episodio 4 reúne a una veterana maratoniana olímpica con un medallista olímpica que acaba de empezar para una conversación sincera que ofrece conocimientos e inspiración a todo\n      atleta que aspire a la grandeza. ¿Dónde encuentran la motivación competitiva? ¿Cómo es la recuperación post-maratón y por qué siguen volviendo a por más? Obtenga respuestas a estas\n      preguntas y conozca sus caminos únicos hacia el éxito y más allá en esta nueva entrega de nuestro COROS Convos.',
    highlights1: 'MOLLY SEIDEL',
    highlights1list: ['4 veces campeona de la NCAA', 'Medallista de bronce en el maratón olímpico de 2020', 'El tiempo más rápido de una estadounidense en el maratón de Nueva York', 'Medallista de bronce en el XC Internacional de Gran Edimburgo', 'Primera mujer olímpica estadounidense en su debut'],
    highlights2: 'DES LINDEN',
    highlights2list: ['Campeona del Maratón de Boston 2018', 'Plusmarquista mundial femenina de 50 km', '2 veces maratoniana olímpica (2012, 2016)', 'Medallista de plata de los Juegos Panamericanos de 2015, 10.000 m', '9 veces entre las 5 primeras en Grandes Maratones Mundiales']
  }]
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/login.js
/* harmony default export */ const es_login = ({
  loginTitle: 'ACCESO A USUARIOS',
  Email: 'Correo electrónico',
  password: 'Contraseña',
  signIn: 'Iniciar sesión',
  createAccount: 'Crear una cuenta',
  forgotYourPassword: '¿Has olvidado tu contraseña?',
  DownloadPlugin: 'Descargar el plugin de Chrome',
  sendEmai: 'Te enviaremos un correo electrónico para restablecer tu contraseña.',
  forgot: '¿Ha olvidado su contraseña?',
  submit: 'Enviar',
  newPassword: 'NUEVA CONTRASEÑA',
  newPasswordTips: 'Por favor, introduzca su nueva contraseña',
  newPasswordNext: 'SIGUIENTE',
  shortPasswordTips: 'Por favor, introduzca una contraseña con 8-20 caracteres',
  invalidStr: 'La contraseña debe contener tanto números como letras.',
  resetSuccTitle: 'HECHO ！',
  resetFailedTitle: '¡RESET FALLÓ !',
  resetSuccDesc: '¡Conguraciones ! ¡Usted ha restablecido su nueva contraseña ! <br> ¡Ahora vaya y disfrute de su viaje CTH!',
  resetFailedDesc: '¡Woops! ¡El código de verificación no es válido !',
  accountNotExist: 'Este correo electrónico no ha sido registrado.',
  login: 'INICIAR SESIÓN'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/datalist.js
/* harmony default export */ const es_datalist = ({
  title: 'Workout History',
  desc: ' workouts in total',
  total: 'All',
  run: 'Run',
  runOutdoor: 'Run',
  indoorRun: 'Indoor Run',
  trailRun: 'Trail Run',
  runMountaineer: 'Mtn Climb',
  hike: 'Hike',
  trackRun: 'Track Run',
  bike: 'Bike',
  indoorBike: 'Indoor Bike',
  swim: 'Swim',
  swimPool: 'Pool Swim',
  swimOpen: 'Open Water',
  triathlon: 'Triathlon',
  cardio: 'Cardio',
  aerobicOutdoor: 'GPS Cardio',
  aerobicIndoor: 'Gym Cardio',
  ski: 'Skiing',
  skiItem: 'Ski',
  skiSnowboard: 'Snowboard',
  skiMountaineering: 'Ski Touring',
  skiCrosscountry: 'XC Ski',
  multisport: 'Multisport',
  logOut: 'Log out',
  columnLabel: {
    title: 'Title',
    distance: 'Distance',
    averagePace: 'Average Pace',
    device: 'Device',
    date: 'Date',
    workout: 'Workout'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/yourproduct.js
/* harmony default export */ const es_yourproduct = ({
  yourProducts: 'Your Products',
  product: 'Product',
  productID: '6-digit Product ID',
  warrantyPeriod: 'Warranty Period',
  expiration: 'Warranty Expiration Date',
  workoutHistory: 'Workout History',
  accountDetail: 'Account Details',
  serialNumber: 'Número de serie'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/events.js
/* harmony default export */ const es_events = ({
  title: 'COROS New Products Launch Event',
  keywords: 'COROS New Products Launch Event - Aug 17, 2021',
  description: 'COROS New Products Launch Event - Aug 17, 2021',
  tittext1: 'COROS NEW PRODUCTS LAUNCH EVENT',
  titdate: 'Aug 17, 2021',
  aftertit: 'This is what we have announced',
  aftervertix2tit: 'COROS VERTIX 2',
  aftervertix2subtit: 'GPS Adventure Watch',
  afterpace2tit: 'COROS PACE 2',
  afterpace2titsub: 'GPS Sport Watch <br> Eliud Kipchoge Edition'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/shop.js
/* harmony default export */ const es_shop = ({
  chooseAdditionalBands: 'Correas adicionales',
  chooseBandMaterial: 'Material de su correa',
  chooseSize: 'Elija el tamaño de su reloj',
  chooseColor: 'Opción/Color',
  chooseAccessories: 'Accesorios adicionales',
  // outOfStock: 'AGOTADO', 改用 home.outOfStock
  add2Bag: 'COMPRAR',
  total: 'Total',
  overview: 'Vista general',
  skipForNow: 'Saltar por ahora',
  pace2: {
    difference: '¿Cuál es la diferencia?',
    silicone1: 'Las cintas de silicona',
    silicone2: 'son duraderas, de secado rápido y fáciles de limpiar. Son la mejor opción para quienes llevan el reloj las 24 horas del día, entran y salen del agua y quieren una correa que dure mucho tiempo.',
    nylon1: 'Correas de nailon',
    nylon2: 'son ultraligeras, transpirables y pueden ajustarse con un alto nivel de especificidad. Estas correas son muy adecuadas para quienes dan prioridad a un ajuste ceñido y a la precisión de la frecuencia cardiaca, además de para quienes encuentran incómoda la correa de reloj de silicona.'
  },
  whichModelIsRightForYou: '¿Qué modelo te conviene?',
  details: 'Detalles',
  price: 'Precio Unitario',
  quantity: 'Cantidad',
  subtotal: 'Precio',
  remove: 'Borrar',
  shipping: 'Envío',
  taxes: 'Impuestos',
  estimatedTotal: 'Total estimado',
  checkOut: 'Comprobar',
  frequentlyBoughtTogether: 'Frecuentemente comprados juntos',
  shoppingBag: 'Bolsa de la compra',
  bagPageTitle: 'Bolsa de la compra - COROS',
  moreGoodStuffIsComingSoon: 'Pronto más \ncosas buenas',
  added: 'Añadido',
  calAtCheckout: 'Calculado al pagar',
  bagEmpty: 'Su cesta está vacía',
  chooseModel: 'Modelo',
  bandTypes: {
    nylon: 'Correa de Nylon',
    silicone: 'Correa de Silicona'
  },
  thanksgivingPrompt: "A\xF1ade una bolsa de entrenamiento COROS gratis a tu pedido cuando gastes 300\u20AC o m\xE1s.",
  thanksgivingPromotionDetails: {
    title: "A\xF1ade gratis tu bolsa de entrenamiento COROS",
    subTitles: ["Haga un pedido de 300\u20AC o m\xE1s para canjear este regalo.", "La oferta finaliza el 1 de diciembre o hasta agotar existencias. ", "No es v\xE1lida con otras ofertas o promociones."]
  },
  thanksgivingPromptBanner: {
    title: "GRATIS BOLSA ENTRENAMIENTO\n      COROS CON LA COMPRA",
    subTitles: ["Gasta 300\u20AC o m\xE1s y consigue esta resistente,\n      vers\xE1til y elegante para tu material.", "La oferta finaliza el 1 de diciembre o hasta agotar existencias."],
    shortDescs: ['Promoción navideña']
  },
  nnWaterBottlePromotion: {
    title: 'Bidón de carreras oficial NN',
    subTitles: "Prep\xE1rate para la temporada de maratones con un bid\xF3n de edici\xF3n limitada, utilizado por Eliud Kipchoge y el NN Running Team."
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/coaches
/* harmony default export */ const es_coaches = ({
  subTitle: ['potente', 'gratis', 'sencillo'],
  intro: 'El COROS Training Hub es una herramienta gratuita y completa para los entrenadores que trabajan con deportistas y equipos que utilizan relojes COROS.',
  features: {
    title: 'características principales',
    list: {
      'team-view': {
        title: 'Vista de equipo y atleta',
        list: ['Ordenar por métricas de rendimiento', 'Proporciona comentarios inmediatos', 'Compare atletas'],
        desc: '"El Training Hub puso a todos mis atletas\nen un solo lugar y me permitió agruparlos\npor nivel de carrera y habilidad"',
        coach: 'Entrenador Vowell: Flacon Youth AAU',
        btn: 'Falcon Youth: Estudio Monográfico',
      },
      drag: {
        title: 'Arrastrar y soltar planes',
        list: ['Crear/Guardar entrenamientos y planes', 'Organice y acceda a su biblioteca de planes', 'Prescriba planes individuales o grupales'],
        desc: '" Arrastrar y soltar planes de fuerza para atletas me ha dado más tiempo para centrarme en lo importante "',
        coach: 'Entrenador Warrick: Drake University S&C',
        btn: 'Universidad de Drake: Estudio Monográfico',
      },
      optimize: {
        title: 'Optimizar la forma física del atleta',
        list: ['Maximizar los picos de rendimiento y la recuperación', 'Controlar el rendimiento del equipo año tras año', 'Marcar los tapers antes de los eventos clave'],
        desc: '" Soy capaz de echar un vistazo rápido al exceso de forma física de los atletas y a un posible sobreentrenamiento "',
        coach: 'Tristan Hogue: Endurokin Coaching',
        btn: 'Endurokin: Estudio Monográfico',
      },

      workouts: {
        title: 'Entrenamientos directamente en el reloj',
        list: ['Anote los entrenamientos en el calendario', 'Los entrenamientos se sincronizan con el reloj', 'Pulse inicio, siga los intervalos'],
      },
      communicate: {
        title: 'Comuníquese con los deportistas',
        list: ['Mensajes en la aplicación', 'Notificaciones de mensajes leídos'],
      },
    },
  },
  clickArea: {
    coachSignup: {
      title: 'inscripción de entrenadores',
      desc: 'Los entrenadores que deseen formar un equipo o introducir su empresa de entrenamiento en el Training Hub pueden inscribirse con el siguiente enlace.',
    },
    teamSales: {
      title: 'ventas a equipos',
      desc: 'Las ventas a equipos son una gran manera de conseguir que un equipo o grupo entero entre rápidamente en el Training Hub. Si usted tiene un gran equipo o grupo y quiere hacer un pedido, rellene el siguiente formulario.',
    },
    loanerProgram: {
      title: 'programa de préstamo',
      desc: 'El programa de préstamo está diseñado para ayudar a los equipos y grupos a conocer el Training Hub. Inscríbase a continuación para una prueba de 4 semanas para su equipo. Tras las 4 semanas, los atletas pueden comprar o devolver los relojes.',
    },
  },

  form: {
    requiredMessage: 'Este campo es obligatorio.',
    emailMessage: '¡Por favor, proporcione un correo electrónico válido!',
    placeholder: 'Su respuesta',
    noWatch: 'No tengo un reloj COROS.',
    labels: {
      fullname: '¿Cuál es su nombre completo?',
      email: '¿Cuál es su correo electrónico?',
      account: '¿Cuál es el correo electrónico de su cuenta COROS?',
      teamName: '¿Cuál es el nombre de su equipo?',
      teamSize: '¿Cuál es el tamaño de su equipo?',
      role: '¿Cuál es su papel en el equipo?',
      yearsCoaching: '¿Cuánto tiempo lleva entrenando?',
      platform: '¿Qué plataforma de entrenamiento utiliza actualmente?',
      location: '¿De qué país y estado/provincia es usted?',
      interestedProducts: '¿Qué productos COROS le interesan?',
      channel: '¿Cómo se enteró de este programa?',
      additional: 'Comentarios adicionales que le gustaría compartir.',
      phone: '¿Cuál es su número de teléfono?',
      watch: '¿Qué reloj COROS utiliza?',
      athletesCount: '¿Cuántos atletas entrena?',
      coachingWebsite: '¿Cuál es su página web de entrenador?',
      credentials: 'Por favor, indique sus credenciales como entrenador.',
      watchRequestCount: '¿Cuántos relojes desea solicitar?',
    },
  },
});

;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/workouts
/* harmony default export */ const es_workouts = ({
  title: 'ENTRENAMIENTOS VERIFICADOS POR COROS',
  seo: {
    title: 'Programas de entrenamiento verificados por COROS',
    desc: 'Una empresa de tecnología deportiva de alto rendimiento que ayuda a los atletas a entrenarse para dar lo mejor de sí mismos.',
  },
  groupedWorkouts: [
    {
      type: 'CARRERA',
      name: 'Reed Fischer de Tinman Elite',
      desc: 'Tinman Elite es un equipo de corredores profesionales con sede en Boulder, CO.',
      workouts: [
        {
          title: 'Entrenamiento de fartlek de 3 minutos',
          desc: 'Comience con unos 15 minutos de trote suave para calentar y, a continuación, empiece. El entrenamiento es de 6 a 10 series de 3:00 con 90 segundos de descanso en umbral. Después del fartlek, trote suave hasta que alcance su objetivo de volumen del día.',
        },
      ],
    },
    {
      type: 'MULTIDEPORTE',
      name: 'Tristan Hogue',
      desc: 'Tristan es un kinesiólogo de Montreal (CAN) y ha trabajado con el equipo olímpico canadiense como entrenador de fuerza y acondicionamiento/asistente de investigación. Fuera de su carrera profesional, es un atleta de montaña que utiliza los deportes de resistencia como el ultra running como entrenamiento para prepararse mejor para expediciones de alpinismo en solitario por todo el mundo como Matterhorn y Denali. Para más información, visite www.endurokin.com.',
      workouts: [
        {
          title: 'Entrenamiento 1:1 Fartlek en cuesta',
          desc: 'Entrenamiento exhaustivo por intervalos de 90 minutos diseñado para aumentar el punto umbral así como la recuperación activa. Se realiza mejor en terreno montañoso (25-50 metros/km).',
        },
        {
          title: 'Rutina de carrera por montaña',
          desc: 'Un entrenamiento de peso corporal de 30 minutos diseñado para aumentar la fuerza de la parte inferior del cuerpo y del tronco, la estabilidad y el equilibrio para el entrenamiento cuesta arriba.',
        },
      ],
    },
    {
      type: 'FUERZA',
      name: 'Grayson Murphy',
      desc: 'Grayson es una atleta Pro de COROS y cuenta con muchos años de experiencia como corredora profesional de trail y carretera. Para más información sobre Grayson visite su Instagram: racin__grayson',
      workouts: [
        {
          title: 'Entrenamiento de fuerza para todo el cuerpo',
          desc: 'Una rutina de fuerza para todo el cuerpo centrada en la estabilización del core, la activación de la cadena posterior y otros movimientos específicos del trail running.',
        },
      ],
    },
    {
      type: 'FUERZA',
      name: 'Hillary Allen',
      desc: 'Hillary representa a COROS como corredora profesional de trail. Espera inspirar, educar y animar a otras personas a encontrar el equilibrio en sus vidas.',
      workouts: [
        {
          title: 'Entrenamiento de fuerza « Feel the Burn »',
          desc: 'Este programa centrado en los corredores combina el aumento de su ritmo cardiaco con la combustión en las piernas. Es el entrenamiento perfecto para fortalecer y centrarse en sus músculos específicos para correr.',
        },
      ],
    },
    {
      type: 'FUERZA',
      name: 'Steve House',
      desc: 'Steve representa a COROS como escalador/alpinista profesional. Tiene más de 25 años de experiencia en escalada y se convirtió en el noveno estadounidense en conseguir la certificación AMGA-IFMGA. Su plataforma de coaching conocida como Uphill Athlete está diseñada para fortalecer y mejorar su rendimiento en escalada. Para más información sobre coaching visite https://www.uphillathlete.com/',
      workouts: [
        {
          title: 'Rutina de fuerza',
          desc: 'Este entrenamiento está diseñado para alternar entre la parte superior del cuerpo y la parte inferior. Comience completando este circuito 1-2 veces y luego continúe añadiendo peso y repeticiones al circuito cada 2 semanas.',
        },
        {
          title: 'Rutina de base "Mortal"',
          desc: 'Esta rutina puede completarse en varias rondas. Haga una ronda como calentamiento para un entrenamiento de fuerza o dos o tres rondas como entrenamiento independiente.',
        },
      ],
    },
    {
      type: 'FUERZA',
      name: 'Andrés Marín',
      desc: 'Andrés es un escalador polifacético, que se centra en las expediciones alpinas. Es conocido por representar a EE.UU. en la Copa del Mundo de Escalada en Hielo. Sus entrenamientos son perfectos para mejorar sus habilidades de escalada, así como para fortalecer sus músculos de escalada.',
      workouts: [
        {
          title: 'Rutina de fuerza',
          desc: 'Esta rutina de fuerza se centra en el fortalecimiento del tronco y la parte superior del cuerpo para ayudar a mejorar sus habilidades de escalada.',
        },
      ],
    },
    {
      type: 'CARRERA',
      name: 'Ian Sharman',
      desc: 'Ian Sharman es entrenador jefe en www.sharmanultra.com y trabaja con atletas de todos los niveles de todo el mundo para  maratones y ultras.',
      workouts: [
        {
          title: 'Entrenamiento de velocidad de 800 m',
          desc: 'Esta sesión de velocidad de 800m, se corre como un predictor de tiempo de maratón. El tiempo que tarda en hacer los 800m debe ser igual a su tiempo de maratón. - Es decir, 3m30seg por serie sugiere un tiempo de maratón de 3h30m.',
        },
      ],
    },
    {
      type: 'FUERZA',
      name: 'Sage Canaday',
      desc: 'Sage es atleta de montaña y ultratrail de COROS. También es el fundador y co-entrenador de sagerunning.com. Su rutina de fuerza está pensada para ayudarle a fortalecer los músculos centrales a la vez que mejora su forma y eficacia al correr.',
      workouts: [
        {
          title: 'Rutina de fortalecimiento del tronco',
          desc: 'Un entrenamiento específico de 10-15 minutos para su core de la mano del entrenador Sage. Para conocer los servicios de entrenamiento de Sage, visite www.SageRunning.com.',
        },
      ],
    },
    {
      type: 'CICLISMO',
      name: 'Gerardo Goméz',
      desc: 'Gerardo Gómez es un apasionado del Ironman, del trail running y de cualquier deporte. Es entrenador de triatlón de nivel 2 certificado por la Federación Española de Triatlón y técnico de ciclismo certificado por la Federación de Ciclismo. Contacte/sígalo en Instagram: @preparacionfisicagp',
      workouts: [
        {
          title: 'Entrenamiento en carretera llana',
          desc: 'Series en carretera llana para mejorar su fuerza sobre la bicicleta, es decir, la capacidad de aguantar más en una situación de alta intensidad (fuerza-resistencia) y de máxima intensidad (fuerza-velocidad).',
        },
        {
          title: 'Entrenamiento en cuesta',
          desc: 'Series en subida. Con esta serie buscamos trabajar nuestro umbral anaeróbico y nuestro VO2max realizando trabajos cortos y de alta o muy alta intensidad.',
        },
      ],
    },
    {
      type: 'MULTIDEPORTE',
      name: 'Sally McRae',
      desc: 'Sally es corredora profesional de trail, entrenadora a tiempo parcial, escritora y conferenciante. Para más información siga a Sally McRae en Instagram @yellowrunner para más consejos de entrenamiento y servicios de coaching.',
      workouts: [
        {
          title: 'Entrenamiento Power 5 de Sally McRae',
          desc: 'Esta rutina tiene 5 ejercicios dirigidos a sus caderas y glúteos y se puede hacer como pre o post entrenamiento. Y como en TODAS las rutinas de fuerza, sepa que siempre puede modificar o progresar cualquier ejercicio.',
        },
        {
          title: 'Entrenamiento Speed Play',
          desc: 'Este entrenamiento comienza con 10 minutos de carrera fácil para adaptarse a su ritmo aeróbico. A continuación, realizará intervalos de 6x30 segundos con 2 minutos de descanso después de cada intervalo a un esfuerzo de 7-8 en una escala de 1-10.',
        },
        {
          title: 'Rutina de fuerza previa a la carrera',
          desc: 'Creo que la incorporación de la fuerza le permitirá mantenerse sin lesiones y seguir corriendo durante toda su vida. Comprométase a hacer esto 3-4 días a la semana y ¡notará la diferencia!',
        },
      ],
    },
    {
      type: 'CICLISMO',
      name: 'COROS Oficial',
      desc: 'Entrenamientos de ciclismo del equipo COROS.',
      workouts: [
        {
          title: 'Salida larga para Entrenamiento de Maratón',
          desc: 'Este entrenamiento está diseñado para ayudarle a prepararse para los esfuerzos del maratón sin crear el estrés en sus piernas que supondría correr durante 3 horas. Añádalo a su entrenamiento de carrera para maximizar el desarrollo aeróbico',
        },
        {
          title: 'Desarrollo Anaeróbico en Umbral',
          desc: 'Este entrenamiento está diseñado para maximizar el desarrollo de su umbral de lactato. Para ello, primero estresamos su capacidad anaeróbica y luego pasamos a intervalos dedicados al umbral.',
        },
      ],
    },
    {
      type: 'CARRERA',
      name: 'COROS Oficial',
      desc: 'Entrenamientos de running del equipo COROS.',
      workouts: [
        {
          title: 'Entrenamiento umbral Elite',
          desc: 'Este entrenamiento es utilizado por el equipo New Balance Manchester cuando sus atletas de media distancia se preparan para las pruebas del campeonato. Consistente en intervalos, este entrenamiento le ayudará a construir su umbral.',
        },
        {
          title: 'Mejora de la velocidad en 5k',
          desc: 'El propósito del entrenamiento de hoy es aumentar su velocidad por encima del ritmo de 5k y prolongar los esfuerzos. Asegúrese de correr más rápido que el ritmo normal de 5k mientras buscamos aumentar su velocidad.',
        },
        {
          title: '30 Minutos Base con aceleraciones',
          desc: 'Este entrenamiento está diseñado para ser corrido a un ritmo base, pero incluye zancadas/recogidas para la eficiencia de la carrera. Aumente el ritmo durante 30 segundos y luego vuelva a su ritmo fácil de resistencia aeróbica.',
        },
        {
          title: '45 Minutos Base con aceleraciones',
          desc: 'Este entrenamiento está diseñado para correr a un ritmo básico, pero incluye zancadas/recogidas para correr con eficacia. Aumente el ritmo durante 30 segundos y luego vuelva a relajarse a su ritmo de resistencia aeróbica fácil.',
        },
        {
          title: '1 hora base con aceleraciones',
          desc: 'Este entrenamiento está diseñado para correr a un ritmo básico, pero incluye zancadas/recogidas para correr con eficacia. Aumente el ritmo durante 30 segundos y luego vuelva a relajarse en su ritmo fácil de resistencia aeróbica.',
        },
        {
          title: 'Entrenamiento de carrera Tabata',
          desc: 'Tabata es una forma popular de ejercicio HIIT que puede aumentar eficazmente su forma física y su capacidad para correr. Se requiere la máxima intensidad en cada intervalo de 20 segundos para garantizar el beneficio del entrenamiento.',
        },
        {
          title: 'Fartlek a intervalos cortos',
          desc: 'Este entrenamiento de Fartlek requiere esfuerzos de medios a duros para mantener su VO2 máximo y su umbral de lactato.',
        },
        {
          title: 'Fartlek de 30 minutos',
          desc: 'Este entrenamiento de 30 minutos implica varias longitudes en cada intervalo para mejorar su velocidad y resistencia. Siéntase libre de ajustar el ritmo y la duración en función de su nivel de forma física.',
        },
        {
          title: 'Entrenamiento de fartlek para maratón',
          desc: 'Corra a un ritmo más rápido que el de su maratón en este entrenamiento para mejorar la velocidad y la resistencia. Comience con un trote suave. A continuación, aumente el ritmo durante 1 minuto. Vuelva al ritmo normal durante cada descanso.',
        },
        {
          title: 'Entrenamiento de intervalos en pirámide',
          desc: 'Después del calentamiento, complete 6 intervalos de distintas distancias y descanse 90 segundos entre ellos. Ajuste la intensidad y el objetivo en función de su estado de forma.',
        },
      ],
    },
  ],
});

;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/progress.js
/* harmony default export */ const es_progress = ({
  productName: 'Taza de Tommy Caldwell',
  title: 'Taza exclusiva de Tommy Caldwell',
  desc: 'Tome un sorbo de motivación con la taza isotérmica COROS de Tommy Caldwell Pain is Progress.',
  desc1: "Es duro superar los retos f\xEDsicos y mentales que conllevan el entrenamiento, la competici\xF3n y la persecuci\xF3n de nuestros sue\xF1os. Es natural evitar la incomodidad, pero cada vez que supera sus l\xEDmites, se hace m\xE1s fuerte, m\xE1s r\xE1pido y m\xE1s h\xE1bil. Cada vez que se recupera, desarrolla la resistencia y la determinaci\xF3n que convertir\xE1n sus sue\xF1os en realidad.",
  desc2: "Nadie lo sabe mejor que Tommy Caldwell. Despu\xE9s de perder su dedo \xEDndice en un accidente con una sierra de mesa en 2001, Tommy, con 23 a\xF1os, trabaj\xF3 pacientemente a pesar de su insoportable dolor para volver a la cima del mundo de la escalada profesional - haciendo la primera escalada libre de la historia en Dawn Wall (la Pared del Amanecer), y estableciendo el actual r\xE9cord de velocidad en The Nose (La Nariz).  ",
  desc3: "El malestar es temporal, pero la satisfacci\xF3n de alcanzar sus objetivos durar\xE1 toda la vida. Tome un sorbo de motivaci\xF3n cada vez que haga ejercicio con esta taza exclusiva, limitada a s\xF3lo 5000 unidades en todo el mundo. La ic\xF3nica huella de la mano de Tommy le recordar\xE1 siempre que con la mentalidad adecuada el dolor es progreso.",
  productDetailTitle: 'Detalles del producto',
  detailInfo1: 'Acero inoxidable 18/8 (304) de doble pared',
  detailInfo2: 'Diseño isotérmico antiquemaduras',
  detailInfo3: 'Capacidad: 0.38 L (12.85 fl.oz) ',
  detailInfo4: 'Peso: 255 g. (9 oz) / Dimensiones: Ø 8,4 x 11,1  cm (3,3" x 4,4 pulgadas)',
  detailInfo5: 'A prueba de óxido y apto para lavavajillas',
  detailInfo6: 'Tapa de apertura bucal y cierre extraíble',
  detailInfo7: 'Grabada con láser sin disolventes',
  detailInfo8: 'Sin bisfenol A (BPA)',
  commit2ProgressTitle: 'Comprometerse a progresar',
  commit2ProgressDesc1: "El progreso se produce cuando nos comprometemos con un objetivo, as\xED que \xBFcon qu\xE9 objetivos te comprometes en 2023? Date una motivaci\xF3n extra inspir\xE1ndote a ti y a tus amigos con los objetivos por los que est\xE1s dispuesto a sufrir este a\xF1o. Si uno de tus objetivos es participar en una carrera, COROS te reembolsar\xE1 los gastos de inscripci\xF3n una vez realizada con hasta un m\xE1ximo de 200$ para 5 ganadores. Todo lo que tienes que hacer es contarnos tus objetivos para 2023 y por qu\xE9 son importantes. Puedes participar en Instagram, Facebook y Strava etiquetando a COROS, y usando  ",
  commit2ProgressTag: '#painisprogress',
  commit2ProgressDesc2: "La compra de la taza no es necesaria para tener la oportunidad de ganar, y todos los posts que sean correctamente etiquetados antes del 28 de febrero se tendr\xE1n en cuenta para el sorteo del premio. Sean cuales sean tus objetivos y el modo en que decidas comprometerte, te deseamos mucho \xE9xito en su consecuci\xF3n."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/kilianEdition.js
/* harmony default export */ const es_kilianEdition = ({
  productName: 'COROS APEX 2 Pro',
  title: 'Reloj GPS COROS APEX 2 Pro Edición Kilian Jornet',
  desc: 'Para los atletas al aire libre que entrenan duro y se mueven rápido.',
  sloganTitle: 'Una colaboración de categoría mundial',
  sloganDesc1: "Kilian Jornet, sin duda el mejor atleta de monta\xF1a de todos los tiempos, es una leyenda viva que equilibra la garra atl\xE9tica con la paciencia y la humildad. Desde establecer el r\xE9cord del UTMB hasta realizar dos escaladas alucinantes al Everest en una semana, Kilian ostenta algunos de los t\xEDtulos m\xE1s prestigiosos del ultrarunning.",
  sloganDesc2: "COROS se enorgullece de asociarse con Kilian y NNormal para presentar un pack edici\xF3n limitada del reloj COROS APEX 2 Pro Kilian Jornet. Conseguir\xE1s la tecnolog\xEDa de entrenamiento y la experiencia de navegaci\xF3n de primera clase de COROS con el dise\xF1o de reloj personalizado de Kilian y sus accesorios favoritos, para una colaboraci\xF3n \xFAnica como nunca antes.",
  slogan2Title: 'Los colores de la montaña',
  slogan2Desc: "Este reloj de edici\xF3n limitada, un homenaje a las monta\xF1as nevadas noruegas y al majestuoso valle Romsdalen donde vive Kilian, presenta una n\xEDtida y llamativa combinaci\xF3n de colores blanco y negro.",
  twoisbetter: 'Dos mejor que uno',
  twoisbetterDesc: 'El APEX 2 Pro Kilian Jornet Edition viene con dos correas de reloj en vez de la correa única estándar que viene con el APEX 2 Pro original. Con la clásica correa de silicona suave o la ligera correa de nailon que tendrá para elegir, podrá decidir cuál es la más adecuada para su próxima aventura. ',
  capItOff: 'Y para rematar',
  capItOffDesc: "Cada reloj viene con una gorra (valorada en 35 EUR) de competici\xF3n ligera y ventilada de <a class=\"kilianEdition-common-link2\" href=\"https://www.nnormal.com/?utm_source=display&utm_medium=COROS&utm_content=COROS-Site&utm_term=us\">NNormal</a>, la marca deportiva de Kilian dedicada a la simplicidad y la sostenibilidad. Unidos por la pasi\xF3n por explorar el aire libre y el compromiso con la calidad, la funcionalidad y la durabilidad, nos sentimos honrados de trabajar con NNormal para ofrecerle productos en los que creemos plenamente.\n  Tanto si corres por los fiordos de Noruega como Kilian, como si sales a la carretera para tu pr\xF3xima marat\xF3n, luce el look de Kilian con una nueva y elegante gorra.",
  getcoached: 'Sea entrenado por Kilian',
  getcoachedDeadline: 'Plazo de presentación: 17 de febrero de 2023.',
  getcoachedDesc: "Tener un entrenador marca una gran diferencia en tu \n    entrenamiento. Pero, \xBFy si le entrenara el mejor atleta \n    de monta\xF1a del mundo? Como orgulloso propietario \n    de un COROS APEX 2 Pro Kilian Jornet Edition, tendr\xE1 \n    la oportunidad \xFAnica de ser entrenado por Kilian \n    durante un programa de entrenamiento de 12 semanas,\n     exclusivamente a trav\xE9s del COROS Training Hub. S\xF3lo \n    hay 25 plazas disponibles para la selecci\xF3n basada en \n    determinados criterios.",
  getcoachedDescMobile: "Tener un entrenador marca una gran diferencia en tu \n  entrenamiento. Pero, \xBFy si le entrenara el mejor atleta \n  de monta\xF1a del mundo? Como orgulloso propietario \n  de un COROS APEX 2 Pro Kilian Jornet Edition, tendr\xE1 \n  la oportunidad de ser entrenado por Kilian durante \n  un programa de entrenamiento de 12 semanas,\n  exclusivamente a trav\xE9s del COROS Training Hub. S\xF3lo \n  hay 25 plazas disponibles para la selecci\xF3n basada en \n  determinados criterios.",
  reachEverySummit: 'Llegue a todas las cumbres',
  reachEverySummitDesc: 'Diseñado para rendir en todo tipo de terrenos, el APEX 2 Pro está fabricado con tecnologías revolucionarias para Kilian y sus objetivos más ambiciosos. Con un exterior aún más duradero, una antena rediseñada, un sensor óptico de última generación y una batería de mayor duración, podrá ir rápido y lejos.',
  nomatterwhat: 'Pase lo que pase, \nestará preparado',
  nomatterwhatDesc: "La belleza de la naturaleza tambi\xE9n conlleva riesgos. El tiempo \n    tormentoso, el mal de altura la oscuridad, la deshidrataci\xF3n... \n    son todas realidades potenciales de estar por el la naturaleza. \n    El APEX 2 Pro le prepara para cualquier situaci\xF3n, para \n    que pueda mantenerse seguro e informado mientras \n    llegas a la cima.",
  nomatterwhatDescMobile: "La belleza de la naturaleza tambi\xE9n conlleva \n  riesgos. El tiempo tormentoso, la deshidrataci\xF3n... \n  son todas realidades potenciales de estar por el la \n  naturaleza. El APEX 2 Pro le prepara para \n  cualquier situaci\xF3n, para que pueda mantenerse \n  seguro e informado mientras llegas a la cima.",
  findYourPath: 'Encuentre su camino',
  findYourPathDesc: "Kilian, que se describe a s\xED mismo como un atleta de monta\xF1a 360\xB0, exige lo mejor \n    en tecnolog\xEDa de navegaci\xF3n, y por eso eligi\xF3 el nuevo APEX 2 Pro como su reloj. \n    Con cartograf\xEDa global sin conexi\xF3n de COROS, puntos de control, planificaci\xF3n \n    de rutas personalizadas y mucho m\xE1s, podr\xE1 ir a cualquier lugar al aire \n    libre con total confianza.",
  findYourPathLearnMore: 'Más información sobre tecnologías y funciones',
  applyTitle: "Acceso exclusivo:\n  Campus de entrenamiento\n  virtual de 12 semanas\n  de Kilian Jornet",
  applyTitleMobile: "Acceso exclusivo: \n  Campus de entrenamiento \n  virtual de 12 semanas\n  de Kilian Jornet",
  applyDesc: "Por primera vez en la historia, Kilian se ha asociado con COROS para desarrollar un campus de entrenamiento virtual gratuito de 12 semanas dise\xF1ado para los propietarios de COROS APEX 2 Pro Kilian Jornet Edition que quieran ir m\xE1s lejos y m\xE1s r\xE1pido al aire libre. Como parte de nuestra colaboraci\xF3n con NNormal, los participantes seleccionados tambi\xE9n recibir\xE1n gratis un kit de entrenamiento de NNormal, por un valor m\xE1ximo de 350 euros. S\xF3lo hay 25 plazas disponibles para la selecci\xF3n basada en unos criterios de solicitud descritos. ",
  applyDeadline: 'Plazo de presentación: 18 de febrero de 2023.',
  applyBtn2: 'Solicitar ahora',
  applyFlow1Date: '18 febrero 2023, 08:59 CET',
  applyFlow1Title: 'Plazo de solicitud',
  applyFlow1Desc: 'Localice el ID de producto de 6 dígitos de su reloj COROS APEX 2 Pro Kilian Jornet Edition y utilícelo para enviar la solicitud en ',
  applyFlow2Date: '28 febrero 2023, 08:59 CET',
  applyFlow2Title: 'Decisión',
  applyFlow2Desc: 'COROS y Kilian seleccionarán a 25 atletas en función de su nivel de habilidad y los objetivos de rendimiento deseados. El campamento está diseñado para atletas de todos los niveles y es GRATUITO solicitarlo y asistir.',
  applyFlow3Date: '6 marzo - 28 mayo 2023',
  applyFlow3Title: 'Campus de entrenamiento',
  applyFlow3Desc: 'Sesiones de video grupales con Kilian antes del inicio del campamento. Recibirá regularmente comentarios y consejos de entrenamiento de Kilian a través del COROS Training Hub.',
  limitedProduction: 'Producción limitada',
  limitedProductionDesc: "S\xF3lo se han fabricado 5.000 packs del \n    APEX 2 Pro Kilian Jornet Edition en todo \n    el mundo. Consiga esta exclusividad \n    antes de que se agoten para sacar \n    el monta\xF1ero que lleva dentro."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/careers.js
/* harmony default export */ const es_careers = ({
  pageTitle: '加入COROS',
  desc: "\u6211\u4EEC\u8BDA\u631A\u6B22\u8FCE\u4F18\u79C0\u7684\u4F60\u4EEC\u52A0\u5165\uFF0CCOROS \u79C9\u6301\u7740\u6210\u4E3A\u6700\u4F18\u79C0\u7684\u8FD0\u52A8\u79D1\u6280\u516C\u53F8\uFF0C\u901A\u8FC7\u6570\u636E \u6280\u672F\u63A8\u52A8\u8FD0\u52A8\u8BAD\u7EC3\u53D8\u9769\u7684\u613F\u666F\uFF0C\u5E0C\u671B\u4E0E\u5927\u5BB6\u4E00\u8D77\u575A\u6301\u957F\u671F\u3001\u7406\u6027\u3001\u5766\u8BDA\u3001\u8BDA\u4FE1\u3001\u521B\u65B0\u3001 \u6210\u957F\u7684\u4EF7\u503C\u89C2\uFF0C\u5EFA\u7ACB\u7B26\u5408 COROS\n  \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u3002\u5BF9\u4EC0\u4E48\u662F\u201CCOROS \u98CE\u683C\u7684\u5DE5\u4F5C\u65B9\u5F0F\u201D\u611F\u5174\u8DA3?\u521A\u597D\uFF0C\u6211\u4EEC\u4E5F\u5BF9\u4F18\u79C0\u7684\u4F60\u611F\u5174\u8DA3\u3002",
  visionTitle: '使命与投递简历：',
  visionDesc: "COROS\u662F\u4E00\u5BB6\u8FD0\u52A8\u6570\u636E\u79D1\u6280\u516C\u53F8\uFF0C\u6211\u4EEC\u7684\u4F7F\u547D\u662F\u7528\u6570\u636E\u79D1\u6280\u7684\u529B\u91CF\uFF0C\u5E2E\u52A9\u66F4\u591A\u4EBA\u4EAB\u53D7\u6237\u5916\u8FD0\u52A8\u7684\u4E50\u8DA3\uFF0C\u62E5\u6709\u7CBE\u5F69\u7684\u4EBA\u751F\u3002\n    \u6211\u4EEC\u5E0C\u671B\u901A\u8FC7\u4E0D\u65AD\u7684\u52AA\u529B\uFF0C\u5EFA\u8BBE\u4E00\u5BB6\u4F18\u79C0\u7684\u4F01\u4E1A\uFF0C\u8BA9\u6237\u5916\u8FD0\u52A8\u501F\u52A9\u79D1\u6280\u7684\u529B\u91CF\u6210\u4E3A\u66F4\u591A\u4EBA\u7684\u751F\u6D3B\u65B9\u5F0F\uFF0C\u6253\u9020\u79D1\u6280\u9886\u57DF\u72EC\u4E00\u65E0\u4E8C\u7684\u8FD0\u52A8\u54C1\u724C\u3002"
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/ek-giveaway.js
/* harmony default export */ const es_ek_giveaway = ({
  seo: {
    title: '¡Gana un reloj COROS PACE 2 GPS Edición Eliud Kipchoge!',
    desc: 'Ingrese para tener la oportunidad de ganar el paquete definitivo para corredores. El ganador será elegido el 1 de mayo.'
  },
  intro: {
    title: 'EL QUE UTILIZABA EL MEJOR',
    desc: "\xA1Prep\xE1rate para sentir la emoci\xF3n de correr como un verdadero campe\xF3n! En honor a la carrera inaugural de Eliud Kipchoge en Boston en su b\xFAsqueda de hacerse con los seis maratones principales, queremos regalar la \xFAltima unidad disponible del COROS PACE 2 Eliud Kipchoge que existe. Eliud ha usado esta edici\xF3n especial durante cientos de horas de entrenamiento, cruz\xF3 la l\xEDnea de meta para establecer el r\xE9cord mundial en Berl\xEDn, se llev\xF3 a casa el oro en Tokio y recuerda a miles de usuarios de COROS en todo el mundo que \"no human is limited\" (ning\xFAn ser humano est\xE1 limitado). Para honrar totalmente la entrega de esta parte de la historia del atletismo, nos hemos unido con el socio inspirador de Eliud, el legendario NN Running Team, para ofrecer el mejor paquete de running:"
  },
  text2: "Un COROS PACE 2 Edici\xF3n Eliud Kipchoge | una camiseta firmada | una botella firmada | y un libro firmado",
  form: {
    title: "NO PIERDA ESTA OPORTUNIDAD",
    desc: '¡Simplemente introduzca su dirección de correo electrónico para tener la oportunidad de ganar este paquete épico!'
  },
  notice: "*Al introducir su correo electr\xF3nico para participar en este sorteo, acepta recibir comunicaciones de marketing de COROS y NN Running. Su correo electr\xF3nico podr\xEDa ser compartido con estas empresas con el fin de comercializar sus productos y servicios. Si desea darse de baja de estas comunicaciones, puede hacerlo en cualquier momento siguiendo las instrucciones indicadas en los correos electr\xF3nicos.",
  emailPlaceholder1: 'Su respuesta',
  emailPlaceholder2: 'Este evento ha terminado',
  emailError1: 'Proporcione un correo electrónico válido.',
  emailError2: 'Se requiere correo electrónico.',
  submittedError: 'Por favor, actualice la página si desea enviar un nuevo formulario.',
  successMsg: 'Su respuesta ha sido registrada.',
  submit: 'ENVIAR',
  oops: '¡Ups!',
  confirm: 'Confirmar',
  goodLuck: '¡Buena suerte!',
  emailUsed: 'Este correo electrónico ya ha enviado una respuesta.'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/app3-langdingpage.js
/* harmony default export */ const es_app3_langdingpage = ({
  title: 'ACTUALIZACIÓN INTEGRAL',
  seo: {
    title: 'Actualización COROS Abril 2023',
    desc: 'Nuestra última actualización incluye aún más actualizaciones para mejorar la forma en que entrena y explora con su reloj COROS.'
  },
  intro: "Nuestro lanzamiento de abril de 2023 trae una aplicaci\xF3n redise\xF1ada y mejoras significativas en toda la soluci\xF3n de entrenamiento COROS con un sistema de estado de carrera totalmente nuevo, EvoLab mejorado, la nueva p\xE1gina Explorar, el gestor de ubicaciones y mapas, y muchas m\xE1s mejoras. Tanto si est\xE1 entrenando para alcanzar un objetivo como si est\xE1 explorando al aire libre, el reloj GPS definitivo acaba de mejorar a\xFAn m\xE1s.",
  progress: {
    title: "LA NUEVA P\xC1GINA\n     DE PROGRESO",
    desc: "Entrenar consiste en progresar. Desde el momento en que abre la aplicaci\xF3n, la nueva p\xE1gina Progreso le ayuda a priorizar la consecuci\xF3n de objetivos ofreci\xE9ndole acceso instant\xE1neo a sus actividades recientes, los datos de seguimiento del sue\xF1o, el estado del entrenamiento y mucho m\xE1s. Tambi\xE9n puede personalizar su vista para priorizar la informaci\xF3n que m\xE1s necesita.",
    deepData: {
      title: 'Profundice en sus datos',
      desc: "S\xF3lo tiene que tocar cualquiera de las tarjetas de su p\xE1gina de Progreso para acceder a m\xE1s detalles y a los datos hist\xF3ricos para revisar su evoluci\xF3n a lo largo del tiempo."
    }
  },
  optimize: {
    title: 'OPTIMICE SU ENTRENAMIENTO',
    desc: 'Desde la comprensión de sus métricas hasta la planificación de su próximo entrenamiento, nuestra nueva aplicación le permite tomar el control de su entrenamiento y su forma física.',
    status: {
      title: 'Estado del entrenamiento',
      desc: 'Utilizando una combinación de datos del estado de forma y el impacto de la carga, su estado de entrenamiento proporciona una instantánea de su estado de forma para que pueda ver fácilmente si está mejorando o disminuyendo, y lo bien que está gestionando la fatiga.',
      list: [{
        title: 'Excesivo',
        desc: 'El entrenamiento reciente puede ser exagerado o excesivo'
      }, {
        title: 'Optimizado',
        desc: 'El estado de forma aumenta gradualmente'
      }, {
        title: 'Manteniendo',
        desc: 'Carga de entrenamiento reciente moderada, manteniendo la forma física de base'
      }, {
        title: 'Reanudando',
        desc: 'El entrenamiento reciente aumenta gradualmente su adaptación a una mayor carga de entrenamiento'
      }, {
        title: 'Preparado',
        desc: 'para esfuerzos de alto rendimiento'
      }, {
        title: 'Disminuyendo',
        desc: 'El estado de forma está disminuyendo rápidamente'
      }]
    },
    weekly: {
      title: 'Carga de entrenamiento semanal',
      desc: 'Dado que la mayoría de los atletas planifican sus entrenamientos semanalmente, ahora puede tener una visión instantánea de cómo está evolucionando su carga de entrenamiento para mantenerse sin lesiones o alcanzar el máximo cuando lo necesite. También puede ver por mes o año el seguimiento con respecto a objetivos a más largo plazo.'
    },
    enhanced: {
      title: 'Planificación de entrenamientos mejorada',
      list: [{
        title: 'Vea su calendario de entrenamiento',
        desc: 'Vea rápidamente los entrenamientos que tiene planificados para la semana.'
      }, {
        title: 'Crear nuevos entrenamientos',
        desc: 'Acceda a su Calendario de entrenamiento para añadir nuevos entrenamientos.'
      }, {
        title: 'Edite los entrenamientos planificados',
        desc: 'Arrastre y suelte los entrenamientos planificados sobre la marcha.'
      }]
    },
    running: {
      title: 'Estado de Carrera',
      desc: 'Cada corredor es diferente, y tiene diferentes puntos fuertes y débiles. El nuevo sistema Estado de Carrera le ayudará a comprender su rendimiento en las cuatro capacidades principales de carrera: Base, Resistencia, Velocidad y Sprint'
    }
  },
  navigation: {
    title: 'NAVEGACIÓN MÁS FÁCIL',
    desc: 'Tanto si está trazando un nuevo sendero como si está explorando las calles de una nueva ciudad, nuestras herramientas de navegación totalmente nuevas le ayudarán a encontrar el camino correcto y a mantenerse en él.',
    subtitle: 'LA NUEVA PÁGINA EXPLORAR',
    subdesc: 'Tanto si corre como si pedalea, trace su recorrido, vea la distancia, compruebe el perfil de elevación y sincronícelo con su reloj con nuestra sencilla e intuitiva página Explorar.',
    list: [{
      title: 'Toque para marcar',
      desc: 'Sólo tiene que tocar en el mapa para trazar su ruta por caminos conocidos, o cambiar a manual si se encuentra en territorio desconocido.'
    }, {
      title: 'A pie o en bici',
      desc: 'La página Explorar ofrece ambas opciones. Elija la suya para confeccionar la ruta perfecta.'
    }, {
      title: 'Edite su ruta',
      desc: 'Una goma de borrar le permite eliminar y editar cualquier parte de su ruta.'
    }],
    locations: {
      title: 'Ubicaciones y waypoints',
      list: [{
        title: 'Generación de rutas',
        desc: 'Busque ubicaciones y autogenere una ruta.'
      }, {
        title: 'Iconos personalizados',
        desc: 'Guarde las ubicaciones con iconos personalizados.'
      }, {
        title: 'Waypoints',
        desc: 'Añada waypoints a rutas nuevas o existentes.'
      }]
    },
    manage: {
      title: 'Gestionar la colección de rutas y ubicaciones',
      desc: 'Acceda a su Colección desde la página Explorar para seleccionar rápidamente rutas o ubicaciones guardadas. ',
      list: ['Vea y gestione sus rutas guardadas con perfil de distancia y elevación.', 'Vea y gestione sus ubicaciones guardadas con iconos personalizados, direcciones y elevaciones. ', 'Aplique filtros basados en el tipo, la distancia, la región y la fuente.']
    },
    onWirst: {
      title: 'Navegación en la muñeca',
      desc: 'Sincronice sus rutas con cualquier dispositivo COROS compatible* para disfrutar de una experiencia de navegación perfecta con un solo botón. Utilice el dial digital para acercar y alejar el mapa, y utilice la pantalla táctil** para desplazarse de una zona a otra.',
      note1: "*PACE 1 y KIPRUN 500 no son compatibles con la navegaci\xF3n en el reloj. Actualice su PACE 2 al firmware m\xE1s reciente para recibir las funci\xF3n de seguimiento de tracks. ",
      note2: "**PACE 2 no es compatible con las experiencia de pantalla t\xE1ctil."
    }
  },
  more: {
    title: 'AÚN MÁS ACTUALIZACIONES',
    list: [{
      title: 'Navegación en el PACE 2.',
      desc: 'Ahora puede navegar con el seguimiento de rastro de migas de pan en PACE 2.'
    }, {
      title: 'Seguimiento del sueño.',
      desc: 'Un nuevo y mejorado desglose de sus datos de sueño facilita la comprensión de lo bien que duerme.'
    }, {
      title: 'Recuperación.',
      desc: 'Hemos añadido una vista de tendencias de recuperación a largo plazo y una recomendación de tiempo de recuperación.'
    }, {
      title: 'Gestión de mapas sin conexión.',
      desc: "Descargue o elimine f\xE1cilmente mapas en su reloj COROS* directamente desde la aplicaci\xF3n.",
      note: "*S\xF3lo disponible para relojes COROS con capacidad WiFi"
    }, {
      title: 'Test de estado de carrera (Running Fitness).',
      desc: 'Nuestro nuevo Test de estado de carrera es una forma rápida de obtener, o reevaluar, sus niveles actuales del estado de carrera.'
    }, {
      title: 'Reciba asistencia.',
      desc: 'Ahora puede enviar una solicitud de asistencia para el producto directamente desde la App.'
    }]
  },
  footer: {
    title: 'COMENZAR A PROBAR',
    // desc: 'Haga clic a continuación para conseguir acceso anticipado a todas nuestras nuevas funciones a través de la prueba beta pública de abril de 2023.',
    btn: 'ACTUALIZAR AHORA'
  },
  header: {
    desc: 'Haga clic para conseguir acceso anticipado \na nuestra nueva beta pública el 24 de abril.',
    note: 'Lanzamiento oficial en unas semanas a la espera de la prueba beta.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/apex2credit.js
/* harmony default export */ const es_apex2credit = ({
  pageTitle: 'Solicitud de abono al cliente de COROS APEX 2 & APEX 2 Pro',
  pageDesc: 'La solicitud de crédito estará abierta desde el 20 de abril  al 31 de mayo de 2023.',
  errors: {
    430: "Lamentablemente, el correo electr\xF3nico que ha introducido no coincide con nuestros registros. Por favor, actualice el correo electr\xF3nico de la cuenta en su aplicaci\xF3n COROS y actualice esta p\xE1gina para reiniciar la solicitud. Para obtener m\xE1s ayuda, visite este blog de soporte o p\xF3ngase en contacto con support.es@coros.com.",
    420: "Lamentablemente, no podemos verificar el ID de este reloj. P\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda",
    410: "Lamentablemente, el ID del reloj no es v\xE1lido para este programa o no coincide con el modelo del reloj. Por favor, int\xE9ntelo de nuevo. Si cree que se trata de un error, p\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda.",
    440: "Lamentablemente, el reloj no est\xE1 vinculado con un correo electr\xF3nico v\xE1lido. Por favor, a\xF1ada el correo electr\xF3nico de la cuenta a su App COROS y actualice esta p\xE1gina para reiniciar la aplicaci\xF3n. Para obtener m\xE1s ayuda, visite este blog de soporte o p\xF3ngase en contacto con support.es@coros.com.",
    450: "Lamentablemente, su reloj se activ\xF3 despu\xE9s del ajuste de precios y no cumpl\xEDa los requisitos para el cr\xE9dito. Si cree que se trata de un error, p\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda.",
    510: "Desafortunadamente, su reloj fue activado fuera de los lugares elegibles y no califica para el cr\xE9dito. Si cree que se trata de un error, p\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda.",
    520: "Lamentablemente, su reloj parece estar en condiciones de inutilizado, es muestra o pr\xE9stamo. Si cree que se trata de un error, p\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda.",
    530: "Lamentablemente, ya hay registrada una solicitud para este ID de reloj. Si cree que se trata de un error, p\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda.",
    540: "\xA1Ups! Algo sali\xF3 mal. P\xF3ngase en contacto con support.es@coros.com para obtener m\xE1s ayuda"
  },
  apply_successfully: 'Gracias por enviar la solicitud. En breve recibirá en su correo electrónico un mensaje con el código de crédito. Gracias por elegir COROS, ¡y feliz compra!',
  creditDescs: ["A partir del 20 de abril de 2023, COROS ajustar\xE1 los precios de venta al p\xFAblico de sus relojes APEX 2 y APEX 2 Pro en los mercados que utilicen las siguientes divisas: USD, EUR, GBP y CAD. Debido a las recientes actualizaciones del tipo de cambio del USD, creemos que es correcto ajustar nuestros precios para que nuestros productos sean m\xE1s competitivos, y trasladar ese ahorro a nuestros consumidores.", "Para mostrar nuestro apoyo y agradecimiento a aquellos que compraron un APEX 2 o APEX 2 Pro antes del 20 de abril de 2023, estamos ofreciendo un cr\xE9dito en es.COROS.com para compensar este ajuste de precios. Para ver si usted es elegible y ver las instrucciones sobre c\xF3mo solicitarlo, por favor revise las siguientes reglas."],
  whatYouNeedToKnow: 'QUE NECESITA SABER',
  whatYouNeedToKnowItems: [{
    title: 'Requisitos',
    desc: "\u2022 Este programa es v\xE1lido para los propietarios de relojes COROS APEX 2/2 Pro en los mercados USD, EUR, GBP y CAD. \n    \u2022 Los relojes deben haber sido comprados a un distribuidor autorizado COROS antes del 20 de abril de 2023. \n    \u2022 El reloj no puede tener la condici\xF3n de muestra, defectuoso, pr\xE9stamo, u otras consideradas inelegibles por COROS."
  }, {
    title: 'Duración',
    desc: "La solicitud de cr\xE9dito estar\xE1 abierta desde el 20 de abril  al 31 de mayo de 2023."
  }, {
    title: 'Detalles del crédito',
    desc: "<ul>\n      <li class=\"mb-15\">\n        Los cr\xE9ditos se emitir\xE1n en c\xF3digos promocionales para los sitios <a class=\"underline hover:underline\" href=\"https://coros.com\">\n        COROS.com\n      </a> designados.\n        Por ejemplo, si selecciona un c\xF3digo para la regi\xF3n de EE.UU., s\xF3lo podr\xE1 utilizarse para pedidos en <a class=\"underline hover:underline\" href=\"https://us.coros.com\">\n        us.COROS.com\n      </a>.\n        Una vez generado el c\xF3digo, este no podr\xE1 actualizarse. \n      </li>\n      <li>Cr\xE9dito para usuarios de APEX 2: 50 USD | 80 EUR | 70 GBP | 80 CAD</li>\n      <li>Cr\xE9dito para usuarios de APEX 2 Pro: 50 USD | 80 EUR | 50 GBP | 100 CAD</li>\n      <li>Cr\xE9dito para usuarios de APEX 2 Pro KJ: 50 USD | 50 EUR | 50 GBP | 100 CAD</li>\n      <li>\n      Sitios web: \n        <a class=\"underline hover:underline\" href=\"https://us.coros.com\">\n          US\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://es.coros.com\">\n          ES\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://fr.coros.com\">\n          FR\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://uk.coros.com\">\n          UK\n        </a> \n        | \n        <a class=\"underline hover:underline\" href=\"https://CA.coros.com\">\n          CA\n        </a>\n      </li>\n    </ul>"
  }, {
    title: 'Solicite y utilice su crédito',
    desc: "El c\xF3digo se enviar\xE1 al correo electr\xF3nico vinculado a su cuenta COROS. Si no utiliza el correo electr\xF3nico para iniciar sesi\xF3n en su App COROS, siga <a class=\"underline hover:underline\" href=\"https://support.coros.com/hc/es/articles/360046691111-C%C3%B3mo-actualizar-el-email-de-su-cuenta-COROS\" target=\"_blank\">estas instrucciones</a> para vincular el correo electr\xF3nico a su cuenta. Cada reloj tiene derecho a un c\xF3digo que caduca despu\xE9s de las 23:59, hora del Pac\xEDfico, del 31 de diciembre de 2023. "
  }, {
    title: 'Recibir ayuda',
    desc: "Si tuviera problemas para presentar la solicitud o recibir el cr\xE9dito, p\xF3ngase en contacto con support.es@coros.com para recibir ayuda. "
  }],
  applyForCredit: 'SOLICITAR EL CRÉDITO',
  watchId: "ID del reloj",
  watchIdTips: "\xBFNo puede encontrar el ID de su reloj?",
  watchModel: "Modelo de reloj",
  watchModelTIps: "\xBFNo sabe el modelo de su reloj?",
  region: "Seleccione su regi\xF3n",
  regionTips: "La selecci\xF3n de la regi\xF3n no se puede actualizar despu\xE9s de solicitar.",
  email: "Correo electr\xF3nico de su cuenta COROS",
  submit: 'ENVIAR',
  inputPlaceholder: 'Por favor, escríba',
  selectPlaceholder: 'Por favor, elija',
  emailTips: ['El correo electrónico que aparece a continuación está vinculado a su reloj según los registros del sistema.', 'Por motivos de seguridad, introduzca de nuevo su correo electrónico para continuar.'],
  watchIdGuide: {
    title: 'Puede ver el ID de 6 dígitos de su reloj APEX 2/2 Pro de 2 maneras.',
    descs: ["En la App COROS > p\xE1gina Dispositivo > pulse sobre su reloj > el ID est\xE1 en la parte superior de la p\xE1gina.", "En su reloj > Sistema > M\xE1s ajustes > Info Dispositivo > ID del dispositivo."]
  },
  watchModelGuide: {
    descs: ["En la aplicaci\xF3n COROS > p\xE1gina Dispositivo.", "Para los usuarios de APEX 2 Pro, compruebe el bisel y el color de la caja para determinar si se trata de la edici\xF3n KJ."]
  },
  'us': 'Estados Unidos',
  'fr': 'Francia',
  'es': 'España',
  'uk': 'Reino Unido',
  'ca': 'Canadá',
  'validOn': 'válido en',
  'shipToUs': ' - envíos a la mayoría de los países',
  'shipToFr': ' - envíos a Francia',
  'shipToEs': ' - envíos a Europa',
  'shipToUk': ' - envíos al Reino Unido',
  'shipToCa': ' - envíos a Canadá',
  afs: {
    loading: 'el proceso ...',
    slide: 'Deslice para continuar',
    success: "Puede proceder al siguiente paso.",
    error: 'Error de red. Por favor, inténtelo de nuevo.',
    fail: 'La verificación falló. Por favor, inténtelo de nuevo.'
  },
  confirmCredit: {
    title: "Por favor, verifique la siguiente informaci\xF3n. La aplicaci\xF3n no se puede actualizar despu\xE9s de enviarla.",
    confirm: 'Continuar',
    region: 'Selected Region & Website'
  },
  refreshAfterApplied: '¡Uy! Por favor, actualice esta página para iniciar una nueva solicitud. ',
  messageTitles: {
    failed: '¡Falló!',
    success: '¡Éxito!'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/carabiner.js
/* harmony default export */ const es_carabiner = ({
  name: 'Mosquetón VERTIX 2',
  pageTitle: 'EL NUEVO MOSQUETÓN PARA EL VERTIX 2',
  pageDesc: 'Diseñado para las exigencias de los escaladores expertos y listo para cualquiera que desee llevar su VERTIX 2 fuera de su muñeca, nuestro mosquetón de 2ª generación mantendrá su reloj al alcance de la mano cuando lo necesite.',
  desc: "Dise\xF1ado para las exigencias de los escaladores expertos y listo para cualquiera que desee llevar su VERTIX 2 fuera de su mu\xF1eca, nuestro mosquet\xF3n de 2\xAA generaci\xF3n mantendr\xE1 su reloj al alcance de la mano cuando lo necesite. Tanto si asciende por una ruta t\xE9cnica de escalada en roca como si practica senderismo en la naturaleza, el funcionamiento completo del seguimiento GPS seguir\xE1 funcionando a la perfecci\xF3n en el nuevo mosquet\xF3n. Si quiere seguir registrando sus datos de frecuencia cardiaca, el emparejamiento con cualquier monitor de frecuencia cardiaca externo har\xE1 que nunca pierda el ritmo.",
  keyFeatures: 'CARACTERÍSTICAS\nPRINCIPALES',
  features: [{
    title: 'Dispositivo de bloqueo',
    desc: "Asegura que el mosquet\xF3n no pueda abrirse accidentalmente."
  }, {
    title: 'Protección de los sensores',
    desc: "El cuerpo protege los sensores del reloj de ara\xF1azos."
  }, {
    title: 'Gatillo de liberación',
    desc: "F\xE1cil de accionar, pero dif\xEDcil de activar por error."
  }, {
    title: 'Tope del tornillo',
    desc: "Evita que el tornillo de bloqueo se apriete en exceso."
  }, {
    title: 'Bloqueo del gatillo',
    desc: "Seguridad a\xF1adida para impedir la liberaci\xF3n accidental del reloj."
  }, {
    title: 'Ligero y duradero',
    desc: "Materiales de alta calidad que pesan s\xF3lo 40 gramos."
  }],
  keyFeaturesDesc: "No est\xE1 dise\xF1ado como equipo de seguridad para escalada certificado por la UIAA.\n    No es adecuado para datos de detecci\xF3n de movimiento, como cadencia, recuentos de saltos de comba o repeticiones en entrenamientos de fuerza."
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pace2-2023.js
/* harmony default export */ const es_pace2_2023 = ({
  intro: {
    title: 'LIGERO DE PESO. \nCON MUCHAS PRESTACIONES.',
    desc: ['El COROS PACE 2 es el compañero de entrenamiento definitivo para atletas de todo tipo y nivel. Este reloj superligero incorpora funciones de entrenamiento de gran peso y una enorme autonomía de hasta 30 horas de funcionamiento GPS.', 'Pero cuando compra un PACE 2, también obtiene toda la solución de entrenamiento COROS. EvoLab convertirá sus datos en valiosas métricas y perspectivas procesables. El portal de escritorio COROS Training Hub proporciona funciones de análisis y gestión en profundidad. Nuestra potente aplicación complementaria le ofrece un control diario de su entrenamiento y sus dispositivos, y cuando necesite algún consejo personalizado, nuestro equipo de entrenadores COROS está a su disposición para ayudarle. Siga leyendo para ver cómo el PACE 2 puede ayudarle a ir más rápido y lejos.']
  },
  theLightestGpsWatch: {
    title: 'El reloj GPS \nmás ligero',
    desc: "Con algo menos de 30 gramos con la \n    correa de nailon COROS, podr\xE1 \n    centrarse en su entrenamiento, \n    no en la sensaci\xF3n de peso \n    en su mu\xF1eca.",
    descMobile: "Con algo menos de 30 \n    gramos con la correa de \n    nailon COROS, podr\xE1 \n    centrarse en su \n    entrenamiento, no \n    en la sensaci\xF3n \n    de peso en \n    su mu\xF1eca."
  },
  fingertipSimplicity: {
    title: 'Simplicidad con un solo dedo',
    desc: 'Diseñado para ser fácil e intuitivo de manejar, el dial de COROS le permite navegar por su reloj con un solo dedo.'
  },
  builtForTheLongHaul: {
    title: 'Construido para durar',
    desc: 'Utilice mucho su reloj y poco su cargador.',
    left: {
      upto: 'Hasta',
      num: '30',
      unit: 'horas',
      words: "de seguimiento de la actividad \n      con GPS completo, bar\xF3metro \n      y frecuencia cardiaca."
    },
    right: {
      upto: 'Hasta',
      num: '20',
      unit: 'días',
      words: "de uso regular con entrenamiento \n      semanal y seguimiento diario \n      del sue\xF1o y la recuperaci\xF3n."
    }
  },
  perfectForRunners: {
    title: 'Perfecto para corredores',
    desc: ['Vea su capacidad de carrera y céntrese en sus necesidades de entrenamiento con la prueba de nivel de estado de carrera integrado.', 'Evite el desfase de los datos causado por las derivas del GPS durante las curvas en la pista. Deje que COROS PACE 2 detecte automáticamente que se encuentra en una pista para garantizar la precisión del GPS y de los datos con el modo Pista. ', 'Emparéjelo con el COROS POD 2 para obtener métricas de carrera aún más avanzadas, como tiempo en el suelo,  equilibrio L/R,  altura  y ratio de zancada. Perfecto para situaciones sin GPS, obtenga una precisión de nivel superior para los datos que tanto le ha costado conseguir en cinta y pista cubierta.'],
    title2: 'MODO PISTA'
  },
  navigationMadeEasy: {
    title: 'La navegación más fácil',
    desc: 'Tanto si está explorando las calles de una nueva ciudad como buscando el camino de vuelta al aparcamiento, nuestras herramientas de navegación le ayudarán a crear nuevas rutas y a mantenerse en el camino correcto.'
  },
  nightMode: {
    title: 'Modo nocturno',
    desc: 'Facilite el trabajo de sus ojos cuando entrene en situaciones de poca luz sin que ello afecte a la duración de la batería.'
  },
  customizableActivityScreens: {
    title: 'Pantallas de actividades personalizables',
    desc: 'Personalice fácilmente el diseño de cada actividad y reciba alertas de actividad personalizadas para mantener el rumbo hacia sus objetivos.'
  },
  multisportActivityTracking: {
    title: 'Seguimiento actividades multideporte',
    desc: 'Desde nadar en aguas abiertas hasta saltar a la comba, nuestros modos de actividad están específicamente diseñados para proporcionar las métricas más precisas para su deporte.'
  },
  evoLabInsights: {
    title: 'PERSPECTIVAS EvoLab',
    desc: 'COROS EvoLab es nuestra plataforma patentada de ciencias del deporte. Transforma los datos recopilados por su COROS PACE 2 en información práctica para que pueda optimizar el entrenamiento y alcanzar sus objetivos deportivos.'
  },
  runningFitness: {
    title: 'Nivel de Estado de Carrera',
    desc: 'Cada corredor es diferente. Sus puntos fuertes y débiles también pueden cambiar durante el entrenamiento. Comprenda su rendimiento en las principales capacidades de carrera con indicaciones claras para mejorar.'
  },
  trainingStatus: {
    title: 'Estado de entrenamiento',
    desc: 'Una instantánea de su estado de forma para que pueda ver fácilmente si está mejorando o disminuyendo, y lo bien que está gestionando la fatiga.'
  },
  trainingLoad: {
    title: 'Carga de entrenamiento',
    desc: 'Supervise el volumen y la intensidad de su actividad para asegurarse de que no está entrenando por encima o por debajo de sus posibilidades.'
  },
  recoveryTimer: {
    title: 'Temporizador de recuperación',
    desc: 'Evite lesiones y cuide su cuerpo con la tendencia de recuperación a largo plazo y una recomendación de tiempo de recuperación.'
  },
  racePredictor: {
    title: 'Predictor de carrera',
    desc: 'Vea lo rápido que puede correr en las condiciones ambientales actuales, desde 5K hasta un maratón.'
  },
  advancedTrainingTools: 'HERRAMIENTAS DE ENTRENAMIENTO AVANZADAS',
  trainingHub: {
    title: 'Training Hub',
    desc: 'Un portal de escritorio diseñado para ayudar a los atletas a realizar un seguimiento de los datos de rendimiento, llevar a cabo análisis en profundidad, gestionar y programar los entrenamientos y facilitar las comunicaciones con sus entrenadores.'
  },
  corosCoaches: {
    title: 'Entrenadores COROS',
    desc: '¿Necesita ayuda o consejo para entrenar? Obtenga ayuda gratuita 1 a 1 de nuestro equipo de entrenadores cualificados basada en sus datos de entrenamiento.'
  },
  evenMoreFeatures: 'AÚN MÁS FUNCIONES',
  enhancedSleepMonitoring: {
    title: 'Monitorización del sueño mejorada',
    desc: 'Tener suficiente sueño de alta calidad es esencial para un entrenamiento óptimo. Un desglose detallado de sus etapas de sueño facilita la comprensión de si está descansando bien por la noche.'
  },
  flexibleTrainingCalendar: {
    title: 'Calendario de entrenamiento flexible',
    desc: 'Tome el control de su calendario de entrenamiento para no desviarse de sus objetivos sincronizando y siguiendo su calendario sobre la marcha, directamente desde su muñeca.'
  },
  personalizedWorkoutBuilder: {
    title: 'Creadror de entrenamientos personalizados',
    desc: 'Elija entre carrera, bicicleta, piscina o fuerza, y cree su entrenamiento con intensidad e intervalos personalizados.'
  },
  preDesignedWorkoutsPlans: {
    title: 'Planes y entrenamientos prediseñados',
    desc: 'Descargue planes de entrenamiento y sesiones de ejercicio gratuitas creadas por atletas de élite y sus entrenadores. Impórtelos fácilmente a su reloj y aprenda de los profesionales.'
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/stories.js
/* harmony default export */ const es_stories = ({
  homeTitle: 'Historias de COROS',
  homeDesc: 'Descubra ideas de entrenamiento, consejos, historias y métricas de atletas élite y entrenadores que le ayudarán a optimizar el entrenamiento y alcanzar sus objetivos deportivos con COROS.',
  viewAllStories: 'TODAS LAS HISTORIAS',
  learnMore: 'SABER MÁS',
  searchCorosStories: 'BUSCAR HISTORIAS DE COROS',
  search: 'BUSCAR',
  viewMoreStories: 'VER MAS HISTORIAS',
  shareThisStory: 'Compartir esta historia',
  by: 'Por',
  minRead: '{0} min de lectura',
  resultsFound: '{0} resultados'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/hrm.js
/* harmony default export */ const es_hrm = ({
  share: 'Monitor de frecuencia cardiaca COROS',
  shareText: 'Precisión de datos desde la comodidad de su brazo.',
  menu: 'Pulsómetro COROS',
  homeWatch: 'Pulsómetro COROS',
  homeWatchDesc: 'Precisión de datos desde la comodidad de su brazo',
  precise: 'DATOS PRECISOS.\nCOMODIDAD TOTAL.',
  intro: "Compatible con cualquier dispositivo Bluetooth que permita monitorizar la frecuencia cardiaca, el puls\xF3metro COROS ofrece m\xE1s de 38 horas de monitorizaci\xF3n continua y precisa de la frecuencia cardiaca para realizar un seguimiento de tus entrenamientos con total comodidad \n    y sin distracciones.",
  intro_mobile: 'Compatible con cualquier dispositivo Bluetooth que permita monitorizar la frecuencia cardiaca, el pulsómetro COROS ofrece más de 38 horas de monitorización continua y precisa de la frecuencia cardiaca para realizar un seguimiento de tus entrenamientos con total comodidad y sin distracciones.',
  easyToWear: 'FÁCIL DE LLEVAR.\nNADA QUE DISTRAIGA.',
  sleek: 'Elegante y cómoda',
  sleekText: 'Más fácil de llevar que una banda pectoral, nuestra banda de tejido suave se coloca plana alrededor del brazo y se mantiene en su sitio gracias a su superficie texturizada. El diseño de perfil bajo evita que se enganche en la ropa o en los aparatos del gimnasio, lo que te permite olvidarte de que la llevas puesta.',
  flexible: 'Ajuste flexible',
  flexibleText: 'Ajuste la colocación y la tensión perfecta de la resistente banda elástica para su brazo simplemente deslizando la hebilla hasta que quede ajustada. El cierre de velcro seguro le permite retirar rápidamente el sensor para lavar fácilmente la banda.',
  accuracy: 'DISEÑADO PARA SER PRECISO. \nHECHO PARA DURAR.',
  sensor: 'Sensor avanzado',
  sensorText: 'Nuestro sensor óptico multicanal de última generación proporciona una alta calidad de señal. Alojado en un cuerpo resistente pero elegante y protegido bajo una cubierta resistente a los arañazos, nuestro avanzado sensor proporcionará datos de frecuencia cardiaca fiables y precisos durante años.',
  band: 'Banda superior',
  bandText: 'Los sensores ópticos de frecuencia cardiaca funcionan mejor cuando se sujetan firmemente contra la piel. Nuestra banda está diseñada para que el sensor se coloque pegada al brazo y evitar que entre luz externa para mantener la calidad de la señal fuerte, independientemente de tu actividad.',
  noButtons: 'SIN BOTONES.\nSIN COMPLICACIONES.',
  power: 'Energía duradera',
  powerText: 'Con 38 horas de funcionamiento completo u 80 días en espera con una sola carga, el pulsómetro COROS está hecho para resistir. Vea el nivel de batería directamente en su reloj COROS o en la aplicación, y un sencillo indicador LED en el dispositivo también le avisará cuando llegue el momento de cargarlo.',
  detection: 'Detección de uso',
  detectionText: 'Gracias a la detección de uso integrada, el pulsómetro COROS se enciende y apaga automáticamente en función del momento en que se lleva puesto. Esto le permite conectarse automáticamente a sus dispositivos emparejados cada vez que empieza a entrenar.',
  connections: 'Múltiples conexiones',
  connectionsText: 'Diseñado para funcionar a la perfección con tus relojes COROS favoritos y con la app, también puede emparejarse simultáneamente con hasta tres dispositivos, incluidos relojes que no sean COROS y otros maquinas de interior compatibles con Bluetooth, ciclocomputadores y mucho más.',
  why: '¿Por qué el brazo?',
  whyText: 'Los sensores ópticos de frecuencia cardiaca utilizan la luz para medir el flujo sanguíneo en los capilares situados bajo la piel. La parte superior de la muñeca es un lugar ideal para un reloj, pero la falta de tejido profundo hace que sea un lugar difícil incluso para los mejores sensores. Llevarlo en el brazo ofrece a nuestro sensor óptico una cantidad óptima de flujo sanguíneo para recopilar datos de frecuencia cardiaca con una precisión equivalente a la de una correa pectoral tradicional.',
  box: 'QUÉ CONTIENE LA CAJA'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/chamonix.js
/* harmony default export */ const es_chamonix = ({
  menuTitle: 'COROS en Chamonix',
  shareTitle: 'COROS en Chamonix | 28 de agosto - 3 de septiembre',
  shareDesc: 'Únase a COROS en Chamonix para disfrutar de una semana repleta de eventos exclusivos con nuestros atletas profesionales, o visite nuestro stand en la Ultra-Trail Village Expo para conocer nuestras últimas novedades.',
  bannerTitle: 'COROS EN CHAMONIX',
  bannerTitleText: '28 de agosto - 3 de septiembre',
  intro: 'Si vienes a Chamonix para correr o asistir al mayor evento de trail del año, COROS te invita a participar en una semana repleta de eventos exclusivos en los que podrás codearte con algunos de nuestros mejores atletas élite. Inscríbete a continuación para reservar plaza, o visitanos en el stand en la Expo Ultra-Trail Village para inscribirte en persona y descubrir nuestra última edición limitada APEX 2 Pro.',
  scheduleTitle: 'AGENDA',
  scheduleDesc: 'La mayoría de nuestros actos tendrán lugar en el hotel La Folie Douce, cerca de la línea de meta. Las plazas son limitadas, así que ¡reserva tu plaza hoy mismo!',
  scheduleDescLink: 'hotel La Folie Douce',
  courseTitle: 'ARCHIVOS GPX DEL RECORRIDO',
  courseDesc: '¿Va a correr en Chamonix? Descargue el archivo GPX en su reloj COROS para orientarse fácilmente.',
  openWithCorosApp: 'Abrir con la App COROS',
  downloadGpxFile: 'Descargar el archivo GPX',
  boothTitle: 'VISITE EL STAND DE COROS',
  boothDesc: 'Consulte a un miembro del equipo COROS que podrá responder a sus preguntas más técnicas, y descubra o compre uno de nuestros relojes diseñados para la montaña, incluida nuestra nueva edición limitada APEX 2 Pro.',
  whoTitle: '¿QUIÉN COMPITE?',
  whoDesc: 'COROS se enorgullece de patrocinar a atletas de todo el mundo que competirán en Chamonix.',
  register: 'APUNTARSE'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/chamonix_edition.js
/* harmony default export */ const es_chamonix_edition = ({
  shareTitle: 'COROS APEX 2 Pro Reloj GPS Outdoor Edición Chamonix',
  shareDesc: 'Para atletas al aire libre que entrenan duro y se mueven rápido.',
  productName: 'COROS APEX 2 Pro Chamonix',
  mobileProductName: 'COROS APEX 2 Pro Chamonix',
  title: 'APEX 2 Pro\nEDICIÓN CHAMONIX',
  intro: 'Si aspiras a entrenar duro y moverte rápido al aire libre, no hay lugar más emblemático que Chamonix. El hogar espiritual del trail running y puerta de entrada al terreno épico del Mont-Blanc, esta edición especial deL APEX 2 Pro homenajea uno de los mejores lugares del mundo para entrenar y practicar trail.',
  introMobile: 'Si aspiras a entrenar duro y moverte rápido al aire libre, no hay lugar más emblemático que Chamonix. El hogar espiritual del trail running y puerta de entrada al terreno épico del Mont-Blanc, esta edición especial deL APEX 2 Pro homenajea uno de los mejores lugares del mundo para entrenar y practicar trail.',
  limited: 'EDICIÓN LIMITADA',
  limitedText: 'Solo 3000 para todo el mundo',
  alpine: 'INSPIRADO EN COLORES ALPINOS',
  alpineText: 'La altitud de la alta montaña dista mucho del verde de las laderas más bajas, dejando el cielo azul penetrante con el gris de la roca encontrándose con el glaciar',
  alpineMobile: 'INSPIRADO EN COLORES ALPINOS',
  alpineMobileText: 'La altitud de la alta montaña dista mucho del verde de las laderas más bajas, dejando el cielo azul penetrante con el gris de la roca encontrándose con el glaciar',
  mont: 'PROBADO EN EL \nMONT-BLANC',
  montText: 'Los usuarios de COROS han registrado más de 1 millón de metros de ascenso vertical en actividades desde Chamonix. Equipado con nuestra tecnología de última generación, funciones innovadoras y la extraordinaria duración de la batería, puede estar seguro de que el APEX 2 Pro no le defraudará.',
  montMobile: 'PROBADO EN EL \nMONT-BLANC',
  montMobileText: 'Los usuarios de COROS han registrado más de 1 millón de metros de ascenso vertical en actividades desde Chamonix. Equipado con nuestra tecnología de última generación, funciones innovadoras y la extraordinaria duración de la batería, puede estar seguro de que el APEX 2 Pro no le defraudará.',
  reach: 'ALCANZA TODAS LAS CUMBRES',
  reachText: 'Diseñado para rendir en todo tipo de terrenos, el APEX 2 Pro está fabricado con tecnologías revolucionarias para tus objetivos más ambiciosos. Con un exterior duradero, una antena rediseñada, un sensor óptico de última generación y una batería de mayor duración, podrás ir rápido y lejos.',
  reachMobile: 'ALCANZA TODAS LAS CUMBRES',
  reachMobileText: 'Diseñado para rendir en todo tipo de terrenos, el APEX 2 Pro está fabricado con tecnologías revolucionarias para tus objetivos más ambiciosos. Con un exterior duradero, una antena rediseñada, un sensor óptico de última generación y una batería de mayor duración, podrás ir rápido y lejos.',
  noMatter: 'PASE LO QUE PASE,\nESTARÁS PREPARADO',
  noMatterText: 'La belleza de la naturaleza también conlleva riesgos. El tiempo tormentoso, el mal de altura, la oscuridad, la deshidratación... son todas realidades potenciales del trekking por las montañas. El APEX 2 Pro Chamonix Edition te prepara para cualquier situación, para que puedas mantenerte seguro e informado \nmientras alcanzas la cumbre.',
  noMatterMobile: 'PASE LO QUE PASE,\nESTARÁS PREPARADO',
  noMatterMobileText: 'La belleza de la naturaleza también conlleva riesgos. El tiempo tormentoso, el mal de altura, la oscuridad, la deshidratación... son todas realidades potenciales del trekking por las montañas. El APEX 2 Pro Chamonix Edition te prepara para cualquier situación, para que puedas mantenerte seguro e informado mientras alcanzas la cumbre.',
  findYour: 'ENCUENTRA TU CAMINO',
  findYourText: 'Con la cartografía global sin conexión de COROS, los puntos de control, la planificación de rutas y mucho más, podrás acceder con confianza a información de navegación fundamental en los lugares más remotos. El dial del APEX 2 Pro Chamonix Edition facilita el hacer zoom en el mapa, mientras que la pantalla táctil permite arrastrar el mapa con el dedo.',
  findYourMobile: 'ENCUENTRA TU CAMINO',
  findYourMobileText: 'Con la cartografía global sin conexión de COROS, los puntos de control, la planificación de rutas y mucho más, podrás acceder con confianza a información de navegación fundamental en los lugares más remotos. El dial del APEX 2 Pro Chamonix Edition facilita el hacer zoom en el mapa, mientras que la pantalla táctil permite arrastrar el mapa con el dedo.',
  box: 'QUÉ HAY EN LA CAJA',
  cable: 'Cable de carga',
  nylonWatchBand: 'Correa de nylon para el reloj',
  shopAllColors: 'Compra todos los colores',
  recommandedProduct: 'Elija accesorios Chamonix'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pace3.js
/* harmony default export */ const es_pace3 = ({
  productName: 'COROS PACE 3 RELOJ DEPORTIVO GPS',
  productNameShort: 'COROS PACE 3',
  valencia_productNameShort: 'COROS PACE 3 Valencia',
  trainingPlansAndWorkoutsLinks1WordPc: 'planes de\nentrenamiento',
  intro: 'EL INDISCUTIBLE\nCAMPEÓN DE \nPESO LIGERO',
  introText: 'El PACE 3 mejora en todos los aspectos a su legendario predecesor y ofrece\nuna potencia aún mayor. Realiza un seguimiento de tu entrenamiento y\nrecuperación con un reloj ligero y cómodo, con tecnología avanzada, una\nprecisión de datos excepcional y respaldado por el sistema de software de\nentrenamiento COROS líder del sector. El COROS PACE 3 allana el camino\npara descubrir tu potencial.',
  goTheDistance: 'LLEGAR HASTA EL FINAL,\nY MÁS ALLÁ',
  goTheDistanceText: 'Diseñado para mejorar la capacidad de la batería, PACE 3 maximiza el tiempo en la muñeca y minimiza el tiempo de carga.',
  batteryAfter: 'BATERÍA TRAS 10 HORAS \nDE USO DEL GPS',
  batteryAfterFootnote: 'GPS',
  t247Comfort: 'COMODIDAD\n24/7',
  t247ComfortText: 'Superligero y con un cuerpo estilizado, el PACE 3 está hecho para llevarlo todo el día y toda la noche con total comodidad y sin molestias.',
  followYourOwnPath: 'SIGUE TU PROPIO CAMINO',
  followYourOwnPathText: 'Ve más allá de la zona en la que corres con confianza gracias a un conjunto de potentes herramientas que incluyen la navegación giro a giro.',
  nextGenerationGps: 'GPS DE NUEVA\nGENERACIÓN',
  nextGenerationGpsText: 'Un chipset de satélite rediseñado con doble frecuencia\nopcional mantendrá la precisión de los datos GPS,\nincluso en ciudades con grandes alturas como\nBarcelona y Nueva York.',
  lookGood: 'LUCIR  Y SENTIRSE BIEN, HAGAS LO QUE HAGAS',
  lookGoodText: 'Cada muñeca es única y cada persona tiene necesidades diferentes, por eso el PACE 3 ofrece la posibilidad de elegir entre correas de silicona y nailon de gran calidad y estilo. Elige la que más te convenga o compra alguna más para cambiar de look.',
  lookGoodFeatures1: ['SILICONA', 'SECADO RÁPIDO', 'MANTENIMIENTO SENCILLO', 'DURABILIDAD'],
  lookGoodFeatures2: ['NAILON', 'TRANSPIRABILIDAD', 'LIGEREZA', 'COMODIDAD'],
  accurateActivityModes: 'INFINIDAD DE MODOS DE ACTIVIDAD',
  accurateActivityModesText: 'Correr, pedalear, nadar, fuerza y deportes de nieve.\nEl PACE 3 ofrece una amplia gama de modos de\nactividad optimizados para una medición precisa.',
  routePlanningMadeEasy: 'PLANIFICAR LA RUTA CON FACILIDAD',
  routePlanningMadeEasyText: 'Crea fácilmente rutas personalizadas o busca un destino y sincronízalo al instante con el PACE 3 en la página Explorar de la app COROS.',
  neverMissABeat: 'NO PIERDAS NI UN LATIDO',
  neverMissABeatText: "Desde el seguimiento del sue\xF1o, SpO2 y la intensidad del entrenamiento, nuestro sensor\n\xF3ptico de frecuencia card\xEDaca de \xFAltima generaci\xF3n te proporcionar\xE1 las mediciones\nm\xE1s precisas posibles desde la mu\xF1eca.",
  neverMissABeatFeatures: ['5 LEDs', '4 FOTODETECTORES', 'CRISTAL DE SEGURIDAD', 'PULSIOXÍMETRO ÓPTICO'],
  trainingDoesntEndAtBedtime: 'EL ENTRENAMIENTO NO TERMINA A LA HORA DE ACOSTARSE',
  trainingDoesntEndAtBedtimeText: 'Con una comodidad 24/7, sensores precisos y una duración de la batería épica, el PACE 3 proporciona datos detallados sobre la recuperación del sueño noche tras noche.',
  trainingDoesntEndAtBedtimeFeatures: 'MEDICIÓN DEL SUEÑO, DESPIERTO,\nREM, LIGERO Y PROFUNDO',
  trainingDoesntEndAtBedtimeFeatures2: "CALCULA TU FRECUENCIA\nCARDIACA EN REPOSO",
  alwaysSeeTheBrightSide: 'VERLO SIEMPRE BRILLANTE',
  alwaysSeeTheBrightSideFeatures: ['PANTALLA TRANSFLECTIVA PARA MEJORAR\nLA VISIBILIDAD A PLENA LUZ DEL SOL', '\nPANTALLA DE CRISTAL MINERAL \nSIEMPRE ACTIVA DE 1,2"', 'PANTALLA TÁCTIL PARA UN \nMANEJO INTUITIVO', 'MODO NOCTURNO PARA FACILITAR LA \nLECTURA, INCLUSO EN LA OSCURIDAD'],
  sweatSwimShower: 'SUDAR\nNADAR\nDUCHARSE',
  sweatSwimShowerText: 'Mojarse no es un problema para el PACE 3\ncon una resistencia al agua de hasta 5 ATM.',
  moreThanAWatch: 'MUCHO MÁS QUE \nUN RELOJ',
  moreThanAWatchText: "Cuando adquieres un PACE 3, tambi\xE9n obtienes todo el sistema de\nentrenamiento COROS sin coste adicional.",
  trainingPlansAndWorkouts: 'PLANES DE\nENTRENAMIENTO\nY RUTINAS',
  trainingPlansAndWorkoutsText: 'De un 5k a un Ultra. Descarga gratis planes de\nentrenamiento y rutinas que te ayudarán a alcanzar\ntus objetivos.',
  corosCoaches: 'ENTRENADORES COROS',
  corosCoachesText: 'Entrenadores de verdad. Asesoramiento real. Recibe\norientación personalizada de nuestro equipo de expertos.',
  trainingHub: 'TRAINING HUB',
  trainingHubText: 'Herramienta avanzada de análisis del entrenamiento y\ncomunicación directa con tu entrenador. Con la garantía\ndel NN Running Team.',
  beyondYourTraining: 'MÁS ALLÁ DE TU ENTRENAMIENTO',
  beyondYourTrainingText: 'Sincronízalo directamente con tus aplicaciones de salud y fitness favoritas, como Strava, Nike Run Club, Apple Health y Health Connect. Mantente conectado viendo los mensajes de texto y las llamadas entrantes, o utiliza Buscar Teléfono para localizar tu dispositivo extraviado, y controla tus cámaras GoPro e Insta360 directamente desde tu muñeca.',
  whatsInTheBox: 'QUÉ HAY EN LA CAJA',
  chargingCable: 'Cable de carga',
  watchBand: 'Correa del reloj',
  shareTitle: 'Reloj Deportivo GPS COROS PACE 3',
  shareDesc: 'Para atletas multideporte que entrenan duro y se mueven rápido.',
  homeProductPageDesc: 'Para atletas multideporte que\nentrenan duro y se mueven rápido',
  watchInfoHeader: 'RELOJ DEPORTIVO GPS',
  weight: 'Peso (con banda de nylon)',
  width: 'Ancho',
  inStandardGpsMode: '*GPS estándar completo',
  trainingPlansAndWorkoutsLinks1Word: 'planes de entrenamiento',
  trainingPlansAndWorkoutsLinks2Word: 'rutinas',
  corosCoachesLinksWord: 'nuestro equipo de expertos',
  trainingPlansAndWorkoutsLinks1Link: 'https://es.coros.com/plans',
  trainingPlansAndWorkoutsLinks2Link: 'https://es.coros.com/workouts',
  corosCoachesLinksLink: 'https://us.coros.com/stories/coros-coaches/c/coros-coaches-your-personal-training-support',
  mobile_intro: 'EL INDISCUTIBLE CAMPEÓN DE PESO LIGERO',
  mobile_introText: 'El PACE 3 mejora en todos los aspectos a su legendario predecesor y ofrece una potencia aún mayor. Realiza un seguimiento de tu entrenamiento y recuperación con un reloj ligero y cómodo, con tecnología avanzada, una precisión de datos excepcional y respaldado por el sistema de software de entrenamiento COROS líder del sector. El COROS PACE 3 allana el camino para descubrir tu potencial.',
  mobile_goTheDistance: 'LLEGAR HASTA EL FINAL,\nY MÁS ALLÁ',
  mobile_goTheDistanceText: 'Diseñado para mejorar la capacidad de la batería, PACE 3 maximiza el tiempo en la muñeca y minimiza el tiempo de carga.',
  mobile_batteryAfter: 'BATERÍA TRAS 10 HORAS\nDE USO DEL GPS',
  mobile_batteryAfterFootnote: 'GPS',
  mobile_t247Comfort: 'COMODIDAD\n24/7',
  mobile_t247ComfortText: 'Superligero y con un cuerpo estilizado, el PACE 3 está hecho para llevarlo todo el día y toda la noche con total comodidad y sin molestias.',
  mobile_followYourOwnPath: 'SIGUE TU PROPIO CAMINO',
  mobile_followYourOwnPathText: 'Ve más allá de la zona en la que corres con confianza gracias a un conjunto de potentes herramientas que incluyen la navegación giro a giro.',
  mobile_nextGenerationGps: 'GPS DE NUEVA GENERACIÓN',
  mobile_nextGenerationGpsText: 'Un chipset de satélite rediseñado con doble frecuencia opcional mantendrá la precisión de los datos GPS, incluso en ciudades con grandes alturas como Barcelona y Nueva York.',
  mobile_lookGood: 'LUCIR  Y SENTIRSE BIEN, HAGAS LO QUE HAGAS',
  mobile_lookGoodText: 'Cada muñeca es única y cada persona tiene necesidades diferentes, por eso el PACE 3 ofrece la posibilidad de elegir entre correas de silicona y nailon de gran calidad y estilo. Elige la que más te convenga o compra alguna más para cambiar de look.',
  mobile_lookGoodFeatures1: ['SILICONA', 'SECADO RÁPIDO', 'MANTENIMIENTO SENCILLO', 'DURABILIDAD'],
  mobile_lookGoodFeatures2: ['NAILON', 'TRANSPIRABILIDAD', 'LIGEREZA', 'COMODIDAD'],
  mobile_accurateActivityModes: 'EXTENSIVA MODOS\nDE ACTIVIDAD',
  mobile_accurateActivityModesText: 'Correr, pedalear, nadar, fuerza y deportes de nieve. El PACE 3 ofrece una amplia gama de modos de actividad optimizados para una medición precisa.',
  mobile_routePlanningMadeEasy: 'PLANIFICAR LA RUTA\nCON FACILIDAD',
  mobile_routePlanningMadeEasyText: 'Cree fácilmente rutas personalizadas o busque un destino y sincronícelo al instante con el PACE 3 en la página Explorar de la App COROS.',
  mobile_neverMissABeat: 'NO PIERDAS NI UN LATIDO',
  mobile_neverMissABeatText: 'Desde el seguimiento del sueño, SpO2 y la intensidad del entrenamiento, nuestro sensor óptico de frecuencia cardíaca de última generación le proporcionará las mediciones más precisas posibles desde la muñeca.',
  mobile_neverMissABeatFeatures: ['5 LEDs', '4 FOTODETECTORES', 'CRISTAL DE SEGURIDAD', 'PULSIOXÍMETRO ÓPTICO'],
  mobile_trainingDoesntEndAtBedtime: 'EL ENTRENAMIENTO NO TERMINA A LA HORA DE ACOSTARSE',
  mobile_trainingDoesntEndAtBedtimeText: 'Con una comodidad 24/7, sensores precisos y una\nduración de la batería épica, el PACE 3 proporciona\ndatos detallados sobre la\nrecuperación del sueño\nnoche tras noche.',
  mobile_trainingDoesntEndAtBedtimeFeatures: 'MEDICIÓN DEL SUEÑO, DESPIERTO,\nREM, LIGERO Y PROFUNDO',
  mobile_trainingDoesntEndAtBedtimeFeatures2: 'CALCULA SU FRECUENCIA\nCARDIACA EN REPOSO',
  mobile_alwaysSeeTheBrightSide: 'VERLO SIEMPRE BRILLANTE',
  mobile_alwaysSeeTheBrightSideFeatures: ['PANTALLA TRANSFLECTIVA PARA MEJORAR\nLA VISIBILIDAD A PLENA LUZ DEL SOL', 'PANTALLA DE CRISTAL MINERAL \nSIEMPRE ACTIVA DE 1,2"', 'PANTALLA TÁCTIL PARA UN \nMANEJO INTUITIVO', 'MODO NOCTURNO PARA FACILITAR LA \nLECTURA, INCLUSO EN LA OSCURIDAD'],
  mobile_sweatSwimShower: 'SUDAR, NADAR, DUCHARSE',
  mobile_sweatSwimShowerText: 'Mojarse no es un problema para el PACE 3 con una resistencia al agua de hasta 5 ATM.',
  mobile_moreThanAWatch: 'MUCHO MÁS QUE UN RELOJ',
  mobile_moreThanAWatchText: 'Cuando adquiere un PACE 3, también obtiene todo el sistema de entrenamiento COROS sin coste adicional.',
  mobile_trainingPlansAndWorkouts: 'PLANES DE ENTRENAMIENTO Y RUTINAS',
  mobile_trainingPlansAndWorkoutsText: 'De un 5k a un Ultra. Descarga gratis planes de entrenamiento y rutinas que te ayudarán a alcanzar\ntus objetivos.',
  mobile_corosCoaches: 'ENTRENADORES COROS',
  mobile_corosCoachesText: 'Entrenadores de verdad. Asesoramiento real. Recibe\norientación personalizada de nuestro equipo de expertos.',
  mobile_trainingHub: 'TRAINING HUB',
  mobile_trainingHubText: 'Herramienta avanzada de análisis del entrenamiento y comunicación directa con tu entrenador. Con la garantía del NN Running Team.',
  mobile_beyondYourTraining: 'MÁS ALLÁ DE TU ENTRENAMIENTO',
  mobile_beyondYourTrainingText: 'Sincronízalo directamente con tus aplicaciones de salud y fitness favoritas, como Strava, Nike Run Club, Apple Health y Health Connect. Mantente conectado viendo los mensajes de texto y las llamadas entrantes, o utiliza Buscar Teléfono para localizar tu dispositivo extraviado, y controla tus cámaras GoPro e Insta360 directamente desde tu muñeca.',
  mobile_weight: 'Peso',
  mobile_width: 'Ancho',
  mobile_inStandardGpsMode: '*GPS estándar completo'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pace3_ek.js
/* harmony default export */ const es_pace3_ek = ({
  introText: 'No hay mejor corredor ni mejor embajador del atletismo que Eliud Kipchoge. Su palmarés es únicn y ha \nsentado las bases para todos los que le siguen. Con esta edición limitada de nuestro galardonado \nCOROS PACE 3, celebramos su leyenda, su legado y su sueño.',
  dream: 'EL SUEÑO DE ELIUD',
  dreamText: 'No importa lo rápido que seas, Eliud cree que \ncorrer es una fuerza para el bien. Más allá de \nlos beneficios obvios de mejorar nuestra salud \ny bienestar, correr tiene el poder de enriquecer \nnuestras vidas y unirnos más. Así que, estés \ndonde estés, elegir vivir UN MUNDO PARA \nCORRER es elegir hacer un mundo mejor.',
  words: ['Un mundo que corre es un mundo sano. ', 'Un mundo que corre es un mundo rico. ', 'Un mundo que corre es un mundo pacífico. ', 'Un mundo que corre es un mundo alegre.', 'Mi sueño es hacer de este mundo un mundo de corredores.'],
  inspiredByHome: 'INSPIRADO EN EL HOGAR',
  inspiredByHomeText: 'Con colores que reflejan su bandera nacional y un diseño que se hace eco de los estampados geométricos tradicionales de Kenia, rendimos homenaje al lugar donde Eliud entrena y al que siempre llamará su casa.',
  trainLikeAPro: 'ENTRENA COMO \nUN PRO',
  trainLikeAProText: 'Con el COROS PACE 3 Edición Eliud \nKipchoge, también conseguirás toda la \nsolución de entrenamiento COROS sin \ncoste adicional. Descubre cómo COROS \nayuda a atletas de élite como Eliud a \nbatir récords mundiales con funciones \ndetalladas, especificaciones de \nhardware y compre más colores del \nCOROS PACE 3 a continuación.',
  clickToLearnMore: 'Haga clic para saber más sobre el COROS PACE 3',
  yourBestTrainingPartner: 'TU MEJOR COMPAÑERO DE ENTRENAMIENTO',
  iconsText: ['Ultraligero', 'Batería de larga duración', 'GPS preciso', 'Amplios modos de actividad', 'Sensores avanzados', 'Soporte de entrenamiento completo'],
  limitedRelease: 'EDICIÓN LIMITADA',
  limitedReleaseText: 'La producción del COROS PACE 3 Edición Eliud Kipchoge será limitada a nivel mundial. Así que, como \nél mismo, más vale que seas rápido si quieres tener un pedazo de historia en tu muñeca.',
  mobile_introText: 'No hay mejor corredor ni mejor embajador \ndel atletismo que Eliud Kipchoge. Su palmarés es \núnicn y ha sentado las bases para todos los que \nle siguen. Con esta edición limitada de nuestro \ngalardonado COROS PACE 3, celebramos su \nleyenda, su legado y su sueño.',
  mobile_dream: 'EL SUEÑO DE ELIUD',
  mobile_dreamText: 'No importa lo rápido que seas, Eliud cree que \ncorrer es una fuerza para el bien. Más allá de \nlos beneficios obvios de mejorar nuestra salud \ny bienestar, correr tiene el poder de enriquecer \nnuestras vidas y unirnos más. Así que, estés \ndonde estés, elegir vivir UN MUNDO PARA \nCORRER es elegir hacer un mundo mejor.',
  mobile_words: ['Un mundo que corre es un mundo sano. ', 'Un mundo que corre es un mundo rico. ', 'Un mundo que corre es un mundo pacífico. ', 'Un mundo que corre es un mundo alegre.', 'Mi sueño es hacer de este mundo un mundo de corredores.'],
  mobile_inspiredByHome: 'INSPIRADO EN EL HOGAR',
  mobile_inspiredByHomeText: 'Con colores que reflejan su bandera nacional y \nun diseño que se hace eco de los estampados \ngeométricos tradicionales de Kenia, rendimos \nhomenaje al lugar donde Eliud entrena y \nal que siempre llamará su casa.',
  mobile_trainLikeAPro: 'ENTRENA COMO UN PRO',
  mobile_trainLikeAProText: 'Con el COROS PACE 3 Edición EK, también conseguirás toda la solución de entrenamiento COROS sin coste adicional. Descubre cómo COROS ayuda a atletas de élite como Eliud a batir récords mundiales con funciones detalladas, especificaciones de hardware y compre más colores del COROS PACE 3 a continuación.',
  mobile_clickToLearnMore: 'Haga clic para saber más sobre el COROS PACE 3',
  mobile_yourBestTrainingPartner: 'TU MEJOR COMPAÑERO DE ENTRENAMIENTO',
  mobile_iconsText: ['Ultraligero', 'Batería de larga duración', 'GPS preciso', 'Amplios modos de actividad', 'Sensores avanzados', 'Soporte de entrenamiento completo'],
  mobile_limitedRelease: 'EDICIÓN LIMITADA',
  mobile_limitedReleaseText: 'La producción del COROS PACE 3 Edición Eliud \nKipchoge será limitada a nivel mundial. Así que, \ncomo él mismo, más vale que seas rápido si \nquieres tener un pedazo de historia en tu muñeca.',
  shareTitle: 'COROS PACE 3 Reloj Deportivo GPS Edición Eliud Kipchoge',
  shareDesc: 'Para atletas multideporte que entrenan duro y se mueven rápido.',
  productNameShort: 'COROS PACE 3 EK',
  productMenuTitle: 'COROS PACE 3 Edición Eliud Kipchoge'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/pod2_2024.js
/* harmony default export */ const es_pod2_2024 = ({
  intro: 'CORRE MÁS ALLÁ DE LOS LÍMITES DEL GPS',
  introText: 'El COROS POD 2 es un sensor ligero y resistente al agua que \nproporciona datos de carrera de otro nivel directamente a \npartir de los movimientos de tu pie o cuerpo. Se conecta a tu \nreloj COROS para proporcionar métricas en tiempo real, \ninformación posterior a la carrera y análisis de la forma de \ncorrer, para que dispongas de la mejor información durante y \ndespués de la carrera.',
  allAboutAccuracy: 'PRECISIÓN SOBRE TODO',
  allAboutAccuracyText: 'El COROS POD 2 resuelve los problemas más comunes de la tecnología GPS, como el retraso de datos, la señal débil y la \nimprecisión en interiores. Al seguir el movimiento directamente desde tu pie, el COROS POD 2 mejora la precisión \ny la sensibilidad al ritmo para seguir con exactitud tu rendimiento en cualquier situación.',
  sensitiveInstantPace: 'Ritmo instantáneo sensible.',
  sensitiveInstantPaceText: 'Los entrenamientos por intervalos son más eficaces con datos de ritmo instantáneos, pero las señales de los GPS pueden sufrir un retraso de hasta 10 segundos. El COROS POD 2 transmite datos de ritmo precisos directamente desde tu pie, por lo que la función Alerta de ritmo de tu reloj COROS puede ayudarte a mantenerte con precisión en tu zona de ritmo objetivo.',
  accurateIndoorData: 'Datos precisos en interior.',
  accurateIndoorDataText: 'La tecnología GPS no funciona para los entrenamientos en cinta, y ningún reloj puede registrar con precisión el ritmo y la distancia de la cinta por sí solo. El COROS POD 2 resuelve este problema calibrándose automáticamente para medir tu zancada y transmite datos precisos de la carrera en cinta directamente a tu reloj COROS.',
  preciseOnTheHills: 'Precisión en las colinas.',
  preciseOnTheHillsText: 'El ritmo esfuerzo es una métrica propiedad de  COROS para cuantificar el esfuerzo que realizas al correr por terrenos con desnivel. El COROS POD 2 hace que el ritmo esfuerzo sea aún más preciso y sensible que el GPS, ya que proporciona datos instantáneos a tu reloj COROS. Para obtener más información sobre el ritmo esfuerzo, haz clic aquí.',
  preciseOnTheHillsTextLinkText: 'haz clic aquí',
  preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  understandYourRunningForm: 'ANALIZA TU FORMA \nDE CORRER',
  understandYourRunningFormText: '¿Eres un corredor terrestre o aéreo? Cuando lo lleves en la cintura, el COROS POD 2 te ayudará a averiguarlo completando un test de técnica de carrera rápida y sencilla. Los resultados del test están diseñados para ayudarte a mejorar tu técnica y permitirte correr de forma más eficiente. Para saber más sobre el test de técnica de carrera, haz clic aquí.',
  understandYourRunningFormTextLinkText: 'haz clic aquí',
  understandYourRunningFormTextLink: 'https://support.coros.com/hc/es/articles/22933404044564-Ejecuci%C3%B3n-de-Prueba-de-Formulario',
  monitorOutsideTemperature: 'MONITORIZAR LA TEMPERATURA EXTERIOR',
  monitorOutsideTemperatureText: 'El COROS POD 2 registra las lecturas de temperatura  en tiempo real, para que tengas un conocimiento detallado del entorno cambiante a lo largo de tu carrera. Puedes utilizar estos de datos para seguir analizando tus carreras mientras entrenas en diferentes climas o estaciones.',
  simpleSecure: 'FÁCIL Y SEGURO',
  simpleSecureText: 'Con un funcionamiento automático sin botones y opciones de montaje seguro con los cordones o en la cintura, puedes estar \nseguro de que tu COROS POD 2 funcionará hasta el final incluso de la carrera más extrema.',
  longBatteryLife: 'BATERÍA DE LARGA DURACIÓN',
  longBatteryLifeText: 'El COROS POD 2 está equipado con una potente batería hecha para durar. Con 25 horas de funcionamiento continuo o 150 horas en total con la base de recarga portátil de la batería.',
  data1: '25',
  data1Unit: 'horas',
  data1Text: 'UNA SOLA CARGA',
  data2: '150',
  data2Unit: 'horas',
  data2Text: 'CON LA BASE DE CARGA',
  lightweightWeatherproof: 'LIGERO Y RESISTENTE A LA INTEMPERIE',
  lightweightWeatherproofText: 'Con sólo 5,6g, ni siquiera notarás el COROS POD 2 cuando entrenes o compitas, y soportará temperaturas de (14 °F a 140 °F / -10 °C a 60 °C), con una resistencia al agua de hasta 3 ATM.',
  data3: '5,6',
  data3Unit: 'g',
  data3Text: 'PESO DEL SENSOR',
  data4: '3',
  data4Unit: 'ATM',
  data4Text: 'RESISTENCIA AL AGUA',
  setupMadeEasy: 'CONFIGURACIÓN SENCILLA',
  setupMadeEasyText: 'El COROS POD 2 se puede llevar en el zapato o enganchado a la cintura, y entra en reposo para conservar la batería \ncuando no estés en movimiento.',
  pair: 'EMPAREJAR',
  pairText: 'Añade el COROS POD 2 a tu aplicación COROS para emparejarlo automáticamente con los relojes conectados.',
  clip: 'FIJACIÓN',
  clipText: 'Sujétalo a tu zapato o a la cintura, y la detección automática de uso ajustará las funciones.',
  go: 'EMPIEZA',
  goText: 'Inicia tu actividad de carrera con normalidad y recibe métricas precisas en tiempo real.',
  box: '¿QUÉ HAY EN LA CAJA?',
  boxText: 'EL COROS POD 2 viene con todo lo que necesitas, incluidos dos clips para las zapatillas, clip de silicona para la cintura, \nbase de carga, cable de carga de USB-A a USB-C y estuche compacto.',
  generalFaQs: 'GENERALES',
  generalFaQsLink: 'https://support.coros.com/hc/es/articles/10351744085012-FAQ-COROS-POD-2',
  runningFormTestFaQs: 'EL TEST DE TÉCNICA DE CARRERA',
  runningFormTestFaQsLink: 'https://support.coros.com/hc/es/articles/22933404044564-Ejecuci%C3%B3n-de-Prueba-de-Formulario',
  frequentlyAskedQuestions: 'PREGUNTAS\nMÁS\nFRECUENTES',
  mobile_intro: 'CORRE MÁS ALLÁ DE LOS LÍMITES DEL GPS',
  mobile_introText: 'El COROS POD 2 es un sensor ligero y resistente al agua que proporciona datos de carrera de otro nivel directamente a partir de los movimientos de tu pie o cuerpo. Se conecta a tu reloj COROS para proporcionar métricas en tiempo real, información posterior a la carrera y análisis de la forma de correr, para que dispongas de la mejor información durante y después de la carrera.',
  mobile_allAboutAccuracy: 'PRECISIÓN SOBRE TODO',
  mobile_allAboutAccuracyText: 'El COROS POD 2 resuelve los problemas más comunes de la tecnología GPS, como el retraso de datos, la señal débil y la imprecisión en interiores. Al seguir el movimiento directamente desde tu pie, el COROS POD 2 mejora la precisión y la sensibilidad al ritmo para seguir con exactitud tu rendimiento en cualquier situación.',
  mobile_sensitiveInstantPace: 'Ritmo instantáneo sensible.',
  mobile_sensitiveInstantPaceText: 'Los entrenamientos por intervalos son más eficaces con datos de ritmo instantáneos, pero las señales de los GPS pueden sufrir un retraso de hasta 10 segundos. El COROS POD 2 transmite datos de ritmo precisos directamente desde tu pie, por lo que la función Alerta de ritmo de tu reloj COROS puede ayudarte a mantenerte con precisión en tu zona de ritmo objetivo.',
  mobile_accurateIndoorData: 'Datos precisos en interior.',
  mobile_accurateIndoorDataText: 'La tecnología GPS no funciona para los entrenamientos en cinta, y ningún reloj puede registrar con precisión el ritmo y la distancia de la cinta por sí solo. El COROS POD 2 resuelve este problema calibrándose automáticamente para medir tu zancada y transmite datos precisos de la carrera en cinta directamente a tu reloj COROS.',
  mobile_preciseOnTheHills: 'Precisión en las colinas.',
  mobile_preciseOnTheHillsText: 'El ritmo esfuerzo es una métrica propiedad de  COROS para cuantificar el esfuerzo que realizas al correr por terrenos con desnivel. El COROS POD 2 hace que el ritmo esfuerzo sea aún más preciso y sensible que el GPS, ya que proporciona datos instantáneos a tu reloj COROS. Para obtener más información sobre el ritmo esfuerzo, haz clic aquí.',
  mobile_preciseOnTheHillsTextLinkText: 'haz clic aquí',
  mobile_preciseOnTheHillsTextLink: 'https://coros.com/stories/athlete-stories/c/effort-pace-the-journey-of-coros-metric-of-the-future',
  mobile_understandYourRunningForm: 'ANALIZA TU FORMA DE CORRER',
  mobile_understandYourRunningFormText: '¿Eres un corredor terrestre o aéreo? Cuando lo lleves en la cintura, el COROS POD 2 te ayudará a averiguarlo completando un test de técnica de carrera rápida y sencilla. Los resultados del test están diseñados para ayudarte a mejorar tu técnica y permitirte correr de forma más eficiente. Para saber más sobre el test de técnica de carrera, haz clic aquí.',
  mobile_understandYourRunningFormTextLinkText: 'haz clic aquí',
  mobile_understandYourRunningFormTextLink: 'https://support.coros.com/hc/es/articles/22933404044564-Ejecuci%C3%B3n-de-Prueba-de-Formulario',
  mobile_monitorOutsideTemperature: 'MONITORIZAR LA TEMPERATURA EXTERIOR',
  mobile_monitorOutsideTemperatureText: 'El COROS POD 2 registra las lecturas de temperatura  en tiempo real, para que tengas un conocimiento detallado del entorno cambiante a lo largo de tu carrera. Puedes utilizar estos de datos para seguir analizando tus carreras mientras entrenas en diferentes climas o estaciones.',
  mobile_simpleSecure: 'FÁCIL Y SEGURO',
  mobile_simpleSecureText: 'Con un funcionamiento automático sin botones y \nopciones de montaje seguro con los cordones o en \nla cintura, puedes estar seguro de que tu COROS \nPOD 2 funcionará hasta el final incluso de la \ncarrera más extrema.',
  mobile_longBatteryLife: 'BATERÍA DE LARGA DURACIÓN',
  mobile_longBatteryLifeText: 'El COROS POD 2 está equipado con una potente \nbatería hecha para durar. Con 25 horas de \nfuncionamiento continuo o 150 horas en total \ncon la base de recarga portátil de la batería.',
  mobile_data1: '25',
  mobile_data1Unit: 'horas',
  mobile_data1Text: 'UNA SOLA CARGA',
  mobile_data2: '150',
  mobile_data2Unit: 'horas',
  mobile_data2Text: 'CON LA BASE DE CARGA',
  mobile_lightweightWeatherproof: 'LIGERO Y RESISTENTE A LA INTEMPERIE',
  mobile_lightweightWeatherproofText: 'Con sólo 5,6g, ni siquiera notarás el COROS POD 2 cuando entrenes o compitas, y soportará temperaturas de (14 °F a 140 °F / -10 °C a 60 °C), con una resistencia al agua de hasta 3 ATM.',
  mobile_data3: '5,6',
  mobile_data3Unit: 'g',
  mobile_data3Text: 'PESO DEL SENSOR',
  mobile_data4: '3',
  mobile_data4Unit: 'ATM',
  mobile_data4Text: 'RESISTENCIA AL AGUA',
  mobile_setupMadeEasy: 'CONFIGURACIÓN SENCILLA',
  mobile_setupMadeEasyText: 'El COROS POD 2 se puede llevar en el zapato o enganchado a la cintura, y entra en reposo para conservar la batería cuando no estés en movimiento.',
  mobile_pair: 'EMPAREJAR',
  mobile_pairText: 'Añade el COROS POD 2 a tu aplicación COROS para emparejarlo automáticamente con los relojes conectados.',
  mobile_clip: 'FIJACIÓN',
  mobile_clipText: 'Sujétalo a tu zapato o a la cintura, y la detección automática de uso ajustará las funciones.',
  mobile_go: 'EMPIEZA',
  mobile_goText: 'Inicia tu actividad de carrera con normalidad y recibe métricas precisas en tiempo real.',
  mobile_box: '¿QUÉ HAY EN LA CAJA?',
  mobile_boxText: 'EL COROS POD 2 viene con todo lo que necesitas, \nincluidos dos clips para las zapatillas, clip de silicona \npara la cintura, base de carga, cable de carga de \nUSB-A a USB-C y estuche compacto.',
  mobile_generalFaQs: 'GENERALES',
  mobile_generalFaQsLink: 'https://support.coros.com/hc/es/articles/10351744085012-FAQ-COROS-POD-2',
  mobile_runningFormTestFaQs: 'EL TEST DE TÉCNICA DE CARRERA',
  mobile_frequentlyAskedQuestions: 'PREGUNTAS\nMÁS\nFRECUENTES',
  shareTitle: 'COROS PACE 3 Reloj Deportivo GPS Edición Eliud Kipchoge',
  shareDesc: 'Para atletas multideporte que entrenan duro y se mueven rápido.',
  productNameShort: 'COROS POD 2',
  productMenuTitle: 'COROS PACE 3 Edición Eliud Kipchoge',
  faq: 'FAQ'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/sasha.js
/* harmony default export */ const es_sasha = ({
  bannerTitle: 'Para COROS APEX 2 & PACE 2',
  section: {
    brief: {
      title: "toma la iniciativa y \n      vence tus miedos",
      desc: 'Ya de niña, la escaladora profesional Sasha Digiulian sabía que estaba destinada a la grandeza. Entró en el mundo del deporte por primera vez a los 6 años y, ante la escasez de modelos femeninos, tuvo que tomar la iniciativa y crear su propio camino. Con sólo 17 años ganó su primer campeonato nacional y un año después se proclamó campeona del mundo.'
    },
    "abstract": {
      desc: 'Hoy en día, Sasha es una líder para las jóvenes que buscan alcanzar la grandeza tanto en el deporte como fuera de él. Sus logros siguen inspirando a las jóvenes al demostrar que, con dedicación, perseverancia y tomando la iniciativa, se puede conseguir todo lo que uno se proponga: ser una atleta de talla mundial, empresaria, autora, ecologista y mucho más.'
    },
    inspire: {
      title: 'destaca con confianza',
      desc: "Con confianza, todo se puede conseguir. La correa de nailon COROS x Sasha para los relojes APEX 2 y PACE 2 est\xE1 pensada \n      para destacar entre la multitud e inspirar a la acci\xF3n. Dominada por su tono favorito de rosa, refleja a la perfecci\xF3n su \n      brillante personalidad y su empuje para defenderse a s\xED misma, a los dem\xE1s y lo que cree. ",
      subDesc: "El exterior presenta un estampado inspirado en la cuerda de escalada que conecta con su mantra personal TAKE THE LEAD \n      (Toma la iniciativa). El interior muestra un gr\xE1fico de su amada cordillera Flatiron en Boulder, CO, donde Sasha \n      vive y entrena. Independientemente del deporte que practiques, la pulsera de Sasha puede ser \n      un recordatorio constante para seguir adelante con orgullo, dedicaci\xF3n y alegr\xEDa."
    },
    shop: {
      title: "el pack banda + libro es gratis por la  compra de cualquier apex 2",
      desc: "El mantra TAKE THE LEAD de Sasha es tambi\xE9n el t\xEDtulo de sus memorias recientemente publicadas. Por un tiempo limitado hasta agotar existencias, puedes conseguir un ejemplar del libro de Sasha y la correa COROS x Sasha gratis comprando cualquier reloj APEX 2. "
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/es/index.js





















































/* harmony default export */ const es = ({
  pod2_2024: es_pod2_2024,
  sasha: es_sasha,
  pace3_ek: es_pace3_ek,
  pace3: es_pace3,
  chamonix_edition: es_chamonix_edition,
  chamonix: es_chamonix,
  hrm: es_hrm,
  stories: es_stories,
  pace2_2023: es_pace2_2023,
  carabiner: es_carabiner,
  apex2credit: es_apex2credit,
  app3Langdingpage: es_app3_langdingpage,
  ekGiveaway: es_ek_giveaway,
  kilianEdition: es_kilianEdition,
  convos: es_convos,
  evolab: es_evolab,
  specs: es_specs,
  accessories: es_accessories,
  apexPro: es_apexPro,
  getApp: es_getApp,
  declarationOfConformity: es_declarationOfConformity,
  home: es_home,
  pod: es_pod,
  pod2: es_pod2,
  apex: es_apex,
  apex2: es_apex2,
  tradeIn: es_tradeIn,
  athleteDetails: es_athleteDetails,
  athlete: es_athlete,
  warranty: es_warranty,
  contact: es_contact,
  vertix: es_vertix,
  products: es_products,
  pace2: es_pace2,
  progress: es_progress,
  plans: es_plans,
  retail: es_retail,
  privacy: es_privacy,
  terms: es_terms,
  careers: es_careers,
  ek: (es_ek_default()),
  vertix2: (es_vertix2_default()),
  map: (es_map_default()),
  trainingHub: es_trainingHub,
  common: es_common,
  login: es_login,
  datalist: es_datalist,
  yourproduct: es_yourproduct,
  aboutPage: es_about,
  events: es_events,
  shop: es_shop,
  coaches: es_coaches,
  workouts: es_workouts,
  //公共部分
  CommonHeaderMenu1name: 'PRODUCTOS',
  CommonHeaderMenu1nav1: 'COROS VERTIX 2',
  CommonHeaderMenu1nav2: 'COROS VERTIX',
  CommonHeaderMenu1nav3: 'COROS APEX Pro',
  CommonHeaderMenu1nav4: 'COROS APEX',
  CommonHeaderMenu1nav5: 'COROS PACE 2',
  CommonHeaderMenu1nav6: 'COROS PACE 2 EK',
  CommonHeaderMenu1nav7: 'COROS POD',
  CommonHeaderMenu1nav8: 'Accesorios',
  CommonHeaderMenu1nav9: 'Otros',
  CommonHeaderMenu1nav10: 'COROS PACE',
  CommonHeaderMenu1nav11: 'SafeSound-MOUNTAIN',
  CommonHeaderMenu1nav12: 'SafeSound-ROAD',
  CommonHeaderMenu1nav13: 'SafeSound-URBAN',
  CommonHeaderMenu1nav14: 'OMNI',
  CommonHeaderMenu1nav15: 'LINX',
  CommonHeaderMenu1nav16: 'COROS PACE 2 Speed Series',
  CommonHeaderMenu1nav17: 'COROS APEX 2/2 Pro',
  CommonHeaderMenu1nav18: 'COROS APEX 2 Pro',
  CommonHeaderMenu1nav19: 'COROS PACE 2 Molly',
  CommonHeaderMenu1nav20: 'COROS PACE 2 Molly Seidel Edition',
  CommonHeaderMenu2name: 'COMUNIDAD',
  coros_convos: 'COROS Convos',
  CommonHeaderMenu2nav1: 'COROS HISTORIAS',
  CommonHeaderMenu2nav2: 'COROS PRO ATHLETE',
  CommonHeaderMenu2nav3: 'PROGRAMA DE INTERCAMBIO',
  CommonHeaderMenu2nav4: 'ENTRENAMIENTO VERIFICADO',
  CommonHeaderMenu2nav5: 'PLANES DE ENTRENAMIENTO',
  CommonHeaderMenu2nav6: 'CENTRO DE ENTRENAMIENTO COROS',
  menu_convos: 'CONVOS',
  CommonHeaderMenu3name: 'APOYO',
  CommonHeaderMenu3nav1: 'ACCESO DE USUARIO',
  CommonHeaderMenu3nav2: 'CENTRO DE AYUDA',
  CommonHeaderMenu3nav3: 'GARANTÍA',
  CommonHeaderMenu3nav4: 'NOTAS DE LIBERACIÓN',
  CommonHeaderMenu3nav5: 'COMPARACIÓN DE RELOJES',
  CommonHeaderMenu3nav6: 'MAPAS',
  CommonHeaderMenu4name: 'ACERCA DE',
  CommonHeaderMenu4nav1: 'SOBRE NOSOTROS',
  CommonHeaderMenu4nav2: 'EN LAS NOTICIAS',
  CommonHeaderMenu4nav3: 'CONTACTO',
  CommonHeaderMenu4nav4: 'EVENTOS',
  CommonHeaderMenu4nav5: 'CARRERAS',
  CommonHeaderMenu5name: 'LOCALIZACIÓN DE TIENDAS',
  CommonHeaderMenu6name: 'PAÍS',
  CommonFooterDealerLogin: 'Inicio de sesión del distribuidor',
  CommonFooterDealerReturnRefund: 'Devolución y reembolso',
  CommonFooterDealerWatchComparison: 'Comparación de relojes',
  CommonFooterDealerTermsConditions: 'Términos y condiciones',
  CommonFooterDealerReleaseNotes: 'Notas de publicación',
  CommonFooterDealerPrivacyPolicy: 'Política de privacidad',
  CommonFooterDealerWheretoDownload: 'Dónde descargar',
  CommonFooterDealercopyright: '2022 | COROS Wearables, Inc.',
  Commonshopnow: 'COMPRAR AHORA',
  Commonspeecs: 'ESPECIFICACIONES',
  Commoncomparisonchart: 'COMPARACIÓN',
  SignupforNews: 'Inscríbase para recibir noticias',
  price: 'Precio',
  //stories
  STORIEStitle: 'COROS Stories | The Path to Explore Perfection',
  STORIESkeywords: 'COROS Stories | The Path to Explore Perfection',
  STORIESdescription: "Brings the world's most intriguing and inspiring stories to you plus the tips you need for peak performance.",
  //comparetable
  compproduct: 'Producto',
  compproductvertix2: 'VERTIX 2 GPS Adventure Watch',
  compproductvertix: 'VERTIX GPS Adventure Watch',
  compproductapexpro: 'APEX Pro Premium Multisport GPS Watch',
  compproductapex46: 'APEX 46mm Premium Multisport GPS Watch',
  compproductapex42: 'APEX 42mm Premium Multisport GPS Watch',
  compproductpace2: 'COROS PACE 2 Premium GPS Sport Watch',
  compvertix2name: 'VERTIX 2 GPS Adventure Watch',
  compvertixname: 'VERTIX GPS Adventure Watch',
  compapexproname: 'APEX Pro Premium Multisport GPS Watch',
  compapex46name: 'APEX 46mm Premium Multisport GPS Watch',
  compapex42name: 'APEX 42mm Premium Multisport GPS Watch',
  comppace2name: 'COROS PACE 2 Premium GPS Sport Watch',
  compdispsize: 'Display Size',
  compdispsizevertix2: '1.4 in. 280 x 280 (64 colors)',
  compdispsizevertix: '1.2 in. 240 x 240 (64 colors)',
  compdispsizeapexpro: '1.2 in. 240 x 240 (64 colors)',
  compdispsizeapex46: '1.2 in. 240 x 240 (64 colors)',
  compdispsizeapex42: '1.1 in. 218 x 218 (64 colors)',
  compdispsizepace2: '1.2 in. 240 x 240 (64 colors)',
  compdisptype: 'Tipo de pantalla',
  compdisptypevertix2: 'Pantalla táctil con memoria siempre activa LCD',
  compdisptypevertix: 'Pantalla táctil con memoria siempre activa LCD',
  compdisptypeapexpro: 'Pantalla táctil con memoria siempre activa LCD',
  compdisptypeapex46: 'Memoria LCD siempre activa',
  compdisptypeapex42: 'Memoria LCD siempre activa',
  compdisptypepace2: 'Memoria LCD siempre activa',
  compscreenmaterial: 'Screen Material',
  compscreenmaterialvertix2: 'Diamond-like Coating Sapphire Glass',
  compscreenmaterialvertix: 'Diamond-like Coating Sapphire Glass',
  compscreenmaterialapexpro: 'Sapphire Glass',
  compscreenmaterialapex46: 'Sapphire Glass',
  compscreenmaterialapex42: 'Sapphire Glass',
  compscreenmaterialpace2: 'Corning® Glass',
  compbezelmaterial: 'Bezel Material',
  compbezelmaterialvertix2: 'Aleación de titanio de grado 5 con revestimiento de PVD',
  compbezelmaterialvertix: 'Aleación de titanio de grado 5',
  compbezelmaterialapexpro: 'Aleación de titanio de grado 5',
  compbezelmaterialapex46: 'Aleación de titanio de grado 5',
  compbezelmaterialapex42: 'Stainless Steel',
  compbezelmaterialpace2: 'Fibre Reinforced Polymer',
  compcovermaterial: 'Cover Material',
  compcovermaterialvertix2: 'Titanium Alloy with PVD Coating',
  compcovermaterialvertix: 'Titanium Alloy',
  compcovermaterialapexpro: 'Aluminio',
  compcovermaterialapex46: 'Aluminio',
  compcovermaterialapex42: 'Aluminio',
  compcovermaterialpace2: 'Fibre Reinforced Polymer',
  compstrapmaterial: 'Strap Material',
  compstrapmaterialvertix2: 'Silicone/Nylon',
  compstrapmaterialvertix: 'Silicone/Nylon',
  compstrapmaterialapexpro: 'Silicone/Nylon',
  compstrapmaterialapex46: 'Silicone/Nylon',
  compstrapmaterialapex42: 'Silicone/Nylon',
  compstrapmaterialpace2: 'Silicone/Nylon',
  compquickreleasefitband: 'Quick Release/Fit Band',
  compquickreleasefitbandvertix2: '26mm',
  compquickreleasefitbandvertix: '22mm',
  compquickreleasefitbandapexpro: '22mm',
  compquickreleasefitbandapex46: '22mm',
  compquickreleasefitbandapex42: '20mm',
  compquickreleasefitbandpace2: '20mm',
  compphysicalsize: 'Physical Size',
  compphysicalsizevertix2: '50.3 x 50.3 x 15.7mm',
  compphysicalsizevertix: '47 x 47 x 15.6mm',
  compphysicalsizeapexpro: '47 x 47 x 13.4mm',
  compphysicalsizeapex46: '46 x 46 x 11.9mm',
  compphysicalsizeapex42: '42 x 42 x 11.75mm',
  compphysicalsizepace2: '42 x 42 x 11.7mm',
  compweightwithsiliconeband: 'Weight With Silicone Band',
  compweightwithsiliconebandvertix2: '89g',
  compweightwithsiliconebandvertix: '76g',
  compweightwithsiliconebandapexpro: '59g',
  compweightwithsiliconebandapex46: '55.3g',
  compweightwithsiliconebandapex42: '49g',
  compweightwithsiliconebandpace2: '35g-36g',
  compweightwithnylonband: 'Weight With Nylon Band',
  compweightwithnylonbandvertix2: 'N/A',
  compweightwithnylonbandvertix: '63g',
  compweightwithnylonbandapexpro: '49g',
  compweightwithnylonbandapex46: '45g',
  compweightwithnylonbandapex42: '38g',
  compweightwithnylonbandpace2: '29g-30g',
  compphoneconnection: 'Phone Connection',
  compphoneconnectionvertix2: 'Bluetooth',
  compphoneconnectionvertix: 'Bluetooth',
  compphoneconnectionapexpro: 'Bluetooth',
  compphoneconnectionapex46: 'Bluetooth',
  compphoneconnectionapex42: 'Bluetooth',
  compphoneconnectionpace2: 'Bluetooth',
  compaccessoryconnection: 'Accessory Connection',
  compaccessoryconnectionvertix2: 'Bluetooth',
  compaccessoryconnectionvertix: 'ANT+/Bluetooth',
  compaccessoryconnectionapexpro: 'ANT+/Bluetooth',
  compaccessoryconnectionapex46: 'ANT+/Bluetooth',
  compaccessoryconnectionapex42: 'ANT+/Bluetooth',
  compaccessoryconnectionpace2: 'ANT+/Bluetooth',
  compwaterresistance: 'Water Resistance',
  compwaterresistancevertix2: '10ATM (100 Meters/328 Feet)',
  compwaterresistancevertix: '15ATM (150 Meters/492 Feet)',
  compwaterresistanceapexpro: '10ATM (100 Meters/328 Feet)',
  compwaterresistanceapex46: '10ATM (100 Meters/328 Feet)',
  compwaterresistanceapex42: '10ATM (100 Meters/328 Feet)',
  compwaterresistancepace2: '5ATM (50 Meters/164 Feet)',
  compworkingtemperature: 'Working Temperature',
  compworkingtemperaturevertix2: '-22°F to 122°F (-30°C to 50°C)',
  compworkingtemperaturevertix: '-4°F to 140°F (-20°C to 60°C)',
  compworkingtemperatureapexpro: '14°F to 140°F (-10°C to 60°C)',
  compworkingtemperatureapex46: '14°F to 140°F (-10°C to 60°C)',
  compworkingtemperatureapex42: '14°F to 140°F (-10°C to 60°C)',
  compworkingtemperaturepace2: '-4°F to 140°F (-20°C to 60°C)',
  compstoragetemperature: 'Storage Temperature',
  compstoragetemperaturevertix2: '-22°F to 140°F (-30°C to 60°C)',
  compstoragetemperaturevertix: '-22°F to 158°F (-30°C to 70°C)',
  compstoragetemperatureapexpro: '-4°F to 158°F (-20°C to 70°C)',
  compstoragetemperatureapex46: '-4°F to 149°F (-20°C to 65°C)',
  compstoragetemperatureapex42: '-4°F to 149°F (-20°C to 65°C)',
  compstoragetemperaturepace2: '-4°F to 149°F (-20°C to 65°C)',
  compchargingtime: 'Charging Time',
  compchargingtimevertix2: 'Less than 2 Hours',
  compchargingtimevertix: 'Less than 2 Hours',
  compchargingtimeapexpro: 'Less than 2 Hours',
  compchargingtimeapex46: 'Less than 2 Hours',
  compchargingtimeapex42: 'Less than 2 Hours',
  compchargingtimepace2: 'Less than 2 Hours',
  compultramaxGPSmode: 'UltraMax GPS Mode',
  compultramaxGPSmodevertix2: '240 Hours',
  compultramaxGPSmodevertix: '150 Hours',
  compultramaxGPSmodeapexpro: '100 Hours',
  compultramaxGPSmodeapex46: '100 Hours',
  compultramaxGPSmodeapex42: '80 Hours',
  compultramaxGPSmodepace2: '60 Hours',
  compstandardfull: 'Standard Full GPS (GPS/QZSS)',
  compstandardfullvertix2: '140 Hours',
  compstandardfullvertix: '60 Hours',
  compstandardfullapexpro: '40 Hours',
  compstandardfullapex46: '35 Hours',
  compstandardfullapex42: '25 Hours',
  compstandardfullpace2: '30 Hours',
  compallsystemson: 'All Systems On (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsonvertix2: '90 Hours',
  compallsystemsonvertix: 'N/A',
  compallsystemsonapexpro: 'N/A',
  compallsystemsonapex46: 'N/A',
  compallsystemsonapex42: 'N/A',
  compallsystemsonpace2: 'N/A',
  compallsystemsdualfrequencyon: 'All Systems + Dual Frequency On (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compallsystemsdualfrequencyonvertix2: '50 Hours',
  compallsystemsdualfrequencyonvertix: 'N/A',
  compallsystemsdualfrequencyonapexpro: 'N/A',
  compallsystemsdualfrequencyonapex46: 'N/A',
  compallsystemsdualfrequencyonapex42: 'N/A',
  compallsystemsdualfrequencyonpace2: 'N/A',
  compdailyuse: 'Daily Use',
  compdailyusevertix2: '60 Days',
  compdailyusevertix: '45 Days',
  compdailyuseapexpro: '30 Days',
  compdailyuseapex46: '30 Days',
  compdailyuseapex42: '24 Days',
  compdailyusepace2: '20 Days',
  comphrmonitoring: '24/7 HR Monitoring',
  compopticalheartratemonitor: 'Optical Heart Rate Monitor',
  compbarometricaltimeter: 'Barometric Altimeter',
  compaccelerometer: 'Accelerometer',
  compgyroscope: 'Gyroscope',
  compcompass: 'Compass',
  compcorosevoLab: 'COROS EvoLab (VO2 Max, Fatigue, Training Load, Threshold Pace, etc)',
  comprecoverytime: 'Recovery Time',
  compinterval: 'Interval, Triathlon, Multisport Training',
  compswimmingheartrate: 'Swimming Heart Rate',
  compsleepmonitoring: 'Sleep Monitoring',
  compphonenotifications: 'Phone Notifications',
  comp3rdpartyintegration: '3rd Party Integration (Strava, TrainingPeaks, etc)',
  compthickglovescompatible: 'Thick Gloves Compatible',
  compstructuredworkouts: 'Structured Workouts & Training Programs',
  comprunningpowerfromthewrist: 'Running Power From The Wrist',
  compstrydcompatible: 'Stryd Compatible',
  compphonenotificationsduringworkouts: 'Phone Notifications During Workouts',
  compbodytemperaturemonitorsupport: 'Body Temperature Monitor Support (CORE)',
  compbacklightalwaysnnnode: 'Backlight Always-On Mode',
  compsapphireglass: 'Sapphire Glass',
  compbreadcrumbnavigation: 'Breadcrumb Navigation',
  compbacktostartnavigation: 'Back-To-Start Navigation',
  comp247blood: '24/7 Blood Oxygen Monitoring at High Altitudes',
  compopticalpulseoxmonitor: 'Optical Pulse Ox Monitor',
  compdedicatedbacklightbutton: 'Dedicated Backlight Button',
  comptouchscreenmode: 'Touch Screen Mode',
  compaltitudemode: 'Altitude Mode',
  compextremedurability: 'Extreme Durability',
  compallsatellitedualfrequency: 'All-satellite Dual-frequency GNSS Chipset',
  compgloballandscapemaplayer: 'Global Landscape Map Layer',
  compregionaltopomaplayer: 'Regional Topo Map Layer',
  compregionaltopomaplayervertix: 'May be supported before 2022',
  compregionaltopomaplayerapexpro: 'May be supported before 2022',
  comphybridmaplayer: 'Hybrid Map Layer',
  compelectrocardiogramsensor: 'Electrocardiogram Sensor',
  comphrvindex: 'HRV Index',
  compWiFi: 'Wi-Fi',
  compmusic: 'Music',
  compinsta360cameracontrol: 'Camera Control',
  compvirtualrun: 'Virtual Run',
  comppowermetercalibration: 'ANT+ Power Meter Calibration',
  compsupportedworkoutmodes: 'Supported Workout Modes',
  comprun: 'Run',
  compindoorrun: 'Indoor Run',
  comptrackrun: 'Track Run',
  compbike: 'Bike',
  compindoorbike: 'Indoor Bike',
  compopenwater: 'Open Water',
  comppoolswim: 'Pool Swim',
  compflatwater: 'Flatwater',
  comprowing: 'Rowing',
  compGPScardio: 'GPS Cardio',
  compgymcardio: 'Gym Cardio',
  comptriathlon: 'Triathlon',
  compindoorrower: 'Indoor Rower',
  compstrength: 'Strength',
  comptraining: 'Training (Structured Programs)',
  comptrainingplan: 'Training Plan',
  compmultisport: 'Multisport',
  compsupportedgnss: 'Supported GNSS (GPS, GLONASS, Galileo, Beidou, QZSS)',
  compwalk: 'Walk',
  comptrailrun: 'Trail Run',
  comphike: 'Hike',
  compmountainclimb: 'Mountain Climb',
  compski: 'Ski',
  compsnowboard: 'Snowboard',
  compxcski: 'XC Ski',
  compskitouring: 'Ski Touring',
  compspeedsurfing: 'Speedsurfing',
  compwindsurfing: 'Windsurfing',
  compwhitewater: 'Whitewater',
  compyes: '√',
  compbacklightbuttonshortcut: 'Backlight Button Shortcut',
  compmultipitchclimb: 'Multi-Pitch Climb',
  ////展会
  Emailtittext1: 'EMAIL ADDRESS',
  Emailsubmit: 'SIGN UP',
  Emailtitle: 'OC Half Marathon',
  Emailkeywords: 'OC Half Marathon',
  Emaildescription: 'OC Half Marathon',
  ////////////////////////////////////////////////////////
  index: {
    title: 'COROS-Home',
    keywords: 'palabras clave',
    description: '中文-desc-VERTIX',
    helloworld: 'palabra de bienvenida',
    herder: 'cabecera',
    footer: 'pie de página'
  },
  about: {
    title: 'prueba sobre nosotros ',
    keywords: 'palabras clave',
    description: 'descripción sobre nosotros'
  },
  // vertix2

  select: 'Por favor, seleccione',
  "continue": 'Continuar'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en-eu/shop.js
/* harmony default export */ const en_eu_shop = ({
  thanksgivingPrompt: 'Add a free COROS workout bag to your order when you spend 300 € or more.',
  thanksgivingPromotionDetails: {
    title: 'Add your free COROS Workout Bag',
    subTitles: ['Order 300€ or more to redeem this gift.', 'Offer ends December 1st, or while supplies last. ', 'Not valid with other offers or promotions.']
  },
  thanksgivingPromptBanner: {
    title: "FREE COROS WORKOUT\n      BAG WITH PURCHASE",
    subTitles: ["Spend 300\u20AC or more and get this tough,\n      versatile, and stylish bag for your gear.", 'Offer ends December 1st, or while supplies last. '],
    shortDescs: ['Holiday Offer']
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en-eu/pod2_2024.js
/* harmony default export */ const en_eu_pod2_2024 = ({});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en-eu/index.js


/* harmony default export */ const en_eu = ({
  pod2_2024: en_eu_pod2_2024,
  shop: en_eu_shop
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en-au/shop.js
/* harmony default export */ const en_au_shop = ({
  thanksgivingPrompt: 'Add a free COROS workout bag to your order when you spend A$500 or more.',
  thanksgivingPromotionDetails: {
    title: 'Add your free COROS Workout Bag',
    subTitles: ['Order A$500 or more to redeem this gift.', 'Offer ends December 1st, or while supplies last. ', 'Not valid with other offers or promotions.']
  },
  thanksgivingPromptBanner: {
    title: "FREE COROS WORKOUT\n        BAG WITH PURCHASE",
    subTitles: ["Spend A$500 or more and get this tough,\n        versatile, and stylish bag for your gear.", 'Offer ends December 1st, or while supplies last. '],
    shortDescs: ['Holiday Offer']
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en-au/pod2_2024.js
/* harmony default export */ const en_au_pod2_2024 = ({});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/en-au/index.js


/* harmony default export */ const en_au = ({
  pod2_2024: en_au_pod2_2024,
  shop: en_au_shop
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/i18n/index.js












function createI18n(locale, fetchedI18nMessages) {
  var messages = {
    en: en,
    cn: cn,
    de: de,
    jp: jp,
    fr: fr,
    es: es,
    'en-EU': en_eu,
    'en-AU': en_au
  };
  if (messages[locale]) {
    for (var key in fetchedI18nMessages) {
      var _context;
      if (locale === 'ja-JP' && includes_default()(_context = ['vertix2s', 'climb', 'batteryUnit']).call(_context, key)) {
        continue;
      }
      console.log('动态加载多语言', key);
      var result = fetchedI18nMessages[key];
      // 如果是 package 多语言包，特殊处理
      if (typeof result !== 'string' && result.__type__ === 'package') {
        // 可能一个 package 里面有多个顶级 project
        for (var subKey in result) {
          if (starts_with_default()(subKey).call(subKey, '__')) continue;
          console.log('package subKey', subKey);
          if (!messages[locale][subKey]) {
            messages[locale][subKey] = result[subKey];
          } else {
            assign_default()(messages[locale][subKey], result[subKey]);
          }
        }
      } else {
        messages[locale][key] = result;
      }
    }
  }
  return new vue_i18n_esm/* default */.Z({
    locale: locale,
    messages: messages
  });
}
// EXTERNAL MODULE: ./app/web/component/layout/index/dataBus.js
var dataBus = __webpack_require__(92154);
;// CONCATENATED MODULE: ./app/web/component/layout/index/plugin/index.js




















var key = 'feature_status_last_reported_time';
/* harmony default export */ const index_plugin = ({
  install: function install(Vue) {
    Vue.config.ignoredElements = ['klarna-placement'];
    function reportCurrentFeatureStatus(status) {
      if (false) {}
      var now = +new Date();
      try {
        var lastReportedTime = localStorage.getItem(key);
        // 每 60 分钟上报一次
        if (!lastReportedTime || now - lastReportedTime > 1000 * 60 * 60) {
          var _context, _context2, _status$apk_download, _status$new_training, _status$webv2_newblog;
          Vue.prototype.$trace.traceCustomEvent({
            event: 'get_feature_status',
            ext: {
              content: concat_default()(_context = concat_default()(_context2 = "\u90E8\u5206\u5B57\u6BB5\u9884\u89C8 apk_download: ".concat((_status$apk_download = status.apk_download) === null || _status$apk_download === void 0 || (_status$apk_download = _status$apk_download.data) === null || _status$apk_download === void 0 ? void 0 : _status$apk_download.foreign_apk_llink, "  new_training: ")).call(_context2, (_status$new_training = status.new_training) === null || _status$new_training === void 0 ? void 0 : _status$new_training.value, " webv2_newblog: ")).call(_context, (_status$webv2_newblog = status.webv2_newblog) === null || _status$webv2_newblog === void 0 ? void 0 : _status$webv2_newblog.value, "\n"),
              trigger_time: now_default()()
            }
          });
        }
      } catch (error) {
        console.error(error);
      } finally {
        localStorage.setItem(key, now);
      }
    }

    /**
     * 传入图片url, 将自动根据设备分辨率, 返回1x,2x,3x 分辨率图片
     */
    Vue.prototype.$getHost = function () {
      // 获取当前设备 ratio;
      if (true) {
        var hostname = window.location.hostname;
        if (includes_default()(hostname).call(hostname, '.ca')) {
          window.lan = 'ca';
          return 'ca';
        } else if (includes_default()(hostname).call(hostname, 'uk')) {
          window.lan = 'uk';
          return 'uk';
        } else {
          window.lan = 'us';
          return 'us';
        }
      } else {}
    };
    Vue.prototype.$getUrlParam = function (url) {
      if (!url) return;
      var params = {};
      var arr1 = url.split('?');
      if (arr1.length <= 1) return {};
      var params_str = arr1[1];
      var strs = params_str.split('&');
      for (var i = 0; i < strs.length; i++) {
        if (strs[i].split('=').length > 1) {
          params[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1]);
        }
      }
      return params;
    };
    Vue.prototype.$validatePhone = function (phoneNo) {
      var reg = /^(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/;
      return reg.test(phoneNo);
    };
    Vue.prototype.$validateEmail = function (email) {
      // async-validator type email
      var reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
      return reg.test(email);
    };
    Vue.prototype.$getRandomNumber = function (min, max) {
      return parse_int_default()(Math.random() * (max - min + 1) + min);
    };
    Vue.prototype.$getBrowser = function () {
      /* eslint-disable */
      var ua = navigator.userAgent.toLowerCase(),
        s,
        name = '',
        ver = 0;
      //探测浏览器
      (s = ua.match(/msie ([\d.]+)/)) ? _set('ie', _toFixedVersion(s[1])) : (s = ua.match(/firefox\/([\d.]+)/)) ? _set('firefox', _toFixedVersion(s[1])) : (s = ua.match(/edg\/([\d.]+)/)) ? _set('edge', _toFixedVersion(s[1])) : (s = ua.match(/chrome\/([\d.]+)/)) ? _set('chrome', _toFixedVersion(s[1])) : (s = ua.match(/opera.([\d.]+)/)) ? _set('opera', _toFixedVersion(s[1])) : (s = ua.match(/version\/([\d.]+).*safari/)) ? _set('safari', _toFixedVersion(s[1])) : (s = ua.match(/crios\/([\d.]+)/)) ? _set('chrome', _toFixedVersion(s[1])) : (s = ua.match(/applewebkit\/([\d.]+)/)) ? _set('chrome', _toFixedVersion(s[1])) : 0;
      function _toFixedVersion(ver, floatLength) {
        ver = ('' + ver).replace(/_/g, '.');
        floatLength = floatLength || 1;
        ver = String(ver).split('.');
        ver = ver[0] + '.' + (ver[1] || '0');
        ver = Number(ver).toFixed(floatLength);
        return ver;
      }
      function _set(bname, bver) {
        name = bname;
        ver = bver;
      }
      return {
        shell: s[0],
        name: name,
        ver: ver
      };
      /* eslint-enable */
    };
    Vue.prototype.$isSupportWebp = function (name, version) {
      var browers = {
        ie: 100,
        chrome: 32,
        safari: 13,
        opera: 19,
        firefox: 65
      };
      if (!!browers[name] && version >= browers[name]) return true;
      return false;
    };
    Vue.prototype.$joinParams = function (params) {
      var str = '';
      for (var _key in params) {
        if (params[_key] instanceof Array) {
          str += _key + '=' + params[_key].join(',') + '&';
        } else {
          str += _key + '=' + params[_key] + '&';
        }
      }
      str = slice_default()(str).call(str, 0, -1);
      return str;
    };
    Vue.prototype.$getSupportLanguage = function (lang) {
      // ISO 639 标准语言代码 zh-CN  zh-TW, zh-HK
      if (!lang && navigator) {
        if (navigator.appName === 'Netscape') {
          lang = navigator.language.toLowerCase();
        } else {
          lang = navigator.browserLanguage;
        }
      }
      lang = lang.toLowerCase();
      var reg_zh = /^zh.*/;
      var reg_zh_hans = /^zh-.*(tw|hk|hant)$/;
      var reg_fr = /^fr.*/;
      var reg_pl = /^pl.*/;
      var reg_de = /^de.*/;
      var reg_es = /^es.*/;
      var reg_ja = /^ja.*/;
      var reg_th = /^th.*/;
      var reg_ko = /^ko.*/;
      var reg_pt = /^pt.*/;
      var reg_it = /^it.*/;
      var reg_ru = /^ru.*/;
      var reg_vi = /^vi.*/;
      if (reg_zh_hans.test(lang)) {
        return 'zh-Hant-CN';
      } else if (reg_zh.test(lang)) {
        return 'zh-CN';
      } else if (reg_fr.test(lang)) {
        return 'fr-FR';
      } else if (reg_pl.test(lang)) {
        return 'pl-PL';
      } else if (reg_de.test(lang)) {
        return 'de-DE';
      } else if (reg_es.test(lang)) {
        return 'es-ES';
      } else if (reg_ja.test(lang)) {
        return 'ja-JP';
      } else if (reg_th.test(lang)) {
        return 'th-TH';
      } else if (reg_ko.test(lang)) {
        return 'ko-KO';
      } else if (reg_pt.test(lang)) {
        return 'pt-PT';
      } else if (reg_it.test(lang)) {
        return 'it-IT';
      } else if (reg_ru.test(lang)) {
        return 'ru-RU';
      } else if (reg_vi.test(lang)) {
        return 'vi-VN';
      }
      return 'en-US';
    };
    Vue.prototype.$pixelImage = function (url) {
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
      var isSupportWebp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
      var quality = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 80;
      var ossType = arguments.length > 4 ? arguments[4] : undefined;
      // 判断文件格式
      try {
        //输出结果
        if (ossType == 'aliyun') {
          var _context3, _context4, _context5;
          var format = isSupportWebp ? '/format,webp' : '';
          var resize = width > 0 ? "/resize,w_".concat(width) : '';
          return concat_default()(_context3 = concat_default()(_context4 = concat_default()(_context5 = "".concat(url, "?type=img&x-oss-process=image")).call(_context5, resize)).call(_context4, format, "/quality,q_")).call(_context3, quality);
        } else {
          var _context6, _context7, _context8, _context9, _context10;
          var host = 'https://d1teks7lx8pls2.cloudfront.net';
          var arrUrl = url.split('//');
          var start = index_of_default()(_context6 = arrUrl[1]).call(_context6, '/');
          var relUrl = arrUrl[1].substring(start); //stop省略，截取从start开始到结尾的所有字符

          if (index_of_default()(relUrl).call(relUrl, '?') != -1) {
            relUrl = relUrl.split('?')[0];
          }
          return concat_default()(_context7 = concat_default()(_context8 = concat_default()(_context9 = concat_default()(_context10 = "".concat(host)).call(_context10, isSupportWebp ? '/filters:format(webp)' : '', "/filters:quality(")).call(_context9, quality, ")")).call(_context8, width > 0 ? '/fit-in/' + width + 'x0' : '')).call(_context7, relUrl);
        }
      } catch (err) {
        return url;
      }
    };

    /**
     * 从faq管理后台设置的应用状态
     *
     * 注意！！！本函数跟 /app/service/featureStatus.js 里面 checkEnabledForCurrentRegion 同步更新
     *
     * 查看某个key是否在当前region下开启了
     * @param {string} key 在faq后台 app功能开关 中配置的 key
     * @returns boolean
     */
    Vue.prototype.$checkEnabledForCurrentRegion = function (key) {
      var _thisModuleStatus$ava, _context11;
      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
        fallbackData = _ref.fallbackData;
      var _ref2 = this.$root || {},
        featureStatus = _ref2.featureStatus,
        standardLanguage = _ref2.standardLanguage;
      // console.log(`🔔 checkEnabledForCurrentRegion`);
      reportCurrentFeatureStatus(featureStatus);
      var thisModuleStatus;
      if (featureStatus && featureStatus[key]) {
        thisModuleStatus = featureStatus[key];
      } else if (fallbackData) {
        thisModuleStatus = fallbackData;
      }

      // 是否开启此功能, value === false 代表未启用
      if (!thisModuleStatus || thisModuleStatus.value !== true) {
        return false;
      }

      // 启用地区为空代表全部地区可用, 有值代表需要包含region才算开启
      if (((_thisModuleStatus$ava = thisModuleStatus.available_region) === null || _thisModuleStatus$ava === void 0 ? void 0 : _thisModuleStatus$ava.length) > 0 && index_of_default()(_context11 = thisModuleStatus.available_region).call(_context11, standardLanguage) === -1) {
        return false;
      }
      return true;
    };

    // 多语言函数 $mt 用在多语言移动版异常的场景
    // 比如 $mt('climb.intro')  会检查是否存在 climb.m_intro 存在的话就用这个，不然就回退到原来的 climb.intro
    Vue.prototype.$mt = function (keyPath) {
      var _context12, _context13;
      if (!keyPath) return keyPath;
      var _keyPath$split = keyPath.split('.'),
        _keyPath$split2 = (0,slicedToArray/* default */.Z)(_keyPath$split, 2),
        module = _keyPath$split2[0],
        key = _keyPath$split2[1];
      return this.$dataBus.isMobile && this.$te(concat_default()(_context12 = "".concat(module, ".m_")).call(_context12, key)) ? this.$t(concat_default()(_context13 = "".concat(module, ".m_")).call(_context13, key)) : this.$t(keyPath);
    };

    // 自定义 hook 钩子，vue-entry-loader 自动加载
    if (!Vue.hook) {
      Vue.use(vue_i18n_esm/* default */.Z);
      Vue.hook = {
        render: function render(context, options) {
          var i18n = createI18n(context.state.locale, context.state.fetchedI18nMessages);
          options.i18n = i18n;
          if (false) { var isMobile; }
          dataBus/* data.country */.aT.country = context.state.country;
        }
      };
    }
  }
});
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js
var asyncToGenerator = __webpack_require__(33938);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/regenerator/index.js
var regenerator = __webpack_require__(30222);
var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
;// CONCATENATED MODULE: ./app/web/component/layout/index/trace.js






var getTraceHost = function getTraceHost(env) {
  var hostMap = {
    dev: 'https://webtest-mapstatic.coros.com',
    prod: 'https://mapstatic.coros.com'
  };
  return hostMap[/^.*.prod$/.test(env) ? 'prod' : 'dev'];
};
function initTrace() {
  return _initTrace.apply(this, arguments);
}
function _initTrace() {
  _initTrace = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee() {
    var _featureStatus$disabl, _context, corosTrace, _ref, env, locale, country, ext, traceTokenMask, featureStatus, thisRegion, nonce, mask, trace_app_id;
    return regenerator_default().wrap(function _callee$(_context2) {
      while (1) switch (_context2.prev = _context2.next) {
        case 0:
          if (true) {
            _context2.next = 2;
            break;
          }
          return _context2.abrupt("return");
        case 2:
          _context2.prev = 2;
          console.log("\uD83D\uDD14 init trace");
          corosTrace = __webpack_require__(81725);
          _ref = window.__INITIAL_STATE__ || {}, env = _ref.env, locale = _ref.locale, country = _ref.country, ext = _ref._trace_ext, traceTokenMask = _ref.traceTokenMask, featureStatus = _ref.featureStatus; // traceTokenMask 没有正确生成
          if (traceTokenMask) {
            _context2.next = 8;
            break;
          }
          return _context2.abrupt("return");
        case 8:
          if (!((featureStatus === null || featureStatus === void 0 || (_featureStatus$disabl = featureStatus.disable_webv2_trace) === null || _featureStatus$disabl === void 0 ? void 0 : _featureStatus$disabl.value) === true)) {
            _context2.next = 10;
            break;
          }
          return _context2.abrupt("return");
        case 10:
          thisRegion = concat_default()(_context = "".concat(locale === 'jp' ? 'ja' : locale === 'cn' ? 'zh' : locale, "-")).call(_context, country.toUpperCase());
          if (country === 'eu') {
            thisRegion = 'en-EU';
          }
          nonce = traceTokenMask.nonce, mask = traceTokenMask.mask, trace_app_id = traceTokenMask.trace_app_id;
          if (!(!nonce || !mask || !trace_app_id)) {
            _context2.next = 15;
            break;
          }
          return _context2.abrupt("return");
        case 15:
          // console.log(`🔔 corosTrace.install`);
          corosTrace.install((vue_common_prod_default()), {
            request_url: "".concat(getTraceHost(env), "/traceapi"),
            app_name: 'web-v2',
            app_id: trace_app_id,
            app_env: env,
            nonce: nonce,
            mask: mask,
            // locale 不标准，改用 thisRegion
            locale: thisRegion,
            ext: ext,
            pvReportEnable: true,
            feature: {
              // event: true,
              // performance: { server: true },
              pv: true
            },
            maxWaitingTime: 1000,
            maxCacheLen: 2
          });
          _context2.next = 21;
          break;
        case 18:
          _context2.prev = 18;
          _context2.t0 = _context2["catch"](2);
          console.error('initTrace error', _context2.t0);
        case 21:
        case "end":
          return _context2.stop();
      }
    }, _callee, null, [[2, 18]]);
  }));
  return _initTrace.apply(this, arguments);
}
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/global-this.js
var global_this = __webpack_require__(92381);
var global_this_default = /*#__PURE__*/__webpack_require__.n(global_this);
// EXTERNAL MODULE: ./node_modules/lodash/debounce.js
var debounce = __webpack_require__(23279);
var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce);
;// CONCATENATED MODULE: ./app/web/component/layout/index/directives/inViewport/index.js
var _globalThis$addEventL;





var _cbs = [];

/**
 * 检查指定元素是否在视窗内：顶端进入视窗，底端退出视窗
 * @param {Element} el 元素
 * @returns Boolean
 */
function isInViewport(el) {
  if (!el) return false;
  var rect = el.getBoundingClientRect();
  return (rect.top >= 0 && window.innerHeight - rect.top >= 0 || rect.bottom >= 0 && window.innerHeight - rect.bottom >= 0 || rect.top <= 0 && rect.bottom >= 0) && rect.left >= 0 && rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */;
}
function addCb(el) {
  var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'in-viewport';
  var inviewCallback = arguments.length > 2 ? arguments[2] : undefined;
  var outviewCallback = arguments.length > 3 ? arguments[3] : undefined;
  el._inViewportCb = function () {
    if (isInViewport(el)) {
      inviewCallback && inviewCallback(el);
      // inviewCallback && console.log(className);
      el.classList.add(className);
    } else {
      outviewCallback && outviewCallback(el);
      el.classList.remove(className);
    }
  };
  _cbs.push(el._inViewportCb);
}
function removeCb(el) {
  var cb = el._inViewportCb;
  _cbs = filter_default()(_cbs).call(_cbs, function (fn) {
    return fn !== cb;
  });
  el._inViewportCb = null;
}
var handleScroll = debounce_default()(function () {
  for_each_default()(_cbs).call(_cbs, function (fn) {
    if (typeof fn === 'function') fn();
  });
}, 100);
(_globalThis$addEventL = (global_this_default()).addEventListener) === null || _globalThis$addEventL === void 0 || _globalThis$addEventL.call((global_this_default()), 'scroll', handleScroll);
/* harmony default export */ const inViewport = ({
  name: 'inViewport',
  bind: function bind(el, binding) {
    vue_common_prod_default().nextTick(function () {
      var _binding$value = binding.value,
        _binding$value$classN = _binding$value.className,
        className = _binding$value$classN === void 0 ? 'in-viewport' : _binding$value$classN,
        inview = _binding$value.inview,
        outview = _binding$value.outview;
      var className2add = binding.expression ? className : undefined;
      addCb(el, className2add, inview, outview);
    });
  },
  unbind: function unbind(el) {
    removeCb(el);
  }
});
// EXTERNAL MODULE: ./app/web/component/layout/index/directives/imageTransform/index.js
var imageTransform = __webpack_require__(11085);
// EXTERNAL MODULE: ./app/web/component/layout/index/styles/app.scss
var app = __webpack_require__(79828);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/theme-chalk/index.css
var theme_chalk = __webpack_require__(52712);
;// CONCATENATED MODULE: ./app/web/component/layout/index/index.js









function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }







vue_common_prod_default().use(index_components); // 全局组件

// element-ui

vue_common_prod_default().use(elementUi);
vue_common_prod_default().use((vue_clipboard_default()));


vue_common_prod_default().use(index_plugin);
(vue_common_prod_default()).prototype.$helper = helper/* default */.Z;
(vue_common_prod_default()).prototype.$moment = (moment_default());
(vue_common_prod_default()).prototype.$ELEMENT = _objectSpread(_objectSpread({}, (vue_common_prod_default()).prototype.$ELEMENT || {}), {}, {
  zIndex: 2001
});


vue_common_prod_default().use(dataBus/* default */.ZP);

if (true) {
  initTrace();
  __webpack_require__(76891);
  __webpack_require__(47128);
  __webpack_require__(13638);
  __webpack_require__(42263);
  (__webpack_require__(19781)/* .initSentry */ .j)((vue_common_prod_default()));
  if (false) {}
}


vue_common_prod_default().directive('in-viewport', inViewport);
vue_common_prod_default().directive('image-transform', {
  inserted: imageTransform/* default */.ZP,
  update: imageTransform/* default */.ZP
});


var Layout = (0,layout/* default */.Z)('Layout', {
  MainLayout: main
}, '<div id="app" data-server-rendered="true" :data-nosnippet="noGoogleSnippet"><MainLayout :baseClass="baseClass" slot="main"><template v-slot:main><slot></slot></template></MainLayout></div>', dataBus/* resizeCb */.YX);
vue_common_prod_default().component('MainLayout', Layout);
/* harmony default export */ const index = (Layout);

/***/ }),

/***/ 42263:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var lazysizes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77090);
/* harmony import */ var lazysizes__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lazysizes__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var lazysizes_plugins_respimg_ls_respimg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23501);
/* harmony import */ var lazysizes_plugins_respimg_ls_respimg__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lazysizes_plugins_respimg_ls_respimg__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var lazysizes_plugins_unveilhooks_ls_unveilhooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(90082);
/* harmony import */ var lazysizes_plugins_unveilhooks_ls_unveilhooks__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lazysizes_plugins_unveilhooks_ls_unveilhooks__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var lazysizes_plugins_native_loading_ls_native_loading__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(10627);
/* harmony import */ var lazysizes_plugins_native_loading_ls_native_loading__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lazysizes_plugins_native_loading_ls_native_loading__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var lazysizes_plugins_blur_up_ls_blur_up__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(54740);
/* harmony import */ var lazysizes_plugins_blur_up_ls_blur_up__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lazysizes_plugins_blur_up_ls_blur_up__WEBPACK_IMPORTED_MODULE_4__);





(lazysizes__WEBPACK_IMPORTED_MODULE_0___default().cfg.nativeLoading) = {
  setLoadingAttribute: true,
  disableListeners: {
    scroll: true
  }
};

/***/ }),

/***/ 13638:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_corejs3_core_js_promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(35820);
/* harmony import */ var _babel_runtime_corejs3_core_js_promise__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_promise__WEBPACK_IMPORTED_MODULE_0__);

var existingHook = System.constructor.prototype.createScript;
System.constructor.prototype.createScript = function (args) {
  return _babel_runtime_corejs3_core_js_promise__WEBPACK_IMPORTED_MODULE_0___default().resolve(existingHook.call(this, args)).then(function (scriptEl) {
    scriptEl.crossOrigin = null;
    return scriptEl;
  });
};

/***/ }),

/***/ 19781:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "j": () => (/* binding */ initSentry)
});

// UNUSED EXPORTS: getQuery

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.search.js
var es_string_search = __webpack_require__(61514);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js
var reduce = __webpack_require__(53706);
;// CONCATENATED MODULE: ./app/web/component/layout/index/config/sentry.js
/* harmony default export */ const sentry = ({
  dsn: 'https://369dedd0f8df4828957b834c535e3152@sentry.coros.com/2'
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/utils/index.js






var getQuery = function getQuery() {
  if (true) {
    var _context;
    return _reduceInstanceProperty(_context = location.search.replace('?', '').split('&')).call(_context, function (acc, cur) {
      var _decodeURIComponent$s = decodeURIComponent(cur).split('='),
        _decodeURIComponent$s2 = _slicedToArray(_decodeURIComponent$s, 2),
        key = _decodeURIComponent$s2[0],
        value = _decodeURIComponent$s2[1];
      acc[key] = value;
      return acc;
    }, {});
  }
  return {};
};
var initSentry = function initSentry(Vue) {
  /************* sentry 哨兵监控 ****************/
  try {
    var _window$__INITIAL_STA = window.__INITIAL_STATE__,
      version = _window$__INITIAL_STA.version,
      web_dsn = _window$__INITIAL_STA.web_dsn,
      env = _window$__INITIAL_STA.env;
    if (web_dsn) {
      var Sentry = __webpack_require__(20122);
      Sentry.init({
        Vue: Vue,
        dsn: web_dsn,
        environment: env,
        release: version,
        tracesSampleRate: 1.0,
        debug: false
      });
      document.body.addEventListener("error", function (event) {
        if (!event.target) return;
        if (event.target.tagName === 'IMG') {
          Sentry.captureMessage("Failed to load image: ".concat(event.target.src), Sentry.Severity.Warning);
        } else if (event.target.tagName === 'LINK') {
          Sentry.captureMessage("Failed to load css: ".concat(event.target.href), Sentry.Severity.Warning);
        }
      }, true);
    }
    /************* end ****************/
  } catch (err) {
    console.log('sentry init error', err);
  }
};

/***/ }),

/***/ 10613:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ createLayout)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.js
var es_symbol = __webpack_require__(59749);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.symbol.description.js
var es_symbol_description = __webpack_require__(86544);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
;// CONCATENATED MODULE: ./node_modules/raw-loader/dist/cjs.js!./app/web/component/layout/scripts/inline.js
/* harmony default export */ const inline = ("");
;// CONCATENATED MODULE: ./node_modules/url-loader/dist/cjs.js?limit=false&name=[contenthash].[ext]!./app/web/component/layout/scripts/cookieconsent-init.js
/* harmony default export */ const cookieconsent_init = (__webpack_require__.p + "d9e8d3c0445c490ff17635a8820ec257.js");
;// CONCATENATED MODULE: ./app/web/component/layout/scripts/track.js

var GTM_IDS = {
  us: 'GTM-KT9K7K8',
  uk: 'GTM-K5MSX8BT',
  fr: 'GTM-TWW94CX5'
};
var getGTM = function getGTM(country, granted) {
  var gtmId = GTM_IDS[country] || GTM_IDS.us;
  return {
    script: "<script>\n      window.dataLayer = window.dataLayer || [];\n      function gtag(){dataLayer.push(arguments);}\n\n      gtag('consent', 'default', {\n        'ad_storage': 'denied',\n        'ad_user_data': 'denied',\n        'ad_personalization': 'denied',\n        'analytics_storage': 'denied'\n      });\n\n      function updateGtmConsent(granted) {\n        const consentMode = granted ? 'granted' : 'denied';\n          gtag('consent', 'update',{\n          'ad_storage': consentMode,\n          'ad_user_data': consentMode,\n          'ad_personalization': consentMode,\n          'analytics_storage': consentMode\n        });\n      }\n    </script>\n    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n      new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n      j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n      'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n      })(window,document,'script','dataLayer','".concat(gtmId, "');</script>"),
    noScript: "<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=".concat(gtmId, "\"\n    height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>")
  };
};
var facebook = {
  parseScript: function parseScript(id, granted) {
    var _context;
    return concat_default()(_context = "<script>\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n    n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s)}(window, document,'script',\n  'https://connect.facebook.net/en_US/fbevents.js');\n  ".concat(granted ? '' : "fbq('consent', 'revoke');", "\n  fbq('init', '")).call(_context, id, "');\n  fbq('track', 'PageView');\n</script>");
  },
  parseNoScript: function parseNoScript(id) {
    return "<noscript>\n<img height=\"1\" width=\"1\" style=\"display:none\" src=\"https://www.facebook.com/tr?id=".concat(id, "&ev=PageView&noscript=1\" />\n</noscript>");
  }
};
var clarity = "<script type=\"text/plain\" data-cookiecategory=\"analytics\">\n(function(c,l,a,r,i,t,y){\nc[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\nt=l.createElement(r);t.async=1;t.src='https://www.clarity.ms/tag/'+i;\ny=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n})(window, document, 'clarity', 'script', 'bcu0vs3zxg');\n</script>";
var amazon = {
  script: "<!-- Use of this pixel is subject to the Amazon ad specs and policies at http://www.amazon.com/b/?&node=7253015011 --><script type=\"text/plain\" data-cookiecategory=\"targeting\">window.onload = function(){var _pix = document.getElementById('_pix_id_81344993-15e0-a8c9-61a7-faaa02cff9ff');if (!_pix) { var protocol = '//'; var a = Math.random() * 1000000000000000000; _pix = document.createElement('iframe'); _pix.style.display = 'none'; _pix.setAttribute('src', protocol + 's.amazon-adsystem.com/iu3?d=generic&ex-fargs=%3Fid%3D81344993-15e0-a8c9-61a7-faaa02cff9ff%26type%3D54%26m%3D1&ex-fch=416613&ex-src=https://www.coros.com/&ex-hargs=v%3D1.0%3Bc%3D589038346105199370%3Bp%3D81344993-15E0-A8C9-61A7-FAAA02CFF9FF' + '&cb=' + a); _pix.setAttribute('id','_pix_id_81344993-15e0-a8c9-61a7-faaa02cff9ff'); document.body.appendChild(_pix);}}</script>",
  noScript: "<noscript> <img height='1' width='1' border='0' alt='' src='https://s.amazon-adsystem.com/iui3?d=forester-did&ex-fargs=%3Fid%3D81344993-15e0-a8c9-61a7-faaa02cff9ff%26type%3D54%26m%3D1&ex-fch=416613&ex-src=https://www.coros.com/&ex-hargs=v%3D1.0%3Bc%3D589038346105199370%3Bp%3D81344993-15E0-A8C9-61A7-FAAA02CFF9FF' /></noscript>"
};

// https://ui.mountain.com/developer?aid=33563
var mntnTrackingScript = "<!--MNTN Tracking Pixel-->\n<script type=\"text/plain\" data-cookiecategory=\"targeting\">\n\t(function(){\"use strict\";var e=null,b=\"4.0.0\",\n\tn=\"33563\",\n\tadditional=\"term=value\",\n\tt,r,i;try{t=top.document.referer!==\"\"?encodeURIComponent(top.document.referrer.substring(0,2048)):\"\"}catch(o){t=document.referrer!==null?document.referrer.toString().substring(0,2048):\"\"}try{r=window&&window.top&&document.location&&window.top.location===document.location?document.location:window&&window.top&&window.top.location&&\"\"!==window.top.location?window.top.location:document.location}catch(u){r=document.location}try{i=parent.location.href!==\"\"?encodeURIComponent(parent.location.href.toString().substring(0,2048)):\"\"}catch(a){try{i=r!==null?encodeURIComponent(r.toString().substring(0,2048)):\"\"}catch(f){i=\"\"}}var l,c=document.createElement(\"script\"),h=null,p=document.getElementsByTagName(\"script\"),d=Number(p.length)-1,v=document.getElementsByTagName(\"script\")[d];if(typeof l===\"undefined\"){l=Math.floor(Math.random()*1e17)}h=\"dx.mountain.com/spx?\"+\"dxver=\"+b+\"&shaid=\"+n+\"&tdr=\"+t+\"&plh=\"+i+\"&cb=\"+l+additional;c.type=\"text/javascript\";c.src=(\"https:\"===document.location.protocol?\"https://\":\"http://\")+h;v.parentNode.insertBefore(c,v)})()\n</script>";
var grinScript = "<script type=\"text/plain\" data-cookiecategory=\"targeting\">(function () {Grin = window.Grin || (window.Grin = []);var s = document.createElement('script');s.type = 'text/javascript';s.async = true;s.src = 'https://d38xvr37kwwhcm.cloudfront.net/js/grin-sdk.js';var x = document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();</script>";
var affiliatlyTracking = "<script type=\"text/javascript\" src=\"https://static.affiliatly.com/shopify/v3/shopify_subdomain.js?affiliatly_code=AF-1061249&s=2\"></script>";
var a11yPluginGlobal = "<script async defer\nid=\"aweb-script\"\ntype=\"text/javascript\"\nsrc=\"https://ramp.accessibleweb.com/badge/eRErj6R-lgheoVmozu3ZlbhpMAABSwVO1M2CYdWCDGQ/script.js\"></script> ";
var a11yPluginUs = "<script async defer\nid=\"aweb-script\"\ntype=\"text/javascript\"\nsrc=\"https://ramp.accessibleweb.com/badge/BtMHG9EIiEOHBx0Tq6igZgJK87yHvaPjt2rPRnQcBVE/script.js\"></script>";
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
;// CONCATENATED MODULE: ./app/web/component/layout/layout.js










function createLayout(name, components, tpl, mountedCb) {
  return {
    name: name,
    props: {
      title: {
        type: String
      },
      description: {
        type: String
      },
      ogTitle: {
        type: String
      },
      ogDescription: {
        type: String
      },
      keywords: {
        type: String
      },
      meta: {
        type: Array,
        "default": function _default() {
          return [];
        }
      },
      amazonPixel: {
        type: Boolean,
        "default": false
      },
      injectJs: {
        type: Boolean,
        "default": true
      },
      noGoogleSnippet: {
        type: Boolean,
        "default": false
      },
      canonical: {
        type: String,
        "default": ''
      },
      customHeadScripts: {
        type: String,
        "default": ''
      },
      noIndex: {
        type: Boolean,
        "default": false
      },
      aliNvc: {
        type: Boolean,
        "default": false
      },
      structuredData: {
        type: String
      },
      headCss: {
        type: String
      }
    },
    components: components,
    computed: {
      vTitle: function vTitle() {
        return this.$root.pageTitle || this.title || 'COROS | Performance Sports Technology';
      },
      vKeywords: function vKeywords() {
        return this.$root.pageKeywords || this.keywords || 'COROS, VERTIX, VERTIX2, APEX, APEXPRO, POD, PACE2, PACE2 EK, Performance Sports Technology, Premium GPS sport watches';
      },
      vDescription: function vDescription() {
        return this.$root.pageDescription || this.description || 'Premium GPS sport watches built for runners, adventurers and all athletes. COROS leads the revolution of athletic training through advanced technology.';
      },
      vOgTitle: function vOgTitle() {
        return this.ogTitle || this.vTitle;
      },
      vOgDescription: function vOgDescription() {
        return this.ogDescription || this.vDescription;
      },
      vMeta: function vMeta() {
        var meta = this.$root.pageMeta || this.meta || [{
          name: 'og:type',
          content: 'website'
        }, {
          name: 'og:site_name',
          content: 'COROS'
        }];
        return meta;
      },
      baseClass: function baseClass() {
        return this.$root.baseClass;
      },
      inlineJSFileScript: function inlineJSFileScript() {
        return "<script>".concat(inline, "</script>");
      },
      cookieconsentInitJSFileScript: function cookieconsentInitJSFileScript() {
        var _context;
        if (!this.injectJs) return '';
        var url = (0,assetsRequire/* assetsRequire */.y)('@assets/static/js/cookieconsent@v2.8.0.js');
        var initUrl = cookieconsent_init;
        return concat_default()(_context = "<script defer src=\"".concat(url, "\"></script><script src=\"")).call(_context, initUrl, "\"></script>");
      },
      prebodyJSScript: function prebodyJSScript() {
        var _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9;
        var country = this.$root.country;
        var isCn = this.$root.country === 'cn';
        var isUs = this.$root.country === 'us';
        var shouldInjectMntnScript = includes_default()(_context2 = ['us']).call(_context2, this.$root.country);
        if (!this.injectJs) return '';
        if (false) {}
        return concat_default()(_context3 = concat_default()(_context4 = concat_default()(_context5 = concat_default()(_context6 = concat_default()(_context7 = "\n        ".concat(this.customHeadScripts, "\n        ")).call(_context7, !isCn ? clarity + getGTM(country, includes_default()(_context8 = this.$root.grantedCookies).call(_context8, 'targeting')).script : '', "\n        ")).call(_context6, this.$root.facebookPixel ? facebook.parseScript(this.$root.facebookPixel, includes_default()(_context9 = this.$root.grantedCookies).call(_context9, 'targeting')) : '', "\n        ")).call(_context5, this.amazonPixel ? amazon.script : '', "\n        ")).call(_context4, shouldInjectMntnScript ? mntnTrackingScript : '', "\n        ")).call(_context3, isUs ? grinScript : '', "\n        ");
      },
      isProd: function isProd() {
        return /prod/.test(this.$root.env);
      },
      postJsScript: function postJsScript() {
        if (this.$root.country === 'us') {
          if (this.isProd) {
            if (this.$root.host === 'us.coros.com') {
              return a11yPluginUs;
            }
            return a11yPluginGlobal;
          }
        }
        return this.$root.country === 'fr' ? affiliatlyTracking : '';
      },
      innerbodyJSScript: function innerbodyJSScript() {
        var _context10, _context11, _context12;
        if (false) {}
        var country = this.$root.country;
        if (!this.injectJs) return '';
        var isCn = this.$root.country === 'cn';
        return concat_default()(_context10 = concat_default()(_context11 = "\n        ".concat(!isCn ? getGTM(country, includes_default()(_context12 = this.$root.grantedCookies).call(_context12, 'targeting')).noScript : '', "\n        ")).call(_context11, this.$root.facebookPixel ? facebook.parseNoScript(this.$root.facebookPixel) : '', "\n        ")).call(_context10, this.amazonPixel ? amazon.noScript : '', "\n        ");
      },
      normalizeLang: function normalizeLang() {
        var localeMaps = {
          cn: 'zh',
          jp: 'ja'
        };
        return localeMaps[this.$root.locale] || this.$root.locale;
      },
      headStyleLink: function headStyleLink() {
        var _context13;
        var isCnServer = !/en/.test(this.$root.env);
        var isCnJp = this.$root.country === 'cn' || this.$root.country === 'jp';
        var css = [concat_default()(_context13 = "https://static".concat(isCnServer || isCnJp ? 'cn' : '', ".coros.com/coros-web-faq/upload/webv2-fonts/")).call(_context13, this.isProd ? 'prod' : 'test', "/basic.css")];
        if (this.headCss) css.push(this.headCss);
        return css;
      }
    },
    mounted: function mounted() {
      if (typeof mountedCb === 'function') {
        mountedCb.call(this);
      }
    },
    created: function created() {
      // 客户端渲染使用的是静态模板，静态模板里缺失一些服务端渲染的东西，这里补上。
      // 后面使用tpl 动态模板统一？
      if (true) {
        if (document.querySelector('head base')) {
          return;
        }
        var baseEl = document.createElement('base');
        baseEl.setAttribute('href', this.$root.baseHref);
        document.querySelector('head').appendChild(baseEl);
      }
    },
    template:  true ? tpl : 0,
    install: function install() {}
  };
}

/***/ }),

/***/ 37680:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ template)
});

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./app/web/component/layout/layout.js + 3 modules
var layout = __webpack_require__(10613);
;// CONCATENATED MODULE: ./app/web/component/layout/default.js

/* harmony default export */ const layout_default = ((0,layout/* default */.Z)('Layout', {}, '<div id="app" data-server-rendered="true"><slot></slot></div>'));
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/axios/index.js
var axios = __webpack_require__(9669);
var axios_default = /*#__PURE__*/__webpack_require__.n(axios);
;// CONCATENATED MODULE: ./app/web/assets/js/openApiSign.js
// openapi 加签算法
const md5 = __webpack_require__(2568);
function signParams(params, app_secret) {
  let params_keys = Object.keys(params).sort((a, b) => {
    if (a > b) {
      return 1;
    } else {
      return -1;
    }
  });
  let str = '';
  params_keys.forEach((item) => {
    str += item + params[item];
  });
  str += app_secret;
  let sign_str = md5(str).toUpperCase();
  return sign_str;
}

/* harmony default export */ const openApiSign = (signParams);

;// CONCATENATED MODULE: ./app/web/framework/http/request.js








// axios.defaults.baseURL = 'http://127.0.0.1:7001';
(axios_default()).defaults.timeout = 120000;
(axios_default()).defaults.xsrfHeaderName = 'x-csrf-token';
(axios_default()).defaults.xsrfCookieName = 'csrfToken';

var app = {
  test: {
    app_id: '1656988961565501084',
    app_secret: 'e97d0d505e5678d1e6f67c0e0a80d1c2'
  },
  prod: {
    app_id: '1660188068672619112',
    app_secret: 'e03f8a02bd61636076a0c4a87320a5f4'
  }
};
/* harmony default export */ const request = ({
  post: function post(url, json) {
    var store = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var headers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
    var _store$state = store.state,
      state = _store$state === void 0 ? {
        origin: ''
      } : _store$state;
    if (false) { var _context; } else {
      var _context2;
      return axios_default().post(concat_default()(_context2 = "".concat(state.origin)).call(_context2, url), json, {
        headers: headers
      });
    }
  },
  get: function get(url) {
    var _context3;
    var store = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var headers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var _store$state2 = store.state,
      state = _store$state2 === void 0 ? {
        origin: ''
      } : _store$state2;
    return axios_default().get(concat_default()(_context3 = "".concat(state.origin)).call(_context3, url), {
      headers: headers
    });
  },
  openapiPost: function openapiPost(url) {
    var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var headers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    var env = this.getEnvApp();
    var _app$env = app[env],
      app_id = _app$env.app_id,
      app_secret = _app$env.app_secret;
    ;
    if (data instanceof FormData) {
      data.append('app_id', app_id);
      var sign = openApiSign(data, app_secret);
      data.append('sign', sign);
    } else {
      delete data.sign;
      data.app_id = app_id;
      data.sign = openApiSign(data, app_secret);
    }
    return axios_default().post("".concat(url), data, {
      headers: headers
    });
  },
  openapiGet: function openapiGet(url) {
    var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var headers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
    delete data.sign;
    var env = this.getEnvApp();
    data.app_id = app[env].app_id;
    var sign = openApiSign(data, app[env].app_secret);
    data.sign = sign;
    return axios_default().get("".concat(url), {
      headers: headers,
      params: data
    });
  },
  joinParams: function joinParams(params) {
    var str = '';
    for (var key in params) {
      if (params[key] instanceof Array) {
        str += key + '=' + params[key].join(',') + '&';
      } else {
        str += key + '=' + params[key] + '&';
      }
    }
    str = slice_default()(str).call(str, 0, -1);
    return str;
  },
  getEnvApp: function getEnvApp() {
    var env = window.__INITIAL_STATE__.env;
    var reg_test = /.*(\.test|local)/;
    var reg_prod = /.*(\.prod)/;
    var _env = 'prod';
    if (reg_test.test(env)) {
      _env = 'test';
    } else if (reg_prod.test(env)) {
      _env = 'prod';
    }
    return _env;
  }
});
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
;// CONCATENATED MODULE: ./app/web/framework/plugin/index.js




/* harmony default export */ const framework_plugin = ({
  install: function install(Vue) {
    if (!Vue.prototype.hasOwnProperty('$http')) {
      Vue.prototype.$http = request;
    }
    if (!Vue.prototype.hasOwnProperty('assetsRequire')) {
      Vue.prototype.assetsRequire = assetsRequire/* assetsRequire */.y;
    }
  }
});
;// CONCATENATED MODULE: ./app/web/framework/entry/template.js




// vue-entry-loader 自定义全局注册钩子，如果在该目录下面存在该 template.js 框架自动加载，用于注册全局的组件
/* harmony default export */ function template(Vue) {
  Vue.use(framework_plugin);
  Vue.component(layout_default.name, layout_default);
}

/***/ }),

/***/ 97675:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "BJ": () => (/* binding */ hrmSpecs),
/* harmony export */   "LL": () => (/* binding */ universalGroupedSpecs4pod2),
/* harmony export */   "Nd": () => (/* binding */ duraSpecs),
/* harmony export */   "eX": () => (/* binding */ groupedSpecsInCn4pod2),
/* harmony export */   "uT": () => (/* binding */ groupedSpecs4cn),
/* harmony export */   "wH": () => (/* binding */ allWatches),
/* harmony export */   "ys": () => (/* binding */ groupedSpecs)
/* harmony export */ });
var groupedSpecs = [{
  title: 'Size and Weight',
  specs: ['Dimensions', 'Weight']
}, {
  title: 'Display',
  specs: ['Display Size', 'Display Resolution', 'Display Type']
}, {
  title: 'Materials',
  specs: ['Screen Material', 'Bezel Material', 'Cover Material', 'Band Material']
}, {
  title: 'Watch Band',
  specs: ['Width', 'Size - Nylon', 'Size - Silicone', 'Installation Type']
}, {
  title: 'Design',
  specs: ['Button']
}, {
  title: 'Connectivity',
  specs: ['Phone', 'Accessories', 'Data Sync']
}, {
  title: 'Durability',
  specs: ['Water Resistance', 'Working Temperature', 'Storage Temperature']
}, {
  title: 'Battery',
  subTitle: 'batteryDesc',
  specs: ['Standard Full GPS', 'All Systems On', 'All Systems + Dual Frequency On', 'Daily Use', 'Charging Time']
}, {
  title: 'Memory',
  specs: ['Internal Memory', 'Activity Memory']
}, {
  title: 'Geo Location',
  specs: ['Satellite Systems', 'GNSS Chipset']
}, {
  title: 'Navigation',
  specs: ['Map Layer', 'Additional Features']
}, {
  title: 'Data Tracking',
  specs: ['Sensors', 'Training Features', 'Daily Features']
}, {
  title: '3rd Party Integration',
  specs: ['Compatible Apps']
}, {
  title: 'System Languages',
  specs: ['Display Language']
}, {
  title: 'Supported Activity Modes',
  specs: ['Run', 'Climb', 'Bike', 'Water', 'Winter', 'Cardio', 'Special']
}];
var groupedSpecs4cn = [{
  title: 'Size and Weight',
  specs: ['Dimensions', 'Weight']
}, {
  title: 'Display',
  specs: ['Display Size', 'Display Resolution', 'Display Type']
}, {
  title: 'Materials',
  specs: ['Screen Material', 'Bezel Material', 'Cover Material', 'Band Material']
}, {
  title: 'Watch Band',
  specs: ['Width', 'Size - Nylon', 'Size - Silicone', 'Installation Type']
}, {
  title: 'Design',
  specs: ['Button']
}, {
  title: 'Connectivity',
  specs: ['Phone', 'Accessories', 'Data Sync']
}, {
  title: 'Durability',
  specs: ['Water Resistance', 'Working Temperature', 'Storage Temperature']
}, {
  title: 'Battery',
  subTitle: 'batteryDesc',
  specs: ['Standard Full GPS', 'All Systems On', 'All Systems + Dual Frequency On', 'Daily Use', 'Charging Time']
}, {
  title: 'Memory',
  specs: ['Internal Memory', 'Activity Memory']
}, {
  title: 'Geo Location',
  specs: ['Satellite Systems', 'GNSS Chipset']
}, {
  title: 'Navigation',
  specs: ['Map Layer', 'Additional Features']
}, {
  title: 'Data Tracking',
  specs: ['Sensors', 'Training Features']
}, {
  title: 'Daily Features',
  specs: ['Daily Features']
}, {
  title: '3rd Party Integration',
  specs: ['3rd Party Integration']
}, {
  title: 'System Languages',
  specs: ['System Languages']
}, {
  title: 'Supported Activity Modes',
  specs: ['Run', 'Climb', 'Bike', 'Water', 'Winter', 'Cardio', 'Special']
}];
var universalGroupedSpecs4pod2 = [{
  title: 'Size and Weight',
  specs: ['POD Dimensions', 'Weight - COROS POD 2', 'Weight - Charging Dock']
}, {
  title: 'Materials',
  specs: ['Case Material', 'Foot Clip Material', 'Waist Clip Material']
}, {
  title: 'Connectivity',
  specs: ['COROS App', 'COROS Watch', 'Data Sync']
}, {
  title: 'Compatibility',
  specs: ['Supported Devices']
}, {
  title: 'Durability',
  specs: ['Water Resistance', 'Working Temperature', 'Storage Temperature']
}, {
  title: 'Battery',
  specs: ['Activity Mode', 'Standby Mode', 'Charging Time', 'Charging Dock Capacity', 'Charging Dock Cable']
}, {
  title: 'Sensors',
  specs: ['Sensors']
}, {
  title: 'Features & Metrics',
  specs: ['Features & Metrics']
}];
var groupedSpecsInCn4pod2 = [{
  title: 'Size and Weight',
  specs: ['POD Dimensions', 'Weight - COROS POD 2', 'Weight - Charging Dock']
}, {
  title: 'Materials',
  specs: ['Case Material', 'Foot Clip Material', 'Waist Clip Material']
}, {
  title: 'Connectivity',
  specs: ['COROS App', 'COROS VERTIX 2', 'COROS PACE 2', 'COROS VERTIX', 'COROS APEX Pro', 'COROS APEX 42mm/46mm', 'Data Sync']
}, {
  title: 'Durability',
  specs: ['Water Resistance', 'Working Temperature', 'Storage Temperature']
}, {
  title: 'Battery',
  specs: ['Activity Mode', 'Standby Mode', 'Charging Time', 'Charging Dock Capacity', 'Charging Dock Cable']
}, {
  title: 'Sensors',
  specs: ['Sensors']
}, {
  title: 'Features & Metrics',
  specs: ['Features & Metrics']
}];
var allWatches = [{
  label: 'COROS PACE 3',
  val: 'pace3'
}, {
  label: 'COROS VERTIX 2S',
  val: 'vertix2s'
}, {
  label: 'COROS VERTIX 2',
  val: 'vertix2'
}, {
  label: 'COROS APEX 2 Pro',
  val: 'apex2pro'
}, {
  label: 'COROS APEX 2',
  val: 'apex2'
}, {
  label: 'COROS PACE 2',
  val: 'pace2'
}, {
  label: 'COROS APEX 42mm',
  val: 'apex42',
  notShowInCountry: ['jp', 'de']
}, {
  label: 'COROS APEX 46mm',
  val: 'apex46',
  notShowInCountry: ['jp', 'de']
}, {
  label: 'COROS APEX Pro',
  val: 'apexPro',
  notShowInCountry: ['jp', 'de']
}, {
  label: 'COROS VERTIX',
  val: 'vertix',
  notShowInCountry: ['jp', 'de']
}];
var hrmSpecs = [{
  title: 'Size and Weight',
  specs: ['Hrm Dimensions', 'Hrm Weight - Case Only', 'Hrm Weight - Case + Band']
}, {
  title: 'Materials',
  specs: ['Hrm Band Material']
}, {
  title: 'Sensors',
  specs: ['Hrm Optical Heart Rate Hardware']
}, {
  title: 'Fit',
  specs: ['Hrm Band Circumference', 'Hrm Wearing Position']
}, {
  title: 'Connectivity',
  specs: ['Hrm Wireless Connection', 'Hrm Supported Devices', 'Hrm Data Sync']
}, {
  title: 'Durability',
  specs: ['Hrm Water Resistance', 'Hrm Working Temperature', 'Hrm Storage Temperature', 'Hrm Charging Temperature']
}, {
  title: 'Battery',
  specs: ['Hrm Activity Mode', 'Hrm Standby Mode', 'Hrm Battery Capacity', 'Hrm Charging Time', 'Hrm Charging Cable']
}];
var duraSpecs = [{
  title: 'Dura Size and Weight',
  specs: ['Dura Dimensions', 'Dura Weight - Device', 'Dura Weight - Mount']
}, {
  title: 'Dura Display',
  specs: ['Dura Display Size', 'Dura Display Resolution', 'Dura Display Type']
}, {
  title: 'Dura Materials',
  specs: ['Dura Screen', 'Dura Body', 'Dura Mount']
}, {
  title: 'Dura Out-Front Handlebar Mount',
  specs: ['Dura Length', 'Dura Compatible Handlebars']
}, {
  title: 'Dura Design',
  specs: ['Dura Button']
}, {
  title: 'Dura Connectivity',
  specs: ['Dura Phone', 'Dura Accessories', 'Dura Accessory Types', 'Dura Data Sync']
}, {
  title: 'Dura Durability',
  specs: ['Dura Water & Dust Resistance', 'Dura Working Temperature', 'Dura Storage Temperature']
}, {
  title: 'Dura Battery',
  specs: ['Dura All Systems On', 'Dura All Systems + Dual Frequency On', 'Dura Solar Efficiency', 'Dura Charging Time']
}, {
  title: 'Dura Memory',
  specs: ['Dura Internal Memory', 'Dura Activity Memory']
}, {
  title: 'Dura Geo Location',
  specs: ['Dura Satellite Systems', 'Dura GNSS Chipset']
}, {
  title: 'Dura Navigation',
  specs: ['Dura Map Layer', 'Dura Additional Features']
}, {
  title: 'Dura Data Tracking',
  specs: ['Dura Sensors', 'Dura Training Features', 'Dura Safety Features']
}, {
  title: 'Dura 3rd Party Integration',
  specs: ['Dura Compatible Apps']
}, {
  title: 'Dura System Languages',
  specs: ['Dura Display Language']
}, {
  title: 'Dura Supported Activity Modes',
  specs: ['Dura Outdoor', 'Dura Electric', 'Dura Indoor']
}];

/***/ }),

/***/ 40193:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ main)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js
var classCallCheck = __webpack_require__(68420);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js
var createClass = __webpack_require__(27344);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue?vue&type=template&id=03664226

var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("transition", {
    attrs: {
      name: "dialog-fade"
    },
    on: {
      "after-enter": _vm.afterEnter,
      "after-leave": _vm.afterLeave
    }
  }, [_c("div", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.visible,
      expression: "visible"
    }],
    staticClass: "el-dialog__wrapper",
    attrs: {
      id: "countries-dialog",
      role: "dialog"
    },
    on: {
      click: function click($event) {
        if ($event.target !== $event.currentTarget) return null;
        return _vm.handleWrapperClick.apply(null, arguments);
      }
    }
  }, [_c("div", {
    ref: "dialog",
    staticClass: "dialog-content"
  }, [_c("div", {
    staticClass: "countries-wrapper"
  }, [_vm.showClose ? _c("button", {
    staticClass: "countries-wrapper__close-btn",
    attrs: {
      type: "button",
      "aria-label": "Close"
    },
    on: {
      click: _vm.handleClose
    }
  }, [_c("i", {
    staticClass: "el-icon-close"
  })]) : _vm._e(), _vm._v(" "), _c("h1", {
    staticClass: "title",
    attrs: {
      id: "countries-dialog-header"
    }
  }, [_vm._v(_vm._s(_vm.$_t("common.footer.selectYourLocation")))]), _vm._v(" "), _c("div", {
    staticClass: "flex justify-between flex-wrap"
  }, [_vm._l(_vm.countries, function (country) {
    return _c("div", {
      key: country.i18nName,
      staticClass: "country-item"
    }, [_c("div", {
      staticClass: "country-item__inner relative"
    }, [_c("a", {
      staticClass: "absolute w-full h-full top-0 left-0 border-0 bg-transparent",
      attrs: {
        href: country.link
      }
    }, [_c("img", {
      staticClass: "country-item__img w-full align-middle",
      attrs: {
        alt: "",
        src: country.img
      }
    }), _vm._v(" "), _c("p", {
      staticClass: "country-item__desc whitespace-pre-wrap"
    }, [_vm._v(_vm._s(_vm._f("newLine")(_vm.$_t(country.i18nName))))])])])]);
  }), _vm._v(" "), _vm.countries.length % 5 !== 0 ? _vm._l(_vm.countries.length % 5, function (n) {
    return _c("div", {
      key: n,
      staticClass: "country-item"
    }, [_c("div", {
      staticClass: "placeholder"
    })]);
  }) : _vm._e()], 2)])])])]);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue?vue&type=template&id=03664226

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/trapFocus.js
var trapFocus = __webpack_require__(26386);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue?vue&type=script&lang=js





/* harmony default export */ const CountriesDialogvue_type_script_lang_js = ({
  name: 'CountriesDialog',
  filters: {
    newLine: function newLine(str) {
      // return '';
      return str.replace(/ ?(\()/, '\n$1');
    }
  },
  components: {},
  "extends": element_ui_common.Dialog,
  mixins: [trapFocus/* default */.ZP],
  props: {
    modalClass: {
      type: String,
      "default": 'countries-dialog-modal'
    }
  },
  data: function data() {
    return {
      hasOpened: false
    };
  },
  computed: {
    countries: function countries() {
      return [{
        link: '//au.coros.com',
        img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/ab49dc5ac72ac52d3ab9a0b55079e5fe.png'),
        i18nName: 'CommonHeaderMenu6nav10'
      }, {
        link: '//ca.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_ca_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_ca.png'),
        i18nName: 'CommonHeaderMenu6nav3'
      }, {
        link: '//eu.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/e8fbe45165592d24fce075e99a4a92e0.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/e8fbe45165592d24fce075e99a4a92e0.png'),
        i18nName: 'CommonHeaderMenu6nav9'
      }, {
        link: '//es.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_es_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_es.png'),
        i18nName: 'CommonHeaderMenu6nav8'
      }, {
        link: '//fr.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_fr_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_fr.png'),
        i18nName: 'CommonHeaderMenu6nav4'
      }, {
        link: '//de.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_de_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_de.png'),
        i18nName: 'CommonHeaderMenu6nav5'
      }, {
        link: '//uk.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_uk_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_uk.png'),
        i18nName: 'CommonHeaderMenu6nav2'
      }, {
        link: '//us.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_us_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_us.png'),
        i18nName: 'CommonHeaderMenu6nav1'
      }, {
        link: '//cn.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_zh_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_zh.png'),
        i18nName: 'CommonHeaderMenu6nav6'
      }, {
        link: '//jp.coros.com',
        img: this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_jp_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/country_jp.png'),
        i18nName: 'CommonHeaderMenu6nav7'
      }];
    }
  },
  watch: {
    visible: function visible(val) {
      if (val) {
        this.hasOpened = true;
      }
    }
  },
  mounted: function mounted() {
    var _this = this;
    this.focusableElementsHasChanged = true;
    var appInstance = document.getElementById('app').__vue__;
    this.appTranslate = function (key) {
      return appInstance.$t(key);
    };
    this.$once('hook:beforeDestroy', function () {
      _this.appTranslate = null;
    });
  },
  methods: {
    $_t: function $_t(key) {
      return this.appTranslate ? this.appTranslate(key) : key;
    },
    doNav: function doNav(link) {
      window.location.href = link;
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue?vue&type=script&lang=js
 /* harmony default export */ const NewFooter_CountriesDialogvue_type_script_lang_js = (CountriesDialogvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue?vue&type=style&index=0&id=03664226&prod&lang=scss
var CountriesDialogvue_type_style_index_0_id_03664226_prod_lang_scss = __webpack_require__(98393);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue?vue&type=style&index=0&id=03664226&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/CountriesDialog/index.vue



;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  NewFooter_CountriesDialogvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const CountriesDialog = (component.exports);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/CountriesDialog/main.js




var MessageConstructor = vue_common_prod_default().extend(CountriesDialog);
var instance;
var main_CountriesDialog = /*#__PURE__*/function () {
  function CountriesDialog() {
    (0,classCallCheck/* default */.Z)(this, CountriesDialog);
    this.instance = null;
  }
  return (0,createClass/* default */.Z)(CountriesDialog, [{
    key: "open",
    value: function open() {
      if (!instance) {
        instance = this.createDialog();
      }
      instance.visible = true;
    }
  }, {
    key: "close",
    value: function close() {
      if (!instance) return;
      instance.visible = false;
    }
  }, {
    key: "createDialog",
    value: function createDialog() {
      var _this = this;
      if ((vue_common_prod_default()).prototype.$isServer) return;
      this.instance = new MessageConstructor({
        _parentListeners: {
          'update:visible': function updateVisible(val) {
            _this.instance.visible = val;
          }
        }
      });
      this.instance.$mount();
      document.body.appendChild(this.instance.$el);
      return this.instance;
    }
  }]);
}();
/* harmony default export */ const main = (new main_CountriesDialog());

/***/ }),

/***/ 50840:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
  ins: {
    us: 'https://www.instagram.com/corosglobal',
    uk: 'https://www.instagram.com/COROS_UK',
    ca: 'https://www.instagram.com/coros_canada/',
    fr: 'https://www.instagram.com/corosfrance/',
    es: 'https://www.instagram.com/coros_es/'
  },
  facebook: {
    us: 'https://www.facebook.com/corosglobal',
    uk: 'https://www.facebook.com/COROS_UK',
    ca: 'https://www.facebook.com/coroscanada/',
    fr: 'https://www.facebook.com/corosfrancemontres/'
  },
  tiktok: {
    us: 'https://www.tiktok.com/@corosglobal'
  },
  youtube: {
    us: 'https://www.youtube.com/corosglobal'
  },
  linkedin: {
    us: 'https://www.linkedin.com/company/coros-wearables-inc.'
  },
  us: [{
    link: 'https://www.instagram.com/corosglobal',
    icon: 'icon-instagram1',
    ariaLabel: 'Instagram'
  }, {
    link: 'https://www.facebook.com/corosglobal',
    icon: 'icon-facebook',
    ariaLabel: 'Facebook'
  }, {
    link: 'https://www.tiktok.com/@corosglobal',
    icon: 'icon-douyin',
    ariaLabel: 'TikTok'
  }, {
    link: 'https://www.youtube.com/corosglobal',
    icon: 'icon-Youtube',
    ariaLabel: 'Youtube'
  }, {
    link: 'https://www.linkedin.com/company/coros-wearables-inc.',
    icon: 'icon-linkedin',
    ariaLabel: 'Linkedin'
  }],
  fr: [{
    link: 'https://www.instagram.com/corosfrance/',
    icon: 'icon-instagram1',
    ariaLabel: 'Instagram'
  }, {
    link: 'https://www.facebook.com/corosfrancemontres/',
    icon: 'icon-facebook',
    ariaLabel: 'Facebook'
  }, {
    link: 'https://www.tiktok.com/@corosglobal',
    icon: 'icon-douyin',
    ariaLabel: 'TikTok'
  }, {
    link: 'https://www.youtube.com/corosglobal',
    icon: 'icon-Youtube',
    ariaLabel: 'Youtube'
  }, {
    link: 'https://www.linkedin.com/company/coros-wearables-inc.',
    icon: 'icon-linkedin',
    ariaLabel: 'Linkedin'
  }],
  uk: [{
    link: 'https://www.instagram.com/COROS_UK',
    icon: 'icon-instagram1',
    ariaLabel: 'Instagram'
  }, {
    link: 'https://www.facebook.com/corosuk',
    icon: 'icon-facebook',
    ariaLabel: 'Facebook'
  }, {
    link: 'https://www.tiktok.com/@corosglobal',
    icon: 'icon-douyin',
    ariaLabel: 'TikTok'
  }, {
    link: 'https://www.youtube.com/corosglobal',
    icon: 'icon-Youtube',
    ariaLabel: 'Youtube'
  }, {
    link: 'https://www.linkedin.com/company/coros-wearables-inc.',
    icon: 'icon-linkedin',
    ariaLabel: 'Linkedin'
  }],
  ca: [{
    link: 'https://www.instagram.com/coros_canada/',
    icon: 'icon-instagram1',
    ariaLabel: 'Instagram'
  }, {
    link: 'https://www.facebook.com/coroscanada/',
    icon: 'icon-facebook',
    ariaLabel: 'Facebook'
  }, {
    link: 'https://www.tiktok.com/@corosglobal',
    icon: 'icon-douyin',
    ariaLabel: 'TikTok'
  }, {
    link: 'https://www.youtube.com/corosglobal',
    icon: 'icon-Youtube',
    ariaLabel: 'Youtube'
  }, {
    link: 'https://www.linkedin.com/company/coros-wearables-inc.',
    icon: 'icon-linkedin',
    ariaLabel: 'Linkedin'
  }],
  cn: [{
    qrcode: true,
    link: 'https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzI3Mjc0NjA3OA==&scene=124#wechat_redirect',
    icon: 'icon-weixin',
    ariaLabel: '微信'
  }, {
    link: 'https://weibo.com/COROS2018/profile?rightmod=1&wvr=6&mod=personinfo',
    icon: 'icon-weibo',
    ariaLabel: '微博'
  }, {
    link: 'https://v.douyin.com/FRULGqp/',
    icon: 'icon-douyin',
    ariaLabel: '抖音'
  }, {
    link: 'https://www.xiaohongshu.com/user/profile/5bbb47c2db0ca800017cabfe?xhsshare=CopyLink&appuid=58875dc282ec393791ff5e1f&apptime=1650792333',
    icon: 'icon-xiaohongshu',
    ariaLabel: '小红书'
  }, {
    link: 'https://space.bilibili.com/518800904?spm_id_from=333.337.0.0',
    icon: 'icon-bilibili',
    ariaLabel: '哔哩哔哩'
  }, {
    link: 'https://www.zhihu.com/org/coros-gao-chi',
    icon: 'icon-zhihu',
    ariaLabel: '知乎'
  }],
  jp: [{
    link: 'https://www.instagram.com/corosjp',
    icon: 'icon-instagram1',
    ariaLabel: 'Instagram'
  }, {
    qrcode: true,
    link: 'https://liff.line.me/1645278921-kWRPP32q/?accountId=052qnsoc',
    icon: 'icon-a-ribenline',
    ariaLabel: 'Line'
  }, {
    link: 'https://www.twitter.com/COROSJaPan',
    icon: 'icon-twitter',
    ariaLabel: 'Twitter'
  }, {
    link: 'https://www.facebook.com/COROSJapan',
    icon: 'icon-facebook',
    ariaLabel: 'Facebook'
  }, {
    link: 'https://www.youtube.com/@COROS-JP',
    icon: 'icon-Youtube',
    ariaLabel: 'Youtube'
  }]
});

/***/ }),

/***/ 47003:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Aq": () => (/* binding */ releaseNotes),
/* harmony export */   "IJ": () => (/* binding */ menus),
/* harmony export */   "QO": () => (/* binding */ A11yStatement),
/* harmony export */   "Tf": () => (/* binding */ shippingLinks)
/* harmony export */ });
/* unused harmony export menu4apex2credit */
/* harmony import */ var _www_components_NewFooter_CountriesDialog_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(40193);


var menu4apex2credit = {
  i18n: 'common.footer.apex2credit',
  link: 'apex2credit'
};
var A11yStatement = {
  functional: true,
  render: function render(h) {
    return h("a", {
      "attrs": {
        "href": "#",
        "data-awam-target": true
      },
      "class": "menu-item__link"
    }, ["Accessibility Statement"]);
  }
};
var CountriesBtn = {
  functional: true,
  render: function render(h, _ref) {
    var parent = _ref.parent;
    return h("button", {
      "class": "menu-item__link cursor-pointer bg-transparent border-0 leading-none",
      "attrs": {
        "aria-haspopup": "dialog",
        "aria-controls": "countries-dialog"
      },
      "on": {
        "click": function click() {
          return _www_components_NewFooter_CountriesDialog_main_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].open */ .Z.open();
        }
      }
    }, [parent.$t('common.footer.countries')]);
  }
};
var SupportPage = {
  functional: true,
  render: function render(h, _ref2) {
    var parent = _ref2.parent;
    return h("a", {
      "class": "menu-item__link",
      "attrs": {
        "href": "https://support.coros.com/hc/".concat(parent.$i18n.locale === 'fr' ? 'fr' : 'en-us')
      }
    }, [parent.$t('common.footer.helpCenter')]);
  }
};
var CookieSettings = {
  functional: true,
  render: function render(h, _ref3) {
    var parent = _ref3.parent;
    return h("button", {
      "class": "menu-item__link pointer bg-transparent border-0 leading-none",
      "on": {
        "click": function click() {
          parent.openCookieSetting();
        }
      }
    }, [parent.$t('common.footer.CookieSettings')]);
  }
};
var menus = {
  "default": [{
    i18n: 'common.footer.hardware',
    children: [{
      i18n: 'menu.allProducts',
      link: 'products'
    }, {
      i18n: 'menu.dura',
      link: 'dura'
    }, {
      i18n: 'pace3.productNameShort',
      link: 'pace3'
    }, {
      i18n: 'menu.vertix2s',
      link: 'vertix2s'
    }, {
      i18n: 'CommonHeaderMenu1nav17',
      link: 'apex2'
    },
    // {
    //   i18n: 'common.footer.pod2',
    //   link: 'pod2',
    // },
    {
      i18n: 'hrm.menu',
      link: 'heart-rate-monitor'
    },
    // {
    //   i18n: 'CommonHeaderMenu1nav2',
    //   link: 'vertix',
    // },
    // {
    //   i18n: 'CommonHeaderMenu1nav3',
    //   link: 'apex-pro',
    // },
    // {
    //   i18n: 'CommonHeaderMenu1nav4',
    //   link: 'apex',
    // },
    {
      i18n: 'CommonHeaderMenu1nav8',
      link: 'accessories'
    }]
  }, {
    i18n: 'common.footer.software',
    children: [{
      i18n: 'common.footer.trainingHub',
      link: 'traininghub'
    }, {
      i18n: 'common.footer.evolab',
      link: 'evolab'
    }, {
      i18n: 'common.footer.coach',
      link: 'coaches'
    }, {
      i18n: 'common.footer.ReleaseNotes',
      link: 'https://support.coros.com/hc/en-us/categories/360002663871-Release-Notes'
    }, {
      i18n: 'common.footer.WheretoDownload',
      link: 'getapp'
    }]
  }, {
    i18n: 'common.footer.support',
    children: [{
      i18n: 'common.footer.helpCenter',
      /* eslint-disable */
      comp: SupportPage
      /* eslint-enable */
    }, {
      i18n: 'common.footer.maps',
      link: 'maps'
    }, {
      i18n: 'common.footer.WatchComparison',
      link: 'comparison'
    }, {
      i18n: 'common.footer.warranty',
      link: 'warranty'
    }, {
      i18n: 'common.footer.TermsConditions',
      link: 'terms'
    }, {
      i18n: 'common.footer.PrivacyPolicy',
      link: 'privacy'
    }, {
      i18n: 'common.footer.CookieSettings',
      /* eslint-disable */
      comp: CookieSettings
      /* eslint-enable */
    }]
  }, {
    i18n: 'common.footer.company',
    children: [{
      i18n: 'common.footer.about',
      link: 'about'
    }, {
      i18n: 'common.footer.news',
      link: 'stories/'
    }, {
      i18n: 'common.footer.careers',
      link: 'careers'
    }, {
      i18n: 'common.footer.contact',
      link: 'contact'
    }, {
      i18n: 'common.header.retail',
      link: 'retail'
    }, {
      i18n: 'CommonFooterDealerLogin',
      link: 'https://ify.coros.com/account/login'
    }, {
      i18n: 'common.footer.countries',
      comp: CountriesBtn
    }]
  }],
  cn: [{
    i18n: 'common.footer.software',
    children: [{
      i18n: 'common.footer.WatchComparison',
      link: 'comparison'
    }, {
      i18n: 'common.footer.evolab',
      link: 'evolab'
    }, {
      i18n: 'common.footer.trainingHub',
      link: 'traininghub'
    }
    // {
    //   i18n: 'common.footer.ReleaseNotes',
    //   link: 'https://support.coros.com/hc/en-us/categories/360002663871-Release-Notes',
    // },
    ]
  }, {
    i18n: 'common.footer.support',
    children: [{
      i18n: 'common.footer.helpCenter',
      link: 'https://faq.coros.com/help'
    }, {
      i18n: 'common.footer.warranty',
      link: 'warranty'
    }, {
      i18n: 'common.footer.TermsConditions',
      link: 'terms'
    }, {
      i18n: 'common.footer.PrivacyPolicy',
      link: 'privacy'
    }, {
      i18n: 'common.footer.WheretoDownload',
      link: 'getapp'
    }]
  }, {
    i18n: 'common.footer.aboutMenu',
    children: [{
      i18n: 'common.footer.about',
      link: 'about'
    }, {
      i18n: 'common.footer.contact',
      link: 'contact'
    }, {
      i18n: 'common.footer.careers',
      link: 'careers'
    }, {
      i18n: 'common.footer.countries',
      comp: CountriesBtn
    }]
  }],
  jp: [{
    i18n: 'common.footer.products',
    children: [{
      i18n: 'common.footer.WatchComparison',
      link: 'comparison'
    }, {
      i18n: 'common.footer.trainingHub',
      link: 'traininghub'
    }, {
      i18n: 'common.footer.evolab',
      link: 'evolab'
    }, {
      i18n: 'common.footer.WheretoDownload',
      link: 'getapp'
    }]
  }, {
    i18n: 'common.footer.support',
    children: [{
      i18n: 'common.footer.helpCenter',
      link: 'https://faq.coros.com/help/?locale=ja-JP'
      /* eslint-enable */
    }, {
      i18n: 'common.footer.contact',
      link: 'https://faq.coros.com/help/?locale=ja-JP'
    }, {
      i18n: 'common.footer.maps',
      link: 'maps'
    }, {
      i18n: 'common.footer.shippingReturn',
      link: 'shipping'
    }, {
      i18n: 'common.footer.warranty',
      link: 'https://faq.coros.com/help/faq/63d500d82de22d22f0ffd2b0?locale=ja-JP'
    }, {
      i18n: '特定商取引法に基づく表記',
      link: 'warranty'
    }, {
      i18n: 'common.footer.TermsConditions',
      link: 'terms'
    }, {
      i18n: 'common.footer.PrivacyPolicy',
      link: 'privacy'
    }, {
      i18n: 'common.footer.CookieSettings',
      comp: CookieSettings
    }]
  }, {
    i18n: 'common.footer.company',
    children: [{
      i18n: 'common.footer.about',
      link: 'about'
    }, {
      i18n: 'common.footer.news',
      link: 'stories/'
    }, {
      i18n: 'common.header.retail',
      link: 'retail'
    }, {
      i18n: 'common.footer.countries',
      comp: CountriesBtn
    }]
  }]
};
var shippingLinks = {
  us: 'https://support.coros.com/hc/en-us/articles/360039803092-Shipping',
  ca: 'https://support.coros.com/hc/en-us/articles/7190128476692',
  uk: 'https://support.coros.com/hc/en-us/articles/7274281522324',
  au: 'https://support.coros.com/hc/en-us/articles/21202434036244'
};
var releaseNotes = {
  es: 'https://support.coros.com/hc/es/categories/360002663871-Notas-de-Lanzamiento',
  fr: 'https://support.coros.com/hc/fr/categories/360002663871-Notes-de-Mise-%C3%A0-Jour',
  de: 'https://support.coros.com/hc/de/categories/360002663871-Notas-de-Publicaci%C3%B3n'
};

/***/ }),

/***/ 39533:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "c": () => (/* binding */ calcJpServices)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/reflect/construct.js
var construct = __webpack_require__(24835);
var construct_default = /*#__PURE__*/__webpack_require__.n(construct);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn.js + 1 modules
var possibleConstructorReturn = __webpack_require__(22310);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/getPrototypeOf.js
var getPrototypeOf = __webpack_require__(3362);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/inherits.js + 1 modules
var inherits = __webpack_require__(84441);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js
var classCallCheck = __webpack_require__(68420);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js
var createClass = __webpack_require__(27344);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find.js
var find = __webpack_require__(86981);
var find_default = /*#__PURE__*/__webpack_require__.n(find);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/splice.js
var splice = __webpack_require__(90143);
var splice_default = /*#__PURE__*/__webpack_require__.n(splice);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewFooter/constant.js
var constant = __webpack_require__(47003);
;// CONCATENATED MODULE: ./app/web/projects/www/refurbished/utils.js

var isRefurbished = function isRefurbished(product) {
  var _product$metafields;
  return product && !!((_product$metafields = product.metafields) !== null && _product$metafields !== void 0 && (_product$metafields = find_default()(_product$metafields).call(_product$metafields, function (_ref) {
    var key = _ref.key;
    return key === 'open_box_list';
  })) !== null && _product$metafields !== void 0 && _product$metafields.value);
};
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/ProvidedServices/utils.js









function _callSuper(t, o, e) { return o = (0,getPrototypeOf/* default */.Z)(o), (0,possibleConstructorReturn/* default */.Z)(t, _isNativeReflectConstruct() ? construct_default()(o, e || [], (0,getPrototypeOf/* default */.Z)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(construct_default()(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }




var isMug = function isMug(productAlias) {
  return productAlias === 'mug';
};
var isCarabiner = function isCarabiner(productAlias) {
  return productAlias === 'carabiner';
};
var getWarrantyInfo = function getWarrantyInfo(product) {
  if (product) {
    var _product$metafields, _product$metafields2;
    var duration = (_product$metafields = product.metafields) === null || _product$metafields === void 0 || (_product$metafields = find_default()(_product$metafields).call(_product$metafields, function (_ref) {
      var key = _ref.key;
      return key === 'warranty_duration';
    })) === null || _product$metafields === void 0 ? void 0 : _product$metafields.value;
    var url = (_product$metafields2 = product.metafields) === null || _product$metafields2 === void 0 || (_product$metafields2 = find_default()(_product$metafields2).call(_product$metafields2, function (_ref2) {
      var key = _ref2.key;
      return key === 'warranty_url';
    })) === null || _product$metafields2 === void 0 ? void 0 : _product$metafields2.value;
    if (duration) {
      return {
        duration: duration,
        url: url
      };
    }
  }
  return null;
};
var DefaultServices = /*#__PURE__*/function () {
  function DefaultServices() {
    (0,classCallCheck/* default */.Z)(this, DefaultServices);
    this._next = null;
  }
  return (0,createClass/* default */.Z)(DefaultServices, [{
    key: "setNext",
    value: function setNext(nextChain) {
      this._next = nextChain;
      return nextChain;
    }
  }, {
    key: "exec",
    value: function exec() {
      return [];
    }
  }]);
}();
var UsServices = /*#__PURE__*/function (_DefaultServices) {
  function UsServices() {
    (0,classCallCheck/* default */.Z)(this, UsServices);
    return _callSuper(this, UsServices, arguments);
  }
  (0,inherits/* default */.Z)(UsServices, _DefaultServices);
  return (0,createClass/* default */.Z)(UsServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      var freePolicy = 'Free shipping on all\nU.S. orders over $35';
      if (country === 'us') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Free U.S. shipping\n                  at $35+",
          link: constant/* shippingLinks.us */.Tf.us
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Secure online\n                  payment"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} global\n                  warranty"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "30-day money\n                  back guarantee",
          link: constant/* shippingLinks.us */.Tf.us
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories) {
          services[0].desc = freePolicy;
        }
        if (isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next = this._next).exec.apply(_this$_next, arguments) : [];
    }
  }]);
}(DefaultServices);
var UsRefurbishServices = /*#__PURE__*/function (_DefaultServices2) {
  function UsRefurbishServices() {
    (0,classCallCheck/* default */.Z)(this, UsRefurbishServices);
    return _callSuper(this, UsRefurbishServices, arguments);
  }
  (0,inherits/* default */.Z)(UsRefurbishServices, _DefaultServices2);
  return (0,createClass/* default */.Z)(UsRefurbishServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next2;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'us' && isRefurbished(product)) {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Free U.S. shipping\n                  at $35+",
          link: constant/* shippingLinks.us */.Tf.us
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Secure online\n                  payment"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} global\n                  warranty"
        }, {
          icon: 'icon-xiangzi',
          desc: "Accessories &\n          packaging included"
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories) {
          services[0].desc = 'Free shipping on all\nU.S. orders over $35';
        }
        return services;
      }
      return this._next ? (_this$_next2 = this._next).exec.apply(_this$_next2, arguments) : [];
    }
  }]);
}(DefaultServices);
var CaServices = /*#__PURE__*/function (_DefaultServices3) {
  function CaServices() {
    (0,classCallCheck/* default */.Z)(this, CaServices);
    return _callSuper(this, CaServices, arguments);
  }
  (0,inherits/* default */.Z)(CaServices, _DefaultServices3);
  return (0,createClass/* default */.Z)(CaServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next3;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'ca') {
        var paymentService = {
          icon: 'icon-anquanzhifu',
          desc: "Secure online\n                payment"
        };
        var services = [{
          icon: 'icon-yunshu',
          desc: "Free shipping\nat CA$100+",
          link: constant/* shippingLinks.ca */.Tf.ca
        }, {
          icon: 'icon-anquanzhifu',
          desc: "CA$25 off POD\nwith any watch"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} global\n                  warranty"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "30-day money\n                  back guarantee",
          link: constant/* shippingLinks.ca */.Tf.ca
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories) {
          splice_default()(services).call(services, 2, 1);
          services[0].desc = 'Free Canada shipping\nat CA$100+';
          services[1] = paymentService;
        } else if (productId !== undefined) {
          if (productId !== 'pod') {
            services[1] = paymentService;
          } else if (isMug(productId) || isCarabiner(productId)) {
            splice_default()(services).call(services, 2, 1);
          }
        }
        return services;
      }
      return this._next ? (_this$_next3 = this._next).exec.apply(_this$_next3, arguments) : [];
    }
  }]);
}(DefaultServices);
var UkServices = /*#__PURE__*/function (_DefaultServices4) {
  function UkServices() {
    (0,classCallCheck/* default */.Z)(this, UkServices);
    return _callSuper(this, UkServices, arguments);
  }
  (0,inherits/* default */.Z)(UkServices, _DefaultServices4);
  return (0,createClass/* default */.Z)(UkServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next4;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'uk') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Free UK 2-day\nshipping at \xA335+",
          link: constant/* shippingLinks.uk */.Tf.uk
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Secure online\n                  payment"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} global\n                  warranty"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "30-day money\n                  back guarantee",
          link: constant/* shippingLinks.uk */.Tf.uk
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next4 = this._next).exec.apply(_this$_next4, arguments) : [];
    }
  }]);
}(DefaultServices);
var FrServices = /*#__PURE__*/function (_DefaultServices5) {
  function FrServices() {
    (0,classCallCheck/* default */.Z)(this, FrServices);
    return _callSuper(this, FrServices, arguments);
  }
  (0,inherits/* default */.Z)(FrServices, _DefaultServices5);
  return (0,createClass/* default */.Z)(FrServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next5;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'fr') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Livraison gratuite\n          \xE0 partir de 50 \u20AC"
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Paiement en\n          ligne s\xE9curis\xE9"
        }, {
          icon: 'icon-baoxiu',
          desc: "Garantie de\n          {duration}"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "Fen\xEAtre de retour\n          de 14 jours"
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next5 = this._next).exec.apply(_this$_next5, arguments) : [];
    }
  }]);
}(DefaultServices);
var DEServices = /*#__PURE__*/function (_DefaultServices6) {
  function DEServices() {
    (0,classCallCheck/* default */.Z)(this, DEServices);
    return _callSuper(this, DEServices, arguments);
  }
  (0,inherits/* default */.Z)(DEServices, _DefaultServices6);
  return (0,createClass/* default */.Z)(DEServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next6;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'de') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Kostenloser Versand\n          ab 99 \u20AC"
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Sichere Online-\n          Zahlung"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration}\n          Garantie"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "30 Tage\n            R\xFCckgaberecht"
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next6 = this._next).exec.apply(_this$_next6, arguments) : [];
    }
  }]);
}(DefaultServices);
var EsServices = /*#__PURE__*/function (_DefaultServices7) {
  function EsServices() {
    (0,classCallCheck/* default */.Z)(this, EsServices);
    return _callSuper(this, EsServices, arguments);
  }
  (0,inherits/* default */.Z)(EsServices, _DefaultServices7);
  return (0,createClass/* default */.Z)(EsServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next7;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'es') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Env\xEDo gratuito\n          a partir de 99"
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Pago seguro\n          en l\xEDnea"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} de\n          garant\xEDa"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "Plazo de devoluci\xF3n\n          de 30 d\xEDas",
          link: constant/* shippingLinks.us */.Tf.us
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next7 = this._next).exec.apply(_this$_next7, arguments) : [];
    }
  }]);
}(DefaultServices);
var EuServices = /*#__PURE__*/function (_DefaultServices8) {
  function EuServices() {
    (0,classCallCheck/* default */.Z)(this, EuServices);
    return _callSuper(this, EuServices, arguments);
  }
  (0,inherits/* default */.Z)(EuServices, _DefaultServices8);
  return (0,createClass/* default */.Z)(EuServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next8;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'eu') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Free shipping\n            over 99 \u20AC"
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Secure online\n                  payment"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} global\n                  warranty"
        }, {
          icon: 'icon-a-30tiantuihuo',
          desc: "30-day money\n                  back guarantee"
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next8 = this._next).exec.apply(_this$_next8, arguments) : [];
    }
  }]);
}(DefaultServices);
var AuServices = /*#__PURE__*/function (_DefaultServices9) {
  function AuServices() {
    (0,classCallCheck/* default */.Z)(this, AuServices);
    return _callSuper(this, AuServices, arguments);
  }
  (0,inherits/* default */.Z)(AuServices, _DefaultServices9);
  return (0,createClass/* default */.Z)(AuServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next9;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'au') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "Free AU & NZ Shipping"
        }, {
          icon: 'icon-anquanzhifu',
          desc: "Secure online\n                  payment"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration} global\n                  warranty"
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next9 = this._next).exec.apply(_this$_next9, arguments) : [];
    }
  }]);
}(DefaultServices);
var JpServices = /*#__PURE__*/function (_DefaultServices10) {
  function JpServices() {
    (0,classCallCheck/* default */.Z)(this, JpServices);
    return _callSuper(this, JpServices, arguments);
  }
  (0,inherits/* default */.Z)(JpServices, _DefaultServices10);
  return (0,createClass/* default */.Z)(JpServices, [{
    key: "exec",
    value: function exec(country) {
      var _this$_next10;
      var isAccessories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var productId = arguments.length > 2 ? arguments[2] : undefined;
      var product = arguments.length > 3 ? arguments[3] : undefined;
      if (country === 'jp') {
        var services = [{
          icon: 'icon-yunshu',
          desc: "2,000\u5186\uFF08\u7A0E\u8FBC\uFF09\u4EE5\u4E0A\n          \u3054\u8CFC\u5165\u3067\u9001\u6599\u7121\u6599"
        }, {
          icon: 'icon-anquanzhifu',
          desc: "\u4FBF\u5229\u3067\u5B89\u5168\u306A\n          \u30AA\u30F3\u30E9\u30A4\u30F3\u6C7A\u6E08"
        }, {
          icon: 'icon-baoxiu',
          desc: "{duration}\n          \u4FDD\u8A3C\u30B5\u30FC\u30D3\u30B9"
        }];
        var warranty = getWarrantyInfo(product);
        if (warranty) {
          services[2].desc = services[2].desc.replace('{duration}', warranty.duration);
          services[2].link = warranty.url;
        } else {
          splice_default()(services).call(services, 2, 1);
        }
        if (isAccessories || isMug(productId) || isCarabiner(productId)) {
          splice_default()(services).call(services, 2, 1);
        }
        return services;
      }
      return this._next ? (_this$_next10 = this._next).exec.apply(_this$_next10, arguments) : [];
    }
  }]);
}(DefaultServices);
var calcUsServices = new UsServices();
var calcUsRefurbishServices = new UsRefurbishServices();
var calcUkServices = new UkServices();
var calcCaServices = new CaServices();
var calcFrServices = new FrServices();
var calcDeServices = new DEServices();
var calcEsServices = new EsServices();
var calcEuServices = new EuServices();
var calcAuServices = new AuServices();
var calcJpServices = new JpServices();
calcJpServices.setNext(calcAuServices).setNext(calcEuServices).setNext(calcEsServices).setNext(calcDeServices).setNext(calcFrServices).setNext(calcUkServices).setNext(calcCaServices).setNext(calcUsRefurbishServices).setNext(calcUsServices);


/***/ }),

/***/ 74712:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ variantDetailDialog)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js
var classCallCheck = __webpack_require__(68420);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js
var createClass = __webpack_require__(27344);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue?vue&type=template&id=01846e72
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("transition", {
    attrs: {
      name: "dialog-fade"
    },
    on: {
      "after-enter": _vm.afterEnter,
      "after-leave": _vm.afterLeave
    }
  }, [_c("div", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.visible,
      expression: "visible"
    }],
    staticClass: "el-dialog__wrapper",
    attrs: {
      id: "variant-detail-dialog",
      "aria-modal": "true",
      role: "dialog",
      "aria-labelledby": "variant-detail-title",
      "aria-describedby": "variant-detail-desc"
    },
    on: {
      click: function click($event) {
        if ($event.target !== $event.currentTarget) return null;
        return _vm.handleWrapperClick.apply(null, arguments);
      }
    }
  }, [_c("div", {
    ref: "dialog",
    staticClass: "variant-detail-dialog"
  }, [_vm.showClose ? _c("button", {
    ref: "closeBtn",
    staticClass: "variant-detail-wrapper__close-btn",
    attrs: {
      type: "button",
      "aria-label": "Close"
    },
    on: {
      click: _vm.handleClose
    }
  }, [_c("i", {
    staticClass: "el-icon el-icon-close"
  })]) : _vm._e(), _vm._v(" "), _c("div", {
    directives: [{
      name: "loading",
      rawName: "v-loading",
      value: _vm.loading,
      expression: "loading"
    }],
    staticClass: "variant-detail-wrapper"
  }, [_vm.images.length === 1 ? _c("img", {
    staticClass: "block mx-auto max-w-full mb-50 md:mb-md-50 variant-detail__img",
    attrs: {
      src: _vm._f("cropShopifyImg")(_vm.images[0].src, 0, 600),
      height: "300",
      alt: _vm.images[0].altText
    }
  }) : _c("Swiper", {
    ref: "previewSwiper",
    staticClass: "mb-50 md:mb-md-50",
    attrs: {
      options: _vm.swiperOption4preview
    }
  }, [_vm._l(_vm.images, function (img) {
    return _c("SwiperSlide", {
      key: img.id,
      staticClass: "text-center"
    }, [_c("img", {
      staticClass: "align-middle max-w-full variant-detail__img",
      attrs: {
        src: _vm._f("cropShopifyImg")(img.src, 0, 600),
        height: "300",
        alt: img.altText
      }
    })]);
  }), _vm._v(" "), _c("button", {
    staticClass: "varinat-preview-nav__prev",
    attrs: {
      slot: "button-prev",
      type: "button"
    },
    slot: "button-prev"
  }), _vm._v(" "), _c("button", {
    staticClass: "varinat-preview-nav__next",
    attrs: {
      slot: "button-next",
      type: "button"
    },
    slot: "button-next"
  })], 2), _vm._v(" "), _c("h2", {
    staticClass: "variant-detail__title text-center",
    attrs: {
      id: "variant-detail-title"
    }
  }, [_vm._v(_vm._s(_vm.product.title))]), _vm._v(" "), _vm.subTitle ? _c("h3", {
    staticClass: "variant-detail__sub-title text-center"
  }, [_vm._v(_vm._s(_vm.subTitle))]) : _vm._e(), _vm._v(" "), _c("p", {
    staticClass: "variant-detail__price mb-25 leading-none mt-10 text-center md:mt-md-50 md:mb-md-30"
  }, [_vm._v(_vm._s(_vm.variant.price ? _vm.formatPrice(_vm.variant.price) : ""))]), _vm._v(" "), _vm.variant.canSubscribeBIS ? _c("el-form", {
    ref: "subscribeForm",
    staticClass: "subscribe-form mb-50 md:mb-md-60",
    attrs: {
      model: _vm.subscribeData,
      rules: _vm.rules4subscribeForm
    },
    nativeOn: {
      submit: function submit($event) {
        return _vm.handleSubscribeBIS.apply(null, arguments);
      }
    }
  }, [_c("el-form-item", {
    attrs: {
      prop: "email"
    }
  }, [_c("el-input", {
    staticClass: "subscribe-input",
    attrs: {
      placeholder: _vm.$_te("common.subscribeBIS.emailPlaceholder") ? _vm.$_t("common.subscribeBIS.emailPlaceholder") : _vm.$_t("common.subscribeBIS.requireEmail")
    },
    on: {
      focus: _vm.handleFocus4subscribeInput
    },
    model: {
      value: _vm.subscribeData.email,
      callback: function callback($$v) {
        _vm.$set(_vm.subscribeData, "email", $$v);
      },
      expression: "subscribeData.email"
    }
  }), _vm._v(" "), _c("button", {
    staticClass: "subscribe-btn block w-full border-0 bg-black text-white uppercase",
    attrs: {
      type: "submit"
    }
  }, [_c("i", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.subscribing,
      expression: "subscribing"
    }],
    staticClass: "el-icon-loading inline-block mr-10"
  }), _vm._v(_vm._s(_vm.$_t("common.subscribeBIS.notifyMe")))])], 1)], 1) : _c("button", {
    staticClass: "shop-btn font-din-bold block mx-auto mb-50 md:mb-md-60",
    style: {
      visibility: _vm.loading ? "hidden" : "visible"
    },
    attrs: {
      disabled: _vm.product.adding || !_vm.variant.available
    },
    on: {
      click: _vm.addToCart
    }
  }, [_c("i", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.product.adding,
      expression: "product.adding"
    }],
    staticClass: "el-icon-loading"
  }), _vm._v(" "), _c("transition", {
    attrs: {
      name: _vm.product.showSuccessfulTips ? "slide" : "reverse-slide"
    }
  }, [_vm.product.showSuccessfulTips ? _c("span", {
    key: "tips1",
    staticClass: "inline-block whitespace-nowrap"
  }, [_vm._v(_vm._s(_vm.$_t("shop.added")))]) : _vm.loading || _vm.variant.available ? _c("span", {
    key: "tips2",
    staticClass: "inline-block whitespace-nowrap"
  }, [_vm._v(_vm._s(_vm.$_t("shop.add2Bag")))]) : _c("span", {
    key: "tips0",
    staticClass: "inline-block whitespace-nowrap uppercase lang-fr:normal-case"
  }, [_vm._v(_vm._s(_vm.$_t("home.outOfStock")))])])], 1), _vm._v(" "), _c("div", {
    staticClass: "variant-detail__desc",
    attrs: {
      id: "variant-detail-desc"
    },
    domProps: {
      innerHTML: _vm._s(_vm.product.descriptionHtml)
    }
  })], 1)])])]);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue?vue&type=template&id=01846e72

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find.js
var find = __webpack_require__(86981);
var find_default = /*#__PURE__*/__webpack_require__.n(find);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-timeout.js
var set_timeout = __webpack_require__(9938);
var set_timeout_default = /*#__PURE__*/__webpack_require__.n(set_timeout);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.keys.js
var es_object_keys = __webpack_require__(69358);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js
var es_object_to_string = __webpack_require__(60228);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.js
var es_promise = __webpack_require__(73964);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.finally.js
var es_promise_finally = __webpack_require__(36409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js
var vue_awesome_swiper = __webpack_require__(90697);
// EXTERNAL MODULE: ./node_modules/swiper/css/swiper.css
var swiper = __webpack_require__(74838);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopifyBuy/shopifyBuy.js + 1 modules
var shopifyBuy = __webpack_require__(86567);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
// EXTERNAL MODULE: ./app/web/component/layout/index/dataBus.js
var dataBus = __webpack_require__(92154);
// EXTERNAL MODULE: ./app/web/assets/js/a11y.js
var a11y = __webpack_require__(65447);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/trapFocus.js
var trapFocus = __webpack_require__(26386);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue?vue&type=script&lang=js

function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context12, _context13; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context12 = ownKeys(Object(t), !0)).call(_context12, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context13 = ownKeys(Object(t))).call(_context13, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }



























/* harmony default export */ const mainvue_type_script_lang_js = ({
  name: 'VariantDetailDialog',
  components: {
    Swiper: vue_awesome_swiper.Swiper,
    SwiperSlide: vue_awesome_swiper.SwiperSlide
  },
  filters: {
    cropShopifyImg: function cropShopifyImg(url) {
      var _context;
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;
      return url ? url.replace(/\.(jpg|jpeg|png|webp)/, concat_default()(_context = "_".concat(width ? width : '', "x")).call(_context, height, ".$1")) : '';
    }
  },
  "extends": element_ui_common.Dialog,
  mixins: [trapFocus/* default */.ZP],
  props: {
    modalClass: {
      type: String,
      "default": 'variant-dialog-modal'
    }
  },
  data: function data() {
    return {
      subscribing: false,
      subscribeData: {},
      loading: false,
      product: {
        showSuccessfulTips: false,
        adding: false
      },
      productId: '',
      variantId: '',
      link2buy: '',
      swiperOption4preview: {
        slidesPerView: 1,
        spaceBetween: 0,
        loop: true,
        watchSlidesProgress: true,
        watchSlidesVisibility: true,
        preloadImages: false,
        lazy: false,
        initialSlide: 1,
        navigation: {
          nextEl: '.varinat-preview-nav__next',
          prevEl: '.varinat-preview-nav__prev'
        },
        on: {
          slideChangeTransitionEnd: a11y/* handleTransitionEnd4A11ySwiper */.ql
        }
      }
    };
  },
  computed: {
    rules4subscribeForm: function rules4subscribeForm() {
      var _this = this;
      return {
        email: [{
          required: true,
          message: function message() {
            return _this.$_t('common.subscribeBIS.requireEmail');
          },
          trigger: []
        }, {
          type: 'email',
          message: function message() {
            return _this.$_t('common.subscribeBIS.invalidEmail');
          },
          trigger: []
        }]
      };
    },
    isSuffixUnit: function isSuffixUnit() {
      var _context2;
      return includes_default()(_context2 = ['de', 'fr', 'es', 'eu']).call(_context2, dataBus/* data.country */.aT.country);
    },
    priceUnit: function priceUnit() {
      return dataBus/* data.priceUnit */.aT.priceUnit;
    },
    images: function images() {
      if (this.onlyOneVariant) {
        return this.product.images;
      }
      if (this.variantId && this.variant) {
        var _this$variant$metafie;
        var variantImages = (_this$variant$metafie = this.variant.metafields) === null || _this$variant$metafie === void 0 || (_this$variant$metafie = find_default()(_this$variant$metafie).call(_this$variant$metafie, function (item) {
          return item.key === 'variant_images';
        })) === null || _this$variant$metafie === void 0 ? void 0 : _this$variant$metafie.value;
        if (variantImages) {
          var _context3;
          return map_default()(_context3 = JSON.parse(variantImages)).call(_context3, function (str) {
            return {
              src: str,
              id: str
            };
          });
        } else if (this.variant.image) {
          return [this.variant.image];
        }
      }
      return [];
    },
    variant: function variant() {
      var _this2 = this;
      if (this.variantId) {
        var _this$product$variant;
        return ((_this$product$variant = this.product.variants) === null || _this$product$variant === void 0 ? void 0 : find_default()(_this$product$variant).call(_this$product$variant, function (item) {
          return item.id === _this2.variantId;
        })) || {};
      } else {
        var _this$product$variant2;
        return ((_this$product$variant2 = this.product.variants) === null || _this$product$variant2 === void 0 ? void 0 : _this$product$variant2[0]) || {};
      }
    },
    onlyOneVariant: function onlyOneVariant() {
      var _this$product$variant3;
      return ((_this$product$variant3 = this.product.variants) === null || _this$product$variant3 === void 0 ? void 0 : _this$product$variant3.length) === 1;
    },
    subTitle: function subTitle() {
      if (this.variantId) {
        var _this$product$variant4;
        return ((_this$product$variant4 = this.product.variants) === null || _this$product$variant4 === void 0 ? void 0 : _this$product$variant4.length) === 1 ? '' : this.variant.title;
      }
      return '';
    },
    cart: {
      get: function get() {
        return this.$dataBus.cart;
      },
      set: function set(val) {
        this.$dataBus.cart = val;
      }
    }
  },
  watch: {
    productId: 'getProductDetails',
    visible: function visible(newVal) {
      if (!newVal) {
        this.subscribeData = {};
        if (this.$refs.subscribeForm) {
          this.$refs.subscribeForm.resetFields();
        }
      }
    },
    images: {
      handler: function handler(newVal) {
        var _this3 = this;
        if (newVal.length > 1) {
          this.$nextTick().then(function () {
            _this3.$refs.previewSwiper.swiperInstance.slideTo(1);
            _this3.$refs.previewSwiper.swiperInstance.lazy.load();
          });
        }
      }
    }
  },
  mounted: function mounted() {
    var _this4 = this;
    this.$nextTick(function () {
      set_timeout_default()(function () {
        var _this4$$refs$previewS;
        return (_this4$$refs$previewS = _this4.$refs.previewSwiper) === null || _this4$$refs$previewS === void 0 || (_this4$$refs$previewS = _this4$$refs$previewS.swiperInstance) === null || _this4$$refs$previewS === void 0 ? void 0 : _this4$$refs$previewS.navigation.init();
      }, 0);
    });
    this.$watch(function () {
      return [_this4.visible, _this4.images.length];
    }, function () {
      _this4.focusableElementsHasChanged = true;
    });

    // TODO: todo_xjf $t('shop.add2Bag') 报错， $_t 这个方法才可以
    var appInstance = document.getElementById('app').__vue__;
    this.appT = function (key) {
      return appInstance.$t(key);
    };
    this.appTe = function (key) {
      return appInstance.$te(key);
    };
    this.$once('hook:beforeDestroy', function () {
      _this4.appT = null;
      _this4.appTe = null;
    });
  },
  methods: {
    handleFocus4subscribeInput: function handleFocus4subscribeInput(e) {
      this.currentFocus = e.target;
    },
    doSubscribe: function doSubscribe() {
      var _context6,
        _this5 = this;
      var url;
      if (this.link2buy) {
        url = this.link2buy;
      } else {
        if (this.product.productType === 'Watch' || shopifyBuy/* default.isOpenBox */.Z.isOpenBox(this.product)) {
          var _context4;
          url = concat_default()(_context4 = "".concat(location.origin)).call(_context4, location.pathname);
        } else {
          var _context5;
          url = concat_default()(_context5 = "".concat(location.origin)).call(_context5, shopifyBuy/* default.getConfiguredProductLink */.Z.getConfiguredProductLink(this.product) || '/accessories');
        }
      }
      return this.$http.post(concat_default()(_context6 = "/shopify/bis/subscribe/".concat(shopifyBuy/* default.normalizeId */.Z.normalizeId(this.product.id), "/")).call(_context6, shopifyBuy/* default.normalizeId */.Z.normalizeId(this.variantId)), {
        email: this.subscribeData.email,
        url: url
      }).then(function () {
        _this5.$message.success(_this5.$_t('common.subscribeBIS.success'));
      })["catch"](function (e) {
        var msg = _this5.$_t(e.response.status === 429 ? 'common.subscribeBIS.tooManyReq' : 'common.subscribeBIS.serverError');
        _this5.$message.error(msg);
      });
    },
    handleSubscribeBIS: function handleSubscribeBIS(e) {
      var _this6 = this;
      e.preventDefault();
      this.$refs.subscribeForm.validate().then(function () {
        if (_this6.subscribing) {
          return;
        }
        _this6.subscribing = true;
        return _this6.doSubscribe();
      })["catch"](function () {})["finally"](function () {
        _this6.subscribing = false;
      });
    },
    $_t: function $_t(key) {
      return this.appT ? this.appT(key) : key;
    },
    $_te: function $_te(key) {
      return this.appTe ? this.appTe(key) : false;
    },
    addToCart: function addToCart() {
      var _this7 = this;
      if (!this.variant.available) {
        return;
      }
      this.product.adding = true;
      var params = {
        products: [{
          merchandiseId: this.variant.id,
          quantity: 1
        }]
      };
      shopifyBuy/* default.addToCart */.Z.addToCart(localStorage.cartId, params.products).then(function (cart) {
        _this7.cart = cart;
        _this7.product.showSuccessfulTips = true;
        set_timeout_default()(function () {
          _this7.product.showSuccessfulTips = false;
        }, 2000);
      })["finally"](function () {
        _this7.product.adding = false;
      });
    },
    getProductDetails: function getProductDetails() {
      var _this8 = this;
      if (this.productId) {
        this.loading = true;
        shopifyBuy/* default.getProductNew */.Z.getProductNew(this.productId).then(function (product) {
          _this8.product = _objectSpread(_objectSpread({}, product), {}, {
            showSuccessfulTips: false,
            adding: false
          });
        })["finally"](function () {
          _this8.$nextTick(function () {
            _this8.loading = false;
          });
        });
      }
    },
    formatPrice: function formatPrice(price) {
      var _context7, _context9, _context10, _context11;
      var country = this.$dataBus.country;
      if (includes_default()(_context7 = ['jp']).call(_context7, country)) {
        price = Number(price).toLocaleString('ja-JP');
      } else {
        var _context8;
        if (includes_default()(_context8 = ['fr', 'es']).call(_context8, country)) {
          price = String(price).replace('.', ',');
        }
      }
      var more = country === 'jp' ? '（税込）' : '';
      return this.isSuffixUnit ? concat_default()(_context9 = "".concat(price)).call(_context9, this.$dataBus.priceUnit) : concat_default()(_context10 = concat_default()(_context11 = "".concat(this.$dataBus.priceUnit)).call(_context11, price)).call(_context10, more);
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue?vue&type=script&lang=js
 /* harmony default export */ const variantDetailDialog_mainvue_type_script_lang_js = (mainvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue?vue&type=style&index=0&id=01846e72&prod&lang=scss
var mainvue_type_style_index_0_id_01846e72_prod_lang_scss = __webpack_require__(50465);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue?vue&type=style&index=0&id=01846e72&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/main.vue



;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  variantDetailDialog_mainvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const main = (component.exports);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/index.js




var MessageConstructor = vue_common_prod_default().extend(main);
var instance;
var VariantDetailDialog = /*#__PURE__*/function () {
  function VariantDetailDialog() {
    (0,classCallCheck/* default */.Z)(this, VariantDetailDialog);
    this.instance = null;
  }
  return (0,createClass/* default */.Z)(VariantDetailDialog, [{
    key: "open",
    value: function open(productId) {
      var variantId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
      var link2buy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
      if (!instance) {
        instance = this.createDialog();
      }
      instance.productId = productId;
      instance.variantId = variantId;
      instance.link2buy = link2buy;
      instance.visible = true;
    }
  }, {
    key: "close",
    value: function close() {
      if (!instance) return;
      instance.visible = false;
    }
  }, {
    key: "createDialog",
    value: function createDialog() {
      var _this = this;
      if ((vue_common_prod_default()).prototype.$isServer) return;
      this.instance = new MessageConstructor({
        _parentListeners: {
          'update:visible': function updateVisible(val) {
            _this.instance.visible = val;
          }
        }
      });
      this.instance.$mount();
      document.body.appendChild(this.instance.$el);
      return this.instance;
    }
  }]);
}();
/* harmony default export */ const variantDetailDialog = (new VariantDetailDialog());

/***/ }),

/***/ 26386:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "GO": () => (/* binding */ getFocusableElements),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   "hS": () => (/* binding */ hijackTab)
/* harmony export */ });
/* harmony import */ var _babel_runtime_corejs3_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71649);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_find_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13464);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_find_index__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_find_index__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73324);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1__);



var hijackTab = function hijackTab(e, focusableElements, currentFocus, updateCurrentFocus) {
  if (e.code === 'Tab') {
    e.preventDefault();
    var setFocus = function setFocus(el) {
      el.focus({
        focusVisible: true
      });
      updateCurrentFocus && updateCurrentFocus(el);
    };
    var firstFocusableEl = focusableElements[0];
    if (focusableElements.length === 1) {
      setFocus(firstFocusableEl);
      return;
    }
    var lastFocusableEl = focusableElements[focusableElements.length - 1];
    var index4currentFocus = _babel_runtime_corejs3_core_js_instance_find_index__WEBPACK_IMPORTED_MODULE_0___default()(Array.prototype).call(focusableElements, function (el) {
      return el === currentFocus;
    });
    if (e.shiftKey) {
      if (currentFocus === firstFocusableEl) {
        setFocus(lastFocusableEl);
      } else {
        var prevEl = focusableElements[index4currentFocus - 1];
        setFocus(prevEl);
      }
    } else {
      if (currentFocus === lastFocusableEl) {
        setFocus(firstFocusableEl);
      } else {
        var nextEl = focusableElements[index4currentFocus + 1];
        setFocus(nextEl);
      }
    }
  }
};
var getFocusableElements = function getFocusableElements(el) {
  var _context;
  return _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(_context = (0,_babel_runtime_corejs3_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(el.querySelectorAll('button, [href], a, input, select, textarea, [tabindex]:not([tabindex="-1"])'))).call(_context, function (el) {
    return el.offsetParent;
  });
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
  watch: {
    visible: function visible(newVal) {
      var _this = this;
      if (newVal) {
        this.lastActiveElement = document.activeElement;
        this.$nextTick(function () {
          _this.collectFocusableElements();
          _this.focusableElements[0].focus();
          _this.currentFocus = _this.focusableElements[0];
          document.addEventListener('keydown', _this.handleFocus);
        });
      } else {
        document.removeEventListener('keydown', this.handleFocus);
        this.lastActiveElement && this.lastActiveElement.focus();
      }
    }
  },
  beforeDestroy: function beforeDestroy() {
    this.currentFocus = null;
    this.focusableElements = null;
    this.lastActiveElement = null;
    this.focusableElementsHasChanged = null;
  },
  mounted: function mounted() {
    this.focusableElementsHasChanged = true;
  },
  methods: {
    collectFocusableElements: function collectFocusableElements() {
      if (this.focusableElementsHasChanged) {
        this.focusableElements = getFocusableElements(this.$refs.dialog);
        this.focusableElementsHasChanged = false;
      }
    },
    findIndex4currentFocus: function findIndex4currentFocus() {
      var _this2 = this;
      return _babel_runtime_corejs3_core_js_instance_find_index__WEBPACK_IMPORTED_MODULE_0___default()(Array.prototype).call(this.focusableElements, function (el) {
        return el === _this2.currentFocus;
      });
    },
    handleFocus: function handleFocus(e) {
      var _this3 = this;
      this.collectFocusableElements();
      hijackTab(e, this.focusableElements, this.currentFocus, function (el) {
        return _this3.currentFocus = el;
      });
    }
  }
});

/***/ }),

/***/ 86567:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ShopifyBuy_shopifyBuy)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js + 3 modules
var toConsumableArray = __webpack_require__(71649);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js
var asyncToGenerator = __webpack_require__(33938);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js
var classCallCheck = __webpack_require__(68420);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js
var createClass = __webpack_require__(27344);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js
var es_array_iterator = __webpack_require__(752);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.to-fixed.js
var es_number_to_fixed = __webpack_require__(97389);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js
var es_object_to_string = __webpack_require__(60228);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js
var web_dom_collections_iterator = __webpack_require__(76265);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/regenerator/index.js
var regenerator = __webpack_require__(30222);
var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/symbol.js
var symbol = __webpack_require__(52472);
var symbol_default = /*#__PURE__*/__webpack_require__.n(symbol);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/create.js
var create = __webpack_require__(3841);
var create_default = /*#__PURE__*/__webpack_require__.n(create);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/json/stringify.js
var stringify = __webpack_require__(58218);
var stringify_default = /*#__PURE__*/__webpack_require__.n(stringify);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/promise.js
var promise = __webpack_require__(35820);
var promise_default = /*#__PURE__*/__webpack_require__.n(promise);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js
var reduce = __webpack_require__(53706);
var reduce_default = /*#__PURE__*/__webpack_require__.n(reduce);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/some.js
var some = __webpack_require__(27525);
var some_default = /*#__PURE__*/__webpack_require__.n(some);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find.js
var find = __webpack_require__(86981);
var find_default = /*#__PURE__*/__webpack_require__.n(find);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/values.js
var values = __webpack_require__(89221);
var values_default = /*#__PURE__*/__webpack_require__.n(values);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/sort.js
var sort = __webpack_require__(76555);
var sort_default = /*#__PURE__*/__webpack_require__.n(sort);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set.js
var set = __webpack_require__(23513);
var set_default = /*#__PURE__*/__webpack_require__.n(set);
// EXTERNAL MODULE: ./app/web/component/layout/index/config/index.js + 1 modules
var index_config = __webpack_require__(32064);
// EXTERNAL MODULE: ./node_modules/axios/index.js
var axios = __webpack_require__(9669);
var axios_default = /*#__PURE__*/__webpack_require__.n(axios);
// EXTERNAL MODULE: ./app/web/component/layout/index/dataBus.js
var dataBus = __webpack_require__(92154);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js
var esm_typeof = __webpack_require__(19623);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.cause.js
var es_error_cause = __webpack_require__(21057);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.to-string.js
var es_error_to_string = __webpack_require__(68932);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.reverse.js
var es_array_reverse = __webpack_require__(93374);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.date.to-string.js
var es_date_to_string = __webpack_require__(30024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.js
var es_promise = __webpack_require__(73964);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js
var es_regexp_to_string = __webpack_require__(12826);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js
var iterator = __webpack_require__(48994);
var iterator_default = /*#__PURE__*/__webpack_require__.n(iterator);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/set-prototype-of.js
var set_prototype_of = __webpack_require__(92984);
var set_prototype_of_default = /*#__PURE__*/__webpack_require__.n(set_prototype_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/freeze.js
var freeze = __webpack_require__(54877);
var freeze_default = /*#__PURE__*/__webpack_require__.n(freeze);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js
var is_array = __webpack_require__(98235);
var is_array_default = /*#__PURE__*/__webpack_require__.n(is_array);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/assign.js
var object_assign = __webpack_require__(67552);
var assign_default = /*#__PURE__*/__webpack_require__.n(object_assign);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/get-iterator.js
var get_iterator = __webpack_require__(55062);
var get_iterator_default = /*#__PURE__*/__webpack_require__.n(get_iterator);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/is-iterable.js
var is_iterable = __webpack_require__(30414);
var is_iterable_default = /*#__PURE__*/__webpack_require__.n(is_iterable);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/from.js
var from = __webpack_require__(10349);
var from_default = /*#__PURE__*/__webpack_require__.n(from);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-prototype-of.js
var get_prototype_of = __webpack_require__(39272);
var get_prototype_of_default = /*#__PURE__*/__webpack_require__.n(get_prototype_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/index-of.js
var index_of = __webpack_require__(51791);
var index_of_default = /*#__PURE__*/__webpack_require__.n(index_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/bind.js
var bind = __webpack_require__(48216);
var bind_default = /*#__PURE__*/__webpack_require__.n(bind);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/ends-with.js
var ends_with = __webpack_require__(61539);
var ends_with_default = /*#__PURE__*/__webpack_require__.n(ends_with);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/every.js
var every = __webpack_require__(8244);
var every_default = /*#__PURE__*/__webpack_require__.n(every);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reverse.js
var instance_reverse = __webpack_require__(86526);
var reverse_default = /*#__PURE__*/__webpack_require__.n(instance_reverse);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-names.js
var get_own_property_names = __webpack_require__(55641);
var get_own_property_names_default = /*#__PURE__*/__webpack_require__.n(get_own_property_names);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopifyBuy/jsBuy.unoptimized.umd.min.js







































/*
@license
The MIT License (MIT)

Copyright (c) 2016 Shopify Inc.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

*/

var _typeof = typeof (symbol_default()) === "function" && (0,esm_typeof/* default */.Z)((iterator_default())) === "symbol" ? function (obj) {
  return (0,esm_typeof/* default */.Z)(obj);
} : function (obj) {
  return obj && typeof (symbol_default()) === "function" && obj.constructor === (symbol_default()) && obj !== (symbol_default()).prototype ? "symbol" : (0,esm_typeof/* default */.Z)(obj);
};
var classCallCheck$1 = function classCallCheck$1(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
};
var createClass$1 = function () {
  function defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      define_property_default()(target, descriptor.key, descriptor);
    }
  }
  return function (Constructor, protoProps, staticProps) {
    if (protoProps) defineProperties(Constructor.prototype, protoProps);
    if (staticProps) defineProperties(Constructor, staticProps);
    return Constructor;
  };
}();
var inherits$1 = function inherits$1(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function, not " + (0,esm_typeof/* default */.Z)(superClass));
  }
  subClass.prototype = create_default()(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
  if (superClass) (set_prototype_of_default()) ? set_prototype_of_default()(subClass, superClass) : subClass.__proto__ = superClass;
};
var possibleConstructorReturn$1 = function possibleConstructorReturn$1(self, call) {
  if (!self) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }
  return call && ((0,esm_typeof/* default */.Z)(call) === "object" || typeof call === "function") ? call : self;
};

/*
The MIT License (MIT)
Copyright (c) 2016 Shopify Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.


*/
function join() {
  for (var _len = arguments.length, fields = Array(_len), _key = 0; _key < _len; _key++) {
    fields[_key] = arguments[_key];
  }
  return fields.join(' ');
}
function isObject(value) {
  return Boolean(value) && Object.prototype.toString.call(value.valueOf()) === '[object Object]';
}
function deepFreezeCopyExcept(predicate, structure) {
  if (predicate(structure)) {
    return structure;
  } else if (isObject(structure)) {
    var _context;
    return freeze_default()(reduce_default()(_context = keys_default()(structure)).call(_context, function (copy, key) {
      copy[key] = deepFreezeCopyExcept(predicate, structure[key]);
      return copy;
    }, {}));
  } else if (is_array_default()(structure)) {
    return freeze_default()(map_default()(structure).call(structure, function (item) {
      return deepFreezeCopyExcept(predicate, item);
    }));
  } else {
    return structure;
  }
}
function schemaForType(typeBundle, typeName) {
  var typeSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  var type = typeBundle.types[typeName];
  if (type) {
    return type;
  } else if (typeSchema && typeSchema.kind === 'INTERFACE') {
    return typeSchema;
  }
  throw new Error('No type of ' + typeName + ' found in schema');
}
var jsBuy_unoptimized_umd_min_classCallCheck = function classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
};
var jsBuy_unoptimized_umd_min_createClass = function () {
  function defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      define_property_default()(target, descriptor.key, descriptor);
    }
  }
  return function (Constructor, protoProps, staticProps) {
    if (protoProps) defineProperties(Constructor.prototype, protoProps);
    if (staticProps) defineProperties(Constructor, staticProps);
    return Constructor;
  };
}();
var _extends = (assign_default()) || function (target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i];
    for (var key in source) {
      if (Object.prototype.hasOwnProperty.call(source, key)) {
        target[key] = source[key];
      }
    }
  }
  return target;
};
var inherits = function inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass)));
  }
  subClass.prototype = create_default()(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
  if (superClass) (set_prototype_of_default()) ? set_prototype_of_default()(subClass, superClass) : subClass.__proto__ = superClass;
};
var possibleConstructorReturn = function possibleConstructorReturn(self, call) {
  if (!self) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }
  return call && ((typeof call === 'undefined' ? 'undefined' : _typeof(call)) === "object" || typeof call === "function") ? call : self;
};
var slicedToArray = function () {
  function sliceIterator(arr, i) {
    var _arr = [];
    var _n = true;
    var _d = false;
    var _e = undefined;
    try {
      for (var _i = get_iterator_default()(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {
        _arr.push(_s.value);
        if (i && _arr.length === i) break;
      }
    } catch (err) {
      _d = true;
      _e = err;
    } finally {
      try {
        if (!_n && _i["return"]) _i["return"]();
      } finally {
        if (_d) throw _e;
      }
    }
    return _arr;
  }
  return function (arr, i) {
    if (is_array_default()(arr)) {
      return arr;
    } else if (is_iterable_default()(Object(arr))) {
      return sliceIterator(arr, i);
    } else {
      throw new TypeError("Invalid attempt to destructure non-iterable instance");
    }
  };
}();
var jsBuy_unoptimized_umd_min_toConsumableArray = function toConsumableArray(arr) {
  if (is_array_default()(arr)) {
    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
      arr2[i] = arr[i];
    }
    return arr2;
  } else {
    return from_default()(arr);
  }
};
var VariableDefinition = function () {
  /**
   * This constructor should not be invoked directly.
   * Use the factory function {@link Client#variable} to create a VariableDefinition.
   *
   * @param {String} name The name of the variable.
   * @param {String} type The GraphQL type of the variable.
   * @param {*} [defaultValue] The default value of the variable.
   */
  function VariableDefinition(name, type, defaultValue) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, VariableDefinition);
    this.name = name;
    this.type = type;
    this.defaultValue = defaultValue;
    freeze_default()(this);
  }

  /**
   * Returns the GraphQL query string for the variable as an input value (e.g. `$variableName`).
   *
   * @return {String} The GraphQL query string for the variable as an input value.
   */

  jsBuy_unoptimized_umd_min_createClass(VariableDefinition, [{
    key: 'toInputValueString',
    value: function toInputValueString() {
      return '$' + this.name;
    }

    /**
     * Returns the GraphQL query string for the variable (e.g. `$variableName:VariableType = defaultValue`).
     *
     * @return {String} The GraphQL query string for the variable.
     */
  }, {
    key: 'toString',
    value: function toString() {
      var defaultValueString = this.defaultValue ? ' = ' + formatInputValue(this.defaultValue) : '';
      return '$' + this.name + ':' + this.type + defaultValueString;
    }
  }]);
  return VariableDefinition;
}();
function isVariable(value) {
  return VariableDefinition.prototype.isPrototypeOf(value);
}
function variable(name, type, defaultValue) {
  return new VariableDefinition(name, type, defaultValue);
}
var Enum = function () {
  /**
   * This constructor should not be invoked directly.
   * Use the factory function {@link Client#enum} to create an Enum.
   *
   * @param {String} key The key of the enum.
   */
  function Enum(key) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, Enum);
    this.key = key;
  }

  /**
   * Returns the GraphQL query string for the enum (e.g. `enumKey`).
   *
   * @return {String} The GraphQL query string for the enum.
   */

  jsBuy_unoptimized_umd_min_createClass(Enum, [{
    key: "toString",
    value: function toString() {
      return this.key;
    }
  }, {
    key: "valueOf",
    value: function valueOf() {
      return this.key.valueOf();
    }
  }]);
  return Enum;
}();
var enumFunction = function enumFunction(key) {
  return new Enum(key);
};
var Scalar = function () {
  function Scalar(value) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, Scalar);
    this.value = value;
  }
  jsBuy_unoptimized_umd_min_createClass(Scalar, [{
    key: "toString",
    value: function toString() {
      return this.value.toString();
    }
  }, {
    key: "valueOf",
    value: function valueOf() {
      return this.value.valueOf();
    }
  }, {
    key: "unwrapped",
    get: function get$$1() {
      return this.value;
    }
  }]);
  return Scalar;
}();
function formatInputValue(value) {
  if (VariableDefinition.prototype.isPrototypeOf(value)) {
    return value.toInputValueString();
  } else if (Enum.prototype.isPrototypeOf(value)) {
    return String(value);
  } else if (Scalar.prototype.isPrototypeOf(value)) {
    return stringify_default()(value.valueOf());
  } else if (is_array_default()(value)) {
    return '[' + join.apply(undefined, jsBuy_unoptimized_umd_min_toConsumableArray(map_default()(value).call(value, formatInputValue))) + ']';
  } else if (isObject(value)) {
    return formatObject(value, '{', '}');
  } else {
    return stringify_default()(value);
  }
}
function formatObject(value) {
  var _context2;
  var openChar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  var closeChar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
  var argPairs = map_default()(_context2 = keys_default()(value)).call(_context2, function (key) {
    return key + ': ' + formatInputValue(value[key]);
  });
  return '' + openChar + join.apply(undefined, jsBuy_unoptimized_umd_min_toConsumableArray(argPairs)) + closeChar;
}
function formatArgs(args) {
  if (!keys_default()(args).length) {
    return '';
  }
  return ' (' + formatObject(args) + ')';
}
function formatDirectives(directives) {
  var _context3;
  if (!keys_default()(directives).length) {
    return '';
  }
  var directiveStrings = map_default()(_context3 = keys_default()(directives)).call(_context3, function (key) {
    var directiveArgs = directives[key];
    var arg = directiveArgs && keys_default()(directiveArgs).length ? '(' + formatObject(directiveArgs) + ')' : '';
    return '@' + key + arg;
  });
  return ' ' + join.apply(undefined, jsBuy_unoptimized_umd_min_toConsumableArray(directiveStrings));
}

// eslint-disable-next-line no-empty-function
var noop = function noop() {};
var Profiler = {
  trackTypeDependency: noop,
  trackFieldDependency: noop
};
var trackTypeDependency = Profiler.trackTypeDependency;
var trackFieldDependency = Profiler.trackFieldDependency;
function parseFieldCreationArgs(creationArgs) {
  var callback = noop;
  var options = {};
  var selectionSet = null;
  if (creationArgs.length === 2) {
    if (typeof creationArgs[1] === 'function') {
      var _creationArgs = slicedToArray(creationArgs, 2);
      options = _creationArgs[0];
      callback = _creationArgs[1];
    } else {
      var _creationArgs2 = slicedToArray(creationArgs, 2);
      options = _creationArgs2[0];
      selectionSet = _creationArgs2[1];
    }
  } else if (creationArgs.length === 1) {
    // SelectionSet is defined before this function is called since it's
    // called by SelectionSet
    // eslint-disable-next-line no-use-before-define
    if (SelectionSet.prototype.isPrototypeOf(creationArgs[0])) {
      selectionSet = creationArgs[0];
    } else if (typeof creationArgs[0] === 'function') {
      callback = creationArgs[0];
    } else {
      options = creationArgs[0];
    }
  }
  return {
    options: options,
    selectionSet: selectionSet,
    callback: callback
  };
}
var emptyArgs = freeze_default()({});
var emptyDirectives = freeze_default()({});
var Field = function () {
  /**
   * This constructor should not be invoked directly.
   * Fields are added to a selection by {@link SelectionSetBuilder#add}, {@link SelectionSetBuilder#addConnection}
   * and {@link SelectionSetBuilder#addInlineFragmentOn}.
   *
   * @param {String} name The name of the field.
   * @param {Object} [options] An options object containing:
   *   @param {Object} [options.args] Arguments for the field.
   *   @param {String} [options.alias] An alias for the field.
   *   @param {Object} [options.directives] Directives for the field.
   * @param {SelectionSet} selectionSet The selection set on the field.
   */
  function Field(name, options, selectionSet) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, Field);
    this.name = name;
    this.alias = options.alias || null;
    this.responseKey = this.alias || this.name;
    this.args = options.args ? deepFreezeCopyExcept(isVariable, options.args) : emptyArgs;
    this.directives = options.directives ? deepFreezeCopyExcept(isVariable, options.directives) : emptyDirectives;
    this.selectionSet = selectionSet;
    freeze_default()(this);
  }

  /**
   * Returns the GraphQL query string for the Field (e.g. `catAlias: cat(size: 'small') { name }` or `name`).
   *
   * @return {String} The GraphQL query string for the Field.
   */

  jsBuy_unoptimized_umd_min_createClass(Field, [{
    key: 'toString',
    value: function toString() {
      var aliasPrefix = this.alias ? this.alias + ': ' : '';
      return '' + aliasPrefix + this.name + formatArgs(this.args) + formatDirectives(this.directives) + this.selectionSet;
    }
  }]);
  return Field;
}();

// This is an interface that defines a usage, and simplifies type checking
var Spread = function Spread() {
  jsBuy_unoptimized_umd_min_classCallCheck(this, Spread);
};
var InlineFragment = function (_Spread) {
  inherits(InlineFragment, _Spread);

  /**
   * This constructor should not be invoked directly.
   * Use the factory function {@link SelectionSetBuilder#addInlineFragmentOn} to create an InlineFragment.
   *
   * @param {String} typeName The type of the fragment.
   * @param {SelectionSet} selectionSet The selection set on the fragment.
   */
  function InlineFragment(typeName, selectionSet) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, InlineFragment);
    var _this = possibleConstructorReturn(this, (InlineFragment.__proto__ || get_prototype_of_default()(InlineFragment)).call(this));
    _this.typeName = typeName;
    _this.selectionSet = selectionSet;
    freeze_default()(_this);
    return _this;
  }

  /**
   * Returns the GraphQL query string for the InlineFragment (e.g. `... on Cat { name }`).
   *
   * @return {String} The GraphQL query string for the InlineFragment.
   */

  jsBuy_unoptimized_umd_min_createClass(InlineFragment, [{
    key: 'toString',
    value: function toString() {
      return '... on ' + this.typeName + this.selectionSet;
    }
  }]);
  return InlineFragment;
}(Spread);
var FragmentSpread = function (_Spread2) {
  inherits(FragmentSpread, _Spread2);

  /**
   * This constructor should not be invoked directly.
   * Use the factory function {@link Document#defineFragment} to create a FragmentSpread.
   *
   * @param {FragmentDefinition} fragmentDefinition The corresponding fragment definition.
   */
  function FragmentSpread(fragmentDefinition) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, FragmentSpread);
    var _this2 = possibleConstructorReturn(this, (FragmentSpread.__proto__ || get_prototype_of_default()(FragmentSpread)).call(this));
    _this2.name = fragmentDefinition.name;
    _this2.selectionSet = fragmentDefinition.selectionSet;
    freeze_default()(_this2);
    return _this2;
  }

  /**
   * Returns the GraphQL query string for the FragmentSpread (e.g. `...catName`).
   *
   * @return {String} The GraphQL query string for the FragmentSpread.
   */

  jsBuy_unoptimized_umd_min_createClass(FragmentSpread, [{
    key: 'toString',
    value: function toString() {
      return '...' + this.name;
    }
  }, {
    key: 'toDefinition',
    value: function toDefinition() {
      // eslint-disable-next-line no-use-before-define
      return new FragmentDefinition(this.name, this.selectionSet.typeSchema.name, this.selectionSet);
    }
  }]);
  return FragmentSpread;
}(Spread);
var FragmentDefinition = function () {
  /**
   * This constructor should not be invoked directly.
   * Use the factory function {@link Document#defineFragment} to create a FragmentDefinition on a {@link Document}.
   *
   * @param {String} name The name of the fragment definition.
   * @param {String} typeName The type of the fragment.
   */
  function FragmentDefinition(name, typeName, selectionSet) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, FragmentDefinition);
    this.name = name;
    this.typeName = typeName;
    this.selectionSet = selectionSet;
    this.spread = new FragmentSpread(this);
    freeze_default()(this);
  }

  /**
   * Returns the GraphQL query string for the FragmentDefinition (e.g. `fragment catName on Cat { name }`).
   *
   * @return {String} The GraphQL query string for the FragmentDefinition.
   */

  jsBuy_unoptimized_umd_min_createClass(FragmentDefinition, [{
    key: 'toString',
    value: function toString() {
      return 'fragment ' + this.name + ' on ' + this.typeName + ' ' + this.selectionSet;
    }
  }]);
  return FragmentDefinition;
}();
function selectionsHaveIdField(selections) {
  return some_default()(selections).call(selections, function (fieldOrFragment) {
    if (Field.prototype.isPrototypeOf(fieldOrFragment)) {
      return fieldOrFragment.name === 'id';
    } else if (Spread.prototype.isPrototypeOf(fieldOrFragment) && fieldOrFragment.selectionSet.typeSchema.implementsNode) {
      return selectionsHaveIdField(fieldOrFragment.selectionSet.selections);
    }
    return false;
  });
}
function selectionsHaveTypenameField(selections) {
  return some_default()(selections).call(selections, function (fieldOrFragment) {
    if (Field.prototype.isPrototypeOf(fieldOrFragment)) {
      return fieldOrFragment.name === '__typename';
    } else if (Spread.prototype.isPrototypeOf(fieldOrFragment) && fieldOrFragment.selectionSet.typeSchema.implementsNode) {
      return selectionsHaveTypenameField(fieldOrFragment.selectionSet.selections);
    }
    return false;
  });
}
function indexSelectionsByResponseKey(selections) {
  var _context4;
  function assignOrPush(obj, key, value) {
    if (is_array_default()(obj[key])) {
      obj[key].push(value);
    } else {
      obj[key] = [value];
    }
  }
  var unfrozenObject = reduce_default()(selections).call(selections, function (acc, selection) {
    if (selection.responseKey) {
      assignOrPush(acc, selection.responseKey, selection);
    } else {
      var responseKeys = keys_default()(selection.selectionSet.selectionsByResponseKey);
      for_each_default()(responseKeys).call(responseKeys, function (responseKey) {
        assignOrPush(acc, responseKey, selection);
      });
    }
    return acc;
  }, {});
  for_each_default()(_context4 = keys_default()(unfrozenObject)).call(_context4, function (key) {
    freeze_default()(unfrozenObject[key]);
  });
  return freeze_default()(unfrozenObject);
}

/**
 * Class that specifies the full selection of data to query.
 */

var SelectionSet = function () {
  /**
   * This constructor should not be invoked directly. SelectionSets are created when building queries/mutations.
   *
   * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.
   * @param {(Object|String)} type The type of the current selection.
   * @param {Function} builderFunction Callback function used to build the SelectionSet.
   *   The callback takes a {@link SelectionSetBuilder} as its argument.
   */
  function SelectionSet(typeBundle, type, builderFunction) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, SelectionSet);
    if (typeof type === 'string') {
      this.typeSchema = schemaForType(typeBundle, type);
    } else {
      this.typeSchema = type;
    }
    trackTypeDependency(this.typeSchema.name);
    this.typeBundle = typeBundle;
    this.selections = [];
    if (builderFunction) {
      // eslint-disable-next-line no-use-before-define
      builderFunction(new SelectionSetBuilder(this.typeBundle, this.typeSchema, this.selections));
    }
    if (this.typeSchema.implementsNode || this.typeSchema.name === 'Node') {
      if (!selectionsHaveIdField(this.selections)) {
        this.selections.unshift(new Field('id', {}, new SelectionSet(typeBundle, 'ID')));
      }
    }
    if (this.typeSchema.kind === 'INTERFACE') {
      if (!selectionsHaveTypenameField(this.selections)) {
        this.selections.unshift(new Field('__typename', {}, new SelectionSet(typeBundle, 'String')));
      }
    }
    this.selectionsByResponseKey = indexSelectionsByResponseKey(this.selections);
    freeze_default()(this.selections);
    freeze_default()(this);
  }

  /**
   * Returns the GraphQL query string for the SelectionSet (e.g. `{ cat { name } }`).
   *
   * @return {String} The GraphQL query string for the SelectionSet.
   */

  jsBuy_unoptimized_umd_min_createClass(SelectionSet, [{
    key: 'toString',
    value: function toString() {
      if (this.typeSchema.kind === 'SCALAR' || this.typeSchema.kind === 'ENUM') {
        return '';
      } else {
        return ' { ' + join(this.selections) + ' }';
      }
    }
  }]);
  return SelectionSet;
}();
var SelectionSetBuilder = function () {
  /**
   * This constructor should not be invoked directly. SelectionSetBuilders are created when building queries/mutations.
   *
   * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.
   * @param {Object} typeSchema The schema object for the type of the current selection.
   * @param {Field[]} selections The fields on the current selection.
   */
  function SelectionSetBuilder(typeBundle, typeSchema, selections) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, SelectionSetBuilder);
    this.typeBundle = typeBundle;
    this.typeSchema = typeSchema;
    this.selections = selections;
  }
  jsBuy_unoptimized_umd_min_createClass(SelectionSetBuilder, [{
    key: 'hasSelectionWithResponseKey',
    value: function hasSelectionWithResponseKey(responseKey) {
      var _context5;
      return some_default()(_context5 = this.selections).call(_context5, function (field) {
        return field.responseKey === responseKey;
      });
    }

    /**
     * Adds a field to be queried on the current selection.
     *
     * @example
     * client.query((root) => {
     *   root.add('cat', {args: {id: '123456'}, alias: 'meow'}, (cat) => {
     *     cat.add('name');
     *   });
     * });
     *
     * @param {SelectionSet|String} selectionOrFieldName The selection or name of the field to add.
     * @param {Object} [options] Options on the query including:
     *   @param {Object} [options.args] Arguments on the query (e.g. `{id: '123456'}`).
     *   @param {String} [options.alias] Alias for the field being added.
     * @param {Function|SelectionSet} [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.
     */
  }, {
    key: 'add',
    value: function add(selectionOrFieldName) {
      var selection = void 0;
      if (Object.prototype.toString.call(selectionOrFieldName) === '[object String]') {
        var _context6;
        trackFieldDependency(this.typeSchema.name, selectionOrFieldName);
        for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
          rest[_key - 1] = arguments[_key];
        }
        selection = this.field.apply(this, concat_default()(_context6 = [selectionOrFieldName]).call(_context6, rest));
      } else {
        if (Field.prototype.isPrototypeOf(selectionOrFieldName)) {
          trackFieldDependency(this.typeSchema.name, selectionOrFieldName.name);
        }
        selection = selectionOrFieldName;
      }
      if (selection.responseKey && this.hasSelectionWithResponseKey(selection.responseKey)) {
        throw new Error('The field name or alias \'' + selection.responseKey + '\' has already been added.');
      }
      this.selections.push(selection);
    }
  }, {
    key: 'field',
    value: function field(name) {
      for (var _len2 = arguments.length, creationArgs = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
        creationArgs[_key2 - 1] = arguments[_key2];
      }
      var parsedArgs = parseFieldCreationArgs(creationArgs);
      var options = parsedArgs.options,
        callback = parsedArgs.callback;
      var selectionSet = parsedArgs.selectionSet;
      if (!selectionSet) {
        if (!this.typeSchema.fieldBaseTypes[name]) {
          throw new Error('No field of name "' + name + '" found on type "' + this.typeSchema.name + '" in schema');
        }
        var fieldBaseType = schemaForType(this.typeBundle, this.typeSchema.fieldBaseTypes[name]);
        selectionSet = new SelectionSet(this.typeBundle, fieldBaseType, callback);
      }
      return new Field(name, options, selectionSet);
    }

    /**
     * Creates an inline fragment.
     *
     * @access private
     * @param {String} typeName The type  the inline fragment.
     * @param {Function|SelectionSet}  [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.
     * @return {InlineFragment} An inline fragment.
     */
  }, {
    key: 'inlineFragmentOn',
    value: function inlineFragmentOn(typeName) {
      var builderFunctionOrSelectionSet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
      var selectionSet = void 0;
      if (SelectionSet.prototype.isPrototypeOf(builderFunctionOrSelectionSet)) {
        selectionSet = builderFunctionOrSelectionSet;
      } else {
        selectionSet = new SelectionSet(this.typeBundle, schemaForType(this.typeBundle, typeName), builderFunctionOrSelectionSet);
      }
      return new InlineFragment(typeName, selectionSet);
    }

    /**
     * Adds a field to be queried on the current selection.
     *
     * @access private
     * @param {String}    name The name of the field to add to the query.
     * @param {Object} [options] Options on the query including:
     *   @param {Object} [options.args] Arguments on the query (e.g. `{id: '123456'}`).
     *   @param {String} [options.alias] Alias for the field being added.
     * @param {Function}  [callback] Callback which will be used to create a new {@link SelectionSet} for the field added.
     */
  }, {
    key: 'addField',
    value: function addField(name) {
      var _context7;
      for (var _len3 = arguments.length, creationArgs = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
        creationArgs[_key3 - 1] = arguments[_key3];
      }
      this.add.apply(this, concat_default()(_context7 = [name]).call(_context7, creationArgs));
    }

    /**
     * Adds a connection to be queried on the current selection.
     * This adds all the fields necessary for pagination.
     *
     * @example
     * client.query((root) => {
     *   root.add('cat', (cat) => {
     *     cat.addConnection('friends', {args: {first: 10}, alias: 'coolCats'}, (friends) => {
     *       friends.add('name');
     *     });
     *   });
     * });
     *
     * @param {String}    name The name of the connection to add to the query.
     * @param {Object} [options] Options on the query including:
     *   @param {Object} [options.args] Arguments on the query (e.g. `{first: 10}`).
     *   @param {String} [options.alias] Alias for the field being added.
     * @param {Function|SelectionSet}  [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.
     */
  }, {
    key: 'addConnection',
    value: function addConnection(name) {
      for (var _len4 = arguments.length, creationArgs = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
        creationArgs[_key4 - 1] = arguments[_key4];
      }
      var _parseFieldCreationAr = parseFieldCreationArgs(creationArgs),
        options = _parseFieldCreationAr.options,
        callback = _parseFieldCreationAr.callback,
        selectionSet = _parseFieldCreationAr.selectionSet;
      this.add(name, options, function (connection) {
        connection.add('pageInfo', {}, function (pageInfo) {
          pageInfo.add('hasNextPage');
          pageInfo.add('hasPreviousPage');
        });
        connection.add('edges', {}, function (edges) {
          edges.add('cursor');
          edges.addField('node', {}, selectionSet || callback); // This is bad. Don't do this
        });
      });
    }

    /**
     * Adds an inline fragment on the current selection.
     *
     * @example
     * client.query((root) => {
     *   root.add('animal', (animal) => {
     *     animal.addInlineFragmentOn('cat', (cat) => {
     *       cat.add('name');
     *     });
     *   });
     * });
     *
     * @param {String} typeName The name of the type of the inline fragment.
     * @param {Function|SelectionSet}  [callbackOrSelectionSet] Either a callback which will be used to create a new {@link SelectionSet}, or an existing {@link SelectionSet}.
     */
  }, {
    key: 'addInlineFragmentOn',
    value: function addInlineFragmentOn(typeName) {
      var fieldTypeCb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
      this.add(this.inlineFragmentOn(typeName, fieldTypeCb));
    }

    /**
     * Adds a fragment spread on the current selection.
     *
     * @example
     * client.query((root) => {
     *   root.addFragment(catFragmentSpread);
     * });
     *
     * @param {FragmentSpread} fragmentSpread The fragment spread to add.
     */
  }, {
    key: 'addFragment',
    value: function addFragment(fragmentSpread) {
      this.add(fragmentSpread);
    }
  }]);
  return SelectionSetBuilder;
}();
function parseArgs(args) {
  var name = void 0;
  var variables = void 0;
  var selectionSetCallback = void 0;
  if (args.length === 3) {
    var _args = slicedToArray(args, 3);
    name = _args[0];
    variables = _args[1];
    selectionSetCallback = _args[2];
  } else if (args.length === 2) {
    if (Object.prototype.toString.call(args[0]) === '[object String]') {
      name = args[0];
      variables = null;
    } else if (is_array_default()(args[0])) {
      variables = args[0];
      name = null;
    }
    selectionSetCallback = args[1];
  } else {
    selectionSetCallback = args[0];
    name = null;
  }
  return {
    name: name,
    variables: variables,
    selectionSetCallback: selectionSetCallback
  };
}
var VariableDefinitions = function () {
  function VariableDefinitions(variableDefinitions) {
    var _context8;
    jsBuy_unoptimized_umd_min_classCallCheck(this, VariableDefinitions);
    this.variableDefinitions = variableDefinitions ? concat_default()(_context8 = []).call(_context8, jsBuy_unoptimized_umd_min_toConsumableArray(variableDefinitions)) : [];
    freeze_default()(this.variableDefinitions);
    freeze_default()(this);
  }
  jsBuy_unoptimized_umd_min_createClass(VariableDefinitions, [{
    key: 'toString',
    value: function toString() {
      if (this.variableDefinitions.length === 0) {
        return '';
      }
      return ' (' + join(this.variableDefinitions) + ') ';
    }
  }]);
  return VariableDefinitions;
}();

/**
 * Base class for {@link Query} and {@link Mutation}.
 * @abstract
 */

var Operation = function () {
  /**
   * This constructor should not be invoked. The subclasses {@link Query} and {@link Mutation} should be used instead.
   */
  function Operation(typeBundle, operationType) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, Operation);
    for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
      args[_key - 2] = arguments[_key];
    }
    var _parseArgs = parseArgs(args),
      name = _parseArgs.name,
      variables = _parseArgs.variables,
      selectionSetCallback = _parseArgs.selectionSetCallback;
    this.typeBundle = typeBundle;
    this.name = name;
    this.variableDefinitions = new VariableDefinitions(variables);
    this.operationType = operationType;
    if (operationType === 'query') {
      this.selectionSet = new SelectionSet(typeBundle, typeBundle.queryType, selectionSetCallback);
      this.typeSchema = schemaForType(typeBundle, typeBundle.queryType);
    } else {
      this.selectionSet = new SelectionSet(typeBundle, typeBundle.mutationType, selectionSetCallback);
      this.typeSchema = schemaForType(typeBundle, typeBundle.mutationType);
    }
    freeze_default()(this);
  }

  /**
   * Whether the operation is anonymous (i.e. has no name).
   */

  jsBuy_unoptimized_umd_min_createClass(Operation, [{
    key: 'toString',
    /**
     * Returns the GraphQL query or mutation string (e.g. `query myQuery { cat { name } }`).
     *
     * @return {String} The GraphQL query or mutation string.
     */
    value: function toString() {
      var nameString = this.name ? ' ' + this.name : '';
      return '' + this.operationType + nameString + this.variableDefinitions + this.selectionSet;
    }
  }, {
    key: 'isAnonymous',
    get: function get$$1() {
      return !this.name;
    }
  }]);
  return Operation;
}();

/**
 * GraphQL Query class.
 * @extends Operation
 */

var Query = function (_Operation) {
  inherits(Query, _Operation);

  /**
   * This constructor should not be invoked directly.
   * Use the factory functions {@link Client#query} or {@link Document#addQuery} to create a Query.
   *
   * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.
   * @param {String} [name] A name for the query.
   * @param {Object[]} [variables] A list of variables in the query. See {@link Client#variable}.
   * @param {Function} selectionSetCallback The query builder callback.
   *   A {@link SelectionSet} is created using this callback.
   */
  function Query(typeBundle) {
    var _context9;
    var _ref;
    jsBuy_unoptimized_umd_min_classCallCheck(this, Query);
    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
      args[_key - 1] = arguments[_key];
    }
    return possibleConstructorReturn(this, (_ref = Query.__proto__ || get_prototype_of_default()(Query)).call.apply(_ref, concat_default()(_context9 = [this, typeBundle, 'query']).call(_context9, args)));
  }
  return Query;
}(Operation);

/**
 * GraphQL Mutation class.
 * @extends Operation
 */

var Mutation = function (_Operation) {
  inherits(Mutation, _Operation);

  /**
   * This constructor should not be invoked directly.
   * Use the factory functions {@link Client#mutation} or {@link Document#addMutation} to create a Mutation.
   *
   * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.
   * @param {String} [name] A name for the mutation.
   * @param {Object[]} [variables] A list of variables in the mutation. See {@link Client#variable}.
   * @param {Function} selectionSetCallback The mutation builder callback.
   *   A {@link SelectionSet} is created using this callback.
   */
  function Mutation(typeBundle) {
    var _context10;
    var _ref;
    jsBuy_unoptimized_umd_min_classCallCheck(this, Mutation);
    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
      args[_key - 1] = arguments[_key];
    }
    return possibleConstructorReturn(this, (_ref = Mutation.__proto__ || get_prototype_of_default()(Mutation)).call.apply(_ref, concat_default()(_context10 = [this, typeBundle, 'mutation']).call(_context10, args)));
  }
  return Mutation;
}(Operation);
function isAnonymous(operation) {
  return operation.isAnonymous;
}
function hasAnonymousOperations(operations) {
  return some_default()(operations).call(operations, isAnonymous);
}
function hasDuplicateOperationNames(operations) {
  var names = map_default()(operations).call(operations, function (operation) {
    return operation.name;
  });
  return reduce_default()(names).call(names, function (hasDuplicates, name, index) {
    return hasDuplicates || index_of_default()(names).call(names, name) !== index;
  }, false);
}
function extractOperation(typeBundle, operationType) {
  for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
    args[_key - 2] = arguments[_key];
  }
  if (Operation.prototype.isPrototypeOf(args[0])) {
    return args[0];
  }
  if (operationType === 'query') {
    var _context11;
    return new (bind_default()(Function.prototype).apply(Query, concat_default()(_context11 = [null]).call(_context11, [typeBundle], args)))();
  } else {
    var _context12;
    return new (bind_default()(Function.prototype).apply(Mutation, concat_default()(_context12 = [null]).call(_context12, [typeBundle], args)))();
  }
}
function isInvalidOperationCombination(operations) {
  if (operations.length === 1) {
    return false;
  }
  return hasAnonymousOperations(operations) || hasDuplicateOperationNames(operations);
}
function fragmentNameIsNotUnique(existingDefinitions, name) {
  return some_default()(existingDefinitions).call(existingDefinitions, function (definition) {
    return definition.name === name;
  });
}
var Document = function () {
  /**
   * This constructor should not be invoked directly.
   * Use the factory function {@link Client#document} to create a Document.
   * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.
   */
  function Document(typeBundle) {
    jsBuy_unoptimized_umd_min_classCallCheck(this, Document);
    this.typeBundle = typeBundle;
    this.definitions = [];
  }

  /**
   * Returns the GraphQL query string for the Document (e.g. `query queryOne { ... } query queryTwo { ... }`).
   *
   * @return {String} The GraphQL query string for the Document.
   */

  jsBuy_unoptimized_umd_min_createClass(Document, [{
    key: 'toString',
    value: function toString() {
      return join(this.definitions);
    }

    /**
     * Adds an operation to the Document.
     *
     * @private
     * @param {String} operationType The type of the operation. Either 'query' or 'mutation'.
     * @param {(Operation|String)} [query|queryName] Either an instance of an operation
     *   object, or the name of an operation. Both are optional.
     * @param {Object[]} [variables] A list of variables in the operation. See {@link Client#variable}.
     * @param {Function} [callback] The query builder callback. If an operation
     *   instance is passed, this callback will be ignored.
     *   A {@link SelectionSet} is created using this callback.
      */
  }, {
    key: 'addOperation',
    value: function addOperation(operationType) {
      var _context13, _context14;
      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
        args[_key2 - 1] = arguments[_key2];
      }
      var operation = extractOperation.apply(undefined, concat_default()(_context13 = [this.typeBundle, operationType]).call(_context13, args));
      if (isInvalidOperationCombination(concat_default()(_context14 = this.operations).call(_context14, operation))) {
        throw new Error('All operations must be uniquely named on a multi-operation document');
      }
      this.definitions.push(operation);
    }

    /**
     * Adds a query to the Document.
     *
     * @example
     * document.addQuery('myQuery', (root) => {
     *   root.add('cat', (cat) => {
     *    cat.add('name');
     *   });
     * });
     *
     * @param {(Query|String)} [query|queryName] Either an instance of a query
     *   object, or the name of a query. Both are optional.
     * @param {Object[]} [variables] A list of variables in the query. See {@link Client#variable}.
     * @param {Function} [callback] The query builder callback. If a query
     *   instance is passed, this callback will be ignored.
     *   A {@link SelectionSet} is created using this callback.
     */
  }, {
    key: 'addQuery',
    value: function addQuery() {
      var _context15;
      for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
        args[_key3] = arguments[_key3];
      }
      this.addOperation.apply(this, concat_default()(_context15 = ['query']).call(_context15, args));
    }

    /**
     * Adds a mutation to the Document.
     *
     * @example
     * const input = client.variable('input', 'CatCreateInput!');
     *
     * document.addMutation('myMutation', [input], (root) => {
     *   root.add('catCreate', {args: {input}}, (catCreate) => {
     *     catCreate.add('cat', (cat) => {
     *       cat.add('name');
     *     });
     *   });
     * });
     *
     * @param {(Mutation|String)} [mutation|mutationName] Either an instance of a mutation
     *   object, or the name of a mutation. Both are optional.
     * @param {Object[]} [variables] A list of variables in the mutation. See {@link Client#variable}.
     * @param {Function} [callback] The mutation builder callback. If a mutation
     *   instance is passed, this callback will be ignored.
     *   A {@link SelectionSet} is created using this callback.
     */
  }, {
    key: 'addMutation',
    value: function addMutation() {
      var _context16;
      for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
        args[_key4] = arguments[_key4];
      }
      this.addOperation.apply(this, concat_default()(_context16 = ['mutation']).call(_context16, args));
    }

    /**
     * Defines a fragment on the Document.
     *
     * @param {String} name The name of the fragment.
     * @param {String} onType The type the fragment is on.
     * @param {Function} [builderFunction] The query builder callback.
     *   A {@link SelectionSet} is created using this callback.
     * @return {FragmentSpread} A {@link FragmentSpread} to be used with {@link SelectionSetBuilder#addFragment}.
     */
  }, {
    key: 'defineFragment',
    value: function defineFragment(name, onType, builderFunction) {
      if (fragmentNameIsNotUnique(this.fragmentDefinitions, name)) {
        throw new Error('All fragments must be uniquely named on a multi-fragment document');
      }
      var selectionSet = new SelectionSet(this.typeBundle, onType, builderFunction);
      var fragment = new FragmentDefinition(name, onType, selectionSet);
      this.definitions.push(fragment);
      return fragment.spread;
    }

    /**
     * All operations ({@link Query} and {@link Mutation}) on the Document.
     */
  }, {
    key: 'operations',
    get: function get$$1() {
      var _context17;
      return filter_default()(_context17 = this.definitions).call(_context17, function (definition) {
        return Operation.prototype.isPrototypeOf(definition);
      });
    }

    /**
     * All {@link FragmentDefinition}s on the Document.
     */
  }, {
    key: 'fragmentDefinitions',
    get: function get$$1() {
      var _context18;
      return filter_default()(_context18 = this.definitions).call(_context18, function (definition) {
        return FragmentDefinition.prototype.isPrototypeOf(definition);
      });
    }
  }]);
  return Document;
}();

/**
 * The base class used when deserializing response data.
 * Provides rich features, like functions to generate queries to refetch a node or fetch the next page.
 *
 * @class
 */
var GraphModel =
/**
 * @param {Object} attrs Attributes on the GraphModel.
 */
function GraphModel(attrs) {
  var _context19, _context20;
  var _this = this;
  jsBuy_unoptimized_umd_min_classCallCheck(this, GraphModel);
  define_property_default()(this, 'attrs', {
    value: attrs,
    enumerable: false
  });
  for_each_default()(_context19 = filter_default()(_context20 = keys_default()(this.attrs)).call(_context20, function (key) {
    return !(key in _this);
  })).call(_context19, function (key) {
    var descriptor = void 0;
    if (attrs[key] === null) {
      descriptor = {
        enumerable: true,
        get: function get$$1() {
          return null;
        }
      };
    } else {
      descriptor = {
        enumerable: true,
        get: function get$$1() {
          return this.attrs[key].valueOf();
        }
      };
    }
    define_property_default()(_this, key, descriptor);
  });
};

/**
 * A registry of classes used to deserialize the response data. Uses {@link GraphModel} by default.
 */

var ClassRegistry = function () {
  function ClassRegistry() {
    jsBuy_unoptimized_umd_min_classCallCheck(this, ClassRegistry);
    this.classStore = {};
  }

  /**
   * Registers a class for a GraphQL type in the registry.
   *
   * @param {Class} constructor The constructor of the class.
   * @param {String} type The GraphQL type of the object to deserialize into the class.
   */

  jsBuy_unoptimized_umd_min_createClass(ClassRegistry, [{
    key: 'registerClassForType',
    value: function registerClassForType(constructor, type) {
      this.classStore[type] = constructor;
    }

    /**
     * Unregisters a class for a GraphQL type in the registry.
     *
     * @param {String} type The GraphQL type to unregister.
     */
  }, {
    key: 'unregisterClassForType',
    value: function unregisterClassForType(type) {
      delete this.classStore[type];
    }

    /**
     * Returns the class for the given GraphQL type.
     *
     * @param {String} type The GraphQL type to look up.
     * @return {Class|GraphModel} The class for the given GraphQL type. Defaults to {@link GraphModel} if no class is registered for the GraphQL type.
     */
  }, {
    key: 'classForType',
    value: function classForType(type) {
      return this.classStore[type] || GraphModel;
    }
  }]);
  return ClassRegistry;
}();
function isValue(arg) {
  return Object.prototype.toString.call(arg) !== '[object Null]' && Object.prototype.toString.call(arg) !== '[object Undefined]';
}
function isNodeContext(context) {
  return context.selection.selectionSet.typeSchema.implementsNode;
}
function isConnection(context) {
  var _context21;
  return ends_with_default()(_context21 = context.selection.selectionSet.typeSchema.name).call(_context21, 'Connection');
}
function nearestNode(context) {
  if (context == null) {
    return null;
  } else if (isNodeContext(context)) {
    return context;
  } else {
    return nearestNode(context.parent);
  }
}
function contextsFromRoot(context) {
  if (context.parent) {
    var _context22;
    return concat_default()(_context22 = contextsFromRoot(context.parent)).call(_context22, context);
  } else {
    return [context];
  }
}
function contextsFromNearestNode(context) {
  if (context.selection.selectionSet.typeSchema.implementsNode) {
    return [context];
  } else {
    var _context23;
    return concat_default()(_context23 = contextsFromNearestNode(context.parent)).call(_context23, context);
  }
}
function initializeDocumentAndVars(currentContext, contextChain) {
  var _context24, _context25;
  var lastInChain = contextChain[contextChain.length - 1];
  var first = lastInChain.selection.args.first;
  var variableDefinitions = map_default()(_context24 = filter_default()(_context25 = keys_default()(lastInChain.selection.args)).call(_context25, function (key) {
    return isVariable(lastInChain.selection.args[key]);
  })).call(_context24, function (key) {
    return lastInChain.selection.args[key];
  });
  var firstVar = find_default()(variableDefinitions).call(variableDefinitions, function (definition) {
    return definition.name === 'first';
  });
  if (!firstVar) {
    if (isVariable(first)) {
      firstVar = first;
    } else {
      firstVar = variable('first', 'Int', first);
      variableDefinitions.push(firstVar);
    }
  }
  var document = new Document(currentContext.selection.selectionSet.typeBundle);
  return [document, variableDefinitions, firstVar];
}
function addNextFieldTo(currentSelection, contextChain, path, cursor) {
  // There are always at least two. When we start, it's the root context, and the first set
  var nextContext = contextChain.shift();
  path.push(nextContext.selection.responseKey);
  if (contextChain.length) {
    currentSelection.add(nextContext.selection.name, {
      alias: nextContext.selection.alias,
      args: nextContext.selection.args
    }, function (newSelection) {
      addNextFieldTo(newSelection, contextChain, path, cursor);
    });
  } else {
    var _context26, _context27;
    var edgesField = find_default()(_context26 = nextContext.selection.selectionSet.selections).call(_context26, function (field) {
      return field.name === 'edges';
    });
    var nodeField = find_default()(_context27 = edgesField.selectionSet.selections).call(_context27, function (field) {
      return field.name === 'node';
    });
    var first = void 0;
    if (isVariable(nextContext.selection.args.first)) {
      first = nextContext.selection.args.first;
    } else {
      first = variable('first', 'Int', nextContext.selection.args.first);
    }
    var options = {
      alias: nextContext.selection.alias,
      args: assign_default()({}, nextContext.selection.args, {
        after: cursor,
        first: first
      })
    };
    currentSelection.addConnection(nextContext.selection.name, options, nodeField.selectionSet);
  }
}
function collectFragments(selections) {
  return reduce_default()(selections).call(selections, function (fragmentDefinitions, field) {
    if (FragmentSpread.prototype.isPrototypeOf(field)) {
      fragmentDefinitions.push(field.toDefinition());
    }
    fragmentDefinitions.push.apply(fragmentDefinitions, jsBuy_unoptimized_umd_min_toConsumableArray(collectFragments(field.selectionSet.selections)));
    return fragmentDefinitions;
  }, []);
}
function nextPageQueryAndPath(context, cursor) {
  var nearestNodeContext = nearestNode(context);
  if (nearestNodeContext) {
    return function () {
      var _document$definitions;
      var path = [];
      var nodeType = nearestNodeContext.selection.selectionSet.typeSchema;
      var nodeId = nearestNodeContext.responseData.id;
      var contextChain = contextsFromNearestNode(context);
      var _initializeDocumentAn = initializeDocumentAndVars(context, contextChain),
        _initializeDocumentAn2 = slicedToArray(_initializeDocumentAn, 2),
        document = _initializeDocumentAn2[0],
        variableDefinitions = _initializeDocumentAn2[1];
      document.addQuery(variableDefinitions, function (root) {
        path.push('node');
        root.add('node', {
          args: {
            id: nodeId
          }
        }, function (node) {
          node.addInlineFragmentOn(nodeType.name, function (fragment) {
            addNextFieldTo(fragment, slice_default()(contextChain).call(contextChain, 1), path, cursor);
          });
        });
      });
      var fragments = collectFragments(document.operations[0].selectionSet.selections);
      (_document$definitions = document.definitions).unshift.apply(_document$definitions, jsBuy_unoptimized_umd_min_toConsumableArray(fragments));
      return [document, path];
    };
  } else {
    return function () {
      var _document$definitions2;
      var path = [];
      var contextChain = contextsFromRoot(context);
      var _initializeDocumentAn3 = initializeDocumentAndVars(context, contextChain),
        _initializeDocumentAn4 = slicedToArray(_initializeDocumentAn3, 2),
        document = _initializeDocumentAn4[0],
        variableDefinitions = _initializeDocumentAn4[1];
      document.addQuery(variableDefinitions, function (root) {
        addNextFieldTo(root, slice_default()(contextChain).call(contextChain, 1), path, cursor);
      });
      var fragments = collectFragments(document.operations[0].selectionSet.selections);
      (_document$definitions2 = document.definitions).unshift.apply(_document$definitions2, jsBuy_unoptimized_umd_min_toConsumableArray(fragments));
      return [document, path];
    };
  }
}
function hasNextPage$1(connection, edge) {
  if (edge !== connection.edges[connection.edges.length - 1]) {
    return new Scalar(true);
  }
  return connection.pageInfo.hasNextPage;
}
function hasPreviousPage(connection, edge) {
  if (edge !== connection.edges[0]) {
    return new Scalar(true);
  }
  return connection.pageInfo.hasPreviousPage;
}
function transformConnections(variableValues) {
  return function (context, value) {
    if (isConnection(context)) {
      var _context28;
      if (!(value.pageInfo && value.pageInfo.hasOwnProperty('hasNextPage') && value.pageInfo.hasOwnProperty('hasPreviousPage'))) {
        throw new Error('Connections must include the selections "pageInfo { hasNextPage, hasPreviousPage }".');
      }
      return map_default()(_context28 = value.edges).call(_context28, function (edge) {
        return assign_default()(edge.node, {
          nextPageQueryAndPath: nextPageQueryAndPath(context, edge.cursor),
          hasNextPage: hasNextPage$1(value, edge),
          hasPreviousPage: hasPreviousPage(value, edge),
          variableValues: variableValues
        });
      });
    } else {
      return value;
    }
  };
}

/* eslint-disable no-warning-comments */
var DecodingContext = function () {
  function DecodingContext(selection, responseData) {
    var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
    jsBuy_unoptimized_umd_min_classCallCheck(this, DecodingContext);
    this.selection = selection;
    this.responseData = responseData;
    this.parent = parent;
    freeze_default()(this);
  }
  jsBuy_unoptimized_umd_min_createClass(DecodingContext, [{
    key: 'contextForObjectProperty',
    value: function contextForObjectProperty(responseKey) {
      var nestedSelections = this.selection.selectionSet.selectionsByResponseKey[responseKey];
      var nextSelection = nestedSelections && nestedSelections[0];
      var nextContext = void 0;

      // fragment spreads operate inside the current context, so we recurse to get the proper
      // selection set, but retain the current response context
      if (Spread.prototype.isPrototypeOf(nextSelection)) {
        nextContext = new DecodingContext(nextSelection, this.responseData, this.parent);
      } else {
        nextContext = new DecodingContext(nextSelection, this.responseData[responseKey], this);
      }
      if (!nextSelection) {
        throw new Error('Unexpected response key "' + responseKey + '", not found in selection set: ' + this.selection.selectionSet);
      }
      if (Field.prototype.isPrototypeOf(nextSelection)) {
        return nextContext;
      } else {
        return nextContext.contextForObjectProperty(responseKey);
      }
    }
  }, {
    key: 'contextForArrayItem',
    value: function contextForArrayItem(item) {
      return new DecodingContext(this.selection, item, this.parent);
    }
  }]);
  return DecodingContext;
}();
function decodeArrayItems(context, transformers) {
  var _context29;
  return map_default()(_context29 = context.responseData).call(_context29, function (item) {
    return decodeContext(context.contextForArrayItem(item), transformers);
  });
}
function decodeObjectValues(context, transformers) {
  var _context30;
  return reduce_default()(_context30 = keys_default()(context.responseData)).call(_context30, function (acc, responseKey) {
    acc[responseKey] = decodeContext(context.contextForObjectProperty(responseKey), transformers);
    return acc;
  }, {});
}
function runTransformers(transformers, context, value) {
  return reduce_default()(transformers).call(transformers, function (acc, transformer) {
    return transformer(context, acc);
  }, value);
}
function decodeContext(context, transformers) {
  var value = context.responseData;
  if (is_array_default()(value)) {
    value = decodeArrayItems(context, transformers);
  } else if (isObject(value)) {
    value = decodeObjectValues(context, transformers);
  }
  return runTransformers(transformers, context, value);
}
function generateRefetchQueries(context, value) {
  if (isValue(value) && isNodeContext(context)) {
    value.refetchQuery = function () {
      return new Query(context.selection.selectionSet.typeBundle, function (root) {
        root.add('node', {
          args: {
            id: context.responseData.id
          }
        }, function (node) {
          node.addInlineFragmentOn(context.selection.selectionSet.typeSchema.name, context.selection.selectionSet);
        });
      });
    };
  }
  return value;
}
function transformPojosToClassesWithRegistry(classRegistry) {
  return function transformPojosToClasses(context, value) {
    if (isObject(value)) {
      var Klass = classRegistry.classForType(context.selection.selectionSet.typeSchema.name);
      return new Klass(value);
    } else {
      return value;
    }
  };
}
function transformScalars(context, value) {
  if (isValue(value)) {
    if (context.selection.selectionSet.typeSchema.kind === 'SCALAR') {
      return new Scalar(value);
    } else if (context.selection.selectionSet.typeSchema.kind === 'ENUM') {
      return new Enum(value);
    }
  }
  return value;
}
function recordTypeInformation(context, value) {
  var _context$selection$se = context.selection.selectionSet,
    typeBundle = _context$selection$se.typeBundle,
    typeSchema = _context$selection$se.typeSchema;
  if (isValue(value)) {
    if (value.__typename) {
      value.type = schemaForType(typeBundle, value.__typename, typeSchema);
    } else {
      value.type = typeSchema;
    }
  }
  return value;
}
function defaultTransformers(_ref) {
  var _ref$classRegistry = _ref.classRegistry,
    classRegistry = _ref$classRegistry === undefined ? new ClassRegistry() : _ref$classRegistry,
    variableValues = _ref.variableValues;
  return [transformScalars, generateRefetchQueries, transformConnections(variableValues), recordTypeInformation, transformPojosToClassesWithRegistry(classRegistry)];
}

/**
 * A function used to decode the response data.
 *
 * @function decode
 * @param {SelectionSet} selection The selection set used to query the response data.
 * @param {Object} responseData The response data returned.
 * @param {Object} [options] Options to use when decoding including:
 *   @param {ClassRegistry} [options.classRegistry] A class registry to use when deserializing the data into classes.
 * @return {GraphModel} The decoded response data.
 */
function decode(selection, responseData) {
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  var transformers = options.transformers || defaultTransformers(options);
  var context = new DecodingContext(selection, responseData);
  return decodeContext(context, transformers);
}
function httpFetcher(url) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  return function fetcher(graphQLParams, headers) {
    return fetch(url, _extends({
      body: stringify_default()(graphQLParams),
      method: 'POST',
      mode: 'cors'
    }, options, {
      headers: _extends({
        'Content-Type': 'application/json',
        Accept: 'application/json'
      }, options.headers, headers)
    })).then(function (response) {
      var contentType = response.headers.get('content-type');
      if (index_of_default()(contentType).call(contentType, 'application/json') > -1) {
        return response.json();
      }
      return response.text().then(function (text) {
        return {
          text: text
        };
      });
    });
  };
}
function hasNextPage(paginatedModels) {
  return paginatedModels && paginatedModels.length && paginatedModels[paginatedModels.length - 1].hasNextPage;
}

/**
 * The Client class used to create and send GraphQL documents, fragments, queries and mutations.
 */

var Client$2 = function () {
  /**
   * @param {Object} typeBundle A set of ES6 modules generated by {@link https://github.com/Shopify/graphql-js-schema|graphql-js-schema}.
   * @param {Object} options An options object. Must include either `url` and optional `fetcherOptions` OR a `fetcher` function.
   *   @param {(String|Function)} options.url|fetcher Either the URL of the GraphQL API endpoint, or a custom fetcher function for further customization.
   *   @param {Object} [options.fetcherOptions] Additional options to use with `fetch`, like headers. Do not specify this argument if `fetcher` is specified.
   *   @param {ClassRegistry} [options.registry=new ClassRegistry()] A {@link ClassRegistry} used to decode the response data.
   */
  function Client(typeBundle, _ref) {
    var url = _ref.url,
      fetcherOptions = _ref.fetcherOptions,
      fetcher = _ref.fetcher,
      _ref$registry = _ref.registry,
      registry = _ref$registry === undefined ? new ClassRegistry() : _ref$registry;
    jsBuy_unoptimized_umd_min_classCallCheck(this, Client);
    this.typeBundle = typeBundle;
    this.classRegistry = registry;
    if (url && fetcher) {
      throw new Error('Arguments not supported: supply either `url` and optional `fetcherOptions` OR use a `fetcher` function for further customization.');
    }
    if (url) {
      this.fetcher = httpFetcher(url, fetcherOptions);
    } else if (fetcher) {
      if (fetcherOptions) {
        throw new Error('Arguments not supported: when specifying your own `fetcher`, set options through it and not with `fetcherOptions`');
      }
      this.fetcher = fetcher;
    } else {
      throw new Error('Invalid arguments: one of `url` or `fetcher` is needed.');
    }
  }

  /**
   * Creates a GraphQL document.
   *
   * @example
   * const document = client.document();
   *
   * @return {Document} A GraphQL document.
   */

  jsBuy_unoptimized_umd_min_createClass(Client, [{
    key: 'document',
    value: function document() {
      return new Document(this.typeBundle);
    }

    /**
     * Creates a GraphQL query.
     *
     * @example
     * const query = client.query('myQuery', (root) => {
     *   root.add('cat', (cat) => {
     *    cat.add('name');
     *   });
     * });
     *
     * @param {String} [name] A name for the query.
     * @param {VariableDefinition[]} [variables] A list of variables in the query. See {@link Client#variable}.
     * @param {Function} selectionSetCallback The query builder callback.
     *   A {@link SelectionSet} is created using this callback.
     * @return {Query} A GraphQL query.
     */
  }, {
    key: 'query',
    value: function query() {
      var _context31;
      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
      return new (bind_default()(Function.prototype).apply(Query, concat_default()(_context31 = [null]).call(_context31, [this.typeBundle], args)))();
    }

    /**
     * Creates a GraphQL mutation.
     *
     * @example
     * const input = client.variable('input', 'CatCreateInput!');
     *
     * const mutation = client.mutation('myMutation', [input], (root) => {
     *   root.add('catCreate', {args: {input}}, (catCreate) => {
     *     catCreate.add('cat', (cat) => {
     *       cat.add('name');
     *     });
     *   });
     * });
     *
     * @param {String} [name] A name for the mutation.
     * @param {VariableDefinition[]} [variables] A list of variables in the mutation. See {@link Client#variable}.
     * @param {Function} selectionSetCallback The mutation builder callback.
     *   A {@link SelectionSet} is created using this callback.
     * @return {Mutation} A GraphQL mutation.
     */
  }, {
    key: 'mutation',
    value: function mutation() {
      var _context32;
      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }
      return new (bind_default()(Function.prototype).apply(Mutation, concat_default()(_context32 = [null]).call(_context32, [this.typeBundle], args)))();
    }

    /**
     * Sends a GraphQL operation (query or mutation) or a document.
     *
     * @example
     * client.send(query, {id: '12345'}).then((result) => {
     *   // Do something with the returned result
     *   console.log(result);
     * });
     *
     * @param {(Query|Mutation|Document|Function)} request The operation or document to send. If represented
     * as a function, it must return `Query`, `Mutation`, or `Document` and recieve the client as the only param.
     * @param {Object} [variableValues] The values for variables in the operation or document.
     * @param {Object} [otherProperties] Other properties to send with the query. For example, a custom operation name.
     * @param {Object} [headers] Additional headers to be applied on a request by request basis.
     * @return {Promise.<Object>} A promise resolving to an object containing the response data.
     */
  }, {
    key: 'send',
    value: function send(request) {
      var variableValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
      var _this = this;
      var otherProperties = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
      var headers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
      var operationOrDocument = void 0;
      if (Function.prototype.isPrototypeOf(request)) {
        operationOrDocument = request(this);
      } else {
        operationOrDocument = request;
      }
      var graphQLParams = {
        query: operationOrDocument.toString()
      };
      if (variableValues) {
        graphQLParams.variables = variableValues;
      }
      assign_default()(graphQLParams, otherProperties);
      var operation = void 0;
      if (Operation.prototype.isPrototypeOf(operationOrDocument)) {
        operation = operationOrDocument;
      } else {
        var document = operationOrDocument;
        if (document.operations.length === 1) {
          operation = document.operations[0];
        } else if (otherProperties.operationName) {
          var _context33;
          operation = find_default()(_context33 = document.operations).call(_context33, function (documentOperation) {
            return documentOperation.name === otherProperties.operationName;
          });
        } else {
          throw new Error('\n          A document must contain exactly one operation, or an operationName\n          must be specified. Example:\n\n            client.send(document, null, {operationName: \'myFancyQuery\'});\n        ');
        }
      }
      return this.fetcher(graphQLParams, headers).then(function (response) {
        if (response.data) {
          response.model = decode(operation, response.data, {
            classRegistry: _this.classRegistry,
            variableValues: variableValues
          });
        }
        return response;
      });
    }

    /**
     * Fetches the next page of a paginated node or array of nodes.
     *
     * @example
     * client.fetchNextPage(node, {first: 10}).then((result) => {
     *   // Do something with the next page
     *   console.log(result);
     * });
     *
     * @param {(GraphModel|GraphModel[])} nodeOrNodes The node or list of nodes on which to fetch the next page.
     * @param {Object} [options] Options object containing:
     *   @param {Integer} [options.first] The number of nodes to query on the next page. Defaults to the page size of the previous query.
     * @return {Promise.<GraphModel[]>} A promise resolving with the next page of {@link GraphModel}s.
     */
  }, {
    key: 'fetchNextPage',
    value: function fetchNextPage(nodeOrNodes, options) {
      var node = void 0;
      if (is_array_default()(nodeOrNodes)) {
        node = nodeOrNodes[nodeOrNodes.length - 1];
      } else {
        node = nodeOrNodes;
      }
      var _node$nextPageQueryAn = node.nextPageQueryAndPath(),
        _node$nextPageQueryAn2 = slicedToArray(_node$nextPageQueryAn, 2),
        query = _node$nextPageQueryAn2[0],
        path = _node$nextPageQueryAn2[1];
      var variableValues = void 0;
      if (node.variableValues || options) {
        variableValues = assign_default()({}, node.variableValues, options);
      }
      return this.send(query, variableValues).then(function (response) {
        response.model = reduce_default()(path).call(path, function (object, key) {
          return object[key];
        }, response.model);
        return response;
      });
    }

    /**
     * Fetches all subsequent pages of a paginated array of nodes.
     *
     * @example
     * client.fetchAllPages(nodes, {pageSize: 20}).then((result) => {
     *   // Do something with all the models
     *   console.log(result);
     * });
     *
     * @param {GraphModel[]} paginatedModels The list of nodes on which to fetch all pages.
     * @param {Object} options Options object containing:
     *   @param {Integer} options.pageSize The number of nodes to query on each page.
     * @return {Promise.<GraphModel[]>} A promise resolving with all pages of {@link GraphModel}s, including the original list.
     */
  }, {
    key: 'fetchAllPages',
    value: function fetchAllPages(paginatedModels, _ref2) {
      var _this2 = this;
      var pageSize = _ref2.pageSize;
      if (hasNextPage(paginatedModels)) {
        return this.fetchNextPage(paginatedModels, {
          first: pageSize
        }).then(function (_ref3) {
          var model = _ref3.model;
          var pages = concat_default()(paginatedModels).call(paginatedModels, model);
          return _this2.fetchAllPages(pages, {
            pageSize: pageSize
          });
        });
      }
      return promise_default().resolve(paginatedModels);
    }

    /**
     * Refetches a {@link GraphModel} whose type implements `Node`.
     *
     * @example
     * client.refetch(node).then((result) => {
     *   // Do something with the refetched node
     *   console.log(result);
     * });
     *
     * @param {GraphModel} nodeType A {@link GraphModel} whose type implements `Node`.
     * @return {Promise.<GraphModel>} The refetched {@link GraphModel}.
     */
  }, {
    key: 'refetch',
    value: function refetch(nodeType) {
      if (!nodeType) {
        throw new Error('\'client#refetch\' must be called with a non-null instance of a Node.');
      } else if (!nodeType.type.implementsNode) {
        throw new Error('\'client#refetch\' must be called with a type that implements Node. Received ' + nodeType.type.name + '.');
      }
      return this.send(nodeType.refetchQuery()).then(function (_ref4) {
        var model = _ref4.model;
        return model.node;
      });
    }

    /**
     * Creates a variable to be used in a {@link Query} or {@link Mutation}.
     *
     * @example
     * const idVariable = client.variable('id', 'ID!', '12345');
     *
     * @param {String} name The name of the variable.
     * @param {String} type The GraphQL type of the variable.
     * @param {*} [defaultValue] The default value of the variable.
     * @return {VariableDefinition} A variable object that can be used in a {@link Query} or {@link Mutation}.
     */
  }, {
    key: 'variable',
    value: function variable$$1(name, type, defaultValue) {
      return variable(name, type, defaultValue);
    }

    /**
     * Creates an enum to be used in a {@link Query} or {@link Mutation}.
     *
     * @example
     * const titleEnum = client.enum('TITLE');
     *
     * @param {String} key The key of the enum.
     * @return {Enum} An enum object that can be used in a {@link Query} or {@link Mutation}.
     */
  }, {
    key: 'enum',
    value: function _enum(key) {
      return enumFunction(key);
    }
  }]);
  return Client;
}();

/**
 * The class used to configure the JS Buy SDK Client.
 * @class
 */
var Config = function () {
  createClass$1(Config, [{
    key: 'requiredProperties',
    /**
     * Properties that must be set on initializations
     * @attribute requiredProperties
     * @default ['storefrontAccessToken', 'domain']
     * @type Array
     * @private
     */
    get: function get$$1() {
      return ['storefrontAccessToken', 'domain'];
    }

    /**
     * Deprecated properties that map directly to required properties
     * @attribute deprecatedProperties
     * @default {'accessToken': 'storefrontAccessToken', 'apiKey': 'storefrontAccessToken'}
     * @type Object
     * @private
     */
  }, {
    key: 'deprecatedProperties',
    get: function get$$1() {
      return {
        accessToken: 'storefrontAccessToken',
        apiKey: 'storefrontAccessToken'
      };
    }

    /**
     * @constructs Config
     * @param {Object} attrs An object specifying the configuration. Requires the following properties:
     *   @param {String} attrs.storefrontAccessToken The {@link https://help.shopify.com/api/reference/storefront_access_token|Storefront access token} for the shop.
     *   @param {String} attrs.domain The `myshopify` domain for the shop (e.g. `graphql.myshopify.com`).
     */
  }]);
  function Config(attrs) {
    var _context34, _context35;
    var _this = this;
    classCallCheck$1(this, Config);
    for_each_default()(_context34 = keys_default()(this.deprecatedProperties)).call(_context34, function (key) {
      if (!attrs.hasOwnProperty(key)) {
        return;
      }
      // eslint-disable-next-line no-console
      console.warn('[ShopifyBuy] Config property ' + key + ' is deprecated as of v1.0, please use ' + _this.deprecatedProperties[key] + ' instead.');
      attrs[_this.deprecatedProperties[key]] = attrs[key];
    });
    for_each_default()(_context35 = this.requiredProperties).call(_context35, function (key) {
      if (attrs.hasOwnProperty(key)) {
        _this[key] = attrs[key];
      } else {
        throw new Error('new Config() requires the option \'' + key + '\'');
      }
    });
    if (attrs.hasOwnProperty('apiVersion')) {
      this.apiVersion = attrs.apiVersion;
    } else {
      this.apiVersion = '2024-04';
    }
    if (attrs.hasOwnProperty('source')) {
      this.source = attrs.source;
    }
    if (attrs.hasOwnProperty('language')) {
      this.language = attrs.language;
    }
  }
  return Config;
}();
var Resource = function Resource(client) {
  classCallCheck$1(this, Resource);
  this.graphQLClient = client;
};
var defaultErrors = [{
  message: 'an unknown error has occurred.'
}];
function defaultResolver(path) {
  var keys = path.split('.');
  return function (_ref) {
    var model = _ref.model,
      errors = _ref.errors;
    return new (promise_default())(function (resolve, reject) {
      try {
        var result = reduce_default()(keys).call(keys, function (ref, key) {
          return ref[key];
        }, model);
        resolve(result);
      } catch (_) {
        if (errors) {
          reject(errors);
        } else {
          reject(defaultErrors);
        }
      }
    });
  };
}
function fetchResourcesForProducts(productOrProduct, client) {
  var _context36;
  var products = concat_default()(_context36 = []).call(_context36, productOrProduct);
  return promise_default().all(reduce_default()(products).call(products, function (promiseAcc, product) {
    // If the graphql query doesn't find a match, skip fetching variants and images.
    if (product === null) {
      return promiseAcc;
    }

    // Fetch the rest of the images and variants for this product
    // promiseAcc.push(client.fetchAllPages(product.images, {pageSize: 3}).then((images) => {
    //   product.attrs.images = images;
    // }));

    promiseAcc.push(client.fetchAllPages(product.variants, {
      pageSize: 250
    }).then(function (variants) {
      product.attrs.variants = variants;
    }));
    return promiseAcc;
  }, []));
}
function paginateProductConnectionsAndResolve(client) {
  return function (products) {
    return fetchResourcesForProducts(products, client).then(function () {
      return products;
    });
  };
}
function paginateCollectionsProductConnectionsAndResolve(client) {
  return function (collectionOrCollections) {
    var _context37;
    var collections = concat_default()(_context37 = []).call(_context37, collectionOrCollections);
    return promise_default().all(reduce_default()(collections).call(collections, function (promiseAcc, collection) {
      return concat_default()(promiseAcc).call(promiseAcc, fetchResourcesForProducts(collection.products, client));
    }, [])).then(function () {
      return collectionOrCollections;
    });
  };
}

/**
 * @namespace ProductHelpers
 */
var productHelpers = {
  /**
   * Returns the variant of a product corresponding to the options given.
   *
   * @example
   * const selectedVariant = client.product.helpers.variantForOptions(product, {
   *   size: "Small",
   *   color: "Red"
   * });
   *
   * @memberof ProductHelpers
   * @method variantForOptions
   * @param {GraphModel} product The product to find the variant on. Must include `variants`.
   * @param {Object} options An object containing the options for the variant.
   * @return {GraphModel} The variant corresponding to the options given.
   */
  variantForOptions: function variantForOptions(product, options) {
    var _context38;
    return find_default()(_context38 = product.variants).call(_context38, function (variant) {
      var _context39;
      return every_default()(_context39 = variant.selectedOptions).call(_context39, function (selectedOption) {
        return options[selectedOption.name] === selectedOption.value.valueOf();
      });
    });
  }
};
function query(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.id = client.variable("id", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.id], function (root) {
    root.add("node", {
      args: {
        id: variables.__defaultOperation__.id
      }
    }, function (node) {
      node.addFragment(spreads.ProductFragment);
    });
  });
  return document;
}
function query$1(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.handle = client.variable("handle", "String!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.handle], function (root) {
    root.add("node", {
      args: {
        handle: variables.__defaultOperation__.handle
      }
    }, function (node) {
      node.addFragment(spreads.ProductFragment);
    });
  });
  return document;
}
function query$2(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.ids = client.variable("ids", "[ID!]!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.ids], function (root) {
    root.add("nodes", {
      args: {
        ids: variables.__defaultOperation__.ids
      }
    }, function (nodes) {
      nodes.addFragment(spreads.ProductFragment);
    });
  });
  return document;
}
function query$3(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.first = client.variable("first", "Int!");
  variables.__defaultOperation__.query = client.variable("query", "String");
  variables.__defaultOperation__.sortKey = client.variable("sortKey", "ProductSortKeys");
  variables.__defaultOperation__.reverse = client.variable("reverse", "Boolean");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.first, variables.__defaultOperation__.query, variables.__defaultOperation__.sortKey, reverse_default()(variables.__defaultOperation__)], function (root) {
    root.add("products", {
      args: {
        first: variables.__defaultOperation__.first,
        query: variables.__defaultOperation__.query,
        sortKey: variables.__defaultOperation__.sortKey,
        reverse: reverse_default()(variables.__defaultOperation__)
      }
    }, function (products) {
      products.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      products.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.ProductFragment);
        });
      });
    });
  });
  return document;
}
function query$4(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.handle = client.variable("handle", "String!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.handle], function (root) {
    root.add("productByHandle", {
      args: {
        handle: variables.__defaultOperation__.handle
      }
    }, function (productByHandle) {
      productByHandle.addFragment(spreads.ProductFragment);
    });
  });
  return document;
}
function query$5(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.productId = client.variable("productId", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.productId], function (root) {
    root.add("productRecommendations", {
      args: {
        productId: variables.__defaultOperation__.productId
      }
    }, function (productRecommendations) {
      productRecommendations.addFragment(spreads.ProductFragment);
    });
  });
  return document;
}

// GraphQL
/**
 * The JS Buy SDK product resource
 * @class
 */

var ProductResource = function (_Resource) {
  inherits$1(ProductResource, _Resource);
  function ProductResource() {
    classCallCheck$1(this, ProductResource);
    return possibleConstructorReturn$1(this, (ProductResource.__proto__ || get_prototype_of_default()(ProductResource)).apply(this, arguments));
  }
  createClass$1(ProductResource, [{
    key: "fetchAll",
    /**
     * Fetches all products on the shop.
     *
     * @example
     * client.product.fetchAll().then((products) => {
     *   // Do something with the products
     * });
     *
     * @param {Int} [pageSize] The number of products to fetch per page
     * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the products.
     */
    value: function fetchAll() {
      var first = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 20;
      return this.graphQLClient.send(query$3, {
        first: first
      }).then(defaultResolver("products")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches a single product by ID on the shop.
     *
     * @example
     * client.product.fetch('Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==').then((product) => {
     *   // Do something with the product
     * });
     *
     * @param {String} id The id of the product to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the product.
     */
  }, {
    key: "fetch",
    value: function fetch(id) {
      return this.graphQLClient.send(query, {
        id: id
      }).then(defaultResolver("node")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches a single product by handle on the shop.
     *
     * @example
     * client.product.fetch('xxxxx').then((product) => {
     *   // Do something with the product
     * });
     *
     * @param {String} handle The handle of the product to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the product.
     */
  }, {
    key: "fetchByHandle",
    value: function fetchByHandle(handle) {
      return this.graphQLClient.send(query$1, {
        handle: handle
      }).then(defaultResolver("node")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches multiple products by ID on the shop.
     *
     * @example
     * const ids = ['Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==', 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0Lzc4NTc5ODkzODQ='];
     * client.product.fetchMultiple(ids).then((products) => {
     *   // Do something with the products
     * });
     *
     * @param {String[]} ids The ids of the products to fetch
     * @return {Promise|GraphModel[]} A promise resolving with a `GraphModel` of the product.
     */
  }, {
    key: "fetchMultiple",
    value: function fetchMultiple(ids) {
      return this.graphQLClient.send(query$2, {
        ids: ids
      }).then(defaultResolver("nodes")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches a single product by handle on the shop.
     *
     * @example
     * client.product.fetchByHandle('my-product').then((product) => {
     *   // Do something with the product
     * });
     *
     * @param {String} handle The handle of the product to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the product.
     */
  }, {
    key: "fetchByHandle",
    value: function fetchByHandle(handle) {
      return this.graphQLClient.send(query$4, {
        handle: handle
      }).then(defaultResolver("productByHandle")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches all products on the shop that match the query.
     *
     * @example
     * client.product.fetchQuery({first: 20, sortKey: 'CREATED_AT', reverse: true}).then((products) => {
     *   // Do something with the first 10 products sorted by title in ascending order
     * });
     *
     * @param {Object} [args] An object specifying the query data containing zero or more of:
     *   @param {Int} [args.first=20] The relay `first` param. This specifies page size.
     *   @param {String} [args.sortKey=ID] The key to sort results by. Available values are
     *   documented as {@link https://help.shopify.com/api/storefront-api/reference/enum/productsortkeys|Product Sort Keys}.
     *   @param {String} [args.query] A query string. See full documentation {@link https://help.shopify.com/api/storefront-api/reference/object/shop#products|here}
     *   @param {Boolean} [args.reverse] Whether or not to reverse the sort order of the results
     * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the products.
     */
  }, {
    key: "fetchQuery",
    value: function fetchQuery() {
      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
        _ref$first = _ref.first,
        first = _ref$first === undefined ? 20 : _ref$first,
        _ref$sortKey = _ref.sortKey,
        sortKey = _ref$sortKey === undefined ? "ID" : _ref$sortKey,
        query$$1 = _ref.query,
        reverse = reverse_default()(_ref);
      return this.graphQLClient.send(query$3, {
        first: first,
        sortKey: sortKey,
        query: query$$1,
        reverse: reverse
      }).then(defaultResolver("products")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Find recommended products related to a given productId.
     * To learn more about how recommendations are generated, see https://shopify.dev/themes/product-merchandising/recommendations.
     *
     * @example
     * const productId 'Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==';
     * client.product.fetchProductRecommendations(productId).then((products) => {
     *   // Do something with the products
     * });
     *
     * @param {String} productId The id of the product to fetch.
     * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the products.
     */
  }, {
    key: "fetchRecommendations",
    value: function fetchRecommendations(productId) {
      return this.graphQLClient.send(query$5, {
        productId: productId
      }).then(defaultResolver("productRecommendations")).then(paginateProductConnectionsAndResolve(this.graphQLClient));
    }
  }, {
    key: "helpers",
    get: function get$$1() {
      return productHelpers;
    }
  }]);
  return ProductResource;
}(Resource);
function query$6(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.id = client.variable("id", "ID!");
  spreads.CollectionFragment = document.defineFragment("CollectionFragment", "Collection", function (root) {
    root.add("id");
    root.add("handle");
    root.add("description");
    root.add("descriptionHtml");
    root.add("updatedAt");
    root.add("title");
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
    });
  });
  document.addQuery([variables.__defaultOperation__.id], function (root) {
    root.add("node", {
      args: {
        id: variables.__defaultOperation__.id
      }
    }, function (node) {
      node.addFragment(spreads.CollectionFragment);
    });
  });
  return document;
}
function query$7(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.id = client.variable("id", "ID!");
  variables.__defaultOperation__.productsFirst = client.variable("productsFirst", "Int!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.CollectionFragment = document.defineFragment("CollectionFragment", "Collection", function (root) {
    root.add("id");
    root.add("handle");
    root.add("description");
    root.add("descriptionHtml");
    root.add("updatedAt");
    root.add("title");
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.id, variables.__defaultOperation__.productsFirst], function (root) {
    root.add("collection", {
      args: {
        id: variables.__defaultOperation__.id
      }
    }, function (collection) {
      collection.addFragment(spreads.CollectionFragment);
      collection.add("metafield", {
        alias: "accessoryCats",
        args: {
          key: "accessory_cats",
          namespace: "shop"
        }
      }, function (metafield) {
        metafield.add("id");
        metafield.add("namespace");
        metafield.add("key");
        metafield.add("references", {
          args: {
            first: 10
          }
        }, function (references) {
          references.add("pageInfo", function (pageInfo) {
            pageInfo.add("hasNextPage");
            pageInfo.add("hasPreviousPage");
          });
          references.add("edges", function (edges) {
            edges.add("cursor");
            edges.add("node", function (node) {
              node.addInlineFragmentOn("Metaobject", function (Metaobject) {
                Metaobject.add("field", {
                  alias: "children",
                  args: {
                    key: "children"
                  }
                }, function (field) {
                  field.add("references", {
                    args: {
                      first: 10
                    }
                  }, function (references) {
                    references.add("pageInfo", function (pageInfo) {
                      pageInfo.add("hasNextPage");
                      pageInfo.add("hasPreviousPage");
                    });
                    references.add("edges", function (edges) {
                      edges.add("cursor");
                      edges.add("node", function (node) {
                        node.addInlineFragmentOn("Metaobject", function (Metaobject) {
                          Metaobject.add("field", {
                            alias: "name",
                            args: {
                              key: "name"
                            }
                          }, function (field) {
                            field.add("value");
                          });
                          Metaobject.add("field", {
                            alias: "product_id",
                            args: {
                              key: "product_id"
                            }
                          }, function (field) {
                            field.add("value");
                          });
                        });
                      });
                    });
                  });
                });
                Metaobject.add("field", {
                  alias: "name",
                  args: {
                    key: "name"
                  }
                }, function (field) {
                  field.add("value");
                });
              });
            });
          });
        });
      });
      collection.addInlineFragmentOn("Collection", function (Collection) {
        Collection.add("products", {
          args: {
            first: variables.__defaultOperation__.productsFirst
          }
        }, function (products) {
          products.add("pageInfo", function (pageInfo) {
            pageInfo.add("hasNextPage");
            pageInfo.add("hasPreviousPage");
          });
          products.add("edges", function (edges) {
            edges.add("cursor");
            edges.add("node", function (node) {
              node.addFragment(spreads.ProductFragment);
            });
          });
        });
      });
    });
  });
  return document;
}
function query$8(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.id = client.variable("id", "ID!");
  spreads.CollectionFragment = document.defineFragment("CollectionFragment", "Collection", function (root) {
    root.add("id");
    root.add("handle");
    root.add("description");
    root.add("descriptionHtml");
    root.add("updatedAt");
    root.add("title");
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
    });
  });
  document.addQuery([variables.__defaultOperation__.id], function (root) {
    root.add("node", {
      args: {
        id: variables.__defaultOperation__.id
      }
    }, function (node) {
      node.addFragment(spreads.CollectionFragment);
      node.addInlineFragmentOn("Collection", function (Collection) {
        Collection.add("products", {
          args: {
            first: 250
          }
        }, function (products) {
          products.add("pageInfo", function (pageInfo) {
            pageInfo.add("hasNextPage");
            pageInfo.add("hasPreviousPage");
          });
          products.add("edges", function (edges) {
            edges.add("cursor");
            edges.add("node", function (node) {
              node.add("id");
            });
          });
        });
      });
    });
  });
  return document;
}
function query$9(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.first = client.variable("first", "Int!");
  variables.__defaultOperation__.query = client.variable("query", "String");
  variables.__defaultOperation__.sortKey = client.variable("sortKey", "CollectionSortKeys");
  variables.__defaultOperation__.reverse = client.variable("reverse", "Boolean");
  spreads.CollectionFragment = document.defineFragment("CollectionFragment", "Collection", function (root) {
    root.add("id");
    root.add("handle");
    root.add("description");
    root.add("descriptionHtml");
    root.add("updatedAt");
    root.add("title");
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
    });
  });
  document.addQuery([variables.__defaultOperation__.first, variables.__defaultOperation__.query, variables.__defaultOperation__.sortKey, reverse_default()(variables.__defaultOperation__)], function (root) {
    root.add("collections", {
      args: {
        first: variables.__defaultOperation__.first,
        query: variables.__defaultOperation__.query,
        sortKey: variables.__defaultOperation__.sortKey,
        reverse: reverse_default()(variables.__defaultOperation__)
      }
    }, function (collections) {
      collections.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      collections.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.CollectionFragment);
        });
      });
    });
  });
  return document;
}
function query$10(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.first = client.variable("first", "Int!");
  variables.__defaultOperation__.query = client.variable("query", "String");
  variables.__defaultOperation__.sortKey = client.variable("sortKey", "CollectionSortKeys");
  variables.__defaultOperation__.reverse = client.variable("reverse", "Boolean");
  variables.__defaultOperation__.productsFirst = client.variable("productsFirst", "Int!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.CollectionFragment = document.defineFragment("CollectionFragment", "Collection", function (root) {
    root.add("id");
    root.add("handle");
    root.add("description");
    root.add("descriptionHtml");
    root.add("updatedAt");
    root.add("title");
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.first, variables.__defaultOperation__.query, variables.__defaultOperation__.sortKey, reverse_default()(variables.__defaultOperation__), variables.__defaultOperation__.productsFirst], function (root) {
    root.add("collections", {
      args: {
        first: variables.__defaultOperation__.first,
        query: variables.__defaultOperation__.query,
        sortKey: variables.__defaultOperation__.sortKey,
        reverse: reverse_default()(variables.__defaultOperation__)
      }
    }, function (collections) {
      collections.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      collections.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.CollectionFragment);
          node.add("products", {
            args: {
              first: variables.__defaultOperation__.productsFirst
            }
          }, function (products) {
            products.add("pageInfo", function (pageInfo) {
              pageInfo.add("hasNextPage");
              pageInfo.add("hasPreviousPage");
            });
            products.add("edges", function (edges) {
              edges.add("cursor");
              edges.add("node", function (node) {
                node.addFragment(spreads.ProductFragment);
              });
            });
          });
        });
      });
    });
  });
  return document;
}
function query$11(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.handle = client.variable("handle", "String!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.ProductFragment = document.defineFragment("ProductFragment", "Product", function (root) {
    root.add("id");
    root.add("availableForSale");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("descriptionHtml");
    root.add("description");
    root.add("handle");
    root.add("productType");
    root.add("title");
    root.add("vendor");
    root.add("publishedAt");
    root.add("onlineStoreUrl");
    root.add("tags");
    root.add("options", function (options) {
      options.add("name");
      options.add("values");
    });
    root.add("images", {
      args: {
        first: 250
      }
    }, function (images) {
      images.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      images.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("url", {
            alias: "src"
          });
          node.add("url");
          node.add("altText");
          node.add("width");
          node.add("height");
        });
      });
    });
    root.add("metafield", {
      alias: "compitableProducts",
      args: {
        key: "worked_product_serie",
        namespace: "shop"
      }
    }, function (metafield) {
      metafield.add("references", {
        args: {
          first: 20
        }
      }, function (references) {
        references.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        references.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.addInlineFragmentOn("Metaobject", function (Metaobject) {
              Metaobject.add("field", {
                alias: "name",
                args: {
                  key: "name"
                }
              }, function (field) {
                field.add("value");
              });
            });
          });
        });
      });
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "open_box_list",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "product_image",
          namespace: "shop"
        }, {
          key: "top_accessories_collection",
          namespace: "shop"
        }, {
          key: "watch_band_collection",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }, {
          key: "warranty_duration",
          namespace: "shop"
        }, {
          key: "warranty_url",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("variants", {
      args: {
        first: 250
      }
    }, function (variants) {
      variants.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      variants.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.VariantFragment);
        });
      });
    });
  });
  spreads.CollectionFragment = document.defineFragment("CollectionFragment", "Collection", function (root) {
    root.add("id");
    root.add("handle");
    root.add("description");
    root.add("descriptionHtml");
    root.add("updatedAt");
    root.add("title");
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
    });
  });
  spreads.CollectionsProductsFragment = document.defineFragment("CollectionsProductsFragment", "Collection", function (root) {
    root.add("products", {
      args: {
        first: 20
      }
    }, function (products) {
      products.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      products.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.addFragment(spreads.ProductFragment);
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.handle], function (root) {
    root.add("collectionByHandle", {
      args: {
        handle: variables.__defaultOperation__.handle
      }
    }, function (collectionByHandle) {
      collectionByHandle.addFragment(spreads.CollectionFragment);
      collectionByHandle.addFragment(spreads.CollectionsProductsFragment);
    });
  });
  return document;
}

// GraphQL
/**
 * The JS Buy SDK collection resource
 * @class
 */

var CollectionResource = function (_Resource) {
  inherits$1(CollectionResource, _Resource);
  function CollectionResource() {
    classCallCheck$1(this, CollectionResource);
    return possibleConstructorReturn$1(this, (CollectionResource.__proto__ || get_prototype_of_default()(CollectionResource)).apply(this, arguments));
  }
  createClass$1(CollectionResource, [{
    key: 'fetchAll',
    /**
     * Fetches all collections on the shop, not including products.
     * To fetch collections with products use [fetchAllsWithProducts]{@link Client#fetchAllsWithProducts}.
     *
     * @example
     * client.collection.fetchAll().then((collections) => {
     *   // Do something with the collections
     * });
     *
     * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the collections.
     */
    value: function fetchAll() {
      var first = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 20;
      return this.graphQLClient.send(query$9, {
        first: first
      }).then(defaultResolver('collections'));
    }

    /**
     * Fetches all collections on the shop, including products.
     *
     * @example
     * client.collection.fetchAllWithProducts().then((collections) => {
     *   // Do something with the collections
     * });
     *
     * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the collections.
     */
  }, {
    key: 'fetchAllWithProducts',
    value: function fetchAllWithProducts() {
      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
        _ref$first = _ref.first,
        first = _ref$first === undefined ? 20 : _ref$first,
        _ref$productsFirst = _ref.productsFirst,
        productsFirst = _ref$productsFirst === undefined ? 20 : _ref$productsFirst;
      return this.graphQLClient.send(query$10, {
        first: first,
        productsFirst: productsFirst
      }).then(defaultResolver('collections')).then(paginateCollectionsProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches a single collection by ID on the shop, not including products.
     * To fetch the collection with products use [fetchWithProducts]{@link Client#fetchWithProducts}.
     *
     * @example
     * client.collection.fetch('Xk9lM2JkNzFmNzIQ4NTIY4ZDFiZTUyZTUwNTE2MDNhZjg==').then((collection) => {
     *   // Do something with the collection
     * });
     *
     * @param {String} id The id of the collection to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.
     */
  }, {
    key: 'fetch',
    value: function fetch(id) {
      return this.graphQLClient.send(query$6, {
        id: id
      }).then(defaultResolver('node'));
    }

    /**
     * Fetches a single collection by ID on the shop, including products.
     *
     * @example
     * client.collection.fetchWithProducts('Xk9lM2JkNzFmNzIQ4NTIY4ZDFiZTUyZTUwNTE2MDNhZjg==').then((collection) => {
     *   // Do something with the collection
     * });
     *
     * @param {String} id The id of the collection to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.
     */
  }, {
    key: 'fetchWithProducts',
    value: function fetchWithProducts(id) {
      var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
        _ref2$productsFirst = _ref2.productsFirst,
        productsFirst = _ref2$productsFirst === undefined ? 20 : _ref2$productsFirst,
        _ref2$includeAccessor = _ref2.includeAccessoryMetafield,
        includeAccessoryMetafield = _ref2$includeAccessor === undefined ? false : _ref2$includeAccessor;
      return this.graphQLClient.send(query$7, {
        id: id,
        productsFirst: productsFirst,
        includeAccessoryMetafield: includeAccessoryMetafield
      }).then(defaultResolver('collection')).then(paginateCollectionsProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches a single collection by ID on the shop, including all product id.
     *
     * @example
     * client.collection.fetchWithAllProductIds('Xk9lM2JkNzFmNzIQ4NTIY4ZDFiZTUyZTUwNTE2MDNhZjg==').then((collection) => {
     *   // Do something with the collection
     * });
     *
     * @param {String} id The id of the collection to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.
     */
  }, {
    key: 'fetchWithAllProductIds',
    value: function fetchWithAllProductIds(id) {
      return this.graphQLClient.send(query$8, {
        id: id
      }).then(defaultResolver('node')).then(paginateCollectionsProductConnectionsAndResolve(this.graphQLClient));
    }

    /**
     * Fetches a collection by handle on the shop.
     *
     * @example
     * client.collection.fetchByHandle('my-collection').then((collection) => {
     *   // Do something with the collection
     * });
     *
     * @param {String} handle The handle of the collection to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the collection.
     */
  }, {
    key: 'fetchByHandle',
    value: function fetchByHandle(handle) {
      return this.graphQLClient.send(query$11, {
        handle: handle
      }).then(defaultResolver('collectionByHandle'));
    }

    /**
     * Fetches all collections on the shop that match the query.
     *
     * @example
     * client.collection.fetchQuery({first: 20, sortKey: 'CREATED_AT', reverse: true}).then((collections) => {
     *   // Do something with the first 10 collections sorted by title in ascending order
     * });
     *
     * @param {Object} [args] An object specifying the query data containing zero or more of:
     *   @param {Int} [args.first=20] The relay `first` param. This specifies page size.
     *   @param {String} [args.sortKey=ID] The key to sort results by. Available values are
     *   documented as {@link https://help.shopify.com/api/storefront-api/reference/enum/collectionsortkeys|Collection Sort Keys}.
     *   @param {String} [args.query] A query string. See full documentation {@link https://help.shopify.com/api/storefront-api/reference/object/shop#collections|here}
     *   @param {Boolean} [args.reverse] Whether or not to reverse the sort order of the results
     * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the collections.
     */
  }, {
    key: 'fetchQuery',
    value: function fetchQuery() {
      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
        _ref3$first = _ref3.first,
        first = _ref3$first === undefined ? 20 : _ref3$first,
        _ref3$sortKey = _ref3.sortKey,
        sortKey = _ref3$sortKey === undefined ? 'ID' : _ref3$sortKey,
        query = _ref3.query,
        reverse = reverse_default()(_ref3);
      return this.graphQLClient.send(query$9, {
        first: first,
        sortKey: sortKey,
        query: query,
        reverse: reverse
      }).then(defaultResolver('collections'));
    }
  }]);
  return CollectionResource;
}(Resource);
function query$12(client) {
  var document = client.document();
  document.addQuery(function (root) {
    root.add("shop", function (shop) {
      shop.add("paymentSettings", function (paymentSettings) {
        paymentSettings.add("enabledPresentmentCurrencies");
      });
      shop.add("description");
      shop.add("moneyFormat");
      shop.add("name");
      shop.add("primaryDomain", function (primaryDomain) {
        primaryDomain.add("host");
        primaryDomain.add("sslEnabled");
        primaryDomain.add("url");
      });
    });
  });
  return document;
}
function query$13(client) {
  var document = client.document();
  var spreads = {};
  spreads.PolicyFragment = document.defineFragment("PolicyFragment", "ShopPolicy", function (root) {
    root.add("id");
    root.add("title");
    root.add("url");
    root.add("body");
  });
  document.addQuery(function (root) {
    root.add("shop", function (shop) {
      shop.add("privacyPolicy", function (privacyPolicy) {
        privacyPolicy.addFragment(spreads.PolicyFragment);
      });
      shop.add("termsOfService", function (termsOfService) {
        termsOfService.addFragment(spreads.PolicyFragment);
      });
      shop.add("refundPolicy", function (refundPolicy) {
        refundPolicy.addFragment(spreads.PolicyFragment);
      });
    });
  });
  return document;
}

// GraphQL
/**
 * The JS Buy SDK shop resource
 * @class
 */

var ShopResource = function (_Resource) {
  inherits$1(ShopResource, _Resource);
  function ShopResource() {
    classCallCheck$1(this, ShopResource);
    return possibleConstructorReturn$1(this, (ShopResource.__proto__ || get_prototype_of_default()(ShopResource)).apply(this, arguments));
  }
  createClass$1(ShopResource, [{
    key: 'fetchInfo',
    /**
     * Fetches shop information (`currencyCode`, `description`, `moneyFormat`, `name`, and `primaryDomain`).
     * See the {@link https://help.shopify.com/api/storefront-api/reference/object/shop|Storefront API reference} for more information.
     *
     * @example
     * client.shop.fetchInfo().then((shop) => {
     *   // Do something with the shop
     * });
     *
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the shop.
     */
    value: function fetchInfo() {
      return this.graphQLClient.send(query$12).then(defaultResolver('shop'));
    }

    /**
     * Fetches shop policies (privacy policy, terms of service and refund policy).
     *
     * @example
     * client.shop.fetchPolicies().then((shop) => {
     *   // Do something with the shop
     * });
     *
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the shop.
     */
  }, {
    key: 'fetchPolicies',
    value: function fetchPolicies() {
      return this.graphQLClient.send(query$13).then(defaultResolver('shop'));
    }
  }]);
  return ShopResource;
}(Resource);
function handleCheckoutMutation(mutationRootKey, client) {
  return function (_ref) {
    var _ref$data = _ref.data,
      data = _ref$data === undefined ? {} : _ref$data,
      errors = _ref.errors,
      _ref$model = _ref.model,
      model = _ref$model === undefined ? {} : _ref$model;
    var rootData = data[mutationRootKey];
    var rootModel = model[mutationRootKey];
    if (rootData && rootData.checkout) {
      return client.fetchAllPages(rootModel.checkout.lineItems, {
        pageSize: 250
      }).then(function (lineItems) {
        rootModel.checkout.attrs.lineItems = lineItems;
        rootModel.checkout.errors = errors;
        rootModel.checkout.userErrors = rootModel.userErrors;
        return rootModel.checkout;
      });
    }
    if (errors && errors.length) {
      return promise_default().reject(new Error(stringify_default()(errors)));
    }
    if (rootData && rootData.checkoutUserErrors && rootData.checkoutUserErrors.length) {
      return promise_default().reject(new Error(stringify_default()(rootData.checkoutUserErrors)));
    }
    if (rootData && rootData.userErrors && rootData.userErrors.length) {
      return promise_default().reject(new Error(stringify_default()(rootData.userErrors)));
    }
    return promise_default().reject(new Error("The " + mutationRootKey + " mutation failed due to an unknown error."));
  };
}
function query$14(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.id = client.variable("id", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.id], function (root) {
    root.add("node", {
      args: {
        id: variables.__defaultOperation__.id
      }
    }, function (node) {
      node.addFragment(spreads.CheckoutFragment);
    });
  });
  return document;
}
function query$15(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.input = client.variable("input", "CheckoutCreateInput!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.input], function (root) {
    root.add("checkoutCreate", {
      args: {
        input: variables.__defaultOperation__.input
      }
    }, function (checkoutCreate) {
      checkoutCreate.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutCreate.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutCreate.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$16(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.checkoutId = client.variable("checkoutId", "ID!");
  variables.__defaultOperation__.lineItems = client.variable("lineItems", "[CheckoutLineItemInput!]!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.checkoutId, variables.__defaultOperation__.lineItems], function (root) {
    root.add("checkoutLineItemsAdd", {
      args: {
        checkoutId: variables.__defaultOperation__.checkoutId,
        lineItems: variables.__defaultOperation__.lineItems
      }
    }, function (checkoutLineItemsAdd) {
      checkoutLineItemsAdd.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutLineItemsAdd.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutLineItemsAdd.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$17(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.checkoutId = client.variable("checkoutId", "ID!");
  variables.__defaultOperation__.lineItemIds = client.variable("lineItemIds", "[ID!]!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.checkoutId, variables.__defaultOperation__.lineItemIds], function (root) {
    root.add("checkoutLineItemsRemove", {
      args: {
        checkoutId: variables.__defaultOperation__.checkoutId,
        lineItemIds: variables.__defaultOperation__.lineItemIds
      }
    }, function (checkoutLineItemsRemove) {
      checkoutLineItemsRemove.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutLineItemsRemove.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutLineItemsRemove.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$18(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.checkoutId = client.variable("checkoutId", "ID!");
  variables.__defaultOperation__.lineItems = client.variable("lineItems", "[CheckoutLineItemInput!]!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.checkoutId, variables.__defaultOperation__.lineItems], function (root) {
    root.add("checkoutLineItemsReplace", {
      args: {
        checkoutId: variables.__defaultOperation__.checkoutId,
        lineItems: variables.__defaultOperation__.lineItems
      }
    }, function (checkoutLineItemsReplace) {
      checkoutLineItemsReplace.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutLineItemsReplace.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$19(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.checkoutId = client.variable("checkoutId", "ID!");
  variables.__defaultOperation__.lineItems = client.variable("lineItems", "[CheckoutLineItemUpdateInput!]!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.checkoutId, variables.__defaultOperation__.lineItems], function (root) {
    root.add("checkoutLineItemsUpdate", {
      args: {
        checkoutId: variables.__defaultOperation__.checkoutId,
        lineItems: variables.__defaultOperation__.lineItems
      }
    }, function (checkoutLineItemsUpdate) {
      checkoutLineItemsUpdate.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutLineItemsUpdate.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutLineItemsUpdate.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$20(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutAttributesUpdateV2 = {};
  variables.checkoutAttributesUpdateV2.checkoutId = client.variable("checkoutId", "ID!");
  variables.checkoutAttributesUpdateV2.input = client.variable("input", "CheckoutAttributesUpdateV2Input!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutAttributesUpdateV2", [variables.checkoutAttributesUpdateV2.checkoutId, variables.checkoutAttributesUpdateV2.input], function (root) {
    root.add("checkoutAttributesUpdateV2", {
      args: {
        checkoutId: variables.checkoutAttributesUpdateV2.checkoutId,
        input: variables.checkoutAttributesUpdateV2.input
      }
    }, function (checkoutAttributesUpdateV2) {
      checkoutAttributesUpdateV2.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutAttributesUpdateV2.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutAttributesUpdateV2.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$21(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutDiscountCodeApplyV2 = {};
  variables.checkoutDiscountCodeApplyV2.discountCode = client.variable("discountCode", "String!");
  variables.checkoutDiscountCodeApplyV2.checkoutId = client.variable("checkoutId", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutDiscountCodeApplyV2", [variables.checkoutDiscountCodeApplyV2.discountCode, variables.checkoutDiscountCodeApplyV2.checkoutId], function (root) {
    root.add("checkoutDiscountCodeApplyV2", {
      args: {
        discountCode: variables.checkoutDiscountCodeApplyV2.discountCode,
        checkoutId: variables.checkoutDiscountCodeApplyV2.checkoutId
      }
    }, function (checkoutDiscountCodeApplyV2) {
      checkoutDiscountCodeApplyV2.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutDiscountCodeApplyV2.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutDiscountCodeApplyV2.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$22(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutDiscountCodeRemove = {};
  variables.checkoutDiscountCodeRemove.checkoutId = client.variable("checkoutId", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutDiscountCodeRemove", [variables.checkoutDiscountCodeRemove.checkoutId], function (root) {
    root.add("checkoutDiscountCodeRemove", {
      args: {
        checkoutId: variables.checkoutDiscountCodeRemove.checkoutId
      }
    }, function (checkoutDiscountCodeRemove) {
      checkoutDiscountCodeRemove.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutDiscountCodeRemove.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutDiscountCodeRemove.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$23(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutGiftCardsAppend = {};
  variables.checkoutGiftCardsAppend.giftCardCodes = client.variable("giftCardCodes", "[String!]!");
  variables.checkoutGiftCardsAppend.checkoutId = client.variable("checkoutId", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutGiftCardsAppend", [variables.checkoutGiftCardsAppend.giftCardCodes, variables.checkoutGiftCardsAppend.checkoutId], function (root) {
    root.add("checkoutGiftCardsAppend", {
      args: {
        giftCardCodes: variables.checkoutGiftCardsAppend.giftCardCodes,
        checkoutId: variables.checkoutGiftCardsAppend.checkoutId
      }
    }, function (checkoutGiftCardsAppend) {
      checkoutGiftCardsAppend.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutGiftCardsAppend.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutGiftCardsAppend.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$24(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutGiftCardRemoveV2 = {};
  variables.checkoutGiftCardRemoveV2.appliedGiftCardId = client.variable("appliedGiftCardId", "ID!");
  variables.checkoutGiftCardRemoveV2.checkoutId = client.variable("checkoutId", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutGiftCardRemoveV2", [variables.checkoutGiftCardRemoveV2.appliedGiftCardId, variables.checkoutGiftCardRemoveV2.checkoutId], function (root) {
    root.add("checkoutGiftCardRemoveV2", {
      args: {
        appliedGiftCardId: variables.checkoutGiftCardRemoveV2.appliedGiftCardId,
        checkoutId: variables.checkoutGiftCardRemoveV2.checkoutId
      }
    }, function (checkoutGiftCardRemoveV2) {
      checkoutGiftCardRemoveV2.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutGiftCardRemoveV2.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutGiftCardRemoveV2.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$25(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutEmailUpdateV2 = {};
  variables.checkoutEmailUpdateV2.checkoutId = client.variable("checkoutId", "ID!");
  variables.checkoutEmailUpdateV2.email = client.variable("email", "String!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutEmailUpdateV2", [variables.checkoutEmailUpdateV2.checkoutId, variables.checkoutEmailUpdateV2.email], function (root) {
    root.add("checkoutEmailUpdateV2", {
      args: {
        checkoutId: variables.checkoutEmailUpdateV2.checkoutId,
        email: variables.checkoutEmailUpdateV2.email
      }
    }, function (checkoutEmailUpdateV2) {
      checkoutEmailUpdateV2.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutEmailUpdateV2.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutEmailUpdateV2.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}
function query$26(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.checkoutShippingAddressUpdateV2 = {};
  variables.checkoutShippingAddressUpdateV2.shippingAddress = client.variable("shippingAddress", "MailingAddressInput!");
  variables.checkoutShippingAddressUpdateV2.checkoutId = client.variable("checkoutId", "ID!");
  spreads.VariantFragment = document.defineFragment("VariantFragment", "ProductVariant", function (root) {
    root.add("id");
    root.add("title");
    root.add("price", function (price) {
      price.add("amount");
      price.add("currencyCode");
    });
    root.add("weight");
    root.add("availableForSale", {
      alias: "available"
    });
    root.add("sku");
    root.add("barcode");
    root.add("compareAtPrice", function (compareAtPrice) {
      compareAtPrice.add("amount");
      compareAtPrice.add("currencyCode");
    });
    root.add("metafields", {
      args: {
        identifiers: [{
          key: "msrp",
          namespace: "shop"
        }, {
          key: "apex_2_model",
          namespace: "shop"
        }, {
          key: "is_disabled",
          namespace: "shop"
        }, {
          key: "variant_images",
          namespace: "shop"
        }, {
          key: "variant_watch_band_collection",
          namespace: "shop"
        }, {
          key: "color_icon_link",
          namespace: "shop"
        }, {
          key: "color_icon",
          namespace: "shop"
        }, {
          key: "product_assets",
          namespace: "shop"
        }, {
          key: "band_material",
          namespace: "shop"
        }, {
          key: "screen_size",
          namespace: "shop"
        }, {
          key: "details_page",
          namespace: "shop"
        }]
      }
    }, function (metafields) {
      metafields.add("namespace");
      metafields.add("key");
      metafields.add("value");
    });
    root.add("image", function (image) {
      image.add("id");
      image.add("url", {
        alias: "src"
      });
      image.add("altText");
      image.add("width");
      image.add("height");
    });
    root.add("selectedOptions", function (selectedOptions) {
      selectedOptions.add("name");
      selectedOptions.add("value");
    });
    root.add("unitPrice", function (unitPrice) {
      unitPrice.add("amount");
      unitPrice.add("currencyCode");
    });
    root.add("unitPriceMeasurement", function (unitPriceMeasurement) {
      unitPriceMeasurement.add("measuredType");
      unitPriceMeasurement.add("quantityUnit");
      unitPriceMeasurement.add("quantityValue");
      unitPriceMeasurement.add("referenceUnit");
      unitPriceMeasurement.add("referenceValue");
    });
  });
  spreads.DiscountApplicationFragment = document.defineFragment("DiscountApplicationFragment", "DiscountApplication", function (root) {
    root.add("targetSelection");
    root.add("allocationMethod");
    root.add("targetType");
    root.add("value", function (value) {
      value.addInlineFragmentOn("MoneyV2", function (MoneyV2) {
        MoneyV2.add("amount");
        MoneyV2.add("currencyCode");
      });
      value.addInlineFragmentOn("PricingPercentageValue", function (PricingPercentageValue) {
        PricingPercentageValue.add("percentage");
      });
    });
    root.addInlineFragmentOn("ManualDiscountApplication", function (ManualDiscountApplication) {
      ManualDiscountApplication.add("title");
      ManualDiscountApplication.add("description");
    });
    root.addInlineFragmentOn("DiscountCodeApplication", function (DiscountCodeApplication) {
      DiscountCodeApplication.add("code");
      DiscountCodeApplication.add("applicable");
    });
    root.addInlineFragmentOn("ScriptDiscountApplication", function (ScriptDiscountApplication) {
      ScriptDiscountApplication.add("title");
    });
    root.addInlineFragmentOn("AutomaticDiscountApplication", function (AutomaticDiscountApplication) {
      AutomaticDiscountApplication.add("title");
    });
  });
  spreads.AppliedGiftCardFragment = document.defineFragment("AppliedGiftCardFragment", "AppliedGiftCard", function (root) {
    root.add("amountUsed", function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("amountUsed", {
      alias: "amountUsedV2"
    }, function (amountUsed) {
      amountUsed.add("amount");
      amountUsed.add("currencyCode");
    });
    root.add("balance", function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("balance", {
      alias: "balanceV2"
    }, function (balance) {
      balance.add("amount");
      balance.add("currencyCode");
    });
    root.add("presentmentAmountUsed", function (presentmentAmountUsed) {
      presentmentAmountUsed.add("amount");
      presentmentAmountUsed.add("currencyCode");
    });
    root.add("id");
    root.add("lastCharacters");
  });
  spreads.VariantWithProductFragment = document.defineFragment("VariantWithProductFragment", "ProductVariant", function (root) {
    root.addFragment(spreads.VariantFragment);
    root.add("product", function (product) {
      product.add("id");
      product.add("handle");
    });
  });
  spreads.UserErrorFragment = document.defineFragment("UserErrorFragment", "UserError", function (root) {
    root.add("field");
    root.add("message");
  });
  spreads.CheckoutUserErrorFragment = document.defineFragment("CheckoutUserErrorFragment", "CheckoutUserError", function (root) {
    root.add("field");
    root.add("message");
    root.add("code");
  });
  spreads.MailingAddressFragment = document.defineFragment("MailingAddressFragment", "MailingAddress", function (root) {
    root.add("id");
    root.add("address1");
    root.add("address2");
    root.add("city");
    root.add("company");
    root.add("country");
    root.add("firstName");
    root.add("formatted");
    root.add("lastName");
    root.add("latitude");
    root.add("longitude");
    root.add("phone");
    root.add("province");
    root.add("zip");
    root.add("name");
    root.add("countryCodeV2", {
      alias: "countryCode"
    });
    root.add("provinceCode");
  });
  spreads.CheckoutFragment = document.defineFragment("CheckoutFragment", "Checkout", function (root) {
    root.add("id");
    root.add("ready");
    root.add("requiresShipping");
    root.add("note");
    root.add("paymentDue", function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("paymentDue", {
      alias: "paymentDueV2"
    }, function (paymentDue) {
      paymentDue.add("amount");
      paymentDue.add("currencyCode");
    });
    root.add("webUrl");
    root.add("orderStatusUrl");
    root.add("taxExempt");
    root.add("taxesIncluded");
    root.add("currencyCode");
    root.add("totalTax", function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("totalTax", {
      alias: "totalTaxV2"
    }, function (totalTax) {
      totalTax.add("amount");
      totalTax.add("currencyCode");
    });
    root.add("lineItemsSubtotalPrice", function (lineItemsSubtotalPrice) {
      lineItemsSubtotalPrice.add("amount");
      lineItemsSubtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("subtotalPrice", {
      alias: "subtotalPriceV2"
    }, function (subtotalPrice) {
      subtotalPrice.add("amount");
      subtotalPrice.add("currencyCode");
    });
    root.add("totalPrice", function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("totalPrice", {
      alias: "totalPriceV2"
    }, function (totalPrice) {
      totalPrice.add("amount");
      totalPrice.add("currencyCode");
    });
    root.add("completedAt");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("email");
    root.add("discountApplications", {
      args: {
        first: 10
      }
    }, function (discountApplications) {
      discountApplications.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      discountApplications.add("edges", function (edges) {
        edges.add("node", function (node) {
          node.addFragment(spreads.DiscountApplicationFragment);
        });
      });
    });
    root.add("appliedGiftCards", function (appliedGiftCards) {
      appliedGiftCards.addFragment(spreads.AppliedGiftCardFragment);
    });
    root.add("shippingAddress", function (shippingAddress) {
      shippingAddress.addFragment(spreads.MailingAddressFragment);
    });
    root.add("shippingLine", function (shippingLine) {
      shippingLine.add("handle");
      shippingLine.add("price", function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("price", {
        alias: "priceV2"
      }, function (price) {
        price.add("amount");
        price.add("currencyCode");
      });
      shippingLine.add("title");
    });
    root.add("customAttributes", function (customAttributes) {
      customAttributes.add("key");
      customAttributes.add("value");
    });
    root.add("order", function (order) {
      order.add("id");
      order.add("processedAt");
      order.add("orderNumber");
      order.add("subtotalPrice", function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("subtotalPrice", {
        alias: "subtotalPriceV2"
      }, function (subtotalPrice) {
        subtotalPrice.add("amount");
        subtotalPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalShippingPrice", {
        alias: "totalShippingPriceV2"
      }, function (totalShippingPrice) {
        totalShippingPrice.add("amount");
        totalShippingPrice.add("currencyCode");
      });
      order.add("totalTax", function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalTax", {
        alias: "totalTaxV2"
      }, function (totalTax) {
        totalTax.add("amount");
        totalTax.add("currencyCode");
      });
      order.add("totalPrice", function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("totalPrice", {
        alias: "totalPriceV2"
      }, function (totalPrice) {
        totalPrice.add("amount");
        totalPrice.add("currencyCode");
      });
      order.add("currencyCode");
      order.add("totalRefunded", function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("totalRefunded", {
        alias: "totalRefundedV2"
      }, function (totalRefunded) {
        totalRefunded.add("amount");
        totalRefunded.add("currencyCode");
      });
      order.add("customerUrl");
      order.add("shippingAddress", function (shippingAddress) {
        shippingAddress.addFragment(spreads.MailingAddressFragment);
      });
      order.add("lineItems", {
        args: {
          first: 250
        }
      }, function (lineItems) {
        lineItems.add("pageInfo", function (pageInfo) {
          pageInfo.add("hasNextPage");
          pageInfo.add("hasPreviousPage");
        });
        lineItems.add("edges", function (edges) {
          edges.add("cursor");
          edges.add("node", function (node) {
            node.add("title");
            node.add("variant", function (variant) {
              variant.addFragment(spreads.VariantWithProductFragment);
            });
            node.add("quantity");
            node.add("customAttributes", function (customAttributes) {
              customAttributes.add("key");
              customAttributes.add("value");
            });
          });
        });
      });
    });
    root.add("lineItems", {
      args: {
        first: 250
      }
    }, function (lineItems) {
      lineItems.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lineItems.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("title");
          node.add("variant", function (variant) {
            variant.addFragment(spreads.VariantWithProductFragment);
          });
          node.add("quantity");
          node.add("customAttributes", function (customAttributes) {
            customAttributes.add("key");
            customAttributes.add("value");
          });
          node.add("discountAllocations", function (discountAllocations) {
            discountAllocations.add("allocatedAmount", function (allocatedAmount) {
              allocatedAmount.add("amount");
              allocatedAmount.add("currencyCode");
            });
            discountAllocations.add("discountApplication", function (discountApplication) {
              discountApplication.addFragment(spreads.DiscountApplicationFragment);
            });
          });
        });
      });
    });
  });
  document.addMutation("checkoutShippingAddressUpdateV2", [variables.checkoutShippingAddressUpdateV2.shippingAddress, variables.checkoutShippingAddressUpdateV2.checkoutId], function (root) {
    root.add("checkoutShippingAddressUpdateV2", {
      args: {
        shippingAddress: variables.checkoutShippingAddressUpdateV2.shippingAddress,
        checkoutId: variables.checkoutShippingAddressUpdateV2.checkoutId
      }
    }, function (checkoutShippingAddressUpdateV2) {
      checkoutShippingAddressUpdateV2.add("userErrors", function (userErrors) {
        userErrors.addFragment(spreads.UserErrorFragment);
      });
      checkoutShippingAddressUpdateV2.add("checkoutUserErrors", function (checkoutUserErrors) {
        checkoutUserErrors.addFragment(spreads.CheckoutUserErrorFragment);
      });
      checkoutShippingAddressUpdateV2.add("checkout", function (checkout) {
        checkout.addFragment(spreads.CheckoutFragment);
      });
    });
  });
  return document;
}

// GraphQL
/**
 * The JS Buy SDK checkout resource
 * @class
 */

var CheckoutResource = function (_Resource) {
  inherits$1(CheckoutResource, _Resource);
  function CheckoutResource() {
    classCallCheck$1(this, CheckoutResource);
    return possibleConstructorReturn$1(this, (CheckoutResource.__proto__ || get_prototype_of_default()(CheckoutResource)).apply(this, arguments));
  }
  createClass$1(CheckoutResource, [{
    key: 'fetch',
    /**
     * Fetches a checkout by ID.
     *
     * @example
     * client.checkout.fetch('FlZj9rZXlN5MDY4ZDFiZTUyZTUwNTE2MDNhZjg=').then((checkout) => {
     *   // Do something with the checkout
     * });
     *
     * @param {String} id The id of the checkout to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the checkout.
     */
    value: function fetch(id) {
      var _this2 = this;
      return this.graphQLClient.send(query$14, {
        id: id
      }).then(defaultResolver('node')).then(function (checkout) {
        if (!checkout) {
          return null;
        }
        return _this2.graphQLClient.fetchAllPages(checkout.lineItems, {
          pageSize: 250
        }).then(function (lineItems) {
          checkout.attrs.lineItems = lineItems;
          return checkout;
        });
      });
    }

    /**
     * Creates a checkout.
     *
     * @example
     * const input = {
     *   lineItems: [
     *     {variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}
     *   ]
     * };
     *
     * client.checkout.create(input).then((checkout) => {
     *   // Do something with the newly created checkout
     * });
     *
     * @param {Object} [input] An input object containing zero or more of:
     *   @param {String} [input.email] An email connected to the checkout.
     *   @param {Object[]} [input.lineItems] A list of line items in the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item.
     *   @param {Object} [input.shippingAddress] A shipping address. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/mailingaddressinput|Storefront API reference} for valid input fields.
     *   @param {String} [input.note] A note for the checkout.
     *   @param {Object[]} [input.customAttributes] A list of custom attributes for the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/attributeinput|Storefront API reference} for valid input fields.
     *   @param {String} [input.presentmentCurrencyCode ] A presentment currency code. See the {@link https://help.shopify.com/en/api/storefront-api/reference/enum/currencycode|Storefront API reference} for valid currency code values.
     * @return {Promise|GraphModel} A promise resolving with the created checkout.
     */
  }, {
    key: 'create',
    value: function create() {
      var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      return this.graphQLClient.send(query$15, {
        input: input
      }).then(handleCheckoutMutation('checkoutCreate', this.graphQLClient));
    }

    /**
     * Replaces the value of checkout's custom attributes and/or note with values defined in the input
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const input = {customAttributes: [{key: "MyKey", value: "MyValue"}]};
     *
     * client.checkout.updateAttributes(checkoutId, input).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to update.
     * @param {Object} [input] An input object containing zero or more of:
     *   @param {Boolean} [input.allowPartialAddresses] An email connected to the checkout.
     *   @param {Object[]} [input.customAttributes] A list of custom attributes for the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/attributeinput|Storefront API reference} for valid input fields.
     *   @param {String} [input.note] A note for the checkout.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'updateAttributes',
    value: function updateAttributes(checkoutId) {
      var input = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      return this.graphQLClient.send(query$20, {
        checkoutId: checkoutId,
        input: input
      }).then(handleCheckoutMutation('checkoutAttributesUpdateV2', this.graphQLClient));
    }

    /**
     * Replaces the value of checkout's email address
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const email = 'user@example.com';
     *
     * client.checkout.updateEmail(checkoutId, email).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to update.
     * @param {String} email The email address to apply to the checkout.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'updateEmail',
    value: function updateEmail(checkoutId, email) {
      return this.graphQLClient.send(query$25, {
        checkoutId: checkoutId,
        email: email
      }).then(handleCheckoutMutation('checkoutEmailUpdateV2', this.graphQLClient));
    }

    /**
     * Adds line items to an existing checkout.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItems = [{variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}];
     *
     * client.checkout.addLineItems(checkoutId, lineItems).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to add line items to.
     * @param {Object[]} lineItems A list of line items to add to the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'addLineItems',
    value: function addLineItems(checkoutId, lineItems) {
      return this.graphQLClient.send(query$16, {
        checkoutId: checkoutId,
        lineItems: lineItems
      }).then(handleCheckoutMutation('checkoutLineItemsAdd', this.graphQLClient));
    }

    /**
     * Applies a discount to an existing checkout using a discount code.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const discountCode = 'best-discount-ever';
     *
     * client.checkout.addDiscount(checkoutId, discountCode).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to add discount to.
     * @param {String} discountCode The discount code to apply to the checkout.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'addDiscount',
    value: function addDiscount(checkoutId, discountCode) {
      return this.graphQLClient.send(query$21, {
        checkoutId: checkoutId,
        discountCode: discountCode
      }).then(handleCheckoutMutation('checkoutDiscountCodeApplyV2', this.graphQLClient));
    }

    /**
     * Removes the applied discount from an existing checkout.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     *
     * client.checkout.removeDiscount(checkoutId).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to remove the discount from.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'removeDiscount',
    value: function removeDiscount(checkoutId) {
      return this.graphQLClient.send(query$22, {
        checkoutId: checkoutId
      }).then(handleCheckoutMutation('checkoutDiscountCodeRemove', this.graphQLClient));
    }

    /**
     * Applies gift cards to an existing checkout using a list of gift card codes
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const giftCardCodes = ['6FD8853DAGAA949F'];
     *
     * client.checkout.addGiftCards(checkoutId, giftCardCodes).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to add gift cards to.
     * @param {String[]} giftCardCodes The gift card codes to apply to the checkout.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'addGiftCards',
    value: function addGiftCards(checkoutId, giftCardCodes) {
      return this.graphQLClient.send(query$23, {
        checkoutId: checkoutId,
        giftCardCodes: giftCardCodes
      }).then(handleCheckoutMutation('checkoutGiftCardsAppend', this.graphQLClient));
    }

    /**
     * Remove a gift card from an existing checkout
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const appliedGiftCardId = 'Z2lkOi8vc2hvcGlmeS9BcHBsaWVkR2lmdENhcmQvNDI4NTQ1ODAzMTI=';
     *
     * client.checkout.removeGiftCard(checkoutId, appliedGiftCardId).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to add gift cards to.
     * @param {String} appliedGiftCardId The gift card id to remove from the checkout.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'removeGiftCard',
    value: function removeGiftCard(checkoutId, appliedGiftCardId) {
      return this.graphQLClient.send(query$24, {
        checkoutId: checkoutId,
        appliedGiftCardId: appliedGiftCardId
      }).then(handleCheckoutMutation('checkoutGiftCardRemoveV2', this.graphQLClient));
    }

    /**
     * Removes line items from an existing checkout.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItemIds = ['TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU='];
     *
     * client.checkout.removeLineItems(checkoutId, lineItemIds).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to remove line items from.
     * @param {String[]} lineItemIds A list of the ids of line items to remove from the checkout.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'removeLineItems',
    value: function removeLineItems(checkoutId, lineItemIds) {
      return this.graphQLClient.send(query$17, {
        checkoutId: checkoutId,
        lineItemIds: lineItemIds
      }).then(handleCheckoutMutation('checkoutLineItemsRemove', this.graphQLClient));
    }

    /**
     * Replace line items on an existing checkout.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItems = [{variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}];
     *
     * client.checkout.replaceLineItems(checkoutId, lineItems).then((checkout) => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to add line items to.
     * @param {Object[]} lineItems A list of line items to set on the checkout. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineiteminput|Storefront API reference} for valid input fields for each line item.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'replaceLineItems',
    value: function replaceLineItems(checkoutId, lineItems) {
      return this.graphQLClient.send(query$18, {
        checkoutId: checkoutId,
        lineItems: lineItems
      }).then(handleCheckoutMutation('checkoutLineItemsReplace', this.graphQLClient));
    }

    /**
     * Updates line items on an existing checkout.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItems = [
     *   {
     *     id: 'TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU=',
     *     quantity: 5,
     *     variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg=='
     *   }
     * ];
     *
     * client.checkout.updateLineItems(checkoutId, lineItems).then(checkout => {
     *   // Do something with the updated checkout
     * });
     *
     * @param {String} checkoutId The ID of the checkout to update a line item on.
     * @param {Object[]} lineItems A list of line item information to update. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/checkoutlineitemupdateinput|Storefront API reference} for valid input fields for each line item.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'updateLineItems',
    value: function updateLineItems(checkoutId, lineItems) {
      return this.graphQLClient.send(query$19, {
        checkoutId: checkoutId,
        lineItems: lineItems
      }).then(handleCheckoutMutation('checkoutLineItemsUpdate', this.graphQLClient));
    }

    /**
     * Updates shipping address on an existing checkout.
     *
     * @example
     * const checkoutId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const shippingAddress = {
     *    address1: 'Chestnut Street 92',
     *    address2: 'Apartment 2',
     *    city: 'Louisville',
     *    company: null,
     *    country: 'United States',
     *    firstName: 'Bob',
     *    lastName: 'Norman',
     *    phone: '555-625-1199',
     *    province: 'Kentucky',
     *    zip: '40202'
     *  };
     *
     * client.checkout.updateShippingAddress(checkoutId, shippingAddress).then(checkout => {
     *   // Do something with the updated checkout
     * });
     *
     * @param  {String} checkoutId The ID of the checkout to update shipping address.
     * @param  {Object} shippingAddress A shipping address.
     * @return {Promise|GraphModel} A promise resolving with the updated checkout.
     */
  }, {
    key: 'updateShippingAddress',
    value: function updateShippingAddress(checkoutId, shippingAddress) {
      return this.graphQLClient.send(query$26, {
        checkoutId: checkoutId,
        shippingAddress: shippingAddress
      }).then(handleCheckoutMutation('checkoutShippingAddressUpdateV2', this.graphQLClient));
    }
  }]);
  return CheckoutResource;
}(Resource);
function handleCarMutation(mutationRootKey, client) {
  return function (_ref) {
    var _ref$data = _ref.data,
      data = _ref$data === undefined ? {} : _ref$data,
      errors = _ref.errors,
      _ref$model = _ref.model,
      model = _ref$model === undefined ? {} : _ref$model;
    var rootData = data[mutationRootKey];
    var rootModel = model[mutationRootKey];
    if (rootData && rootData.cart) {
      return client.fetchAllPages(rootModel.cart.lines, {
        pageSize: 250
      }).then(function (lines) {
        rootModel.cart.attrs.lines = lines;
        rootModel.cart.errors = errors;
        //   rootModel.cart.userErrors = rootModel.userErrors;

        return rootModel.cart;
      });
    }
    if (errors && errors.length) {
      return promise_default().reject(new Error(stringify_default()(errors)));
    }

    //   if (rootData && rootData.cartUserErrors && rootData.cartUserErrors.length) {
    //     return Promise.reject(new Error(JSON.stringify(rootData.cartUserErrors)));
    //   }

    //   if (rootData && rootData.userErrors && rootData.userErrors.length) {
    //     return Promise.reject(new Error(JSON.stringify(rootData.userErrors)));
    //   }

    return promise_default().reject(new Error("The " + mutationRootKey + " mutation failed due to an unknown error."));
  };
}
function query$27(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.id = client.variable("id", "ID!");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addQuery([variables.__defaultOperation__.id], function (root) {
    root.add("cart", {
      args: {
        id: variables.__defaultOperation__.id
      }
    }, function (cart) {
      cart.addFragment(spreads.CartFragment);
    });
  });
  return document;
}
function query$28(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.input = client.variable("input", "CartInput!");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.input], function (root) {
    root.add("cartCreate", {
      args: {
        input: variables.__defaultOperation__.input
      }
    }, function (cartCreate) {
      cartCreate.add("cart", function (cart) {
        cart.addFragment(spreads.CartFragment);
      });
    });
  });
  return document;
}
function query$29(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.cartId = client.variable("cartId", "ID!");
  variables.__defaultOperation__.lines = client.variable("lines", "[CartLineInput!]!");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.cartId, variables.__defaultOperation__.lines], function (root) {
    root.add("cartLinesAdd", {
      args: {
        cartId: variables.__defaultOperation__.cartId,
        lines: variables.__defaultOperation__.lines
      }
    }, function (cartLinesAdd) {
      cartLinesAdd.add("cart", function (cart) {
        cart.addFragment(spreads.CartFragment);
      });
    });
  });
  return document;
}
function query$30(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.cartId = client.variable("cartId", "ID!");
  variables.__defaultOperation__.lineIds = client.variable("lineIds", "[ID!]!");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.cartId, variables.__defaultOperation__.lineIds], function (root) {
    root.add("cartLinesRemove", {
      args: {
        cartId: variables.__defaultOperation__.cartId,
        lineIds: variables.__defaultOperation__.lineIds
      }
    }, function (cartLinesRemove) {
      cartLinesRemove.add("cart", function (cart) {
        cart.addFragment(spreads.CartFragment);
      });
    });
  });
  return document;
}
function query$31(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.cartId = client.variable("cartId", "ID!");
  variables.__defaultOperation__.lines = client.variable("lines", "[CartLineUpdateInput!]!");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.cartId, variables.__defaultOperation__.lines], function (root) {
    root.add("cartLinesUpdate", {
      args: {
        cartId: variables.__defaultOperation__.cartId,
        lines: variables.__defaultOperation__.lines
      }
    }, function (cartLinesUpdate) {
      cartLinesUpdate.add("cart", function (cart) {
        cart.addFragment(spreads.CartFragment);
      });
    });
  });
  return document;
}
function query$32(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.cartId = client.variable("cartId", "ID!");
  variables.__defaultOperation__.note = client.variable("note", "String!");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.cartId, variables.__defaultOperation__.note], function (root) {
    root.add("cartNoteUpdate", {
      args: {
        cartId: variables.__defaultOperation__.cartId,
        note: variables.__defaultOperation__.note
      }
    }, function (cartNoteUpdate) {
      cartNoteUpdate.add("cart", function (cart) {
        cart.addFragment(spreads.CartFragment);
      });
    });
  });
  return document;
}
function query$33(client) {
  var document = client.document();
  var spreads = {};
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.cartId = client.variable("cartId", "ID!");
  variables.__defaultOperation__.discountCodes = client.variable("discountCodes", "[String!]");
  spreads.CartFragment = document.defineFragment("CartFragment", "Cart", function (root) {
    root.add("id");
    root.add("createdAt");
    root.add("updatedAt");
    root.add("checkoutUrl");
    root.add("lines", {
      args: {
        first: 250
      }
    }, function (lines) {
      lines.add("pageInfo", function (pageInfo) {
        pageInfo.add("hasNextPage");
        pageInfo.add("hasPreviousPage");
      });
      lines.add("edges", function (edges) {
        edges.add("cursor");
        edges.add("node", function (node) {
          node.add("id");
          node.add("quantity");
          node.add("attributes", function (attributes) {
            attributes.add("key");
            attributes.add("value");
          });
          node.add("estimatedCost", function (estimatedCost) {
            estimatedCost.add("subtotalAmount", function (subtotalAmount) {
              subtotalAmount.add("amount");
            });
            estimatedCost.add("totalAmount", function (totalAmount) {
              totalAmount.add("amount");
            });
          });
          node.add("merchandise", function (merchandise) {
            merchandise.addInlineFragmentOn("ProductVariant", function (ProductVariant) {
              ProductVariant.add("id");
              ProductVariant.add("image", function (image) {
                image.add("id");
                image.add("src");
                image.add("altText");
              });
              ProductVariant.add("title");
              ProductVariant.add("product", function (product) {
                product.add("title");
                product.add("id");
                product.add("productType");
                product.add("handle");
              });
              ProductVariant.add("price", function (price) {
                price.add("amount");
                price.add("currencyCode");
              });
              ProductVariant.add("sku");
            });
          });
        });
      });
    });
    root.add("discountCodes", function (discountCodes) {
      discountCodes.add("applicable");
      discountCodes.add("code");
    });
    root.add("estimatedCost", function (estimatedCost) {
      estimatedCost.add("totalAmount", function (totalAmount) {
        totalAmount.add("amount");
        totalAmount.add("currencyCode");
      });
      estimatedCost.add("subtotalAmount", function (subtotalAmount) {
        subtotalAmount.add("amount");
        subtotalAmount.add("currencyCode");
      });
      estimatedCost.add("totalTaxAmount", function (totalTaxAmount) {
        totalTaxAmount.add("amount");
        totalTaxAmount.add("currencyCode");
      });
      estimatedCost.add("totalDutyAmount", function (totalDutyAmount) {
        totalDutyAmount.add("amount");
        totalDutyAmount.add("currencyCode");
      });
    });
  });
  document.addMutation([variables.__defaultOperation__.cartId, variables.__defaultOperation__.discountCodes], function (root) {
    root.add("cartDiscountCodesUpdate", {
      args: {
        cartId: variables.__defaultOperation__.cartId,
        discountCodes: variables.__defaultOperation__.discountCodes
      }
    }, function (cartDiscountCodesUpdate) {
      cartDiscountCodesUpdate.add("cart", function (cart) {
        cart.addFragment(spreads.CartFragment);
      });
    });
  });
  return document;
}

// GraphQL
/**
 * The JS Buy SDK cart resource
 * @class
 */

var CartResource = function (_Resource) {
  inherits$1(CartResource, _Resource);
  function CartResource() {
    classCallCheck$1(this, CartResource);
    return possibleConstructorReturn$1(this, (CartResource.__proto__ || get_prototype_of_default()(CartResource)).apply(this, arguments));
  }
  createClass$1(CartResource, [{
    key: "fetch",
    /**
     * Fetches a cart by ID.
     *
     * @example
     * client.cart.fetch('FlZj9rZXlN5MDY4ZDFiZTUyZTUwNTE2MDNhZjg=').then((cart) => {
     *   // Do something with the cart
     * });
     *
     * @param {String} id The id of the cart to fetch.
     * @return {Promise|GraphModel} A promise resolving with a `GraphModel` of the cart.
     */
    value: function fetch(id) {
      var _this2 = this;
      return this.graphQLClient.send(query$27, {
        id: id
      }).then(defaultResolver("cart")).then(function (cart) {
        if (!cart) {
          return null;
        }
        return _this2.graphQLClient.fetchAllPages(cart.lines, {
          pageSize: 250
        }).then(function (lines) {
          cart.attrs.lines = lines;
          return cart;
        });
      });
    }

    /**
     * Creates a cart.
     *
     * @example
     * const input = {
     *   lineItems: [
     *     {variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}
     *   ]
     * };
     *
     * client.cart.create(input).then((cart) => {
     *   // Do something with the newly created cart
     * });
     *
     * @param {Object} [input] An input object containing zero or more of:
     *   @param {String} [input.email] An email connected to the cart.
     *   @param {Object[]} [input.lineItems] A list of line items in the cart. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/cartlineiteminput|Storefront API reference} for valid input fields for each line item.
     *   @param {Object} [input.shippingAddress] A shipping address. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/mailingaddressinput|Storefront API reference} for valid input fields.
     *   @param {String} [input.note] A note for the cart.
     *   @param {Object[]} [input.customAttributes] A list of custom attributes for the cart. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/attributeinput|Storefront API reference} for valid input fields.
     *   @param {String} [input.presentmentCurrencyCode ] A presentment currency code. See the {@link https://help.shopify.com/en/api/storefront-api/reference/enum/currencycode|Storefront API reference} for valid currency code values.
     * @return {Promise|GraphModel} A promise resolving with the created cart.
     */
  }, {
    key: "create",
    value: function create() {
      var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      return this.graphQLClient.send(query$28, {
        input: input
      }).then(handleCarMutation("cartCreate", this.graphQLClient));
    }

    /**
     * Adds line items to an existing cart.
     *
     * @example
     * const cartId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItems = [{variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg==', quantity: 5}];
     *
     * client.cart.addLines(cartId, lineItems).then((cart) => {
     *   // Do something with the updated cart
     * });
     *
     * @param {String} cartId The ID of the cart to add line items to.
     * @param {Object[]} lineItems A list of line items to add to the cart. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/cartlineiteminput|Storefront API reference} for valid input fields for each line item.
     * @return {Promise|GraphModel} A promise resolving with the updated cart.
     */
  }, {
    key: "addLines",
    value: function addLines(cartId, lines) {
      return this.graphQLClient.send(query$29, {
        cartId: cartId,
        lines: lines
      }).then(handleCarMutation("cartLinesAdd", this.graphQLClient));
    }

    /**
     * Removes line items from an existing cart.
     *
     * @example
     * const cartId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItemIds = ['TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU='];
     *
     * client.cart.removeLines(cartId, lineItemIds).then((cart) => {
     *   // Do something with the updated cart
     * });
     *
     * @param {String} cartId The ID of the cart to remove line items from.
     * @param {String[]} lineItemIds A list of the ids of line items to remove from the cart.
     * @return {Promise|GraphModel} A promise resolving with the updated cart.
     */
  }, {
    key: "removeLines",
    value: function removeLines(cartId, lineIds) {
      return this.graphQLClient.send(query$30, {
        cartId: cartId,
        lineIds: lineIds
      }).then(handleCarMutation("cartLinesRemove", this.graphQLClient));
    }

    /**
     * Updates line items on an existing cart.
     *
     * @example
     * const cartId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const lineItems = [
     *   {
     *     id: 'TViZGE5Y2U1ZDFhY2FiMmM2YT9rZXk9NTc2YjBhODcwNWIxYzg0YjE5ZjRmZGQ5NjczNGVkZGU=',
     *     quantity: 5,
     *     variantId: 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0VmFyaWFudC8yOTEwNjAyMjc5Mg=='
     *   }
     * ];
     *
     * client.cart.updateLines(cartId, lineItems).then(cart => {
     *   // Do something with the updated cart
     * });
     *
     * @param {String} cartId The ID of the cart to update a line item on.
     * @param {Object[]} lines A list of line item information to update. See the {@link https://help.shopify.com/api/storefront-api/reference/input-object/cartlineitemupdateinput|Storefront API reference} for valid input fields for each line item.
     * @return {Promise|GraphModel} A promise resolving with the updated cart.
     */
  }, {
    key: "updateLines",
    value: function updateLines(cartId, lines) {
      return this.graphQLClient.send(query$31, {
        cartId: cartId,
        lines: lines
      }).then(handleCarMutation("cartLinesUpdate", this.graphQLClient));
    }

    /**
     * Updates note on an existing cart.
     *
     * @example
     * const cartId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const node = 'test';
     *
     * client.cart.updateNote(cartId, note).then(cart => {
     *   // Do something with the updated cart
     * });
     *
     * @param {String} cartId The ID of the cart to update a line item on.
     * @param {String} note A note to update. See the {@link https://shopify.dev/docs/api/storefront/2024-01/mutations/cartNoteUpdate#argument-note API reference} for valid input fields.
     * @return {Promise|GraphModel} A promise resolving with the updated cart.
     */
  }, {
    key: "updateNote",
    value: function updateNote(cartId, note) {
      return this.graphQLClient.send(query$32, {
        cartId: cartId,
        note: note
      }).then(handleCarMutation("cartNoteUpdate", this.graphQLClient));
    }

    /**
     * Updates discountCodes on an existing cart.
     *
     * @example
     * const cartId = 'Z2lkOi8vc2hvcGlmeS9DaGVja291dC9kMTZmM2EzMDM4Yjc4N=';
     * const discountCodes = ['test'];
     *
     * client.cart.updateDiscountCodes(cartId, discountCodes).then(cart => {
     *   // Do something with the updated cart
     * });
     *
     * @param {String} cartId The ID of the cart to update discount codes on.
     * @param {String[]} discountCodes Discount codes to update. See the {@link https://shopify.dev/docs/api/storefront/2024-01/mutations/cartDiscountCodesUpdate#argument-discountcodes API reference} for valid input fields.
     * @return {Promise|GraphModel} A promise resolving with the updated cart.
     */
  }, {
    key: "updateDiscountCodes",
    value: function updateDiscountCodes(cartId, discountCodes) {
      return this.graphQLClient.send(query$33, {
        cartId: cartId,
        discountCodes: discountCodes
      }).then(handleCarMutation('cartDiscountCodesUpdate', this.graphQLClient));
    }
  }]);
  return CartResource;
}(Resource);

/**
 * @namespace ImageHelpers
 */
var imageHelpers = {
  /**
   * Generates the image src for a resized image with maximum dimensions `maxWidth` and `maxHeight`.
   * Images do not scale up.
   *
   * @example
   * const url = client.image.helpers.imageForSize(product.variants[0].image, {maxWidth: 50, maxHeight: 50});
   *
   * @memberof ImageHelpers
   * @method imageForSize
   * @param {Object} image The original image model to generate the image src for.
   * @param {Object} options An options object containing:
   *  @param {Integer} options.maxWidth The maximum width for the image.
   *  @param {Integer} options.maxHeight The maximum height for the image.
   * @return {String} The image src for the resized image.
   */
  imageForSize: function imageForSize(image, _ref) {
    var maxWidth = _ref.maxWidth,
      maxHeight = _ref.maxHeight;
    var splitUrl = image.src.split('?');
    var notQuery = splitUrl[0];
    var query = splitUrl[1] ? '?' + splitUrl[1] : '';

    // Use the section before the query
    var imageTokens = notQuery.split('.');

    // Take the token before the file extension and append the dimensions
    var imagePathIndex = imageTokens.length - 2;
    imageTokens[imagePathIndex] = imageTokens[imagePathIndex] + '_' + maxWidth + 'x' + maxHeight;
    return '' + imageTokens.join('.') + query;
  }
};
function query$34(client) {
  var document = client.document();
  var variables = {};
  variables.__defaultOperation__ = {};
  variables.__defaultOperation__.ids = client.variable("ids", "[ID!]!");
  document.addQuery([variables.__defaultOperation__.ids], function (root) {
    root.add("nodes", {
      args: {
        ids: variables.__defaultOperation__.ids
      }
    }, function (nodes) {
      nodes.add("id");
      nodes.addInlineFragmentOn("MediaImage", function (MediaImage) {
        MediaImage.add("image", function (image) {
          image.add("url", {
            alias: "src"
          });
          image.add("altText");
          image.add("width");
          image.add("height");
        });
      });
    });
  });
  return document;
}

/**
 * The JS Buy SDK image resource
 * @class
 */

var ImageResource = function (_Resource) {
  inherits$1(ImageResource, _Resource);
  function ImageResource() {
    classCallCheck$1(this, ImageResource);
    return possibleConstructorReturn$1(this, (ImageResource.__proto__ || get_prototype_of_default()(ImageResource)).apply(this, arguments));
  }
  createClass$1(ImageResource, [{
    key: 'fetchMultiple',
    /**
     * Fetches multiple images by ID on the shop.
     *
     * @example
     * const ids = ['Xk9lM2JkNzFmNzIQ4NTIY4ZDFi9DaGVja291dC9lM2JkN==', 'Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0Lzc4NTc5ODkzODQ='];
     * client.image.fetchMultiple(ids).then((images) => {
     *   // Do something with the images
     * });
     *
     * @param {String[]} ids The ids of the images to fetch
     * @return {Promise|GraphModel[]} A promise resolving with a `GraphModel` of the images.
     */
    value: function fetchMultiple(ids) {
      return this.graphQLClient.send(query$34, {
        ids: ids
      }).then(defaultResolver('nodes'));
    }
  }, {
    key: 'helpers',
    get: function get$$1() {
      return imageHelpers;
    }
  }]);
  return ImageResource;
}(Resource);
var version = "2.22.0";
var AppliedGiftCard = {
  "name": "AppliedGiftCard",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "amountUsed": "MoneyV2",
    "balance": "MoneyV2",
    "id": "ID",
    "lastCharacters": "String",
    "presentmentAmountUsed": "MoneyV2"
  },
  "implementsNode": true
};
var Attribute = {
  "name": "Attribute",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "key": "String",
    "value": "String"
  },
  "implementsNode": false
};
var AutomaticDiscountApplication = {
  "name": "AutomaticDiscountApplication",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "title": "String"
  },
  "implementsNode": false
};
var BaseCartLine = {
  "name": "BaseCartLine",
  "kind": "INTERFACE",
  "fieldBaseTypes": {
    "attributes": "Attribute",
    "estimatedCost": "CartLineEstimatedCost",
    "id": "ID",
    "merchandise": "Merchandise",
    "quantity": "Int"
  },
  "possibleTypes": ["CartLine", "ComponentizableCartLine"]
};
var BaseCartLineConnection = {
  "name": "BaseCartLineConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "BaseCartLineEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var BaseCartLineEdge = {
  "name": "BaseCartLineEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "BaseCartLine"
  },
  "implementsNode": false
};
var Boolean$1 = {
  "name": "Boolean",
  "kind": "SCALAR"
};
var Cart = {
  "name": "Cart",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkoutUrl": "URL",
    "createdAt": "DateTime",
    "discountCodes": "CartDiscountCode",
    "estimatedCost": "CartEstimatedCost",
    "id": "ID",
    "lines": "BaseCartLineConnection",
    "updatedAt": "DateTime"
  },
  "implementsNode": true
};
var CartCreatePayload = {
  "name": "CartCreatePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart"
  },
  "implementsNode": false
};
var CartDiscountCode = {
  "name": "CartDiscountCode",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "applicable": "Boolean",
    "code": "String"
  },
  "implementsNode": false
};
var CartDiscountCodesUpdatePayload = {
  "name": "CartDiscountCodesUpdatePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart"
  },
  "implementsNode": false
};
var CartEstimatedCost = {
  "name": "CartEstimatedCost",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "subtotalAmount": "MoneyV2",
    "totalAmount": "MoneyV2",
    "totalDutyAmount": "MoneyV2",
    "totalTaxAmount": "MoneyV2"
  },
  "implementsNode": false
};
var CartLineEstimatedCost = {
  "name": "CartLineEstimatedCost",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "subtotalAmount": "MoneyV2",
    "totalAmount": "MoneyV2"
  },
  "implementsNode": false
};
var CartLinesAddPayload = {
  "name": "CartLinesAddPayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart"
  },
  "implementsNode": false
};
var CartLinesRemovePayload = {
  "name": "CartLinesRemovePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart"
  },
  "implementsNode": false
};
var CartLinesUpdatePayload = {
  "name": "CartLinesUpdatePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart"
  },
  "implementsNode": false
};
var CartNoteUpdatePayload = {
  "name": "CartNoteUpdatePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart"
  },
  "implementsNode": false
};
var Checkout = {
  "name": "Checkout",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "appliedGiftCards": "AppliedGiftCard",
    "completedAt": "DateTime",
    "createdAt": "DateTime",
    "currencyCode": "CurrencyCode",
    "customAttributes": "Attribute",
    "discountApplications": "DiscountApplicationConnection",
    "email": "String",
    "id": "ID",
    "lineItems": "CheckoutLineItemConnection",
    "lineItemsSubtotalPrice": "MoneyV2",
    "note": "String",
    "order": "Order",
    "orderStatusUrl": "URL",
    "paymentDue": "MoneyV2",
    "ready": "Boolean",
    "requiresShipping": "Boolean",
    "shippingAddress": "MailingAddress",
    "shippingLine": "ShippingRate",
    "subtotalPrice": "MoneyV2",
    "taxExempt": "Boolean",
    "taxesIncluded": "Boolean",
    "totalPrice": "MoneyV2",
    "totalTax": "MoneyV2",
    "updatedAt": "DateTime",
    "webUrl": "URL"
  },
  "implementsNode": true
};
var CheckoutAttributesUpdateV2Payload = {
  "name": "CheckoutAttributesUpdateV2Payload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutCreatePayload = {
  "name": "CheckoutCreatePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutDiscountCodeApplyV2Payload = {
  "name": "CheckoutDiscountCodeApplyV2Payload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutDiscountCodeRemovePayload = {
  "name": "CheckoutDiscountCodeRemovePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutEmailUpdateV2Payload = {
  "name": "CheckoutEmailUpdateV2Payload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutErrorCode = {
  "name": "CheckoutErrorCode",
  "kind": "ENUM"
};
var CheckoutGiftCardRemoveV2Payload = {
  "name": "CheckoutGiftCardRemoveV2Payload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutGiftCardsAppendPayload = {
  "name": "CheckoutGiftCardsAppendPayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutLineItem = {
  "name": "CheckoutLineItem",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "customAttributes": "Attribute",
    "discountAllocations": "DiscountAllocation",
    "id": "ID",
    "quantity": "Int",
    "title": "String",
    "variant": "ProductVariant"
  },
  "implementsNode": true
};
var CheckoutLineItemConnection = {
  "name": "CheckoutLineItemConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "CheckoutLineItemEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var CheckoutLineItemEdge = {
  "name": "CheckoutLineItemEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "CheckoutLineItem"
  },
  "implementsNode": false
};
var CheckoutLineItemsAddPayload = {
  "name": "CheckoutLineItemsAddPayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutLineItemsRemovePayload = {
  "name": "CheckoutLineItemsRemovePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutLineItemsReplacePayload = {
  "name": "CheckoutLineItemsReplacePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "userErrors": "CheckoutUserError"
  },
  "implementsNode": false
};
var CheckoutLineItemsUpdatePayload = {
  "name": "CheckoutLineItemsUpdatePayload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutShippingAddressUpdateV2Payload = {
  "name": "CheckoutShippingAddressUpdateV2Payload",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "checkout": "Checkout",
    "checkoutUserErrors": "CheckoutUserError",
    "userErrors": "UserError"
  },
  "implementsNode": false
};
var CheckoutUserError = {
  "name": "CheckoutUserError",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "code": "CheckoutErrorCode",
    "field": "String",
    "message": "String"
  },
  "implementsNode": false
};
var Collection = {
  "name": "Collection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "description": "String",
    "descriptionHtml": "HTML",
    "handle": "String",
    "id": "ID",
    "image": "Image",
    "metafield": "Metafield",
    "products": "ProductConnection",
    "title": "String",
    "updatedAt": "DateTime"
  },
  "implementsNode": true
};
var CollectionConnection = {
  "name": "CollectionConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "CollectionEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var CollectionEdge = {
  "name": "CollectionEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "Collection"
  },
  "implementsNode": false
};
var CountryCode = {
  "name": "CountryCode",
  "kind": "ENUM"
};
var CurrencyCode = {
  "name": "CurrencyCode",
  "kind": "ENUM"
};
var DateTime = {
  "name": "DateTime",
  "kind": "SCALAR"
};
var Decimal = {
  "name": "Decimal",
  "kind": "SCALAR"
};
var DiscountAllocation = {
  "name": "DiscountAllocation",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "allocatedAmount": "MoneyV2",
    "discountApplication": "DiscountApplication"
  },
  "implementsNode": false
};
var DiscountApplication = {
  "name": "DiscountApplication",
  "kind": "INTERFACE",
  "fieldBaseTypes": {
    "allocationMethod": "DiscountApplicationAllocationMethod",
    "targetSelection": "DiscountApplicationTargetSelection",
    "targetType": "DiscountApplicationTargetType",
    "value": "PricingValue"
  },
  "possibleTypes": ["AutomaticDiscountApplication", "DiscountCodeApplication", "ManualDiscountApplication", "ScriptDiscountApplication"]
};
var DiscountApplicationAllocationMethod = {
  "name": "DiscountApplicationAllocationMethod",
  "kind": "ENUM"
};
var DiscountApplicationConnection = {
  "name": "DiscountApplicationConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "DiscountApplicationEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var DiscountApplicationEdge = {
  "name": "DiscountApplicationEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "node": "DiscountApplication"
  },
  "implementsNode": false
};
var DiscountApplicationTargetSelection = {
  "name": "DiscountApplicationTargetSelection",
  "kind": "ENUM"
};
var DiscountApplicationTargetType = {
  "name": "DiscountApplicationTargetType",
  "kind": "ENUM"
};
var DiscountCodeApplication = {
  "name": "DiscountCodeApplication",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "applicable": "Boolean",
    "code": "String"
  },
  "implementsNode": false
};
var Domain = {
  "name": "Domain",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "host": "String",
    "sslEnabled": "Boolean",
    "url": "URL"
  },
  "implementsNode": false
};
var Float = {
  "name": "Float",
  "kind": "SCALAR"
};
var HTML = {
  "name": "HTML",
  "kind": "SCALAR"
};
var ID = {
  "name": "ID",
  "kind": "SCALAR"
};
var Image = {
  "name": "Image",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "altText": "String",
    "height": "Int",
    "id": "ID",
    "src": "URL",
    "url": "URL",
    "width": "Int"
  },
  "implementsNode": false
};
var ImageConnection = {
  "name": "ImageConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "ImageEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var ImageEdge = {
  "name": "ImageEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "Image"
  },
  "implementsNode": false
};
var Int = {
  "name": "Int",
  "kind": "SCALAR"
};
var MailingAddress = {
  "name": "MailingAddress",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "address1": "String",
    "address2": "String",
    "city": "String",
    "company": "String",
    "country": "String",
    "countryCodeV2": "CountryCode",
    "firstName": "String",
    "formatted": "String",
    "id": "ID",
    "lastName": "String",
    "latitude": "Float",
    "longitude": "Float",
    "name": "String",
    "phone": "String",
    "province": "String",
    "provinceCode": "String",
    "zip": "String"
  },
  "implementsNode": true
};
var ManualDiscountApplication = {
  "name": "ManualDiscountApplication",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "description": "String",
    "title": "String"
  },
  "implementsNode": false
};
var MediaImage = {
  "name": "MediaImage",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "image": "Image"
  },
  "implementsNode": true
};
var Merchandise = {
  "name": "Merchandise",
  "kind": "UNION"
};
var Metafield = {
  "name": "Metafield",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "id": "ID",
    "key": "String",
    "namespace": "String",
    "references": "MetafieldReferenceConnection",
    "value": "String"
  },
  "implementsNode": true
};
var MetafieldReference = {
  "name": "MetafieldReference",
  "kind": "UNION"
};
var MetafieldReferenceConnection = {
  "name": "MetafieldReferenceConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "MetafieldReferenceEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var MetafieldReferenceEdge = {
  "name": "MetafieldReferenceEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "MetafieldReference"
  },
  "implementsNode": false
};
var Metaobject = {
  "name": "Metaobject",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "field": "MetaobjectField"
  },
  "implementsNode": true
};
var MetaobjectField = {
  "name": "MetaobjectField",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "references": "MetafieldReferenceConnection",
    "value": "String"
  },
  "implementsNode": false
};
var MoneyV2 = {
  "name": "MoneyV2",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "amount": "Decimal",
    "currencyCode": "CurrencyCode"
  },
  "implementsNode": false
};
var Mutation$1 = {
  "name": "Mutation",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cartCreate": "CartCreatePayload",
    "cartDiscountCodesUpdate": "CartDiscountCodesUpdatePayload",
    "cartLinesAdd": "CartLinesAddPayload",
    "cartLinesRemove": "CartLinesRemovePayload",
    "cartLinesUpdate": "CartLinesUpdatePayload",
    "cartNoteUpdate": "CartNoteUpdatePayload",
    "checkoutAttributesUpdateV2": "CheckoutAttributesUpdateV2Payload",
    "checkoutCreate": "CheckoutCreatePayload",
    "checkoutDiscountCodeApplyV2": "CheckoutDiscountCodeApplyV2Payload",
    "checkoutDiscountCodeRemove": "CheckoutDiscountCodeRemovePayload",
    "checkoutEmailUpdateV2": "CheckoutEmailUpdateV2Payload",
    "checkoutGiftCardRemoveV2": "CheckoutGiftCardRemoveV2Payload",
    "checkoutGiftCardsAppend": "CheckoutGiftCardsAppendPayload",
    "checkoutLineItemsAdd": "CheckoutLineItemsAddPayload",
    "checkoutLineItemsRemove": "CheckoutLineItemsRemovePayload",
    "checkoutLineItemsReplace": "CheckoutLineItemsReplacePayload",
    "checkoutLineItemsUpdate": "CheckoutLineItemsUpdatePayload",
    "checkoutShippingAddressUpdateV2": "CheckoutShippingAddressUpdateV2Payload"
  },
  "implementsNode": false,
  "relayInputObjectBaseTypes": {
    "cartCreate": "CartInput",
    "cartMetafieldDelete": "CartMetafieldDeleteInput",
    "checkoutAttributesUpdateV2": "CheckoutAttributesUpdateV2Input",
    "checkoutCreate": "CheckoutCreateInput",
    "customerAccessTokenCreate": "CustomerAccessTokenCreateInput",
    "customerActivate": "CustomerActivateInput",
    "customerCreate": "CustomerCreateInput",
    "customerReset": "CustomerResetInput"
  }
};
var Node = {
  "name": "Node",
  "kind": "INTERFACE",
  "fieldBaseTypes": {
    "id": "ID"
  },
  "possibleTypes": ["AppliedGiftCard", "Article", "Blog", "Cart", "CartLine", "Checkout", "CheckoutLineItem", "Collection", "Comment", "Company", "CompanyContact", "CompanyLocation", "ComponentizableCartLine", "ExternalVideo", "GenericFile", "Location", "MailingAddress", "Market", "MediaImage", "MediaPresentation", "Menu", "MenuItem", "Metafield", "Metaobject", "Model3d", "Order", "Page", "Payment", "Product", "ProductOption", "ProductVariant", "Shop", "ShopPolicy", "UrlRedirect", "Video"]
};
var Order = {
  "name": "Order",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "currencyCode": "CurrencyCode",
    "customerUrl": "URL",
    "id": "ID",
    "lineItems": "OrderLineItemConnection",
    "orderNumber": "Int",
    "processedAt": "DateTime",
    "shippingAddress": "MailingAddress",
    "subtotalPrice": "MoneyV2",
    "totalPrice": "MoneyV2",
    "totalRefunded": "MoneyV2",
    "totalShippingPrice": "MoneyV2",
    "totalTax": "MoneyV2"
  },
  "implementsNode": true
};
var OrderLineItem = {
  "name": "OrderLineItem",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "customAttributes": "Attribute",
    "quantity": "Int",
    "title": "String",
    "variant": "ProductVariant"
  },
  "implementsNode": false
};
var OrderLineItemConnection = {
  "name": "OrderLineItemConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "OrderLineItemEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var OrderLineItemEdge = {
  "name": "OrderLineItemEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "OrderLineItem"
  },
  "implementsNode": false
};
var PageInfo = {
  "name": "PageInfo",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "hasNextPage": "Boolean",
    "hasPreviousPage": "Boolean"
  },
  "implementsNode": false
};
var PaymentSettings = {
  "name": "PaymentSettings",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "enabledPresentmentCurrencies": "CurrencyCode"
  },
  "implementsNode": false
};
var PricingPercentageValue = {
  "name": "PricingPercentageValue",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "percentage": "Float"
  },
  "implementsNode": false
};
var PricingValue = {
  "name": "PricingValue",
  "kind": "UNION"
};
var Product = {
  "name": "Product",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "availableForSale": "Boolean",
    "createdAt": "DateTime",
    "description": "String",
    "descriptionHtml": "HTML",
    "handle": "String",
    "id": "ID",
    "images": "ImageConnection",
    "metafield": "Metafield",
    "metafields": "Metafield",
    "onlineStoreUrl": "URL",
    "options": "ProductOption",
    "productType": "String",
    "publishedAt": "DateTime",
    "tags": "String",
    "title": "String",
    "updatedAt": "DateTime",
    "variants": "ProductVariantConnection",
    "vendor": "String"
  },
  "implementsNode": true
};
var ProductConnection = {
  "name": "ProductConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "ProductEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var ProductEdge = {
  "name": "ProductEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "Product"
  },
  "implementsNode": false
};
var ProductOption = {
  "name": "ProductOption",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "name": "String",
    "values": "String"
  },
  "implementsNode": true
};
var ProductVariant = {
  "name": "ProductVariant",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "availableForSale": "Boolean",
    "barcode": "String",
    "compareAtPrice": "MoneyV2",
    "id": "ID",
    "image": "Image",
    "metafields": "Metafield",
    "price": "MoneyV2",
    "product": "Product",
    "selectedOptions": "SelectedOption",
    "sku": "String",
    "title": "String",
    "unitPrice": "MoneyV2",
    "unitPriceMeasurement": "UnitPriceMeasurement",
    "weight": "Float"
  },
  "implementsNode": true
};
var ProductVariantConnection = {
  "name": "ProductVariantConnection",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "edges": "ProductVariantEdge",
    "pageInfo": "PageInfo"
  },
  "implementsNode": false
};
var ProductVariantEdge = {
  "name": "ProductVariantEdge",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cursor": "String",
    "node": "ProductVariant"
  },
  "implementsNode": false
};
var QueryRoot = {
  "name": "QueryRoot",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "cart": "Cart",
    "collection": "Collection",
    "collectionByHandle": "Collection",
    "collections": "CollectionConnection",
    "node": "Node",
    "nodes": "Node",
    "productByHandle": "Product",
    "productRecommendations": "Product",
    "products": "ProductConnection",
    "shop": "Shop"
  },
  "implementsNode": false
};
var ScriptDiscountApplication = {
  "name": "ScriptDiscountApplication",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "title": "String"
  },
  "implementsNode": false
};
var SelectedOption = {
  "name": "SelectedOption",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "name": "String",
    "value": "String"
  },
  "implementsNode": false
};
var ShippingRate = {
  "name": "ShippingRate",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "handle": "String",
    "price": "MoneyV2",
    "title": "String"
  },
  "implementsNode": false
};
var Shop = {
  "name": "Shop",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "description": "String",
    "moneyFormat": "String",
    "name": "String",
    "paymentSettings": "PaymentSettings",
    "primaryDomain": "Domain",
    "privacyPolicy": "ShopPolicy",
    "refundPolicy": "ShopPolicy",
    "termsOfService": "ShopPolicy"
  },
  "implementsNode": true
};
var ShopPolicy = {
  "name": "ShopPolicy",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "body": "String",
    "id": "ID",
    "title": "String",
    "url": "URL"
  },
  "implementsNode": true
};
var String$1 = {
  "name": "String",
  "kind": "SCALAR"
};
var URL = {
  "name": "URL",
  "kind": "SCALAR"
};
var UnitPriceMeasurement = {
  "name": "UnitPriceMeasurement",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "measuredType": "UnitPriceMeasurementMeasuredType",
    "quantityUnit": "UnitPriceMeasurementMeasuredUnit",
    "quantityValue": "Float",
    "referenceUnit": "UnitPriceMeasurementMeasuredUnit",
    "referenceValue": "Int"
  },
  "implementsNode": false
};
var UnitPriceMeasurementMeasuredType = {
  "name": "UnitPriceMeasurementMeasuredType",
  "kind": "ENUM"
};
var UnitPriceMeasurementMeasuredUnit = {
  "name": "UnitPriceMeasurementMeasuredUnit",
  "kind": "ENUM"
};
var UserError = {
  "name": "UserError",
  "kind": "OBJECT",
  "fieldBaseTypes": {
    "field": "String",
    "message": "String"
  },
  "implementsNode": false
};
var Types = {
  types: {}
};
Types.types["AppliedGiftCard"] = AppliedGiftCard;
Types.types["Attribute"] = Attribute;
Types.types["AutomaticDiscountApplication"] = AutomaticDiscountApplication;
Types.types["BaseCartLine"] = BaseCartLine;
Types.types["BaseCartLineConnection"] = BaseCartLineConnection;
Types.types["BaseCartLineEdge"] = BaseCartLineEdge;
Types.types["Boolean"] = Boolean$1;
Types.types["Cart"] = Cart;
Types.types["CartCreatePayload"] = CartCreatePayload;
Types.types["CartDiscountCode"] = CartDiscountCode;
Types.types["CartDiscountCodesUpdatePayload"] = CartDiscountCodesUpdatePayload;
Types.types["CartEstimatedCost"] = CartEstimatedCost;
Types.types["CartLineEstimatedCost"] = CartLineEstimatedCost;
Types.types["CartLinesAddPayload"] = CartLinesAddPayload;
Types.types["CartLinesRemovePayload"] = CartLinesRemovePayload;
Types.types["CartLinesUpdatePayload"] = CartLinesUpdatePayload;
Types.types["CartNoteUpdatePayload"] = CartNoteUpdatePayload;
Types.types["Checkout"] = Checkout;
Types.types["CheckoutAttributesUpdateV2Payload"] = CheckoutAttributesUpdateV2Payload;
Types.types["CheckoutCreatePayload"] = CheckoutCreatePayload;
Types.types["CheckoutDiscountCodeApplyV2Payload"] = CheckoutDiscountCodeApplyV2Payload;
Types.types["CheckoutDiscountCodeRemovePayload"] = CheckoutDiscountCodeRemovePayload;
Types.types["CheckoutEmailUpdateV2Payload"] = CheckoutEmailUpdateV2Payload;
Types.types["CheckoutErrorCode"] = CheckoutErrorCode;
Types.types["CheckoutGiftCardRemoveV2Payload"] = CheckoutGiftCardRemoveV2Payload;
Types.types["CheckoutGiftCardsAppendPayload"] = CheckoutGiftCardsAppendPayload;
Types.types["CheckoutLineItem"] = CheckoutLineItem;
Types.types["CheckoutLineItemConnection"] = CheckoutLineItemConnection;
Types.types["CheckoutLineItemEdge"] = CheckoutLineItemEdge;
Types.types["CheckoutLineItemsAddPayload"] = CheckoutLineItemsAddPayload;
Types.types["CheckoutLineItemsRemovePayload"] = CheckoutLineItemsRemovePayload;
Types.types["CheckoutLineItemsReplacePayload"] = CheckoutLineItemsReplacePayload;
Types.types["CheckoutLineItemsUpdatePayload"] = CheckoutLineItemsUpdatePayload;
Types.types["CheckoutShippingAddressUpdateV2Payload"] = CheckoutShippingAddressUpdateV2Payload;
Types.types["CheckoutUserError"] = CheckoutUserError;
Types.types["Collection"] = Collection;
Types.types["CollectionConnection"] = CollectionConnection;
Types.types["CollectionEdge"] = CollectionEdge;
Types.types["CountryCode"] = CountryCode;
Types.types["CurrencyCode"] = CurrencyCode;
Types.types["DateTime"] = DateTime;
Types.types["Decimal"] = Decimal;
Types.types["DiscountAllocation"] = DiscountAllocation;
Types.types["DiscountApplication"] = DiscountApplication;
Types.types["DiscountApplicationAllocationMethod"] = DiscountApplicationAllocationMethod;
Types.types["DiscountApplicationConnection"] = DiscountApplicationConnection;
Types.types["DiscountApplicationEdge"] = DiscountApplicationEdge;
Types.types["DiscountApplicationTargetSelection"] = DiscountApplicationTargetSelection;
Types.types["DiscountApplicationTargetType"] = DiscountApplicationTargetType;
Types.types["DiscountCodeApplication"] = DiscountCodeApplication;
Types.types["Domain"] = Domain;
Types.types["Float"] = Float;
Types.types["HTML"] = HTML;
Types.types["ID"] = ID;
Types.types["Image"] = Image;
Types.types["ImageConnection"] = ImageConnection;
Types.types["ImageEdge"] = ImageEdge;
Types.types["Int"] = Int;
Types.types["MailingAddress"] = MailingAddress;
Types.types["ManualDiscountApplication"] = ManualDiscountApplication;
Types.types["MediaImage"] = MediaImage;
Types.types["Merchandise"] = Merchandise;
Types.types["Metafield"] = Metafield;
Types.types["MetafieldReference"] = MetafieldReference;
Types.types["MetafieldReferenceConnection"] = MetafieldReferenceConnection;
Types.types["MetafieldReferenceEdge"] = MetafieldReferenceEdge;
Types.types["Metaobject"] = Metaobject;
Types.types["MetaobjectField"] = MetaobjectField;
Types.types["MoneyV2"] = MoneyV2;
Types.types["Mutation"] = Mutation$1;
Types.types["Node"] = Node;
Types.types["Order"] = Order;
Types.types["OrderLineItem"] = OrderLineItem;
Types.types["OrderLineItemConnection"] = OrderLineItemConnection;
Types.types["OrderLineItemEdge"] = OrderLineItemEdge;
Types.types["PageInfo"] = PageInfo;
Types.types["PaymentSettings"] = PaymentSettings;
Types.types["PricingPercentageValue"] = PricingPercentageValue;
Types.types["PricingValue"] = PricingValue;
Types.types["Product"] = Product;
Types.types["ProductConnection"] = ProductConnection;
Types.types["ProductEdge"] = ProductEdge;
Types.types["ProductOption"] = ProductOption;
Types.types["ProductVariant"] = ProductVariant;
Types.types["ProductVariantConnection"] = ProductVariantConnection;
Types.types["ProductVariantEdge"] = ProductVariantEdge;
Types.types["QueryRoot"] = QueryRoot;
Types.types["ScriptDiscountApplication"] = ScriptDiscountApplication;
Types.types["SelectedOption"] = SelectedOption;
Types.types["ShippingRate"] = ShippingRate;
Types.types["Shop"] = Shop;
Types.types["ShopPolicy"] = ShopPolicy;
Types.types["String"] = String$1;
Types.types["URL"] = URL;
Types.types["UnitPriceMeasurement"] = UnitPriceMeasurement;
Types.types["UnitPriceMeasurementMeasuredType"] = UnitPriceMeasurementMeasuredType;
Types.types["UnitPriceMeasurementMeasuredUnit"] = UnitPriceMeasurementMeasuredUnit;
Types.types["UserError"] = UserError;
Types.queryType = "QueryRoot";
Types.mutationType = "Mutation";
Types.subscriptionType = null;
function recursivelyFreezeObject(structure) {
  var _context40;
  for_each_default()(_context40 = get_own_property_names_default()(structure)).call(_context40, function (key) {
    var value = structure[key];
    if (value && (typeof value === "undefined" ? "undefined" : _typeof(value)) === 'object') {
      recursivelyFreezeObject(value);
    }
  });
  freeze_default()(structure);
  return structure;
}
var types = recursivelyFreezeObject(Types);

// GraphQL
/**
 * The JS Buy SDK Client.
 * @class
 *
 * @property {ProductResource} product The property under which product fetching methods live.
 * @property {CollectionResource} collection The property under which collection fetching methods live.
 * @property {ShopResource} shop The property under which shop fetching methods live.
 * @property {CheckoutResource} checkout The property under which shop fetching and mutating methods live.
 * @property {ImageResource} image The property under which image helper methods live.
 */

var Client = function () {
  createClass$1(Client, null, [{
    key: 'buildClient',
    /**
     * Primary entry point for building a new Client.
     */
    value: function buildClient(config, fetchFunction) {
      var newConfig = new Config(config);
      var client = new Client(newConfig, Client$2, fetchFunction);
      client.config = newConfig;
      return client;
    }

    /**
     * @constructs Client
     * @param {Config} config An instance of {@link Config} used to configure the Client.
     */
  }]);
  function Client(config) {
    var GraphQLClientClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Client$2;
    var fetchFunction = arguments[2];
    classCallCheck$1(this, Client);
    var url = 'https://' + config.domain + '/api/' + config.apiVersion + '/graphql';
    if (config.locale) {
      url += '?locale=' + config.locale;
    }
    console.log(url);
    var headers = {
      'X-SDK-Variant': 'javascript',
      'X-SDK-Version': version,
      'X-Shopify-Storefront-Access-Token': config.storefrontAccessToken
    };
    if (config.source) {
      headers['X-SDK-Variant-Source'] = config.source;
    }
    var languageHeader = config.language ? config.language : '*';
    headers['Accept-Language'] = languageHeader;
    if (fetchFunction) {
      headers['Content-Type'] = 'application/json';
      headers.Accept = 'application/json';
      this.graphQLClient = new GraphQLClientClass(types, {
        fetcher: function fetcher(graphQLParams) {
          return fetchFunction(url, {
            body: stringify_default()(graphQLParams),
            method: 'POST',
            mode: 'cors',
            headers: headers
          }).then(function (response) {
            return response.json();
          });
        }
      });
    } else {
      this.graphQLClient = new GraphQLClientClass(types, {
        url: url,
        fetcherOptions: {
          headers: headers
        }
      });
    }
    this.product = new ProductResource(this.graphQLClient);
    this.collection = new CollectionResource(this.graphQLClient);
    this.shop = new ShopResource(this.graphQLClient);
    this.checkout = new CheckoutResource(this.graphQLClient);
    this.cart = new CartResource(this.graphQLClient);
    this.image = new ImageResource(this.graphQLClient);
  }

  /**
   * Fetches the next page of models
   *
   * @example
   * client.fetchNextPage(products).then((nextProducts) => {
   *   // Do something with the products
   * });
   *
   * @param {models} [Array] The paginated set to fetch the next page of
   * @return {Promise|GraphModel[]} A promise resolving with an array of `GraphModel`s of the type provided.
   */

  createClass$1(Client, [{
    key: 'fetchNextPage',
    value: function fetchNextPage(models) {
      return this.graphQLClient.fetchNextPage(models);
    }
  }]);
  return Client;
}();
/* harmony default export */ const jsBuy_unoptimized_umd_min = (Client);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopifyBuy/shopifyBuy.js





















function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context24, _context25; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context24 = ownKeys(Object(t), !0)).call(_context24, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context25 = ownKeys(Object(t))).call(_context25, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }






















function getShopifyOptions() {
  return {
    product: {
      iframe: false,
      buttonDestination: 'modal',
      variantId: 'all',
      width: '180px',
      isButton: true,
      contents: {
        img: false,
        imgWithCarousel: false,
        title: false,
        variantTitle: false,
        options: false,
        price: false,
        description: false,
        buttonWithQuantity: false,
        quantity: false
      },
      styles: {
        buttonWrapper: {
          'margin-top': '0'
        },
        product: {
          'text-align': 'left',
          '@media (min-width: 601px)': {
            'max-width': '100%',
            'margin-left': '0',
            'margin-bottom': '50px'
          }
        },
        button: {
          // 加入购物车按钮
          width: '180px',
          height: '36px',
          'border-radius': 0,
          'background-color': '#f60758',
          'font-size': '14px',
          ':hover': {
            color: 'f60758',
            'background-color': '#fff'
          }
        },
        variantTitle: {
          'font-weight': 'normal'
        },
        title: {
          'font-weight': 'normal'
        },
        description: {
          'font-weight': 'normal'
        },
        price: {
          'font-weight': 'normal'
        },
        quantityInput: {
          'font-size': '14px',
          'padding-top': '15px',
          'padding-bottom': '15px'
        },
        compareAt: {
          'font-size': '12px',
          'font-family': 'Helvetica Neue, sans-serif',
          'font-weight': 'normal'
        }
      }
    },
    cart: {
      events: {},
      contents: {
        button: true
      },
      styles: {
        button: {
          'background-color': '#333333',
          'font-size': '14px',
          'padding-top': '15px',
          'padding-bottom': '15px',
          ':hover': {
            'background-color': '#2e2e2e'
          },
          'border-radius': '30px',
          ':focus': {
            'background-color': '#2e2e2e'
          }
        },
        footer: {
          'background-color': '#ffffff'
        }
      }
    },
    modalProduct: {
      contents: {
        img: false,
        imgWithCarousel: true,
        variantTitle: false,
        buttonWithQuantity: true,
        button: false,
        quantity: false
      },
      styles: {
        product: {
          '@media (min-width: 601px)': {
            'max-width': '100%',
            'margin-left': '0px',
            'margin-bottom': '0px'
          }
        },
        button: {
          // 弹出的产品详情面板中的ADD TO CART按钮
          'background-color': '#333333',
          'font-size': '14px',
          'padding-top': '15px',
          'padding-bottom': '15px',
          'padding-left': '50px',
          'padding-right': '50px',
          ':hover': {
            'background-color': '#2e2e2e'
          },
          'border-radius': '30px',
          ':focus': {
            'background-color': '#2e2e2e'
          }
        },
        variantTitle: {
          'font-weight': 'normal'
        },
        title: {
          'font-weight': 'normal'
        },
        description: {
          'font-weight': 'normal'
        },
        price: {
          'font-weight': 'normal'
        },
        quantityInput: {
          'font-size': '14px',
          'padding-top': '15px',
          'padding-bottom': '15px'
        },
        compareAt: {
          'font-family': 'Helvetica Neue, sans-serif',
          'font-weight': 'normal'
        }
      }
    },
    toggle: {
      // 侧边的购物车标识
      styles: {
        toggle: {
          'background-color': '#333333',
          ':hover': {
            'background-color': '#2e2e2e'
          },
          ':focus': {
            'background-color': '#2e2e2e'
          }
        },
        count: {
          'font-size': '14px',
          color: '#ffffff',
          ':hover': {
            color: '#ffffff'
          }
        },
        iconPath: {
          fill: '#ffffff'
        }
      }
    },
    productSet: {
      styles: {
        products: {
          '@media (min-width: 601px)': {
            'margin-left': '-20px'
          }
        }
      }
    }
  };
}
var JSBUYCLIENT = symbol_default()('js-buy-client');
var ShopifyBuy = /*#__PURE__*/function () {
  function ShopifyBuy(clientConfig) {
    var _this = this;
    (0,classCallCheck/* default */.Z)(this, ShopifyBuy);
    (0,defineProperty/* default */.Z)(this, "setDiscountCode", function (event) {
      if (_this.cartWatcher) {
        _this.cartWatcher();
      }
      _this.discountCode = event.detail.discountCode;
      _this.cartWatcher = dataBus/* data.$watch */.aT.$watch('cart', function (cart) {
        var _context;
        if (cart && !includes_default()(_context = cart.discountCodes).call(_context, _this.discountCode)) {
          _this.applyDiscountCodeFromToki(cart.id, _this.discountCode);
        }
      }, {
        immediate: true
      });
    });
    this.ui = null;
    this.shopifyProductsMap = create_default()(null);
    this.clientConfig = clientConfig;
    this[JSBUYCLIENT] = null;
    this.reactiveState = vue_common_prod_default().observable({
      cached: {}
    });
    this.tokiConfig = null;
    this.discountCode = null;
    this.isTokiLoaded = false;
    this.cartWatcher = null;
  }
  return (0,createClass/* default */.Z)(ShopifyBuy, [{
    key: "initToki",
    value: function () {
      var _initToki = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee(reload) {
        var _context2;
        var scriptId, eventName, config, script;
        return regenerator_default().wrap(function _callee$(_context3) {
          while (1) switch (_context3.prev = _context3.next) {
            case 0:
              if (!(!dataBus/* data.isUs */.aT.isUs || !reload && this.isTokiLoaded)) {
                _context3.next = 2;
                break;
              }
              return _context3.abrupt("return");
            case 2:
              scriptId = 'toki-modules';
              eventName = "toki:referral-discount-code:fetched";
              document.removeEventListener(eventName, this.setDiscountCode);
              document.addEventListener(eventName, this.setDiscountCode);
              if (document.getElementById(scriptId)) {
                document.body.removeChild(document.getElementById(scriptId));
              }
              _context3.next = 9;
              return axios_default().get("https://api.buildwithtoki.com/integrations/shopify/config", {
                headers: {
                  "x-shopify-shop-domain": index_config/* shopifyConfig */.Yd[window.__INITIAL_STATE__.country].domain,
                  "X-Shopify-Storefront-Access-Token": index_config/* shopifyConfig */.Yd[window.__INITIAL_STATE__.country].storefrontAccessToken
                }
              }).then(function (res) {
                return res.data;
              });
            case 9:
              config = _context3.sent;
              this.tokiConfig = config;
              script = document.createElement('script');
              script.src = concat_default()(_context2 = "".concat(config.snippets.url, "/modules.js?v=")).call(_context2, config.snippets.version);
              script.setAttribute('data-config', stringify_default()(config));
              script.setAttribute('type', 'text/javascript');
              script.setAttribute('id', scriptId);
              document.body.appendChild(script);
              this.isTokiLoaded = true;
            case 18:
            case "end":
              return _context3.stop();
          }
        }, _callee, this);
      }));
      function initToki(_x) {
        return _initToki.apply(this, arguments);
      }
      return initToki;
    }()
  }, {
    key: "getProductNew",
    value: function getProductNew(id) {
      var _this2 = this;
      var productId = "gid://shopify/Product/".concat(this.parseId(id));
      if (this.reactiveState.cached[productId]) {
        return promise_default().resolve(this.reactiveState.cached[productId]);
      }
      return this.jsBuyClient.product.fetch(productId).then(function (product) {
        // Do something with the products
        var productData = _this2.normalizeGraphModel4product(product);
        vue_common_prod_default().set(_this2.reactiveState.cached, productId, productData);
        return productData;
      });
    }
  }, {
    key: "getProductByHandle",
    value: function getProductByHandle(handle) {
      var _this3 = this;
      if (this.reactiveState.cached[handle]) {
        return promise_default().resolve(this.reactiveState.cached[handle]);
      }
      return this.jsBuyClient.product.fetchByHandle(handle).then(function (product) {
        // Do something with the products
        var productData = _this3.normalizeGraphModel4product(product);
        vue_common_prod_default().set(_this3.reactiveState.cached, handle, productData);
        return productData;
      });
    }
  }, {
    key: "getCollectionNew",
    value: function getCollectionNew(id, idOnly) {
      var _this4 = this;
      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
      var collectionId = "gid://shopify/Collection/".concat(id);
      if (!idOnly, this.reactiveState.cached[collectionId]) {
        return promise_default().resolve(this.reactiveState.cached[collectionId]);
      }
      return this.jsBuyClient.collection[idOnly ? 'fetchWithAllProductIds' : 'fetchWithProducts'](collectionId, options).then(function (collection) {
        var _context4;
        var data = _objectSpread({}, collection);
        if (idOnly) {
          return data;
        }
        data.products = map_default()(_context4 = data.products).call(_context4, function (product) {
          return _this4.normalizeGraphModel4product(product);
        });
        vue_common_prod_default().set(_this4.reactiveState.cached, collectionId, data);
        return data;
      });
    }
  }, {
    key: "parseCartData",
    value: function parseCartData(data) {
      var _context5;
      var result = _objectSpread({}, data);
      result.lines = map_default()(_context5 = result.lines).call(_context5, function (item) {
        var _context6, _context7;
        return _objectSpread(_objectSpread({}, item), {}, {
          attributes: reduce_default()(_context6 = (0,toConsumableArray/* default */.Z)(item.attributes)).call(_context6, function (obj, item) {
            obj[item.key] = item.value;
            return obj;
          }, create_default()(null)),
          engravable: some_default()(_context7 = item.attributes).call(_context7, function (attr) {
            return attr.key === 'Your Engraving';
          })
        });
      });
      return result;
    }
  }, {
    key: "createCart",
    value: function createCart() {
      var _context8,
        _this5 = this;
      // 优化商店配置，规避和sywm 的重复配置
      var countryCode = '';
      var country = window.__INITIAL_STATE__.country;
      if (includes_default()(_context8 = ['es', 'de', 'eu']).call(_context8, country)) {
        countryCode = (country === 'eu' ? 'ie' : country).toUpperCase();
      }
      localStorage.renewed = true;
      return this.jsBuyClient.cart.create(countryCode ? {
        buyerIdentity: {
          countryCode: countryCode
        }
      } : {
        discountCodes: this.discountCode ? [this.discountCode] : []
      }).then(function (cart) {
        localStorage.cartId = cart.id;
        return _this5.parseCartData(cart);
      });
    }
  }, {
    key: "getCart",
    value: function () {
      var _getCart = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2() {
        var _context9;
        var cart, country, _context10, _context11;
        return regenerator_default().wrap(function _callee2$(_context12) {
          while (1) switch (_context12.prev = _context12.next) {
            case 0:
              this.initToki();
              country = window.__INITIAL_STATE__.country; // 旧实现未区分market，需要重新创建购物车，过几个月后可以删除
              if (!(includes_default()(_context9 = ['es', 'de', 'eu']).call(_context9, country) && !localStorage.renewed)) {
                _context12.next = 4;
                break;
              }
              return _context12.abrupt("return", this.createCart());
            case 4:
              if (!localStorage.cartId) {
                _context12.next = 10;
                break;
              }
              _context12.next = 7;
              return this.jsBuyClient.cart.fetch(localStorage.cartId);
            case 7:
              cart = _context12.sent;
              if (!(cart && (!includes_default()(_context10 = ['es', 'de', 'eu']).call(_context10, country) || includes_default()(_context11 = cart.checkoutUrl).call(_context11, this.clientConfig[country].domain)))) {
                _context12.next = 10;
                break;
              }
              return _context12.abrupt("return", this.parseCartData(cart));
            case 10:
              return _context12.abrupt("return", this.createCart());
            case 11:
            case "end":
              return _context12.stop();
          }
        }, _callee2, this);
      }));
      function getCart() {
        return _getCart.apply(this, arguments);
      }
      return getCart;
    }()
  }, {
    key: "applyDiscountCodeFromToki",
    value: function applyDiscountCodeFromToki(cartId, discountCode) {
      var _this6 = this;
      return this.jsBuyClient.cart.updateDiscountCodes(cartId, [discountCode]).then(function (cart) {
        return _this6.parseCartData(cart);
      });
    }
  }, {
    key: "addToCart",
    value: function addToCart(cartId, lines) {
      var _this7 = this;
      return this.jsBuyClient.cart.addLines(cartId, lines).then(function (cart) {
        return _this7.parseCartData(cart);
      });
    }
  }, {
    key: "removeFromCart",
    value: function removeFromCart(cartId, lines) {
      var _this8 = this;
      return this.jsBuyClient.cart.removeLines(cartId, lines).then(function (cart) {
        return _this8.parseCartData(cart);
      });
    }
  }, {
    key: "updateCart",
    value: function updateCart(cartId, lines) {
      var _this9 = this;
      return this.jsBuyClient.cart.updateLines(cartId, lines).then(function (cart) {
        return _this9.parseCartData(cart);
      });
    }
  }, {
    key: "updateCartNote",
    value: function updateCartNote(cartId, note) {
      var _this10 = this;
      return this.jsBuyClient.cart.updateNote(cartId, note).then(function (cart) {
        return _this10.parseCartData(cart);
      });
    }
  }, {
    key: "jsBuyClient",
    get: function get() {
      return this[JSBUYCLIENT] || this.initJsShopifyBuy();
    },
    set: function set(val) {
      this[JSBUYCLIENT] = val;
    }
  }, {
    key: "initJsShopifyBuy",
    value: function initJsShopifyBuy() {
      var newClient = jsBuy_unoptimized_umd_min.buildClient({
        domain: index_config/* shopifyConfig */.Yd[window.__INITIAL_STATE__.country].domain,
        storefrontAccessToken: index_config/* shopifyConfig */.Yd[window.__INITIAL_STATE__.country].storefrontAccessToken,
        language: window.__INITIAL_STATE__.locale
      });
      this.jsBuyClient = newClient;
      return this.jsBuyClient;
    }
  }, {
    key: "initShopifyUi",
    value: function initShopifyUi() {
      var _this11 = this;
      if (this.ui) return promise_default().resolve(this.ui);

      // 规避重复初始化
      var currentRegion = window.__INITIAL_STATE__.country;
      var matchedClientConfig = this.clientConfig[currentRegion];
      if (matchedClientConfig) {
        return window.System["import"]('//static.coros.com/static/common/js/buy-button-storefront.min.js').then(function () {
          var client = window.ShopifyBuy.buildClient(matchedClientConfig);
          return window.ShopifyBuy.UI.onReady(client).then(function (ui) {
            _this11.ui = ui;
          });
        });
      } else {
        return promise_default().reject();
      }
    }
  }, {
    key: "getProduct",
    value: function getProduct(id) {
      if (this.ui) {
        var _context13;
        return find_default()(_context13 = this.ui.components.product).call(_context13, function (item) {
          return item.id === id;
        });
      }
    }

    /**
     * 转换shopify 完整id 为普通id 值
     * @param {string} id Shopify 完整id
     * @returns string
     */
  }, {
    key: "normalizeId",
    value: function normalizeId(id) {
      return id.split('/').pop();
    }
  }, {
    key: "parseId",
    value: function parseId(str) {
      var _context14;
      if (/gid:\/\/shopify/.test(str)) return str.split('/').pop();
      var currentRegion = window.__INITIAL_STATE__.country;
      return reduce_default()(_context14 = [currentRegion, 'products', str]).call(_context14, function (obj, key) {
        return obj === null || obj === void 0 ? void 0 : obj[key];
      }, this.clientConfig) || str;
    }
  }, {
    key: "initProduct",
    value: function initProduct(id) {
      var moneyFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : index_config/* shopifyConfig */.Yd[window.__INITIAL_STATE__.country].moneyFormat;
      if (this.getProduct(this.parseId(id))) return;
      var options = getShopifyOptions();
      this.ui.createComponent('product', {
        id: this.parseId(id),
        moneyFormat: moneyFormat,
        options: options
      });
    }
  }, {
    key: "destroyProduct",
    value: function destroyProduct(id) {
      this.ui.destroyComponent('product', this.parseId(id));
    }
  }, {
    key: "openProduct",
    value: function openProduct(id) {
      var productComponent = this.getProduct(this.parseId(id));
      productComponent === null || productComponent === void 0 || productComponent.openModal();
    }

    /**
     * 获取指定产品数据
     * @param {String} ids 产品id，多个id用逗号隔开
     * @param {String} fields 产品字段，多个字段用逗号隔开，参考 https://shopify.dev/api/storefront/2022-01/objects/Product#fields
     * @returns {Promises}
     */
  }, {
    key: "getData4products",
    value: function getData4products(ids) {
      var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['id', 'title', 'variants'].join(',');
      var params = {
        fields: fields,
        limit: 100
      };
      if (ids) params.ids = ids;
      return axios_default().get('/shopify/products', {
        params: params
      }).then(function (res) {
        return res.data.data.products;
      });
    }
  }, {
    key: "getImages",
    value: function getImages(ids) {
      return this.jsBuyClient.image.fetchMultiple(ids).then(function (images) {
        return map_default()(images).call(images, function (item) {
          return _objectSpread({
            id: item.id
          }, item.image);
        });
      });
    }
  }]);
}();
ShopifyBuy.prototype.canSubscribeBIS = function (product, variant) {
  var _context15, _find, _context16;
  if (includes_default()(_context15 = product.tags).call(_context15, 'swym-disabled')) {
    return false;
  }
  if (((_find = find_default()(_context16 = variant.metafields || []).call(_context16, function (item) {
    return item.key === 'is_disabled';
  })) === null || _find === void 0 ? void 0 : _find.value) === '1') {
    return false;
  }
  if (variant.available) {
    return false;
  }
  return true;
};
ShopifyBuy.prototype.isOpenBox = function (product) {
  var _product$metafields;
  return !!((_product$metafields = product.metafields) !== null && _product$metafields !== void 0 && (_product$metafields = find_default()(_product$metafields).call(_product$metafields, function (_ref) {
    var key = _ref.key;
    return key === 'open_box_list';
  })) !== null && _product$metafields !== void 0 && _product$metafields.value);
};
ShopifyBuy.prototype.getConfiguredProductLink = function (product) {
  var _product$metafields2;
  var detailLinkMeta = (_product$metafields2 = product.metafields) === null || _product$metafields2 === void 0 ? void 0 : find_default()(_product$metafields2).call(_product$metafields2, function (item) {
    return item.key === 'details_page';
  });
  if (detailLinkMeta !== null && detailLinkMeta !== void 0 && detailLinkMeta.value) {
    return detailLinkMeta === null || detailLinkMeta === void 0 ? void 0 : detailLinkMeta.value;
  }
};
ShopifyBuy.prototype.isAvailable = function () {
  if (true) {
    var _context17;
    return includes_default()(_context17 = ['us', 'uk', 'ca']).call(_context17, window.__INITIAL_STATE__.country);
  }
  return false;
};
ShopifyBuy.prototype.getProductDetails = function (id) {
  return axios_default().get("/shopify/product/".concat(this.parseId(id))).then(function (res) {
    return res.data.data;
  });
};
ShopifyBuy.prototype.getCollectionDetails = function (id) {
  return axios_default().get("/shopify/collection/".concat(this.parseId(id), "/products")).then(function (res) {
    return res.data.data;
  });
};
ShopifyBuy.prototype.NormalizeMetaFields = function (arr) {
  return filter_default()(arr).call(arr, function (item) {
    return !!item;
  });
};
ShopifyBuy.prototype.normalizeGraphModel4product = function (src) {
  var _context18,
    _this12 = this,
    _context19,
    _productData$compitab;
  var productData = _objectSpread({}, src);
  productData.metafields = this.NormalizeMetaFields(productData.metafields);
  productData.variants = map_default()(_context18 = src.variants).call(_context18, function (item) {
    var variantData = _objectSpread({}, item);
    variantData.metafields = _this12.NormalizeMetaFields(variantData.metafields);
    variantData.price = Number(variantData.price.amount).toFixed(2);
    variantData.canSubscribeBIS = shopifyBuy.canSubscribeBIS(productData, variantData);
    return variantData;
  });
  productData.options = map_default()(_context19 = productData.options || []).call(_context19, function (option) {
    var _context20;
    var optionData = _objectSpread({}, option);
    optionData.values = map_default()(_context20 = values_default()(option)).call(_context20, function (val) {
      return val.valueOf();
    });
    return optionData;
  });
  if ((_productData$compitab = productData.compitableProducts) !== null && _productData$compitab !== void 0 && _productData$compitab.references) {
    var _context21;
    productData.compitableProducts = map_default()(_context21 = (0,toConsumableArray/* default */.Z)(productData.compitableProducts.references)).call(_context21, function (item) {
      return item.name.value;
    });
  }
  return productData;
};

/**
 * 解析指定选项的价格范围：最低价和最高价
 * @param {Array} variants 产品选项
 * @returns {Array<Number>}
 */
ShopifyBuy.prototype.parsePriceRange = function (variants) {
  var _context22, _context23;
  var allAvailablePrice = sort_default()(_context22 = (0,toConsumableArray/* default */.Z)(new (set_default())(filter_default()(_context23 = map_default()(variants).call(variants, function (variant) {
    return Number(variant.inventory_quantity > 0 ? variant.price : 0);
  })).call(_context23, function (num) {
    return num > 0;
  })))).call(_context22, function (a, b) {
    return a - b;
  });
  if (allAvailablePrice.length > 2) return [allAvailablePrice[0], allAvailablePrice[allAvailablePrice.length - 1]];
  return allAvailablePrice;
};
var shopifyBuy = new ShopifyBuy(index_config/* shopifyConfig */.Yd);
/* harmony default export */ const ShopifyBuy_shopifyBuy = (shopifyBuy);

/***/ }),

/***/ 96284:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "G": () => (/* binding */ getWatches),
/* harmony export */   "k": () => (/* binding */ findPrice)
/* harmony export */ });
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6203);
/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34284);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_find__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86981);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_find__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_find__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92381);
/* harmony import */ var _babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91829);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(88946);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(86526);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var lodash_memoize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88306);
/* harmony import */ var lodash_memoize__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_memoize__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _component_layout_index_config_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32064);
/* harmony import */ var _products_constant__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(76633);
/* harmony import */ var _assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(67872);











var findProductByName = function findProductByName(name) {
  return _babel_runtime_corejs3_core_js_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(_products_constant__WEBPACK_IMPORTED_MODULE_9__/* .products */ .RB).call(_products_constant__WEBPACK_IMPORTED_MODULE_9__/* .products */ .RB, function (item) {
    return item.name === name;
  });
};
var findPrice = function findPrice(name) {
  var _globalThis$__INITIAL, _context;
  var country = ((_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default()) === null || (_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default()) === void 0 || (_globalThis$__INITIAL = (_babel_runtime_corejs3_core_js_global_this__WEBPACK_IMPORTED_MODULE_3___default().__INITIAL_STATE__)) === null || _globalThis$__INITIAL === void 0 ? void 0 : _globalThis$__INITIAL.country) || 'us';
  var isSuffixUnit = _babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_4___default()(_context = ['de', 'fr', 'es', 'eu']).call(_context, country);
  var matchedPrice = findProductByName(name).prices[country] || [];
  if (matchedPrice.length === 0) return '';
  var matchedUnit = _component_layout_index_config_index_js__WEBPACK_IMPORTED_MODULE_8__/* .currencyUnit */ .CA[country];
  return _babel_runtime_corejs3_core_js_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(matchedPrice).call(matchedPrice, function (str) {
    // const standardInfos = [matchedUnit, Number(str)];
    var standardInfos = [matchedUnit, str];
    if (isSuffixUnit) {
      _babel_runtime_corejs3_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_6___default()(standardInfos).call(standardInfos);
    }
    return standardInfos.join(isSuffixUnit ? ' ' : '');
  }).join(' / ');
};
var getWatches = lodash_memoize__WEBPACK_IMPORTED_MODULE_7___default()(function (country) {
  var _getAvailableColors, _findProductByName;
  var pace3Colors = findProductByName('pace3').colors;
  return [{
    img: (0,_products_constant__WEBPACK_IMPORTED_MODULE_9__/* .getProductImg4color */ .YE)(_babel_runtime_corejs3_core_js_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(pace3Colors).call(pace3Colors, function (item) {
      return item.name === _products_constant__WEBPACK_IMPORTED_MODULE_9__/* .PACE3_WITH_WHITE_SILICONE_BAND */ .mJ;
    }) || pace3Colors[0]),
    price: findPrice('pace3'),
    link: 'pace3',
    shopifyId: 'pace3',
    imgAltI18n: 'pace3.homeProductPageDesc',
    titleI18n: 'pace3.productNameShort',
    descI18n: 'pace3.homeProductPageDesc'
  },
  // {
  //   img: assetsRequire('@assets/images/products/vertix2_02.png'),
  //   imgAlt: 'COROS VERTIX 2, for adventurers who go to the extreme',
  //   i18n: 'home.vertix2',
  //   price: findPrice('vertix2'),
  //   link: 'vertix2',
  //   shopifyId: 'vertix2',
  // },
  {
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__/* .assetsRequire */ .y)('@assets/images/vertix2s/new-watchcolor2.png'),
    imgAlt: 'COROS VERTIX 2S, for adventurers who go to the extreme',
    titleI18n: 'menu.vertix2s',
    descI18n: 'home.vertix2.desc',
    price: findPrice('vertix2s'),
    link: 'vertix2s',
    shopifyId: 'vertix2s'
  }, {
    img: (0,_products_constant__WEBPACK_IMPORTED_MODULE_9__/* .getProductImg4color */ .YE)((_getAvailableColors = (0,_products_constant__WEBPACK_IMPORTED_MODULE_9__/* .getAvailableColors */ ._H)((_findProductByName = findProductByName('apex2pro')) === null || _findProductByName === void 0 ? void 0 : _findProductByName.colors, country)) === null || _getAvailableColors === void 0 ? void 0 : _getAvailableColors[0]),
    imgAlt: 'COROS APEX2, for endurance athletes in rugged environments',
    i18n: 'home.apex2',
    price: [findPrice('apex2'), findPrice('apex2pro')],
    link: 'apex2',
    shopifyId: 'apex2',
    countryCustom: {
      jp: {
        img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__/* .assetsRequire */ .y)('@assets/images/products/apex2pro_02.png')
      },
      cn: {
        img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__/* .assetsRequire */ .y)('@assets/images/products/apex2pro_01.png')
      }
    }
  }, {
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__/* .assetsRequire */ .y)('@assets/images/b2d3d3ffd84bd6cdb89852b61b89dd64.png'),
    imgAltI18n: 'product.duraHead',
    titleI18n: 'menu.dura',
    descI18n: 'product.duraDesc',
    price: findPrice('dura'),
    link: 'dura',
    shopifyId: 'dura',
    countryCustom: {
      cn: {
        // 中文显示的是 products 页面 head 文案
        descI18n: 'product.duraHead'
      }
    }
  }, {
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__/* .assetsRequire */ .y)('@assets/images/hrm-20230002/b14d8320a7bb44dececd95bc4b3c717c.png'),
    imgAltI18n: 'hrm.homeWatchDesc',
    titleI18n: 'hrm.homeWatch',
    descI18n: 'hrm.homeWatchDesc',
    price: findPrice('hrm'),
    link: 'heart-rate-monitor',
    shopifyId: 'hrm'
    // region: {
    //   cn: false,
    // },
  }, {
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_10__/* .assetsRequire */ .y)('@assets/images/products/pod2.png'),
    imgAlt: 'COROS POD 2, advanced running metrics to optimize your performance',
    i18n: 'home.pod2',
    price: findPrice('pod2'),
    link: 'pod2',
    shopifyId: 'pod2'
  }];
});

/***/ }),

/***/ 38402:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "aT": () => (/* binding */ data),
/* harmony export */   "fE": () => (/* binding */ allSpecs),
/* harmony export */   "pr": () => (/* binding */ pics),
/* harmony export */   "qN": () => (/* binding */ accessibilityData)
/* harmony export */ });
/* harmony import */ var _babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67552);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(67872);


var allSpecs = {
  "default": [{
    label: 'specs.model',
    value: 'PACE 2'
  }, {
    label: 'compdispsize',
    value: 'specs.pace2.displaySizeVal'
  }, {
    label: 'compdisptype',
    value: 'specs.pace2.displayType'
  }, {
    label: 'compscreenmaterial',
    value: 'specs.pace2.displayMaterialVal'
  }, {
    label: 'compbezelmaterial',
    value: 'specs.pace2.bezelVal'
  }, {
    label: 'compcovermaterial',
    value: 'specs.pace2.coverVal'
  }, {
    label: 'compstrapmaterial',
    value: 'specs.pace2.strapVal'
  }, {
    label: 'compquickreleasefitband',
    value: '20mm'
  }, {
    label: 'compphysicalsize',
    value: '42 × 42 × 11.7mm'
  }, {
    label: 'compweightwithsiliconeband',
    value: '35g-36g'
  }, {
    label: 'compweightwithnylonband',
    value: '29g-30g'
  }, {
    label: 'compphoneconnection',
    value: 'Bluetooth'
  }, {
    label: 'compaccessoryconnection',
    value: 'ANT+/Bluetooth'
  }, {
    label: 'specs.navigation',
    value: 'GPS/QZSS, GLONASS, BeiDou'
  }, {
    label: 'specs.sensors',
    value: 'specs.pace2.sensorsVal'
  }, {
    label: 'compwaterresistance',
    value: 'specs.pace2.waterResistanceVal'
  }, {
    label: 'compworkingtemperature',
    value: 'specs.pace2.workingTemp'
  }, {
    label: 'compstoragetemperature',
    value: 'specs.pace2.storageTempVal'
  }, {
    label: 'compchargingtime',
    value: 'specs.pace2.chargingVal'
  }, {
    label: 'specs.batteryLife',
    value: 'specs.pace2.batteryLifeVal'
  }, {
    label: 'specs.supportedWorkouts',
    value: 'specs.pace2.workoutsVal'
  }],
  cn: [{
    label: 'specs.model',
    value: 'specs.pace2.modeVal'
  }, {
    label: 'specs.positioning',
    value: 'specs.pace2.positioningVal'
  }, {
    label: 'compdispsize',
    value: 'specs.pace2.compdispsizeVal'
  }, {
    label: 'compphysicalsize',
    value: 'specs.pace2.compphysicalsizeVal'
  }, {
    label: 'compquickreleasefitband',
    value: 'specs.pace2.compquickreleasefitbandVal'
  }, {
    label: 'specs.resolution',
    value: 'specs.pace2.resolutionVal'
  }, {
    label: 'compscreenmaterial',
    value: 'specs.pace2.compscreenmaterialVal'
  }, {
    label: 'specs.navigation',
    value: 'specs.pace2.navigationVal'
  }, {
    label: 'specs.dataStorage',
    value: 'specs.pace2.dataStorageVal'
  }, {
    label: 'specs.normalBatteryLife',
    value: 'specs.pace2.normalBatteryLifeVal'
  }, {
    label: 'specs.gpsModelLife',
    value: 'specs.pace2.gpsModelLifeVal'
  }, {
    label: 'compwaterresistance',
    value: 'specs.pace2.compwaterresistanceVal'
  }, {
    label: 'specs.weightWithSilicone',
    value: 'specs.pace2.weightWithSiliconeVal'
  }, {
    label: 'specs.weightWithNylon',
    value: 'specs.pace2.weightWithNylonVal'
  }, {
    label: 'specs.operation',
    value: 'specs.pace2.operationVal'
  }, {
    label: 'specs.heartRate',
    value: 'specs.pace2.heartRateVal'
  }, {
    label: 'specs.bloodOxygen',
    value: 'specs.pace2.bloodOxygenVal'
  }, {
    label: 'specs.compass',
    value: 'specs.pace2.compassVal'
  }, {
    label: 'specs.trackNavigation',
    value: 'specs.pace2.trackNavigationVal'
  }, {
    label: 'specs.nightMode',
    value: 'specs.pace2.nightModeVal'
  }, {
    label: 'specs.flipDisplay',
    value: 'specs.pace2.flipDisplayVal'
  }, {
    label: 'specs.supportedWorkouts',
    value: 'specs.pace2.supportedWorkoutsVal'
  }]
};
var pics = {
  share: {
    en: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_1__/* .assetsRequire */ .y)('@assets/images/pace3-2308/share.jpg')
    // es: assetsRequire('@assets/images/b20-chamonix/share-es.png'),
    // fr: assetsRequire('@assets/images/b20-chamonix/share-fr.png'),
  },
  bannerMobile: {
    en: '@assets/images/1555138ac9be47edd792af582bca6e98.jpg',
    es: '@assets/images/9485a5e8f2e3eb1f5466f70b5f70dc59.jpg',
    fr: '@assets/images/81eafe60ccaa2761425b9901cfaaff00.jpg',
    cn: '@assets/images/d3e283334e9a7e86f139ba4a093d5bfe.png',
    jp: '@assets/images/b54bc9d4e2e436d29edbcfb7db53ee03.png'
  },
  banner: {
    en: '@assets/images/1b216cd084597b4c80ff442bcf7bd0ba.jpg',
    es: '@assets/images/75dcf79578d112030518e369c6417d1f.jpg',
    fr: '@assets/images/70642c84ca553a00f38b927e460f58a1.jpg',
    cn: '@assets/images/1966fd7b55b1c1d410fbd6b508a46d4a.png',
    jp: '@assets/images/974970bdcb3b44d8034a32e5faf1996b.png'
  },
  watchPics: {
    en: [
    //
    '@assets/images/2e2460bd3023a280da185a85e44282c8.png', '@assets/images/8e85fa45d9a4f13cd5642bbe2ff33aae.png', '@assets/images/9b5a0aac1ba92df6f92a1b7d6fb21712.png']
  }
};
var data = {
  numbers: {
    en: [{
      num: '38',
      units: 'HRS',
      desc: 'Continuous GPS Use'
    }, {
      num: '15',
      units: 'DAYS',
      desc: 'Continuous Daily Use'
    }],
    fr: [{
      num: '38',
      units: 'heures',
      desc: 'en mode full GPS'
    }, {
      num: '15',
      units: 'jours',
      desc: "d'utilisation quotidienne"
    }],
    es: [{
      num: '38',
      units: 'Horas',
      desc: 'GPS completo continuado'
    }, {
      num: '15',
      units: 'Días',
      desc: 'Uso diario'
    }],
    jp: [{
      num: '38',
      units: '時間',
      desc: 'フルGPS連続稼働'
    }, {
      num: '15',
      units: '日間',
      desc: '日常使用'
    }],
    de: [{
      num: '38',
      units: 'Stunden',
      desc: 'kontinuierliche GPS-Nutzung'
    }, {
      num: '15',
      units: 'Tage',
      desc: 'tägliche Nutzung'
    }],
    cn: [{
      num: '38',
      units: '小时',
      desc: '标准 GPS 续航'
    }, {
      num: '15',
      units: '天',
      desc: '日常续航'
    }]
  },
  // uk 的英语文案
  enGB: {
    en: {
      'pace3.goTheDistanceText': 'Designed to increase battery capacity, PACE 3 maximises time on your wrist, and minimises time spent charging.',
      'pace3.followYourOwnPathText': 'Go beyond your neighbourhood run in confidence with a suite of powerful tools including Turn-by-Turn navigation.',
      'pace3.nextGenerationGpsText': 'A redesigned satellite chipset with optional Dual-Frequency\nwill keep your GPS data accurate, even in high-rise cities\nlike London and Manchester.',
      'pace3.corosCoachesText': 'Real coaches. Real advice. Get personalised guidance\nfrom our team of experts.',
      'pace3.mobile_goTheDistanceText': 'Designed to increase battery capacity, PACE 3 maximises time on your wrist, and minimises time spent charging.',
      'pace3.mobile_followYourOwnPathText': 'Go beyond your neighbourhood run in confidence with a suite of powerful tools including Turn-by-Turn navigation.',
      'pace3.mobile_nextGenerationGpsText': 'A redesigned satellite chipset with optional Dual-\nFrequency will keep your GPS data accurate, even\nin high-rise cities like London and Manchester.',
      'pace3.mobile_accurateActivityModesText': 'Run, bike, swim, strength, and snow. PACE 3 provides an extensive range of activity modes that are optimised for accurate measurement.',
      'pace3.mobile_corosCoachesText': 'Real coaches. Real advice. Get personalised guidance from our team of experts.'
    }
  }
};
var pcAlt = {
  'banner-0828-pc.jpg': 'An image of a male and a female runner running outside with COROS PACE 3 watch and a close-up image of a white COROS PACE 3 watch on the activity start page.',
  // 'line_bg.jpg': '*',
  'pace3_img@2x.png': 'A close-up image of a white COROS PACE 3 watch with white silicone band. ',
  'battery_img@2x.jpg': 'An image of a male and a female runner running on a trail both wearing a COROS PACE 3 watch.',
  'comfort_sun_img.jpg': 'A scenic view of mountains and sky with great sunlight.',
  'comfort_moon_img.jpg': 'A scenic view of mountains at nighttime with stars in the sky.',
  // 'navigation_bg.jpg': '*',
  // 'navigation-watch.png': '*',
  // 'navigation-watch-light.png': '*',
  'gps_img.jpg': 'An exploded view of a white COROS PACE 3 watch and its internal hardware. ',
  'watch-band-1.png': 'A front view image of a COROS PACE 3 white nylon band.',
  'wrist-watch.png': 'A front view image of a white COROS PACE 3 watch with white silicone band.',
  'watch-band-2.png': 'A front view image of a COROS PACE 3 black nylon band.',
  'watch-band-3.png': 'A front view image of a COROS PACE 3 black silicone band.',
  'watch-band-4.png': 'A front view image of a COROS PACE 3 red nylon band.',
  'silicone_icon.png': 'An icon for COROS PACE 3 silicone band.',
  'nylon_icon.png': 'An icon for COROS PACE 3 nylon band.',
  'sctivities_line_bg@2x.png': 'An image of a white COROS PACE 3 watch with white silicone band showcasing activity modes. ',
  'hrv_img.jpg': 'An image of the optical heart rate sensor emitting green lights from a black COROS PACE 3 watch with black silicone band.',
  'ppg_img.png': 'An exploded view of the optical heart rate monitor from COROS PACE 3.',
  'led_icon.png': 'An icon for LEDs.',
  'protective_icon.png': 'An icon for protective glass.',
  'photodetectors_icon.png': 'An icon for photodetectors.',
  'oximeter_icon@2x.png': 'An icon for optical pulse oximeter.',
  'sleep_img-0829.jpg': 'A close-up image of the alarm showing 5am on a black COROS PACE 3 watch. ',
  'sleep-phone_img.jpg': 'A screen shot of the sleep tracking analysis page on the COROS app. ',
  'sleep_icon.png': 'An icon for the sleep tracking.',
  'hr_icon.png': 'An icon for the resting heart rate.',
  'red_pace3_img@2x.jpg': 'A close-up image of a runner selecting Track Run mode on a COROS PACE 3 Track Edition watch.',
  'reflect_icon.png': 'An icon for transflective display.',
  'night_icon.png': 'An icon for night mode.',
  'dimension_icon.png': 'An icon for 1.2 inch display.',
  'touch_icon@2x.png': 'An icon for touchscreen.',
  'sweat_img-0828.jpg': 'An image of a white COROS PACE 3 watch in white silicone band and a black COROS PACE 3 watch in black nylon band in the water.',
  'more_line_img@2x.png': 'Track lines on white background.',
  'leftmore_img.png': 'A close-up image of a white COROS PACE 3 watch in white silicone band facing right.',
  'rightmore_img.png': 'A close-up image of COROS PACE 3 white nylon band.',
  'workouts_img.jpg': 'A female runner running on a treadmill wearing a COROS PACE 3 watch.',
  'th-2.png': 'A male coach viewing training stats from COROS Training Hub on his Mac.',
  'th_img.jpg': 'A screenshot of the dashboard of COROS Training Hub.',
  'icon@2x0902p.png': 'A list of logos and icons from Strava, Nike Run Club, Apple Health, Health Connect, Text, Phone Call, Find My Phone, Go Pro and Insta360.',
  'box_img0828.jpg': 'An image showcasing the COROS PACE 3 packaging and its content. '
};
var mAlt = {
  'banner-0828-m.jpg': pcAlt['banner-0828-pc.jpg'],
  'mobile-line_bg.jpg': pcAlt['line_bg.jpg'],
  'mobile-pace3_img.png': pcAlt['pace3_img@2x.png'],
  'battery_img-0828-new.jpg': pcAlt['battery_img@2x.jpg'],
  'comfort-new.png': 'A scenic view of mountains',
  // "mobile-navigation_bg.jpg": "*",
  // "navigation-watch.png": "*",
  // "navigation-watch-light.png": "*",
  'mobile-gps_img.png': pcAlt['gps_img.jpg'],
  'watch-band-m-1-new.png': pcAlt['watch-band-3.png'],
  'wrist-watch.png': pcAlt['wrist-watch.png'],
  'watch-band-m-2.png': pcAlt['watch-band-4.png'],
  'mobile-silicone_icon.png': pcAlt['silicone_icon.png'],
  'mobile-nylon_icon.png': pcAlt['nylon_icon.png'],
  'mobile-sctivities_line_bg2.png': pcAlt['sctivities_line_bg@2x.png'],
  'mobile-hrv_img.jpg': pcAlt['hrv_img.jpg'],
  'mobile-ppg_img.png': pcAlt['ppg_img.png'],
  'mobile-led_icon.png': pcAlt['led_icon.png'],
  'mobile-photodetectors_icon.png': pcAlt['photodetectors_icon.png'],
  'mobile-protective_icon.png': pcAlt['protective_icon.png'],
  'oximeter_icon@2x.png': pcAlt['oximeter_icon@2x.png'],
  'mobile-sleep_img-2.jpg': pcAlt['sleep_img-0829.jpg'],
  'mobile-sleep_icon.png': pcAlt['sleep_icon.png'],
  'mobile-hr_icon.png': pcAlt['hr_icon.png'],
  'mobile-red_pace3_img-2.jpg': pcAlt['red_pace3_img@2x.jpg'],
  'mobile-reflect_icon.png': pcAlt['reflect_icon.png'],
  'mobile-dimension_icon.png': pcAlt['dimension_icon.png'],
  'mobile-night_icon.png': pcAlt['night_icon.png'],
  'touch_icon@2x.png': pcAlt['touch_icon@2x.png'],
  'sweat_img-0828-m.jpg': pcAlt['sweat_img-0828.jpg'],
  'mobile-more_line_img.png': pcAlt['more_line_img@2x.png'],
  'mobile-more_img2.png': pcAlt['more_img2.png'],
  'mobile-workouts_img.jpg': pcAlt['workouts_img.jpg'],
  'th-2-m.png': pcAlt['th-2.png'],
  'mobile-th_img.jpg': pcAlt['th_img.jpg'],
  'icon@2x0902.png': pcAlt['icon@2x0902p.png'],
  'box_img-0828-m.jpg': pcAlt['box_img0828.jpg']
};
var accessibilityData = _babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0___default()({}, pcAlt, mAlt);

/***/ }),

/***/ 31794:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "aT": () => (/* binding */ data),
/* harmony export */   "pr": () => (/* binding */ pics),
/* harmony export */   "qN": () => (/* binding */ accessibilityData)
/* harmony export */ });
/* harmony import */ var _babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67552);
/* harmony import */ var _babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(67872);


var pics = {
  share: {
    en: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_1__/* .assetsRequire */ .y)('@assets/images/pace3-ek-231115/share-en.jpg'),
    fr: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_1__/* .assetsRequire */ .y)('@assets/images/pace3-ek-231115/share-fr.jpg'),
    es: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_1__/* .assetsRequire */ .y)('@assets/images/pace3-ek-231115/share-es.jpg')
  },
  banner: {
    en: 'banner_img@2x.jpg'
    // fr: 'banner-detail-pc-Fr.jpg',
    // es: 'banner-detail-pc-Es.jpg',
  },
  banner_mobile: {
    en: 'banner-detail-mobile-En.jpg'
    // fr: 'banner-detail-mobile-Fr.jpg',
    // es: 'banner-detail-mobile-Es.jpg',
  },
  battery_icon: {
    en: 'battery_en_icon@2x-2.png',
    fr: 'battery_fr_icon@2x-2.png',
    es: 'battery_es_icon@2x-2.png',
    de: 'battery_de_icon@2x-2.png',
    cn: 'battery_cn_icon@2x-(1).png',
    jp: 'battery_jp_icon@2x-2.png'
  },
  numerical_icon: {
    en: 'numerical_en_icon@2x-(1).png',
    fr: 'numerical_fr_icon@2x-(1).png',
    es: 'numerical_es_icon@2x-(1).png',
    de: 'numerical_de_icon@2x-(1).png',
    cn: 'numerical_cn_icon@2x-(1).png',
    jp: 'numerical_jp_icon@2x-(1).png'
  },
  iphone1: {
    cn: 'form-phone_cn_img@2x.png',
    en: 'form-phone_en_img@2x.png',
    fr: 'form-phone_fr_img@2x.png',
    es: 'form-phone_es_img@2x.png',
    de: 'form-phone_de_img@2x.png',
    jp: 'form-phone_jp_img@2x.png'
  },
  iphone2: {
    cn: 'temperaturephone_cn_img@2x.png',
    en: 'temperaturephone_en_img@2x.png',
    fr: 'temperaturephone_fr_img@2x.png',
    es: 'temperaturephone_es_img@2x.png',
    de: 'temperaturephone_de_img@2x.png',
    jp: 'temperaturephone_jp_img@2x.png'
  },
  "package": {
    en: 'package-en.jpg'
    // cn: 'package-cn.jpg',
  },
  package_mobile: {
    en: 'package-en-mobile.jpg'
    // cn: 'package-cn-mobile.jpg',
  }
};
var data = {
  // pace3 手动替换 uk 的英语文案，配合 this.tt() 使用
  // enGB: {
  //   en: {
  //     'pace3.goTheDistanceText': 'Designed to increase battery capacity, PACE 3 maximises time on your wrist, and minimises time spent charging.',
  //   },
  // },
};

// 图片 alt
var pcAlt = {
  'banner_img@2x.jpg': 'Product banner showcasing the COROS POD 2, comfortably worn on the foot during outdoor run.',
  'pod_img@2x.png': 'Front view of the COROS POD 2 with the sensor lighting in green.',
  'GPSLimit1-2.gif': 'A video capturing a runner in motion on a track, with the reflection showing the diminishing pace.',
  'GPSLimit2.gif': 'A video capturing a runner in motion on a treadmill, with the reflection showing the inconsistant pace.',
  'GPSLimit3-2.gif': 'A video capturing a runner in motion on a trail in the woods, with the reflection showing the inconsistant pace.',
  'form-phone_en_img@2x.png': 'A screenshot of the running form insights from the COROS app.',
  'runform_img@2x.jpg': 'A close-up view of the COROS POD 2 being clipped on the back of the waistband.',
  'temperaturephone_en_img@2x.png': 'A screenshot of the temperature graph from a running activity on the COROS app.',
  'outside_img@2x.jpg': 'An image of a runner in motion on a track.',
  'battery_en_icon@2x-2.png': 'An image listing the battery life of COROS POD 2, which lasts 25 hours on a single charge or 150 hours with the battery charging dock.',
  'outdoorrunning_img@2x.jpg': 'An image of a male runner training with the COROS POD 2 on his shoe and a close-up image of his shoe.',
  'numerical_en_icon@2x.png': 'An image listing the durability specs of COROS POD 2, which has a weight of only 5.6 g and a water rating of 3 ATM.',
  'lightweight_img@2x.jpg': 'An image of a runner holding the COROS POD 2 in his hand and a male runner training on a track with the COROS POD 2 on his shoe.',
  'pair_img@2x-(1).jpg': 'A close-up image showing a runner checking the connection status between the COROS POD 2 and COROS PACE 3 watch.',
  'clip_img@2x.png': 'A runner clipping the COROS POD 2 on his shoe.',
  'go_img@2x.jpg': 'A runner in motion on the street wearing the COROS POD 2 on his foot.',
  'pod2box_img@2x.jpg': 'An image showing that the COROS POD 2 package includes the sensor, charging cable, charging dock, wristband clip, shoe clips and a compact case.',
  'faq_img@2x.jpg': 'An image showing a runner in motion wearing COROS POD 2 on his foot.'
};
var mAlt = {
  'm-banner_img@2x.jpg': 'Product banner showcasing the COROS POD 2, comfortably worn on the foot during outdoor run.',
  'm-pod_img@2x.png': 'Front view of the COROS POD 2 with the sensor lighting in green.',
  'm-GPSLimit1-2.gif': 'A video capturing a runner in motion on a track, with the reflection showing the diminishing pace.',
  'm-GPSLimit2.gif': 'A video capturing a runner in motion on a treadmill, with the reflection showing the inconsistant pace.',
  'm-GPSLimit3-2.gif': 'A video capturing a runner in motion on a trail in the woods, with the reflection showing the inconsistant pace.',
  'm-form-phone_en_img@2x.png': 'A screenshot of the running form insights from the COROS app.',
  'm-runform_img@2x.jpg': 'A close-up view of the COROS POD 2 being clipped on the back of the waistband.',
  'm-temperaturephone_en_img@2x.png': 'A screenshot of the temperature graph from a running activity on the COROS app.',
  'm-outside_img@2x.jpg': 'An image of a runner in motion on a track.',
  'm-battery_en_icon@2x-2.png': 'An image listing the battery life of COROS POD 2, which lasts 25 hours on a single charge or 150 hours with the battery charging dock.',
  'm-outdoorrunning_img@2x.jpg': 'An image of a male runner training with the COROS POD 2 on his shoe and a close-up image of his shoe.',
  'm-numerical_en_icon@2x.png': 'An image listing the durability specs of COROS POD 2, which has a weight of only 5.6 g and a water rating of 3 ATM.',
  'm-lightweight_img@2x.jpg': 'An image of a runner holding the COROS POD 2 in his hand and a male runner training on a track with the COROS POD 2 on his shoe.',
  'm-pair_img@2x-(1).jpg': 'A close-up image showing a runner checking the connection status between the COROS POD 2 and COROS PACE 3 watch.',
  'm-clip_img@2x.png': 'A runner clipping the COROS POD 2 on his shoe.',
  'm-go_img@2x.jpg': 'A runner in motion on the street wearing the COROS POD 2 on his foot.',
  'm-pod2box_img@2x.jpg': 'An image showing that the COROS POD 2 package includes the sensor, charging cable, charging dock, wristband clip, shoe clips and a compact case.',
  'm-faq_img@2x.jpg': 'An image showing a runner in motion wearing COROS POD 2 on his foot.'
};
var accessibilityData = _babel_runtime_corejs3_core_js_object_assign__WEBPACK_IMPORTED_MODULE_0___default()({}, pcAlt, mAlt);

/***/ }),

/***/ 10140:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ mixins)
});

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.cause.js
var es_error_cause = __webpack_require__(21057);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.to-string.js
var es_error_to_string = __webpack_require__(68932);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.date.to-string.js
var es_date_to_string = __webpack_require__(30024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js
var es_object_to_string = __webpack_require__(60228);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js
var es_regexp_to_string = __webpack_require__(12826);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/from.js
var from = __webpack_require__(10349);
var from_default = /*#__PURE__*/__webpack_require__.n(from);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/symbol.js
var symbol = __webpack_require__(52472);
var symbol_default = /*#__PURE__*/__webpack_require__.n(symbol);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js
var get_iterator_method = __webpack_require__(19389);
var get_iterator_method_default = /*#__PURE__*/__webpack_require__.n(get_iterator_method);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js
var is_array = __webpack_require__(98235);
var is_array_default = /*#__PURE__*/__webpack_require__.n(is_array);
// EXTERNAL MODULE: ./app/web/component/layout/index/index.js + 315 modules
var index = __webpack_require__(71591);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewHeader/index.vue + 17 modules
var NewHeader = __webpack_require__(28912);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewFooter/index.vue + 4 modules
var NewFooter = __webpack_require__(50380);
// EXTERNAL MODULE: ./app/web/projects/www/pod2-2024/data.js
var pod2_2024_data = __webpack_require__(31794);
// EXTERNAL MODULE: ./app/web/projects/www/pace3/data.js
var pace3_data = __webpack_require__(38402);
// EXTERNAL MODULE: ./app/web/projects/www/components/Stamped/index.vue + 4 modules
var Stamped = __webpack_require__(10286);
// EXTERNAL MODULE: ./app/web/projects/www/components/DynamicComparePanel/constants.js
var constants = __webpack_require__(97675);
// EXTERNAL MODULE: ./app/web/projects/www/components/DynamicComparePanel/index.vue + 4 modules
var DynamicComparePanel = __webpack_require__(25840);
// EXTERNAL MODULE: ./app/web/projects/www/comparewatch/CompareLink/index.vue + 3 modules
var CompareLink = __webpack_require__(32615);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/index.vue + 33 modules
var ShopPanel = __webpack_require__(73959);
// EXTERNAL MODULE: ./app/web/projects/www/components/Specs/index.vue + 3 modules
var Specs = __webpack_require__(93483);
// EXTERNAL MODULE: ./app/web/projects/www/components/WebpImg/index.vue + 2 modules
var WebpImg = __webpack_require__(76517);
// EXTERNAL MODULE: ./app/web/projects/www/components/ScrollWatcher/index.vue + 2 modules
var ScrollWatcher = __webpack_require__(96503);
// EXTERNAL MODULE: ./app/web/projects/www/components/ProductMenu/index.vue + 14 modules
var ProductMenu = __webpack_require__(1718);
// EXTERNAL MODULE: ./app/web/projects/www/components/AutoPlayOrPauseVideoInView/index.vue + 2 modules
var AutoPlayOrPauseVideoInView = __webpack_require__(754);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/SvgLine.vue?vue&type=template&id=ac7c2488&scoped=true
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("svg", {
    staticClass: "data-svg",
    attrs: {
      width: "1918",
      height: "57",
      viewBox: "0 0 1918 57"
    }
  }, [_c("defs", [_c("linearGradient", {
    attrs: {
      id: "a",
      x1: "100%",
      x2: "0%",
      y1: "100%",
      y2: "100%"
    }
  }, [_c("stop", {
    attrs: {
      "stop-color": "#B6CADC",
      "stop-opacity": "0",
      offset: "0%"
    }
  }), _vm._v(" "), _c("stop", {
    attrs: {
      "stop-color": "#9AB2C9",
      offset: "37.093%"
    }
  }), _vm._v(" "), _c("stop", {
    attrs: {
      "stop-color": "#7F99B6",
      "stop-opacity": ".633",
      offset: "60.189%"
    }
  }), _vm._v(" "), _c("stop", {
    attrs: {
      "stop-color": "#7F99B6",
      "stop-opacity": "0",
      offset: "100%"
    }
  })], 1)], 1), _vm._v(" "), _c("path", {
    staticClass: "hrm-svg-path",
    attrs: {
      "fill-rule": "evenodd",
      "stroke-width": "2",
      fill: "none",
      stroke: "url(#a)",
      d: "M-1 3643.738h703.88l6.656-1.982h7.983l8.97-6.791 10.943 4.386 16.596-1.348 9.955 1.348 17.043-1.348 20.122-9.667 12.417-3.03 4.69-5.78 8.097 2.816 16.016 1.345 10.211-5.673 3.23 3.009 3.847-1.497 10.12 5.78h8.818l21.72-9.596 6.11 2.304 14.497-9.728 9.695-3.648 4.773-3.324h4.27l6.54-5.834h4.633l6.403-5.48 15.653 11.314 8.569-2.072 8.758 5.396h11.978l12.093 14.888 4.861 2.816h8.099l6.028 4.182 9.81-2.837 9.444 2.837 14.375 1.812 7.654-3.03 6.45 3.03 13.224-10.322 7.264 1.512 5.768-1.512 7.389 3.009 7.91-4.154 5.086 4.154 7.363-1.497 7.993-5.5 13.623 9.66 3.365 6.865 10.812-4.027 6.293 4.027 3.669 4.414 9.897-3.2h4.594l5.024 5.002 7.051-5.002 3.84 5.002 10.985-5.002 2.193 3.2 4.43 1.248 6.471-.692 5.069 5.19 3.237-1.36 6.235 4.387H1919",
      transform: "translate(-1 -3588)"
    }
  })]);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/SvgLine.vue?vue&type=template&id=ac7c2488&scoped=true

;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/SvgLine.vue?vue&type=script&lang=js
/* harmony default export */ const SvgLinevue_type_script_lang_js = ({});
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/SvgLine.vue?vue&type=script&lang=js
 /* harmony default export */ const components_SvgLinevue_type_script_lang_js = (SvgLinevue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/SvgLine.vue?vue&type=style&index=0&id=ac7c2488&prod&lang=scss&scoped=true
var SvgLinevue_type_style_index_0_id_ac7c2488_prod_lang_scss_scoped_true = __webpack_require__(75460);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/SvgLine.vue?vue&type=style&index=0&id=ac7c2488&prod&lang=scss&scoped=true

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/SvgLine.vue



;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_SvgLinevue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  "ac7c2488",
  null
  
)

/* harmony default export */ const SvgLine = (component.exports);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/WebpImgWrap.vue?vue&type=template&id=59cdd940
var WebpImgWrapvue_type_template_id_59cdd940_render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    "class": _vm.containerCls,
    attrs: {
      "data-type": "webp-img-wrap",
      "data-key": _vm.src
    }
  }, [_c("WebpImg", {
    "class": _vm.imgCls2.imgCls,
    attrs: {
      pictureCls: _vm.imgCls2.sizeCls,
      lazyload: _vm.lazyload,
      src: _vm.assetsRequire("@assets/images/pod2-2024/".concat(_vm.src)),
      alt: _vm.altComputed
    }
  })], 1);
};
var WebpImgWrapvue_type_template_id_59cdd940_staticRenderFns = [];
WebpImgWrapvue_type_template_id_59cdd940_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/WebpImgWrap.vue?vue&type=template&id=59cdd940

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/WebpImgWrap.vue?vue&type=script&lang=js




// import { assetsRequire } from '@assets/js/assetsRequire.js';


var regex = /^(_192w|_192h|_75w|_75h)/;
/* harmony default export */ const WebpImgWrapvue_type_script_lang_js = ({
  components: {
    WebpImg: WebpImg/* default */.Z
  },
  props: {
    src: {
      type: String,
      "default": ''
    },
    alt: {
      type: String,
      "default": ''
    },
    lazyload: {
      type: Boolean,
      "default": true
    },
    // class to img tag
    imgCls: {
      type: [String, Array],
      "default": ''
    },
    // class to container tag
    containerCls: {
      type: [String, Array],
      "default": ''
    }
  },
  computed: {
    imgCls2: function imgCls2() {
      var containerCls = this.containerCls,
        imgCls = this.imgCls;
      // containerCls 上面的宽高类复制到 img 和 picture 上
      if (typeof containerCls === 'string') {
        containerCls = containerCls.split(' ');
      }
      if (typeof imgCls === 'string') {
        imgCls = imgCls.split(' ');
      }
      var sizeCls = [];
      for_each_default()(containerCls).call(containerCls, function (cls) {
        if (regex.test(cls)) {
          imgCls.unshift(cls);
          sizeCls.unshift(cls);
        }
      });
      return {
        imgCls: imgCls,
        sizeCls: sizeCls
      };
    },
    altComputed: function altComputed() {
      return this.alt || pod2_2024_data/* accessibilityData */.qN[this.src] || pod2_2024_data/* accessibilityData */.qN[this.src.replace(/\.(png|jpg|jpeg)/, '')] || this.src;
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/WebpImgWrap.vue?vue&type=script&lang=js
 /* harmony default export */ const components_WebpImgWrapvue_type_script_lang_js = (WebpImgWrapvue_type_script_lang_js); 
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/WebpImgWrap.vue





/* normalize component */
;
var WebpImgWrap_component = (0,componentNormalizer/* default */.Z)(
  components_WebpImgWrapvue_type_script_lang_js,
  WebpImgWrapvue_type_template_id_59cdd940_render,
  WebpImgWrapvue_type_template_id_59cdd940_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const WebpImgWrap = (WebpImgWrap_component.exports);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/AnimationButton.vue?vue&type=template&id=00809efa&scoped=true

var AnimationButtonvue_type_template_id_00809efa_scoped_true_render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("a", {
    "class": ["animation-btn", "animation-btn-".concat(_vm.$i18n.locale), {
      "fixed-width": _vm.fixedWidth
    }],
    attrs: {
      lang: _vm.$i18n.locale,
      href: _vm.link
    },
    on: {
      click: function click($event) {
        return _vm.$emit("click");
      }
    }
  }, [_c("span", [_vm._v(_vm._s(_vm.text || _vm.$t(_vm.btnI18nKey)))])]);
};
var AnimationButtonvue_type_template_id_00809efa_scoped_true_staticRenderFns = [];
AnimationButtonvue_type_template_id_00809efa_scoped_true_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/AnimationButton.vue?vue&type=template&id=00809efa&scoped=true

;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/AnimationButton.vue?vue&type=script&lang=js
/* harmony default export */ const AnimationButtonvue_type_script_lang_js = ({
  props: {
    text: {
      type: String,
      "default": ''
    },
    btnI18nKey: {
      type: String,
      "default": ''
    },
    link: {
      type: String,
      "default": ''
    },
    fixedWidth: {
      type: Boolean,
      "default": false
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/AnimationButton.vue?vue&type=script&lang=js
 /* harmony default export */ const components_AnimationButtonvue_type_script_lang_js = (AnimationButtonvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/components/AnimationButton.vue?vue&type=style&index=0&id=00809efa&prod&scoped=true&lang=scss
var AnimationButtonvue_type_style_index_0_id_00809efa_prod_scoped_true_lang_scss = __webpack_require__(63050);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/AnimationButton.vue?vue&type=style&index=0&id=00809efa&prod&scoped=true&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/components/AnimationButton.vue



;


/* normalize component */

var AnimationButton_component = (0,componentNormalizer/* default */.Z)(
  components_AnimationButtonvue_type_script_lang_js,
  AnimationButtonvue_type_template_id_00809efa_scoped_true_render,
  AnimationButtonvue_type_template_id_00809efa_scoped_true_staticRenderFns,
  false,
  null,
  "00809efa",
  null
  
)

/* harmony default export */ const AnimationButton = (AnimationButton_component.exports);
// EXTERNAL MODULE: ./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue + 5 modules
var FilterDifferentDialog = __webpack_require__(46705);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/mixins.js









function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof (symbol_default()) && get_iterator_method_default()(r) || r["@@iterator"]; if (!t) { if (is_array_default()(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { var _context4; if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = slice_default()(_context4 = {}.toString.call(r)).call(_context4, 8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? from_default()(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }




















// import AppSlide from '@www/components/AppSlide';
// import ShopifyBuy from '@www/components/ShopifyBuy';







/* harmony default export */ const mixins = ({
  components: {
    //
    Layout: index/* default */.Z,
    NewHeader: NewHeader/* default */.Z,
    NewFooter: NewFooter/* default */.Z,
    // Swiper,
    // SwiperSlide,
    // ProductPreview,
    Stamped: Stamped/* default */.Z,
    FilterDifferentDialog: FilterDifferentDialog/* default */.Z,
    DynamicComparePanel: DynamicComparePanel/* default */.Z,
    CompareLink: CompareLink/* default */.Z,
    ShopPanel: ShopPanel/* default */.Z,
    WebpImg: WebpImg/* default */.Z,
    // ShopifyBuy,
    // AppSlide,
    Specs: Specs/* default */.Z,
    ScrollWatcher: ScrollWatcher/* default */.Z,
    ProductMenu: ProductMenu/* default */.Z,
    SvgLine: SvgLine,
    AutoPlayOrPauseVideoInView: AutoPlayOrPauseVideoInView/* default */.ZP,
    WebpImgWrap: WebpImgWrap,
    AnimationButton: AnimationButton
  },
  data: function data() {
    var locale = this.$i18n.locale;
    var localePics = {};
    for (var key in pod2_2024_data/* pics */.pr) {
      if (!localePics[key]) {
        localePics[key] = pod2_2024_data/* pics */.pr[key][locale] || pod2_2024_data/* pics */.pr[key]['en'];
      }
    }
    var localeData = {};
    for (var _key in pod2_2024_data/* data */.aT) {
      if (!localeData[_key]) localeData[_key] = pod2_2024_data/* data */.aT[_key][locale] || pod2_2024_data/* data */.aT[_key]['en'];
    }

    // console.log(`🔔 localePics`, localePics);
    // console.log(`🔔 localeData`, localeData);
    return {
      // loading: false,
      pics: pod2_2024_data/* pics */.pr,
      localePics: localePics,
      localeData: localeData,
      visible4compareTable: false,
      visible4specs: false,
      visible4productMenu: false,
      visible4mobileSubMenus: false,
      visible4differentDialog: false,
      universalGroupedSpecs4pod2: constants/* universalGroupedSpecs4pod2 */.LL,
      groupedSpecsInCn4pod2: constants/* groupedSpecsInCn4pod2 */.eX,
      allSpecs: pace3_data/* allSpecs */.fE,
      shopLink: 'https://detail.tmall.com/item.htm?id=750101832835&skuId=5345711815625'
    };
  },
  computed: {
    openGraphMetas: function openGraphMetas() {
      return [{
        name: 'og:image',
        content: (0,assetsRequire/* assetsRequire */.y)('@assets/images/pod2/pc/banner/seo_banner.jpg')
      }];
    },
    helpLink: function helpLink() {
      return this.$root.country === 'jp' ? 'https://faq.coros.com/help/d/POD%202/faq/63d4ff84248d6696be61572e?locale=ja-JP' : 'https://support.coros.com/hc/en-us/articles/10351744085012-COROS-POD-2-FAQ-s';
    },
    debug: function debug() {
      // return true;
      return false;
    },
    hasShopify: function hasShopify() {
      var _context;
      // return false;
      return includes_default()(_context = ['us', 'ca', 'uk', 'jp', 'fr', 'es', 'de', 'eu', 'au']).call(_context, this.$root.country);
    },
    hasComparison: function hasComparison() {
      var _context2;
      return includes_default()(_context2 = ['cn', 'us', 'ca', 'uk', 'cn', 'jp', 'fr', 'es', 'de', 'eu', 'au']).call(_context2, this.$root.country);
    },
    showComments: function showComments() {
      return this.$dataBus.isUs;
    },
    isCn: function isCn() {
      return this.$root.country === 'cn';
    },
    isUs: function isUs() {
      return this.$root.country === 'us';
    },
    isForeignLang: function isForeignLang() {
      return this.$i18n.locale !== 'cn' && this.$i18n.locale !== 'jp';
    },
    pace3Link: function pace3Link() {
      return "https://".concat(this.$root.country, ".coros.com/pace3");
    }
  },
  mounted: function mounted() {
    if (false) {}

    // 这些图片pin的时候遮盖
    // setTimeout(() => {
    //   const imgs = Array.from(this.$el.querySelectorAll('img.chamonix-preloadimg')).map((el) => el.src);
    //   // console.log(`🔔 preloadimg`, imgs);
    //   if (imgs.length) preloadImg(imgs);
    // }, 100);
  },
  methods: {
    openSpecs: function openSpecs() {
      this.visible4specs = true;
    },
    handleVisible4productMenu: function handleVisible4productMenu() {
      if (false) {}
      this.visible4productMenu = scrollY > 0;
    },
    preloadImg: function preloadImg(list) {
      var _iterator = _createForOfIteratorHelper(list),
        _step;
      try {
        for (_iterator.s(); !(_step = _iterator.n()).done;) {
          var src = _step.value;
          var img = new Image();
          img.src = src;
        }
      } catch (err) {
        _iterator.e(err);
      } finally {
        _iterator.f();
      }
    },
    replaceLinkInText: function replaceLinkInText(text, linkText, link) {
      var _context3;
      if (!linkText || !link) return text;
      text = this.$t("pod2_2024.".concat(text));
      linkText = this.$t("pod2_2024.".concat(linkText));
      link = this.$t("pod2_2024.".concat(link));
      return text.replace(linkText, concat_default()(_context3 = "<a target='_blank' class='links' href='".concat(link, "'>")).call(_context3, linkText, "</a>"));
    },
    // enGB 特殊
    tt: function tt(key) {
      if (this.$dataBus.country === 'uk' && this.localeData.enGB[key]) {
        return this.localeData.enGB[key];
      }
      return this.$t(key);
    }
  }
});

/***/ }),

/***/ 76633:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "RB": () => (/* binding */ products),
/* harmony export */   "YE": () => (/* binding */ getProductImg4color),
/* harmony export */   "_H": () => (/* binding */ getAvailableColors),
/* harmony export */   "mJ": () => (/* binding */ PACE3_WITH_WHITE_SILICONE_BAND)
/* harmony export */ });
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(34284);
/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73324);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91829);
/* harmony import */ var _babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(67872);




var PACE3_WITH_WHITE_SILICONE_BAND = 'pace2_01';
var products = [{
  name: 'pace3',
  shopifyId: 'pace3',
  colors: [
  // valencia
  {
    name: 'pace3_valencia',
    colors: ['#04B2E9', '#f5f5f4'],
    desc: 'Blue Steel with Silicone Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/e8fcbe9560e804a915b80401cc1ba256.png')
  },
  // 2024-10-17 新增该型号
  {
    name: 'pace3_ink',
    colors: ['#434343', '#B03A36'],
    desc: 'Ink with Nylon Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/562e02f52bb2815fd38168cbf0034057.png')
  },
  // bluegreen
  {
    name: 'pace3_bluegreen',
    colors: ['#74C7C6', '#74C7C6'],
    desc: 'Blue Steel with Silicone Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/29832dbf603b431f00e752fbcd18d649.png')
  },
  // 紫色
  // {
  //   name: 'pace3_violet',
  //   colors: ['#9A77C6', '#9A77C6'],
  //   desc: 'Blue Steel with Silicone Band',
  //   img: assetsRequire('@assets/images/26abde045f45f0faf8796ba0629b0018.png'),
  // },
  // 柠檬
  {
    name: 'pace3_lemon',
    colors: ['#F7ECBB', '#F7ECBB'],
    desc: 'Blue Steel with Silicone Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/09f2ec7210e59efcd1ccbb44dbae1c4b.png')
  },
  // ek
  {
    name: 'pace3_ek',
    colors: ['#383838', 'rgb(201,197,183)'],
    desc: 'Blue Steel with Silicone Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/pace3-ek-231115/COROS-PACE-3-EK-product-cover.png')
  }, {
    name: 'pace2_05',
    colors: ['#424242', '#f5f5f4'],
    desc: 'Blue Steel with Silicone Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/pace3-2308/pace3-product-preview-1.png')
  },
  // 2024-10-17 隐藏该型号
  // {
  //   name: 'pace2_02',
  //   desc: 'Dark Navy with Silicone Band',
  //   colors: ['#424242', '#828288'],
  //   img: assetsRequire('@assets/images/pace3-2308/pace3-product-preview-3.png'),
  // },
  {
    name: PACE3_WITH_WHITE_SILICONE_BAND,
    desc: 'White with Silicone Band',
    colors: ['#424242', '#e4e3e2'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/pace3-2308/pace3-product-preview-2.png')
  }, {
    name: 'pace2_03',
    desc: 'White with Nylon Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/pace3-2308/pace3-product-preview-4.png'),
    colors: ['#424242', '#69686c']
  }
  // 颜色数量太多导致移动版掉下去，暂时隐藏这个色
  // {
  //   name: 'pace2_04',
  //   desc: 'Dark Navy with Nylon Band',
  //   img: assetsRequire('@assets/images/pace3-2308/pace3-product-preview-5.png'),
  //   colors: ['#fb4958', '#ff465b'],
  // },
  ],
  prices: {
    jp: ['33,000', '35,750'],
    us: ['229', '249'],
    uk: ['219', '229'],
    ca: ['329', '359'],
    de: ['249', '269'],
    fr: ['249', '269'],
    es: ['249', '269'],
    eu: ['249', '269'],
    au: ['399', '429']
  },
  path: 'pace3',
  infoNameI18nKey: 'pace3.productNameShort',
  infoHeaderI18nKey: 'pace3.watchInfoHeader',
  infoDescI18nKey: 'pace3.homeProductPageDesc',
  showInAllWatches: true,
  countryCustom: {
    cn: {
      defaultColorName: 'pace3_bluegreen'
    }
  },
  availableInReferral: true
}, {
  name: 'vertix2',
  shopifyId: 'vertix2',
  colors: [{
    name: 'vertix2_01',
    desc: 'Lava',
    colors: ['#c9c9c9', '#d6673c']
  }, {
    name: 'vertix2_02',
    desc: 'Obsidian',
    colors: ['#c9c9c9', '#444']
  }],
  prices: {
    jp: ["89,100"],
    us: ["599"],
    uk: ["519"],
    ca: ["949"],
    de: ["599"],
    fr: ["599"],
    es: ["599"],
    eu: ["599"],
    au: ["899"]
  },
  path: 'vertix2',
  showInAllWatches: false,
  availableInReferral: true
}, {
  infoNameI18nKey: 'menu.vertix2s',
  infoHeaderI18nKey: 'products.vertix2.header',
  infoDescI18nKey: 'products.vertix2.desc',
  name: 'vertix2s',
  shopifyId: 'vertix2s',
  // TODO: todo_vertix2s 配置 colors desc 和图片
  colors: [{
    name: 'vertix2s_01',
    desc: 'Lava',
    colors: ['#A1A1A1', '#B8B8B8'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/vertix2s/new-watchcolor3.png')
  }, {
    name: 'vertix2s_02',
    desc: 'Obsidian',
    colors: ['#474747', '#676767'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/vertix2s/new-watchcolor1.png')
  }, {
    name: 'vertix2s_03',
    desc: 'Obsidian',
    colors: ['#303B71', '#3A437C'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/vertix2s/new-watchcolor2.png')
  }],
  prices: {
    jp: ["93,500"],
    us: ["699"],
    uk: ["599"],
    ca: ["949"],
    de: ["699"],
    fr: ["699"],
    es: ["699"],
    eu: ["699"],
    au: ["1149"]
  },
  path: 'vertix2s',
  showInAllWatches: true,
  availableInReferral: true
}, {
  name: 'apex2pro',
  shopifyAlias: 'apex2',
  shopifyId: 'apex2',
  colors: [
  // {
  //   name: 'gobi',
  //   desc: 'Grey',
  //   colors: ['#1E1E1E', '#A99E8D'],
  //   img: assetsRequire('@assets/images/7ca1dde8d03fbb09dc20395afd9ffc38.png'),
  //   unavailableCountries: ['jp'],
  // },
  {
    name: 'apex2pro_01',
    desc: 'Grey',
    colors: ['rgb(219,219,219)', 'rgb(219,219,219)']
  }, {
    name: 'apex2pro_02',
    desc: 'Black',
    colors: ['rgb(58,61,59)', 'rgb(83,83,83)']
  }, {
    name: 'apex2pro_03',
    desc: 'Green',
    colors: ['rgb(58,61,59)', 'rgb(107,124,79)']
  }],
  prices: {
    jp: ['68,200'],
    us: ['449'],
    ca: ['599'],
    uk: ['449'],
    de: ['499'],
    fr: ['499'],
    es: ['499'],
    eu: ['499'],
    au: ['769']
  },
  path: 'apex2',
  showInAllWatches: true,
  countryCustom: {
    jp: {
      defaultColorName: 'apex2pro_02'
    },
    cn: {
      defaultColorName: 'apex2pro_03'
    }
  },
  availableInReferral: true
}, {
  name: 'apex2',
  shopifyAlias: 'apex2',
  shopifyId: 'apex2',
  colors: [{
    name: 'apex2_04',
    desc: 'Coral',
    colors: ['rgb(219,219,219)', 'rgb(205,162,172)'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/af5d341b4d78d859ebe3c7cc55786591.png'),
    unavailableCountries: ['jp']
  }, {
    name: 'apex2_01',
    desc: 'Coral',
    colors: ['rgb(251,198,139)', 'rgb(201,87,68)']
  }, {
    name: 'apex2_02',
    desc: 'Grey',
    colors: ['rgb(219,219,219)', 'rgb(219,219,219)']
  }, {
    name: 'apex2_03',
    desc: 'Black',
    colors: ['rgb(58,61,59)', 'rgb(83,83,83)']
  }],
  prices: {
    jp: ['49,610'],
    us: ['349'],
    ca: ['499'],
    uk: ['349'],
    de: ['399'],
    fr: ['399'],
    es: ['399'],
    eu: ['399'],
    au: ['599']
  },
  path: 'apex2',
  showInAllWatches: true,
  countryCustom: {
    cn: {
      defaultColorName: 'apex2_02'
    }
  },
  availableInReferral: true
}, {
  name: 'pace2',
  shopifyId: 'pace2',
  colors: [{
    name: 'pace2_05',
    colors: ['#7b828a', '#909294'],
    desc: 'Blue Steel with Silicone Band',
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/526c7c08ecd8973ff574f496da743c98.png')
  }, {
    name: 'pace2_01',
    desc: 'White with Silicone Band',
    colors: ['#c9c9c9', '#f3f3f3']
  }, {
    name: 'pace2_02',
    desc: 'Dark Navy with Silicone Band',
    colors: ['#000', '#000']
  }, {
    name: 'pace2_03',
    desc: 'White with Nylon Band',
    colors: ['#f3f3f3', {
      fill: '#efefef',
      stroke: '#979797',
      'stroke-width': 5
    }]
  }, {
    name: 'pace2_04',
    desc: 'Dark Navy with Nylon Band',
    colors: ['#0f0d3d', {
      fill: '#0f0d3d',
      stroke: '#979797',
      'stroke-width': 5
    }]
  }],
  prices: {
    jp: ['29,480'],
    us: ['179'],
    uk: ['179'],
    ca: ['279', '349'],
    de: ['199', '279'],
    fr: ['199'],
    es: ['199'],
    eu: ['199'],
    au: ['329']
  },
  path: 'pace2',
  showInAllWatches: false
}, {
  name: 'apex_42',
  shopifyAlias: 'apex',
  specificPrice: 'min',
  shopifyId: 'apex',
  size: '42',
  region: false,
  colors: [{
    name: 'apex_42_02',
    colors: ['#f3f3f3', {
      fill: '#eeeeef',
      stroke: '#dedede',
      'stroke-width': '5'
    }]
  }, {
    name: 'apex_42_03',
    colors: ['#f4ba49', '#6a236e']
  }, {
    name: 'apex_42_04',
    colors: ['#474747', '#000']
  }],
  prices: {
    jp: ['299'],
    us: ['299'],
    uk: ['269'],
    ca: ['419'],
    de: ['299'],
    fr: ['299'],
    es: ['299'],
    au: ['499']
  },
  path: 'apex',
  showInAllWatches: false
}, {
  name: 'apex_46',
  shopifyAlias: 'apex',
  specificPrice: 'max',
  shopifyId: 'apex',
  size: '46',
  region: false,
  colors: [{
    name: 'apex_46_01',
    colors: ['#474747', '#000']
  }, {
    name: 'apex_46_02',
    colors: ['#f2f3f3', {
      fill: '#edeeed',
      stroke: '#dedede',
      'stroke-width': '5'
    }]
  }],
  prices: {
    jp: ['349'],
    us: ['349'],
    uk: ['299'],
    ca: ['479'],
    de: ['349'],
    fr: ['349'],
    es: ['349'],
    au: ['599']
  },
  path: 'apex',
  showInAllWatches: false
}, {
  name: 'apex_pro',
  shopifyAlias: 'apexPro',
  shopifyId: 'apexPro',
  region: false,
  colors: [{
    name: 'apex_pro_01',
    colors: ['#071049', '#071049']
  }, {
    name: 'apex_pro_03',
    colors: ['#bff254', '#cacaca']
  }, {
    name: 'apex_pro_02',
    colors: ['#e8e8e8', {
      fill: '#fff',
      stroke: '#e8e8e8',
      'stroke-width': '5'
    }]
  }],
  prices: {
    jp: ['399'],
    us: ['399'],
    uk: ['349'],
    ca: ['549'],
    de: ['399'],
    fr: ['399'],
    es: ['399'],
    eu: ['399'],
    au: ['699']
  },
  path: 'apex-pro',
  showInAllWatches: false
}, {
  name: 'vertix',
  shopifyId: 'vertix',
  colors: [{
    name: 'vertix_01',
    colors: ['#071049', '#071049']
  }, {
    name: 'vertix_04',
    colors: ['#c9c9c9', '#d6683c']
  }, {
    name: 'vertix_03',
    colors: ['#745443', '#32392b']
  }, {
    name: 'vertix_02',
    colors: ['#000', '#000']
  }],
  prices: {
    jp: ['499'],
    us: ['499'],
    uk: ['449'],
    ca: ['679'],
    de: ['499'],
    fr: ['499'],
    es: ['499'],
    au: ['849']
  },
  path: 'vertix',
  showInAllWatches: false,
  region: {
    cn: false,
    us: false,
    uk: false,
    ca: false,
    de: false
  }
}, {
  name: 'dura',
  shopifyId: 'dura',
  infoNameI18nKey: 'menu.dura',
  infoHeaderI18nKey: 'product.duraHead',
  infoDescI18nKey: 'product.duraDesc',
  colors: [{
    name: 'dura',
    desc: 'Silver',
    colors: ['rgb(58,61,59)', 'rgb(83,83,83)'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/b2d3d3ffd84bd6cdb89852b61b89dd64.png')
  }],
  prices: {
    jp: ["39,600"],
    us: ["249"],
    uk: ["249"],
    ca: ["399"],
    de: ["289"],
    fr: ["289"],
    es: ["289"],
    eu: ["289"],
    au: ["469"]
  },
  path: 'dura',
  showInAllWatches: true
  // region: {
  //   cn: false,
  // },
}, {
  name: 'hrm',
  shopifyId: 'hrm',
  colors: [{
    name: 'hrm',
    desc: 'Silver',
    colors: ['rgb(233,233,233)', 'rgb(233,233,233)'],
    img: (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)('@assets/images/hrm-20230002/bd55d73d3bdeb6acf1778a64ed23f9a7.png')
  }],
  prices: {
    jp: ["10,890"],
    us: ["79"],
    uk: ["69"],
    ca: ["119"],
    de: ["89"],
    fr: ["89"],
    es: ["89"],
    eu: ["89"],
    au: ["129"]
  },
  path: 'heart-rate-monitor',
  showInAllWatches: true
  // region: {
  //   cn: false,
  // },
}, {
  name: 'pod2',
  shopifyId: 'pod2',
  colors: [{
    name: 'pod2',
    desc: 'Silver',
    colors: ['rgb(233,233,233)', 'rgb(233,233,233)']
  }],
  prices: {
    jp: ["14,850"],
    us: ["99"],
    uk: ["99"],
    ca: ["139"],
    de: ["119"],
    fr: ["119"],
    es: ["119"],
    eu: ["119"],
    au: ["169"]
  },
  path: 'pod2',
  showInAllWatches: true
}, {
  name: 'pod',
  shopifyId: 'pod',
  colors: [{
    name: 'pod',
    colors: ['#474847', '#010202']
  }],
  prices: {
    jp: ["69"],
    us: ["69"],
    uk: ["65"],
    ca: ["94.90"],
    de: ["69"]
  },
  path: 'pod',
  showInAllWatches: false
}];
var getAvailableColors = function getAvailableColors(colors, country) {
  return _babel_runtime_corejs3_core_js_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(colors).call(colors, function (color) {
    var _context;
    if (color.unavailableCountries && _babel_runtime_corejs3_core_js_instance_includes__WEBPACK_IMPORTED_MODULE_2___default()(_context = color.unavailableCountries).call(_context, country)) {
      return false;
    }
    return true;
  });
};
var getProductImg4color = function getProductImg4color(color) {
  return color.img || (0,_assets_js_assetsRequire_js__WEBPACK_IMPORTED_MODULE_3__/* .assetsRequire */ .y)("@assets/images/products/".concat(color.name, ".png"));
};


/***/ }),

/***/ 92867:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "C": () => (/* binding */ productSeries),
/* harmony export */   "f": () => (/* binding */ allSpecs)
/* harmony export */ });
var productSeries = [{
  name: 'black',
  colors: ['#555555', '#2a2a2a']
}, {
  name: 'yellow',
  colors: ['#b7b7b7', '#e18d33']
}, {
  name: 'green',
  colors: ['#432d0a', '#27340a']
}, {
  name: 'spt',
  colors: ['#555555', '#2a2a2a']
}];
var allSpecs = {
  "default": [{
    label: 'specs.model',
    value: 'VERTIX GPS Adventure Watch'
  }, {
    label: 'compdispsize',
    value: 'specs.vertix.displaySize'
  }, {
    label: 'compdisptype',
    value: 'Memory LCD'
  }, {
    label: 'compscreenmaterial',
    value: 'specs.vertix.displayMaterialVal'
  }, {
    label: 'compbezelmaterial',
    value: 'specs.vertix.bezelVal'
  }, {
    label: 'compcovermaterial',
    value: 'specs.vertix.coverVal'
  }, {
    label: 'compstrapmaterial',
    value: 'specs.vertix.strapVal'
  }, {
    label: 'compquickreleasefitband',
    value: '22mm'
  }, {
    label: 'compphysicalsize',
    value: '47 x 47 x 15.6 mm'
  }, {
    label: 'compweightwithsiliconeband',
    value: '76 g'
  }, {
    label: 'compweightwithnylonband',
    value: '63 g'
  }, {
    label: 'compphoneconnection',
    value: 'Bluetooth'
  }, {
    label: 'compaccessoryconnection',
    value: 'ANT+/Bluetooth'
  }, {
    label: 'specs.navigation',
    value: 'GPS/QZSS, GLONASS, BeiDou'
  }, {
    label: 'specs.sensors',
    value: 'specs.vertix.sensorsVal'
  }, {
    label: 'compwaterresistance',
    value: 'specs.vertix.waterResistanceTemp'
  }, {
    label: 'compworkingtemperature',
    value: 'specs.vertix.workingTemp'
  }, {
    label: 'compstoragetemperature',
    value: 'specs.vertix.storageTempVal'
  }, {
    label: 'compchargingtime',
    value: 'specs.vertix.chargingVal'
  }, {
    label: 'specs.batteryLife',
    value: 'specs.vertix.batteryLifeVal'
  }, {
    label: 'specs.supportedWorkouts',
    value: 'specs.vertix.workoutsVal'
  }],
  cn: [{
    label: 'specs.model',
    value: 'COROS VERTIX'
  }, {
    label: 'specs.positioning',
    value: 'specs.vertix.positioningVal'
  }, {
    label: 'specs.TIM',
    value: 'specs.vertix.TIM' // 上市时间
  }, {
    label: 'compdispsize',
    value: 'specs.vertix.compdispsizeVal'
  }, {
    label: 'compphysicalsize',
    value: 'specs.vertix.compphysicalsizeVal'
  }, {
    label: 'compquickreleasefitband',
    value: 'specs.vertix.compquickreleasefitbandVal'
  }, {
    label: 'specs.resolution',
    value: 'specs.vertix.resolutionVal'
  }, {
    label: 'compscreenmaterial',
    value: 'specs.vertix.compscreenmaterialVal'
  }, {
    label: 'specs.navigation',
    value: 'specs.vertix.navigationVal'
  }, {
    label: 'specs.dataStorage',
    value: 'specs.vertix.dataStorageVal'
  }, {
    label: 'specs.normalBatteryLife',
    value: 'specs.vertix.normalBatteryLifeVal'
  }, {
    label: 'specs.gpsModelLife',
    value: 'specs.vertix.gpsModelLifeVal'
  }, {
    label: 'compwaterresistance',
    value: 'specs.vertix.compwaterresistanceVal'
  }, {
    label: 'specs.weightWithSilicone',
    value: 'specs.vertix.weightWithSiliconeVal'
  }, {
    label: 'specs.weightWithNylon',
    value: 'specs.vertix.weightWithNylonVal'
  }, {
    label: 'specs.operation',
    value: 'specs.vertix.operationVal'
  }, {
    label: 'specs.heartRate',
    value: 'specs.vertix.heartRateVal'
  }, {
    label: 'specs.bloodOxygen',
    value: 'specs.vertix.bloodOxygenVal'
  }, {
    label: 'specs.compass',
    value: 'specs.vertix.compassVal'
  }, {
    label: 'specs.trackNavigation',
    value: 'specs.vertix.trackNavigationVal'
  }, {
    label: 'specs.nightMode',
    value: 'specs.vertix.nightModeVal'
  }, {
    label: 'specs.flipDisplay',
    value: 'specs.vertix.flipDisplayVal'
  }, {
    label: 'specs.hrv',
    value: 'specs.vertix.hrvVal'
  }]
};

/***/ }),

/***/ 86423:
/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {

"use strict";

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod);
// EXTERNAL MODULE: ./app/web/framework/entry/template.js + 4 modules
var template = __webpack_require__(37680);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/pc.vue?vue&type=template&id=17378b14&scoped=true
var render = function render() {
  var _vm = this,
    _c = _vm._self._c,
    _setup = _vm._self._setupProxy;
  return _c("layout", {
    attrs: {
      "amazon-pixel": "",
      "no-google-snippet": "",
      meta: _vm.openGraphMetas,
      title: _vm.$t("pod2.title"),
      description: _vm.$t("pod2.desc")
    }
  }, [_c("NewHeader", [_c("ProductMenu", {
    attrs: {
      "product-name": _vm.$t("common.header.pod2"),
      "spec-anchor": "#spec-detail",
      "shopify-id": "pod2",
      "detail-anchor": "#product-detail",
      "custom-shop-link": _vm.isCn ? "https://detail.tmall.com/item.htm?app=chrome,chrome&bxsign=scdRGzgglCB4RlMJbIUv3f2QguEHVTurw2ljffAIBBthSzEi9wH4fUbABQQyOFBQG0SDkIahYnDUJd-CGmSaWV-LeS5puc9lCl0vxEHBOd5I31nGLAvUMdu6cucTlGGVgyP,scdRGzgglCB4RlMJbIUv3f2QguEHVTurw2ljffAIBBthSzEi9wH4fUbABQQyOFBQG0SDkIahYnDUJd-CGmSaWV-LeS5puc9lCl0vxEHBOd5I31nGLAvUMdu6cucTlGGVgyP&cpp=1,1&id=685194366312&price=9999,9999&share_crt_v=1,1&shareurl=true,true&short_name=h.UflYKzh,h.UflYKzh&sourceType=item,item,item,item&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid,gray_ShareGlobalNavigation_1_code_simpleAndroid&sp_tk=cmJFOGRhSmY2OEQ=,cmJFOGRhSmY2OEQ=&spm=a2159r.13376460.0.0,a2159r.13376460.0.0&suid=ecec2725-a193-479d-a723-07143929311b,ecec2725-a193-479d-a723-07143929311b&tbSocialPopKey=shareItem,shareItem&un=fb781d1137c34dc77bc9097ac7465126,fb781d1137c34dc77bc9097ac7465126&un_site=0,0&ut_sk=1.YOxszcRVGpQDAC8IBomccyku_21646297_1666835834719.Copy.ShareGlobalNavigation_1,1.YOxszcRVGpQDAC8IBomccyku_21646297_1666835834719.Copy.ShareGlobalNavigation_1&skuId=4901269937333" : undefined,
      "no-comparison-modal": "",
      "accessories-href": _vm.$dataBus.isCn ? "" : "accessories?buy=coros-pod2",
      "accessories-btn-text": _vm.$t("pace2.accessories"),
      "hide-review": !_vm.showComments,
      visible: true
    }
  })], 1), _vm._v(" "), _vm.hasShopify ? _c("ShopPanel", {
    attrs: {
      "product-id": "pod2",
      "detail-anchor": "#product-detail",
      "auto-select": ""
    }
  }) : _vm._e(), _vm._v(" "), _c("a", {
    staticClass: "invisible relative top-[-0.886rem]",
    attrs: {
      id: "product-detail"
    }
  }), _vm._v(" "), _c("div", {
    staticClass: "page-pod2-2024",
    attrs: {
      lang: _vm.$i18n.locale
    }
  }, [_c("section", {
    staticClass: "banner relative"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: _vm.localePics.banner,
      containerCls: "banner _192w-[1920px] _192h-[1024px]",
      imgCls: ""
    }
  }), _vm._v(" "), _c("h1", {
    staticClass: "font-Din text-[0.729166666666667rem] leading-[0.729166666666667rem] uppercase absolute bottom-0 _192mb-[86px] right-0 _192mr-[110px] z-10 tracking-[-0.023489583333333rem]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.productNameShort")))])], 1), _vm._v(" "), _c("div", {
    staticClass: "relative z-20 _192pt-[200px]"
  }, [_c("section", {
    staticClass: "relative _192w-[1420px] mx-auto"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox _192w-[1100px]"
  }, [_c("h2", {
    staticClass: "_192w-[700px] _192ml-[120px] title pod2-2024-fade-in !_192mb-[50px]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.intro")))]), _vm._v(" "), _c("div", {
    staticClass: "_192w-[1420px] _192h-[320px] round _192pt-[59px] _192pb-[59px] _192pl-[120px] _192pr-[640px]"
  }, [_c("p", {
    staticClass: "desc !mt-0 pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.introText")))])])]), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "pod_img@2x.png",
      containerCls: "absolute right-0 bottom-0 _192w-[620px] _192h-[579px]",
      imgCls: ""
    }
  })], 1)]), _vm._v(" "), _c("div", {
    staticClass: "relative z-10 _192mt-[200px]"
  }, [_c("section", {
    staticClass: "relative _192w-[1420px] mx-auto"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox text-center _192mb-[100px]"
  }, [_c("h2", {
    staticClass: "title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.allAboutAccuracy")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.allAboutAccuracyText")))])]), _vm._v(" "), _c("div", {
    staticClass: "relative flex justify-between"
  }, [_c("div", {
    staticClass: "_192w-[450px] _192h-[680px]"
  }, [_c("AutoPlayOrPauseVideoInView", {
    staticClass: "text-center h-full w-full",
    attrs: {
      start: "top bottom",
      end: "bottom top",
      "button-wrapper-class": "text-center mt-15 text-20"
    }
  }, [_c("video", {
    ref: "video",
    staticClass: "video inline-block w-full h-full",
    attrs: {
      role: "img",
      "aria-label": _setup.accessibilityData["GPSLimit1-2.gif"],
      src: _vm.assetsRequire("@assets/images/4022855a1f91a0593da26bef3215599a.mp4"),
      muted: "muted",
      loop: "loop",
      preload: "auto"
    },
    domProps: {
      muted: true
    }
  })])], 1), _vm._v(" "), _c("div", {
    staticClass: "_192w-[450px] _192h-[680px]"
  }, [_c("AutoPlayOrPauseVideoInView", {
    staticClass: "text-center h-full w-full",
    attrs: {
      start: "top bottom",
      end: "bottom top",
      "button-wrapper-class": "text-center mt-15 text-20"
    }
  }, [_c("video", {
    ref: "video",
    staticClass: "video inline-block w-full h-full",
    attrs: {
      role: "img",
      "aria-label": _setup.accessibilityData["GPSLimit2.gif"],
      src: _vm.assetsRequire("@assets/images/d29898d98a3bd9232ecfd95a47cf1cee.mp4"),
      muted: "muted",
      loop: "loop",
      preload: "auto"
    },
    domProps: {
      muted: true
    }
  })])], 1), _vm._v(" "), _c("div", {
    staticClass: "_192w-[450px] _192h-[680px]"
  }, [_c("AutoPlayOrPauseVideoInView", {
    staticClass: "text-center h-full w-full",
    attrs: {
      start: "top bottom",
      end: "bottom top",
      "button-wrapper-class": "text-center mt-15 text-20"
    }
  }, [_c("video", {
    ref: "video",
    staticClass: "video inline-block w-full h-full",
    attrs: {
      role: "img",
      "aria-label": _setup.accessibilityData["GPSLimit3-2.gif"],
      src: _vm.assetsRequire("@assets/images/40ffd3621b5f681e5e58409670e42193.mp4"),
      muted: "muted",
      loop: "loop",
      preload: "auto"
    },
    domProps: {
      muted: true
    }
  })])], 1), _vm._v(" "), _c("div", {
    staticClass: "absolute top-0 left-0 w-full flex justify-between"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: "shape_img@2x.png",
      containerCls: "_192w-[450px] _192h-[680px]",
      imgCls: " "
    }
  }), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "shape_img@2x.png",
      containerCls: "   _192w-[450px] _192h-[680px]",
      imgCls: " "
    }
  }), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "shape_img@2x.png",
      containerCls: "   _192w-[450px] _192h-[680px]",
      imgCls: " "
    }
  })], 1)]), _vm._v(" "), _c("div", {
    staticClass: "flex justify-between"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox _192w-[410px] text-center _192mb-[10px]"
  }, [_c("p", {
    staticClass: "desc !_192mt-[74px] lang-ja:text-left"
  }, [_c("span", {
    staticClass: "bold text-[0.135416666666667rem] lang-ja:text-center lang-ja:block"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.sensitiveInstantPace")))]), _vm._v(" "), _c("span", {
    staticClass: "text-[#707070] lang-ja:!text-[0.104166666666667rem]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.sensitiveInstantPaceText")))])])]), _vm._v(" "), _c("div", {
    staticClass: "pod2-2024-textbox _192w-[410px] text-center _192mb-[10px]"
  }, [_c("p", {
    staticClass: "desc !_192mt-[74px] lang-ja:text-left"
  }, [_c("span", {
    staticClass: "bold text-[0.135416666666667rem] lang-ja:text-center lang-ja:block"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.accurateIndoorData")))]), _vm._v(" "), _c("span", {
    staticClass: "text-[#707070] lang-ja:!text-[0.104166666666667rem]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.accurateIndoorDataText")))])])]), _vm._v(" "), _c("div", {
    staticClass: "pod2-2024-textbox _192w-[410px] text-center _192mb-[10px]"
  }, [_c("p", {
    staticClass: "desc !_192mt-[74px] lang-ja:text-left"
  }, [_c("span", {
    staticClass: "bold text-[0.135416666666667rem] lang-ja:text-center lang-ja:block"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.preciseOnTheHills")))]), _vm._v(" "), _c("span", {
    staticClass: "text-[#707070] lang-ja:!text-[0.104166666666667rem]",
    domProps: {
      innerHTML: _vm._s(_vm.replaceLinkInText("preciseOnTheHillsText", "preciseOnTheHillsTextLinkText", "preciseOnTheHillsTextLink"))
    }
  })])])])])]), _vm._v(" "), _c("div", {
    staticClass: "relative z-10 _192mt-[200px]"
  }, [_c("section", {
    staticClass: "relative _192w-[1420px] mx-auto"
  }, [_c("div", {
    staticClass: "flex justify-between"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: _vm.localePics.iphone1,
      containerCls: "mx-auto _192ml-[144px] _192w-[412px] _192h-[832px]",
      imgCls: "border-radius-[60px]"
    }
  }), _vm._v(" "), _c("div", {
    staticClass: "pod2-2024-textbox _192mr-[110px] _192w-[600px] _192mb-[160px]"
  }, [_c("h2", {
    staticClass: "title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.understandYourRunningForm")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in",
    domProps: {
      innerHTML: _vm._s(_vm.replaceLinkInText("understandYourRunningFormText", "understandYourRunningFormTextLinkText", "understandYourRunningFormTextLink"))
    }
  })])], 1), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "runform_img@2x.jpg",
      containerCls: "relative -z-10 mx-auto _192mt-[-271px] _192w-[1420px] _192h-[420px]",
      imgCls: ""
    }
  })], 1)]), _vm._v(" "), _c("div", {
    staticClass: "relative z-10 _192mt-[200px]"
  }, [_c("section", {
    staticClass: "relative _192w-[1420px] mx-auto"
  }, [_c("div", {
    staticClass: "flex justify-between"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox _192ml-[120px] _192w-[600px] lang-ja:_192w-[610px] _192mb-[160px]"
  }, [_c("h2", {
    staticClass: "title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.monitorOutsideTemperature")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.monitorOutsideTemperatureText")))])]), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: _vm.localePics.iphone2,
      containerCls: "mx-auto _192mr-[144px] _192w-[412px] _192h-[832px]",
      imgCls: "border-radius-[60px]"
    }
  })], 1), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "outside_img@2x.jpg",
      containerCls: "relative -z-10 mx-auto _192mt-[-271px] _192w-[1420px] _192h-[420px]",
      imgCls: ""
    }
  })], 1)]), _vm._v(" "), _c("div", {
    staticClass: "relative z-10 _192mt-[200px] bg-[#F9F9FC] rounded-[0.416666666666667rem] _192pt-[200px] _192pb-[180px]"
  }, [_c("section", {
    staticClass: "relative _192w-[1420px] mx-auto"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox text-center _192mb-[160px]"
  }, [_c("h2", {
    staticClass: "title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.simpleSecure")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.simpleSecureText")))])]), _vm._v(" "), _c("div", {
    staticClass: "flex jusity-between _192mb-[80px] items-end"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox"
  }, [_c("h3", {
    staticClass: "level3-title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.longBatteryLife")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.longBatteryLifeText")))])]), _vm._v(" "), _c("div", {
    staticClass: "_192ml-[35px] flex-shrink-0 flex"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: _vm.localePics.battery_icon,
      alt: "An image that explains the battery specs of the COROS POD 2 which lasts 25 hours on a single charge and 150 hours with the portable charging dock.",
      containerCls: "_192ml-[35px] _192w-[615px] _192h-[152px] ",
      imgCls: ""
    }
  })], 1)]), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "outdoorrunning_img@2x.jpg",
      containerCls: " _192w-[1420px] _192h-[700px] ",
      imgCls: "rounded-[0.3125rem]"
    }
  }), _vm._v(" "), _c("div", {
    staticClass: "flex jusity-between _192mt-[146px] _192mb-[80px] items-end"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox"
  }, [_c("h3", {
    staticClass: "level3-title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.lightweightWeatherproof")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.lightweightWeatherproofText")))])]), _vm._v(" "), _c("div", {
    staticClass: "_192ml-[35px] flex-shrink-0 flex"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: _vm.localePics.numerical_icon,
      alt: "An image that explains the hardware specs of the COROS POD 2 which weights only 5.6 grams and has 3 ATM water rating.",
      containerCls: "_192ml-[35px] _192w-[515px] _192h-[152px] ",
      imgCls: ""
    }
  })], 1)]), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "lightweight_img@2x.jpg",
      containerCls: " _192w-[1420px] _192h-[700px]",
      imgCls: "rounded-[0.3125rem]"
    }
  })], 1)]), _vm._v(" "), _c("div", {
    staticClass: "relative z-10 _192mt-[200px]"
  }, [_c("section", {
    staticClass: "relative _192w-[1420px] mx-auto"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox text-center _192mb-[100px]"
  }, [_c("h2", {
    staticClass: "title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.setupMadeEasy")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.setupMadeEasyText")))])]), _vm._v(" "), _c("div", {
    staticClass: "flex"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: "pair_img@2x-(1).jpg",
      containerCls: "  _192w-[495px] _192h-[646px]",
      imgCls: ""
    }
  }), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "clip_img@2x.png",
      containerCls: "relative z-10  _192w-[495px] _192h-[646px] _192ml-[-40px]",
      imgCls: ""
    }
  }), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "go_img@2x.jpg",
      containerCls: "  _192w-[495px] _192h-[646px] _192ml-[-40px]",
      imgCls: ""
    }
  })], 1), _vm._v(" "), _c("section", {
    staticClass: "flex _192mt-[35px]"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox text-center lang-ja:text-left _192w-[405px] _192mb-[10px]"
  }, [_c("h3", {
    staticClass: "title !text-[0.3125rem] lang-zh:!text-[0.208333333333333rem] lang-ja:!text-[0.208333333333333rem] !leading-[0.3125rem]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.pair")))]), _vm._v(" "), _c("p", {
    staticClass: "desc !_192mt-[12px]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.pairText")))])]), _vm._v(" "), _c("div", {
    staticClass: "pod2-2024-textbox text-center lang-ja:text-left _192w-[405px] _192mb-[10px] _192ml-[55px]"
  }, [_c("h3", {
    staticClass: "title !text-[0.3125rem] lang-zh:!text-[0.208333333333333rem] lang-ja:!text-[0.208333333333333rem] !leading-[0.3125rem]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.clip")))]), _vm._v(" "), _c("p", {
    staticClass: "desc !_192mt-[12px]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.clipText")))])]), _vm._v(" "), _c("div", {
    staticClass: "pod2-2024-textbox text-center lang-ja:text-left _192w-[405px] _192mb-[10px] _192ml-[50px]"
  }, [_c("h3", {
    staticClass: "title !text-[0.3125rem] lang-zh:!text-[0.208333333333333rem] lang-ja:!text-[0.208333333333333rem] !leading-[0.3125rem]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.go")))]), _vm._v(" "), _c("p", {
    staticClass: "desc !_192mt-[12px]"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.goText")))])])])])]), _vm._v(" "), _c("section", {
    staticClass: "relative z-10 _192mt-[200px]"
  }, [_c("div", {
    staticClass: "pod2-2024-textbox text-center"
  }, [_c("h2", {
    staticClass: "title"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.box")))]), _vm._v(" "), _c("p", {
    staticClass: "desc pod2-2024-fade-in"
  }, [_vm._v(_vm._s(_vm.$t("pod2_2024.boxText")))])]), _vm._v(" "), _c("WebpImgWrap", {
    attrs: {
      src: "pod2box_img@2x.jpg",
      containerCls: "mx-auto _192mt-[50px] _192mb-[153px] _192w-[1420px] _192h-[880px]",
      imgCls: ""
    }
  })], 1), _vm._v(" "), _c("section", {
    staticClass: "_192mt-[96px] relative"
  }, [_c("WebpImgWrap", {
    attrs: {
      src: "faq_img@2x.jpg",
      containerCls: "  _192w-[1920px] _192h-[320px]",
      imgCls: ""
    }
  }), _vm._v(" "), _c("div", {
    staticClass: "absolute z-10 top-0 bottom-0 w-full"
  }, [_c("div", {
    staticClass: "_192w-[1420px] mx-auto flex justify-between items-center h-full"
  }, [_c("h2", {
    staticClass: "top-[-0.04rem] left-[0.56rem] z-10 font-Din lang-zh:!font-normal lang-zh:!font-[SourceHanSansCN-Medium] whitespace-pre-line text-[0.375rem] leading-[0.375rem] font-semibold lang-zh:text-[0.625rem] lang-zh:leading-[1.833333333333333rem] lang-ja:text-[1.526041666666667rem] lang-ja:leading-[1.833333333333333rem] text-white"
  }, [_vm._v(_vm._s(_vm.$t(_vm.isForeignLang ? "pod2_2024.frequentlyAskedQuestions" : "pod2_2024.faq")) + "\n          ")]), _vm._v(" "), _c("div", {
    staticClass: ""
  }, [_c("AnimationButton", {
    staticClass: "faq-btn",
    attrs: {
      text: _vm.$t("pod2_2024.generalFaQs"),
      link: _vm.$t("pod2_2024.generalFaQsLink"),
      target: "_blank"
    }
  }), _vm._v(" "), _c("AnimationButton", {
    staticClass: "faq-btn",
    attrs: {
      text: _vm.$t("pod2_2024.runningFormTestFaQs"),
      link: _vm.$t("pod2_2024.runningFormTestFaQsLink"),
      target: "_blank"
    }
  })], 1)])])], 1)]), _vm._v(" "), !_vm.debug ? _c("div", {
    staticClass: "relative bg-white _192pt-[40px]"
  }, [_vm.hasComparison ? [_c("a", {
    staticClass: "invisible relative top-[-0.886rem]",
    attrs: {
      id: "spec-detail"
    }
  }), _vm._v(" "), _c("DynamicComparePanel", {
    ref: "comparePanel",
    staticClass: "text-left mx-200 mb-200 w-auto",
    attrs: {
      "aria-label": "Specs table for coros pod2",
      "specs-to-compare": _vm.isCn ? _vm.groupedSpecsInCn4pod2 : _vm.universalGroupedSpecs4pod2,
      "default-product": "pod2",
      "hide-header": ""
    }
  })] : _vm._e(), _vm._v(" "), _vm.showComments ? _c("Stamped", [_c("div", {
    staticClass: "commentMark",
    staticStyle: {
      width: "100%",
      padding: "30px 10% 50px"
    },
    attrs: {
      id: "commentMark"
    }
  }, [_c("div", {
    staticClass: "comments",
    attrs: {
      id: "stamped-main-widget",
      "data-product-id": "7791518187732",
      "data-name": "COROS POD 2",
      "data-url": "https://ify.coros.com/products/coros-pod-2-performance-optimization-device",
      "data-product-sku": "coros-pod-2-performance-optimization-device"
    }
  })])]) : _vm._e()], 2) : _vm._e(), _vm._v(" "), _c("NewFooter", {
    staticClass: "relative z-20"
  })], 1);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/pc.vue?vue&type=template&id=17378b14&scoped=true

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/assign.js
var object_assign = __webpack_require__(67552);
var assign_default = /*#__PURE__*/__webpack_require__.n(object_assign);
// EXTERNAL MODULE: ./app/web/projects/www/pod2-2024/data.js
var data = __webpack_require__(31794);
// EXTERNAL MODULE: ./app/web/projects/www/pod2-2024/mixins.js + 17 modules
var mixins = __webpack_require__(10140);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/pc.vue?vue&type=script&setup=true&lang=js



// import mixinCountingDown from './mixinCountingDown';
// import mixinText from './mixinText';
// import mixinScroll from './mixinScroll';
// import mixinObserver from './mixinObserver';
var __default__ = {
  name: 'Pod2Y2024',
  mixins: [
  //
  // mixinCountingDown,
  // mixinObserver,
  mixins/* default */.Z
  // mixinText,
  // mixinScroll,
  ]
};
/* harmony default export */ const pcvue_type_script_setup_true_lang_js = (/*#__PURE__*/assign_default()(__default__, {
  setup: function setup(__props) {
    return {
      __sfc: true,
      accessibilityData: data/* accessibilityData */.qN
    };
  }
}));
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/pc.vue?vue&type=script&setup=true&lang=js
 /* harmony default export */ const pod2_2024_pcvue_type_script_setup_true_lang_js = (pcvue_type_script_setup_true_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/pc.vue?vue&type=style&index=0&id=17378b14&prod&lang=scss&scoped=true
var pcvue_type_style_index_0_id_17378b14_prod_lang_scss_scoped_true = __webpack_require__(60566);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/pc.vue?vue&type=style&index=0&id=17378b14&prod&lang=scss&scoped=true

// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pod2-2024/pc.vue?vue&type=style&index=1&id=17378b14&prod&lang=scss
var pcvue_type_style_index_1_id_17378b14_prod_lang_scss = __webpack_require__(83212);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/pc.vue?vue&type=style&index=1&id=17378b14&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/pod2-2024/pc.vue



;



/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  pod2_2024_pcvue_type_script_setup_true_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  "17378b14",
  null
  
)

/* harmony default export */ const pc = (component.exports);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js?{"envName":"web","cacheDirectory":"/tmp/easywebpack/coros-web-v2/prod/cache/client/babel-loader"}!./node_modules/vue-entry-loader/index.js?templateFile=./app/web/framework/entry/template.js,renderMode=ssr!./app/web/projects/www/pod2-2024/pc.vue









function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }


(0,template/* default */.Z)((vue_common_prod_default()));

var initState = window.__INITIAL_STATE__ || {};
var context = {
  state: initState
};
var hook = pc.hook || (vue_common_prod_default()).hook || {};
var pc_render = hook.render || pc.hookRender || (vue_common_prod_default()).hookRender;
if (pc_render) {
  pc_render(context, pc);
}
var store = typeof pc.store === 'function' ? pc.store(initState) : pc.store;
var router = typeof pc.router === 'function' ? pc.router() : pc.router;
var _data = typeof pc.data === 'function' ? pc.data() : {};
var options = store && router ? _objectSpread(_objectSpread({}, pc), {}, {
  store: store,
  router: router
}) : _objectSpread(_objectSpread({}, pc), {
  data: function data() {
    return _objectSpread(_objectSpread({}, initState), _data);
  }
});
var app = new (vue_common_prod_default())(options);
var root = document.getElementById('app');
var hydrate = root.childNodes.length > 0;
app.$mount(root, hydrate);

/***/ }),

/***/ 49092:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ScrollTrigger_ScrollTrigger)
});

// UNUSED EXPORTS: ScrollTrigger

;// CONCATENATED MODULE: ./node_modules/gsap/Observer.js
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

/*!
 * Observer 3.12.5
 * https://gsap.com
 *
 * @license Copyright 2008-2024, GreenSock. All rights reserved.
 * Subject to the terms at https://gsap.com/standard-license or for
 * Club GSAP members, the agreement issued with that membership.
 * @author: Jack Doyle, jack@greensock.com
*/

/* eslint-disable */
var gsap,
    _coreInitted,
    _clamp,
    _win,
    _doc,
    _docEl,
    _body,
    _isTouch,
    _pointerType,
    ScrollTrigger,
    _root,
    _normalizer,
    _eventTypes,
    _context,
    _getGSAP = function _getGSAP() {
  return gsap || typeof window !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap;
},
    _startup = 1,
    _observers = [],
    _scrollers = [],
    _proxies = [],
    _getTime = Date.now,
    _bridge = function _bridge(name, value) {
  return value;
},
    _integrate = function _integrate() {
  var core = ScrollTrigger.core,
      data = core.bridge || {},
      scrollers = core._scrollers,
      proxies = core._proxies;
  scrollers.push.apply(scrollers, _scrollers);
  proxies.push.apply(proxies, _proxies);
  _scrollers = scrollers;
  _proxies = proxies;

  _bridge = function _bridge(name, value) {
    return data[name](value);
  };
},
    _getProxyProp = function _getProxyProp(element, property) {
  return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];
},
    _isViewport = function _isViewport(el) {
  return !!~_root.indexOf(el);
},
    _addListener = function _addListener(element, type, func, passive, capture) {
  return element.addEventListener(type, func, {
    passive: passive !== false,
    capture: !!capture
  });
},
    _removeListener = function _removeListener(element, type, func, capture) {
  return element.removeEventListener(type, func, !!capture);
},
    _scrollLeft = "scrollLeft",
    _scrollTop = "scrollTop",
    _onScroll = function _onScroll() {
  return _normalizer && _normalizer.isPressed || _scrollers.cache++;
},
    _scrollCacheFunc = function _scrollCacheFunc(f, doNotCache) {
  var cachingFunc = function cachingFunc(value) {
    // since reading the scrollTop/scrollLeft/pageOffsetY/pageOffsetX can trigger a layout, this function allows us to cache the value so it only gets read fresh after a "scroll" event fires (or while we're refreshing because that can lengthen the page and alter the scroll position). when "soft" is true, that means don't actually set the scroll, but cache the new value instead (useful in ScrollSmoother)
    if (value || value === 0) {
      _startup && (_win.history.scrollRestoration = "manual"); // otherwise the new position will get overwritten by the browser onload.

      var isNormalizing = _normalizer && _normalizer.isPressed;
      value = cachingFunc.v = Math.round(value) || (_normalizer && _normalizer.iOS ? 1 : 0); //TODO: iOS Bug: if you allow it to go to 0, Safari can start to report super strange (wildly inaccurate) touch positions!

      f(value);
      cachingFunc.cacheID = _scrollers.cache;
      isNormalizing && _bridge("ss", value); // set scroll (notify ScrollTrigger so it can dispatch a "scrollStart" event if necessary
    } else if (doNotCache || _scrollers.cache !== cachingFunc.cacheID || _bridge("ref")) {
      cachingFunc.cacheID = _scrollers.cache;
      cachingFunc.v = f();
    }

    return cachingFunc.v + cachingFunc.offset;
  };

  cachingFunc.offset = 0;
  return f && cachingFunc;
},
    _horizontal = {
  s: _scrollLeft,
  p: "left",
  p2: "Left",
  os: "right",
  os2: "Right",
  d: "width",
  d2: "Width",
  a: "x",
  sc: _scrollCacheFunc(function (value) {
    return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0;
  })
},
    _vertical = {
  s: _scrollTop,
  p: "top",
  p2: "Top",
  os: "bottom",
  os2: "Bottom",
  d: "height",
  d2: "Height",
  a: "y",
  op: _horizontal,
  sc: _scrollCacheFunc(function (value) {
    return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0;
  })
},
    _getTarget = function _getTarget(t, self) {
  return (self && self._ctx && self._ctx.selector || gsap.utils.toArray)(t)[0] || (typeof t === "string" && gsap.config().nullTargetWarn !== false ? console.warn("Element not found:", t) : null);
},
    _getScrollFunc = function _getScrollFunc(element, _ref) {
  var s = _ref.s,
      sc = _ref.sc;
  // we store the scroller functions in an alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a ".rec" property in order to revert to that after refreshing to ensure things don't shift around.
  _isViewport(element) && (element = _doc.scrollingElement || _docEl);

  var i = _scrollers.indexOf(element),
      offset = sc === _vertical.sc ? 1 : 2;

  !~i && (i = _scrollers.push(element) - 1);
  _scrollers[i + offset] || _addListener(element, "scroll", _onScroll); // clear the cache when a scroll occurs

  var prev = _scrollers[i + offset],
      func = prev || (_scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport(element) ? sc : _scrollCacheFunc(function (value) {
    return arguments.length ? element[s] = value : element[s];
  })));
  func.target = element;
  prev || (func.smooth = gsap.getProperty(element, "scrollBehavior") === "smooth"); // only set it the first time (don't reset every time a scrollFunc is requested because perhaps it happens during a refresh() when it's disabled in ScrollTrigger.

  return func;
},
    _getVelocityProp = function _getVelocityProp(value, minTimeRefresh, useDelta) {
  var v1 = value,
      v2 = value,
      t1 = _getTime(),
      t2 = t1,
      min = minTimeRefresh || 50,
      dropToZeroTime = Math.max(500, min * 3),
      update = function update(value, force) {
    var t = _getTime();

    if (force || t - t1 > min) {
      v2 = v1;
      v1 = value;
      t2 = t1;
      t1 = t;
    } else if (useDelta) {
      v1 += value;
    } else {
      // not totally necessary, but makes it a bit more accurate by adjusting the v1 value according to the new slope. This way we're not just ignoring the incoming data. Removing for now because it doesn't seem to make much practical difference and it's probably not worth the kb.
      v1 = v2 + (value - v2) / (t - t2) * (t1 - t2);
    }
  },
      reset = function reset() {
    v2 = v1 = useDelta ? 0 : v1;
    t2 = t1 = 0;
  },
      getVelocity = function getVelocity(latestValue) {
    var tOld = t2,
        vOld = v2,
        t = _getTime();

    (latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue);
    return t1 === t2 || t - t2 > dropToZeroTime ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000;
  };

  return {
    update: update,
    reset: reset,
    getVelocity: getVelocity
  };
},
    _getEvent = function _getEvent(e, preventDefault) {
  preventDefault && !e._gsapAllow && e.preventDefault();
  return e.changedTouches ? e.changedTouches[0] : e;
},
    _getAbsoluteMax = function _getAbsoluteMax(a) {
  var max = Math.max.apply(Math, a),
      min = Math.min.apply(Math, a);
  return Math.abs(max) >= Math.abs(min) ? max : min;
},
    _setScrollTrigger = function _setScrollTrigger() {
  ScrollTrigger = gsap.core.globals().ScrollTrigger;
  ScrollTrigger && ScrollTrigger.core && _integrate();
},
    _initCore = function _initCore(core) {
  gsap = core || _getGSAP();

  if (!_coreInitted && gsap && typeof document !== "undefined" && document.body) {
    _win = window;
    _doc = document;
    _docEl = _doc.documentElement;
    _body = _doc.body;
    _root = [_win, _doc, _docEl, _body];
    _clamp = gsap.utils.clamp;

    _context = gsap.core.context || function () {};

    _pointerType = "onpointerenter" in _body ? "pointer" : "mouse"; // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.

    _isTouch = Observer.isTouch = _win.matchMedia && _win.matchMedia("(hover: none), (pointer: coarse)").matches ? 1 : "ontouchstart" in _win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ? 2 : 0;
    _eventTypes = Observer.eventTypes = ("ontouchstart" in _docEl ? "touchstart,touchmove,touchcancel,touchend" : !("onpointerdown" in _docEl) ? "mousedown,mousemove,mouseup,mouseup" : "pointerdown,pointermove,pointercancel,pointerup").split(",");
    setTimeout(function () {
      return _startup = 0;
    }, 500);

    _setScrollTrigger();

    _coreInitted = 1;
  }

  return _coreInitted;
};

_horizontal.op = _vertical;
_scrollers.cache = 0;
var Observer = /*#__PURE__*/function () {
  function Observer(vars) {
    this.init(vars);
  }

  var _proto = Observer.prototype;

  _proto.init = function init(vars) {
    _coreInitted || _initCore(gsap) || console.warn("Please gsap.registerPlugin(Observer)");
    ScrollTrigger || _setScrollTrigger();
    var tolerance = vars.tolerance,
        dragMinimum = vars.dragMinimum,
        type = vars.type,
        target = vars.target,
        lineHeight = vars.lineHeight,
        debounce = vars.debounce,
        preventDefault = vars.preventDefault,
        onStop = vars.onStop,
        onStopDelay = vars.onStopDelay,
        ignore = vars.ignore,
        wheelSpeed = vars.wheelSpeed,
        event = vars.event,
        onDragStart = vars.onDragStart,
        onDragEnd = vars.onDragEnd,
        onDrag = vars.onDrag,
        onPress = vars.onPress,
        onRelease = vars.onRelease,
        onRight = vars.onRight,
        onLeft = vars.onLeft,
        onUp = vars.onUp,
        onDown = vars.onDown,
        onChangeX = vars.onChangeX,
        onChangeY = vars.onChangeY,
        onChange = vars.onChange,
        onToggleX = vars.onToggleX,
        onToggleY = vars.onToggleY,
        onHover = vars.onHover,
        onHoverEnd = vars.onHoverEnd,
        onMove = vars.onMove,
        ignoreCheck = vars.ignoreCheck,
        isNormalizer = vars.isNormalizer,
        onGestureStart = vars.onGestureStart,
        onGestureEnd = vars.onGestureEnd,
        onWheel = vars.onWheel,
        onEnable = vars.onEnable,
        onDisable = vars.onDisable,
        onClick = vars.onClick,
        scrollSpeed = vars.scrollSpeed,
        capture = vars.capture,
        allowClicks = vars.allowClicks,
        lockAxis = vars.lockAxis,
        onLockAxis = vars.onLockAxis;
    this.target = target = _getTarget(target) || _docEl;
    this.vars = vars;
    ignore && (ignore = gsap.utils.toArray(ignore));
    tolerance = tolerance || 1e-9;
    dragMinimum = dragMinimum || 0;
    wheelSpeed = wheelSpeed || 1;
    scrollSpeed = scrollSpeed || 1;
    type = type || "wheel,touch,pointer";
    debounce = debounce !== false;
    lineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report "normal", so default to 22.

    var id,
        onStopDelayedCall,
        dragged,
        moved,
        wheeled,
        locked,
        axis,
        self = this,
        prevDeltaX = 0,
        prevDeltaY = 0,
        passive = vars.passive || !preventDefault,
        scrollFuncX = _getScrollFunc(target, _horizontal),
        scrollFuncY = _getScrollFunc(target, _vertical),
        scrollX = scrollFuncX(),
        scrollY = scrollFuncY(),
        limitToTouch = ~type.indexOf("touch") && !~type.indexOf("pointer") && _eventTypes[0] === "pointerdown",
        // for devices that accommodate mouse events and touch events, we need to distinguish.
    isViewport = _isViewport(target),
        ownerDoc = target.ownerDocument || _doc,
        deltaX = [0, 0, 0],
        // wheel, scroll, pointer/touch
    deltaY = [0, 0, 0],
        onClickTime = 0,
        clickCapture = function clickCapture() {
      return onClickTime = _getTime();
    },
        _ignoreCheck = function _ignoreCheck(e, isPointerOrTouch) {
      return (self.event = e) && ignore && ~ignore.indexOf(e.target) || isPointerOrTouch && limitToTouch && e.pointerType !== "touch" || ignoreCheck && ignoreCheck(e, isPointerOrTouch);
    },
        onStopFunc = function onStopFunc() {
      self._vx.reset();

      self._vy.reset();

      onStopDelayedCall.pause();
      onStop && onStop(self);
    },
        update = function update() {
      var dx = self.deltaX = _getAbsoluteMax(deltaX),
          dy = self.deltaY = _getAbsoluteMax(deltaY),
          changedX = Math.abs(dx) >= tolerance,
          changedY = Math.abs(dy) >= tolerance;

      onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out.

      if (changedX) {
        onRight && self.deltaX > 0 && onRight(self);
        onLeft && self.deltaX < 0 && onLeft(self);
        onChangeX && onChangeX(self);
        onToggleX && self.deltaX < 0 !== prevDeltaX < 0 && onToggleX(self);
        prevDeltaX = self.deltaX;
        deltaX[0] = deltaX[1] = deltaX[2] = 0;
      }

      if (changedY) {
        onDown && self.deltaY > 0 && onDown(self);
        onUp && self.deltaY < 0 && onUp(self);
        onChangeY && onChangeY(self);
        onToggleY && self.deltaY < 0 !== prevDeltaY < 0 && onToggleY(self);
        prevDeltaY = self.deltaY;
        deltaY[0] = deltaY[1] = deltaY[2] = 0;
      }

      if (moved || dragged) {
        onMove && onMove(self);

        if (dragged) {
          onDrag(self);
          dragged = false;
        }

        moved = false;
      }

      locked && !(locked = false) && onLockAxis && onLockAxis(self);

      if (wheeled) {
        onWheel(self);
        wheeled = false;
      }

      id = 0;
    },
        onDelta = function onDelta(x, y, index) {
      deltaX[index] += x;
      deltaY[index] += y;

      self._vx.update(x);

      self._vy.update(y);

      debounce ? id || (id = requestAnimationFrame(update)) : update();
    },
        onTouchOrPointerDelta = function onTouchOrPointerDelta(x, y) {
      if (lockAxis && !axis) {
        self.axis = axis = Math.abs(x) > Math.abs(y) ? "x" : "y";
        locked = true;
      }

      if (axis !== "y") {
        deltaX[2] += x;

        self._vx.update(x, true); // update the velocity as frequently as possible instead of in the debounced function so that very quick touch-scrolls (flicks) feel natural. If it's the mouse/touch/pointer, force it so that we get snappy/accurate momentum scroll.

      }

      if (axis !== "x") {
        deltaY[2] += y;

        self._vy.update(y, true);
      }

      debounce ? id || (id = requestAnimationFrame(update)) : update();
    },
        _onDrag = function _onDrag(e) {
      if (_ignoreCheck(e, 1)) {
        return;
      }

      e = _getEvent(e, preventDefault);
      var x = e.clientX,
          y = e.clientY,
          dx = x - self.x,
          dy = y - self.y,
          isDragging = self.isDragging;
      self.x = x;
      self.y = y;

      if (isDragging || Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum) {
        onDrag && (dragged = true);
        isDragging || (self.isDragging = true);
        onTouchOrPointerDelta(dx, dy);
        isDragging || onDragStart && onDragStart(self);
      }
    },
        _onPress = self.onPress = function (e) {
      if (_ignoreCheck(e, 1) || e && e.button) {
        return;
      }

      self.axis = axis = null;
      onStopDelayedCall.pause();
      self.isPressed = true;
      e = _getEvent(e); // note: may need to preventDefault(?) Won't side-scroll on iOS Safari if we do, though.

      prevDeltaX = prevDeltaY = 0;
      self.startX = self.x = e.clientX;
      self.startY = self.y = e.clientY;

      self._vx.reset(); // otherwise the t2 may be stale if the user touches and flicks super fast and releases in less than 2 requestAnimationFrame ticks, causing velocity to be 0.


      self._vy.reset();

      _addListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, passive, true);

      self.deltaX = self.deltaY = 0;
      onPress && onPress(self);
    },
        _onRelease = self.onRelease = function (e) {
      if (_ignoreCheck(e, 1)) {
        return;
      }

      _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);

      var isTrackingDrag = !isNaN(self.y - self.startY),
          wasDragging = self.isDragging,
          isDragNotClick = wasDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3),
          // some touch devices need some wiggle room in terms of sensing clicks - the finger may move a few pixels.
      eventData = _getEvent(e);

      if (!isDragNotClick && isTrackingDrag) {
        self._vx.reset();

        self._vy.reset(); //if (preventDefault && allowClicks && self.isPressed) { // check isPressed because in a rare edge case, the inputObserver in ScrollTrigger may stopPropagation() on the press/drag, so the onRelease may get fired without the onPress/onDrag ever getting called, thus it could trigger a click to occur on a link after scroll-dragging it.


        if (preventDefault && allowClicks) {
          gsap.delayedCall(0.08, function () {
            // some browsers (like Firefox) won't trust script-generated clicks, so if the user tries to click on a video to play it, for example, it simply won't work. Since a regular "click" event will most likely be generated anyway (one that has its isTrusted flag set to true), we must slightly delay our script-generated click so that the "real"/trusted one is prioritized. Remember, when there are duplicate events in quick succession, we suppress all but the first one. Some browsers don't even trigger the "real" one at all, so our synthetic one is a safety valve that ensures that no matter what, a click event does get dispatched.
            if (_getTime() - onClickTime > 300 && !e.defaultPrevented) {
              if (e.target.click) {
                //some browsers (like mobile Safari) don't properly trigger the click event
                e.target.click();
              } else if (ownerDoc.createEvent) {
                var syntheticEvent = ownerDoc.createEvent("MouseEvents");
                syntheticEvent.initMouseEvent("click", true, true, _win, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);
                e.target.dispatchEvent(syntheticEvent);
              }
            }
          });
        }
      }

      self.isDragging = self.isGesturing = self.isPressed = false;
      onStop && wasDragging && !isNormalizer && onStopDelayedCall.restart(true);
      onDragEnd && wasDragging && onDragEnd(self);
      onRelease && onRelease(self, isDragNotClick);
    },
        _onGestureStart = function _onGestureStart(e) {
      return e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging);
    },
        _onGestureEnd = function _onGestureEnd() {
      return (self.isGesturing = false) || onGestureEnd(self);
    },
        onScroll = function onScroll(e) {
      if (_ignoreCheck(e)) {
        return;
      }

      var x = scrollFuncX(),
          y = scrollFuncY();
      onDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);
      scrollX = x;
      scrollY = y;
      onStop && onStopDelayedCall.restart(true);
    },
        _onWheel = function _onWheel(e) {
      if (_ignoreCheck(e)) {
        return;
      }

      e = _getEvent(e, preventDefault);
      onWheel && (wheeled = true);
      var multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win.innerHeight : 1) * wheelSpeed;
      onDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);
      onStop && !isNormalizer && onStopDelayedCall.restart(true);
    },
        _onMove = function _onMove(e) {
      if (_ignoreCheck(e)) {
        return;
      }

      var x = e.clientX,
          y = e.clientY,
          dx = x - self.x,
          dy = y - self.y;
      self.x = x;
      self.y = y;
      moved = true;
      onStop && onStopDelayedCall.restart(true);
      (dx || dy) && onTouchOrPointerDelta(dx, dy);
    },
        _onHover = function _onHover(e) {
      self.event = e;
      onHover(self);
    },
        _onHoverEnd = function _onHoverEnd(e) {
      self.event = e;
      onHoverEnd(self);
    },
        _onClick = function _onClick(e) {
      return _ignoreCheck(e) || _getEvent(e, preventDefault) && onClick(self);
    };

    onStopDelayedCall = self._dc = gsap.delayedCall(onStopDelay || 0.25, onStopFunc).pause();
    self.deltaX = self.deltaY = 0;
    self._vx = _getVelocityProp(0, 50, true);
    self._vy = _getVelocityProp(0, 50, true);
    self.scrollX = scrollFuncX;
    self.scrollY = scrollFuncY;
    self.isDragging = self.isGesturing = self.isPressed = false;

    _context(this);

    self.enable = function (e) {
      if (!self.isEnabled) {
        _addListener(isViewport ? ownerDoc : target, "scroll", _onScroll);

        type.indexOf("scroll") >= 0 && _addListener(isViewport ? ownerDoc : target, "scroll", onScroll, passive, capture);
        type.indexOf("wheel") >= 0 && _addListener(target, "wheel", _onWheel, passive, capture);

        if (type.indexOf("touch") >= 0 && _isTouch || type.indexOf("pointer") >= 0) {
          _addListener(target, _eventTypes[0], _onPress, passive, capture);

          _addListener(ownerDoc, _eventTypes[2], _onRelease);

          _addListener(ownerDoc, _eventTypes[3], _onRelease);

          allowClicks && _addListener(target, "click", clickCapture, true, true);
          onClick && _addListener(target, "click", _onClick);
          onGestureStart && _addListener(ownerDoc, "gesturestart", _onGestureStart);
          onGestureEnd && _addListener(ownerDoc, "gestureend", _onGestureEnd);
          onHover && _addListener(target, _pointerType + "enter", _onHover);
          onHoverEnd && _addListener(target, _pointerType + "leave", _onHoverEnd);
          onMove && _addListener(target, _pointerType + "move", _onMove);
        }

        self.isEnabled = true;
        e && e.type && _onPress(e);
        onEnable && onEnable(self);
      }

      return self;
    };

    self.disable = function () {
      if (self.isEnabled) {
        // only remove the _onScroll listener if there aren't any others that rely on the functionality.
        _observers.filter(function (o) {
          return o !== self && _isViewport(o.target);
        }).length || _removeListener(isViewport ? ownerDoc : target, "scroll", _onScroll);

        if (self.isPressed) {
          self._vx.reset();

          self._vy.reset();

          _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);
        }

        _removeListener(isViewport ? ownerDoc : target, "scroll", onScroll, capture);

        _removeListener(target, "wheel", _onWheel, capture);

        _removeListener(target, _eventTypes[0], _onPress, capture);

        _removeListener(ownerDoc, _eventTypes[2], _onRelease);

        _removeListener(ownerDoc, _eventTypes[3], _onRelease);

        _removeListener(target, "click", clickCapture, true);

        _removeListener(target, "click", _onClick);

        _removeListener(ownerDoc, "gesturestart", _onGestureStart);

        _removeListener(ownerDoc, "gestureend", _onGestureEnd);

        _removeListener(target, _pointerType + "enter", _onHover);

        _removeListener(target, _pointerType + "leave", _onHoverEnd);

        _removeListener(target, _pointerType + "move", _onMove);

        self.isEnabled = self.isPressed = self.isDragging = false;
        onDisable && onDisable(self);
      }
    };

    self.kill = self.revert = function () {
      self.disable();

      var i = _observers.indexOf(self);

      i >= 0 && _observers.splice(i, 1);
      _normalizer === self && (_normalizer = 0);
    };

    _observers.push(self);

    isNormalizer && _isViewport(target) && (_normalizer = self);
    self.enable(event);
  };

  _createClass(Observer, [{
    key: "velocityX",
    get: function get() {
      return this._vx.getVelocity();
    }
  }, {
    key: "velocityY",
    get: function get() {
      return this._vy.getVelocity();
    }
  }]);

  return Observer;
}();
Observer.version = "3.12.5";

Observer.create = function (vars) {
  return new Observer(vars);
};

Observer.register = _initCore;

Observer.getAll = function () {
  return _observers.slice();
};

Observer.getById = function (id) {
  return _observers.filter(function (o) {
    return o.vars.id === id;
  })[0];
};

_getGSAP() && gsap.registerPlugin(Observer);

;// CONCATENATED MODULE: ./node_modules/gsap/ScrollTrigger.js
/*!
 * ScrollTrigger 3.12.5
 * https://gsap.com
 *
 * @license Copyright 2008-2024, GreenSock. All rights reserved.
 * Subject to the terms at https://gsap.com/standard-license or for
 * Club GSAP members, the agreement issued with that membership.
 * @author: Jack Doyle, jack@greensock.com
*/

/* eslint-disable */


var ScrollTrigger_gsap,
    ScrollTrigger_coreInitted,
    ScrollTrigger_win,
    ScrollTrigger_doc,
    ScrollTrigger_docEl,
    ScrollTrigger_body,
    ScrollTrigger_root,
    _resizeDelay,
    _toArray,
    ScrollTrigger_clamp,
    _time2,
    _syncInterval,
    _refreshing,
    _pointerIsDown,
    _transformProp,
    _i,
    _prevWidth,
    _prevHeight,
    _autoRefresh,
    _sort,
    _suppressOverwrites,
    _ignoreResize,
    ScrollTrigger_normalizer,
    _ignoreMobileResize,
    _baseScreenHeight,
    _baseScreenWidth,
    _fixIOSBug,
    ScrollTrigger_context,
    _scrollRestoration,
    _div100vh,
    _100vh,
    _isReverted,
    _clampingMax,
    _limitCallbacks,
    // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.
ScrollTrigger_startup = 1,
    ScrollTrigger_getTime = Date.now,
    _time1 = ScrollTrigger_getTime(),
    _lastScrollTime = 0,
    _enabled = 0,
    _parseClamp = function _parseClamp(value, type, self) {
  var clamp = _isString(value) && (value.substr(0, 6) === "clamp(" || value.indexOf("max") > -1);
  self["_" + type + "Clamp"] = clamp;
  return clamp ? value.substr(6, value.length - 7) : value;
},
    _keepClamp = function _keepClamp(value, clamp) {
  return clamp && (!_isString(value) || value.substr(0, 6) !== "clamp(") ? "clamp(" + value + ")" : value;
},
    _rafBugFix = function _rafBugFix() {
  return _enabled && requestAnimationFrame(_rafBugFix);
},
    // in some browsers (like Firefox), screen repaints weren't consistent unless we had SOMETHING queued up in requestAnimationFrame()! So this just creates a super simple loop to keep it alive and smooth out repaints.
_pointerDownHandler = function _pointerDownHandler() {
  return _pointerIsDown = 1;
},
    _pointerUpHandler = function _pointerUpHandler() {
  return _pointerIsDown = 0;
},
    _passThrough = function _passThrough(v) {
  return v;
},
    _round = function _round(value) {
  return Math.round(value * 100000) / 100000 || 0;
},
    _windowExists = function _windowExists() {
  return typeof window !== "undefined";
},
    ScrollTrigger_getGSAP = function _getGSAP() {
  return ScrollTrigger_gsap || _windowExists() && (ScrollTrigger_gsap = window.gsap) && ScrollTrigger_gsap.registerPlugin && ScrollTrigger_gsap;
},
    ScrollTrigger_isViewport = function _isViewport(e) {
  return !!~ScrollTrigger_root.indexOf(e);
},
    _getViewportDimension = function _getViewportDimension(dimensionProperty) {
  return (dimensionProperty === "Height" ? _100vh : ScrollTrigger_win["inner" + dimensionProperty]) || ScrollTrigger_docEl["client" + dimensionProperty] || ScrollTrigger_body["client" + dimensionProperty];
},
    _getBoundsFunc = function _getBoundsFunc(element) {
  return _getProxyProp(element, "getBoundingClientRect") || (ScrollTrigger_isViewport(element) ? function () {
    _winOffsets.width = ScrollTrigger_win.innerWidth;
    _winOffsets.height = _100vh;
    return _winOffsets;
  } : function () {
    return _getBounds(element);
  });
},
    _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref) {
  var d = _ref.d,
      d2 = _ref.d2,
      a = _ref.a;
  return (a = _getProxyProp(scroller, "getBoundingClientRect")) ? function () {
    return a()[d];
  } : function () {
    return (isViewport ? _getViewportDimension(d2) : scroller["client" + d2]) || 0;
  };
},
    _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {
  return !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : function () {
    return _winOffsets;
  };
},
    _maxScroll = function _maxScroll(element, _ref2) {
  var s = _ref2.s,
      d2 = _ref2.d2,
      d = _ref2.d,
      a = _ref2.a;
  return Math.max(0, (s = "scroll" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : ScrollTrigger_isViewport(element) ? (ScrollTrigger_docEl[s] || ScrollTrigger_body[s]) - _getViewportDimension(d2) : element[s] - element["offset" + d2]);
},
    _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {
  for (var i = 0; i < _autoRefresh.length; i += 3) {
    (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);
  }
},
    _isString = function _isString(value) {
  return typeof value === "string";
},
    _isFunction = function _isFunction(value) {
  return typeof value === "function";
},
    _isNumber = function _isNumber(value) {
  return typeof value === "number";
},
    _isObject = function _isObject(value) {
  return typeof value === "object";
},
    _endAnimation = function _endAnimation(animation, reversed, pause) {
  return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause();
},
    _callback = function _callback(self, func) {
  if (self.enabled) {
    var result = self._ctx ? self._ctx.add(function () {
      return func(self);
    }) : func(self);
    result && result.totalTime && (self.callbackAnimation = result);
  }
},
    _abs = Math.abs,
    _left = "left",
    _top = "top",
    _right = "right",
    _bottom = "bottom",
    _width = "width",
    _height = "height",
    _Right = "Right",
    _Left = "Left",
    _Top = "Top",
    _Bottom = "Bottom",
    _padding = "padding",
    _margin = "margin",
    _Width = "Width",
    _Height = "Height",
    _px = "px",
    _getComputedStyle = function _getComputedStyle(element) {
  return ScrollTrigger_win.getComputedStyle(element);
},
    _makePositionable = function _makePositionable(element) {
  // if the element already has position: absolute or fixed, leave that, otherwise make it position: relative
  var position = _getComputedStyle(element).position;

  element.style.position = position === "absolute" || position === "fixed" ? position : "relative";
},
    _setDefaults = function _setDefaults(obj, defaults) {
  for (var p in defaults) {
    p in obj || (obj[p] = defaults[p]);
  }

  return obj;
},
    _getBounds = function _getBounds(element, withoutTransforms) {
  var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== "matrix(1, 0, 0, 1, 0, 0)" && ScrollTrigger_gsap.to(element, {
    x: 0,
    y: 0,
    xPercent: 0,
    yPercent: 0,
    rotation: 0,
    rotationX: 0,
    rotationY: 0,
    scale: 1,
    skewX: 0,
    skewY: 0
  }).progress(1),
      bounds = element.getBoundingClientRect();
  tween && tween.progress(0).kill();
  return bounds;
},
    _getSize = function _getSize(element, _ref3) {
  var d2 = _ref3.d2;
  return element["offset" + d2] || element["client" + d2] || 0;
},
    _getLabelRatioArray = function _getLabelRatioArray(timeline) {
  var a = [],
      labels = timeline.labels,
      duration = timeline.duration(),
      p;

  for (p in labels) {
    a.push(labels[p] / duration);
  }

  return a;
},
    _getClosestLabel = function _getClosestLabel(animation) {
  return function (value) {
    return ScrollTrigger_gsap.utils.snap(_getLabelRatioArray(animation), value);
  };
},
    _snapDirectional = function _snapDirectional(snapIncrementOrArray) {
  var snap = ScrollTrigger_gsap.utils.snap(snapIncrementOrArray),
      a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function (a, b) {
    return a - b;
  });
  return a ? function (value, direction, threshold) {
    if (threshold === void 0) {
      threshold = 1e-3;
    }

    var i;

    if (!direction) {
      return snap(value);
    }

    if (direction > 0) {
      value -= threshold; // to avoid rounding errors. If we're too strict, it might snap forward, then immediately again, and again.

      for (i = 0; i < a.length; i++) {
        if (a[i] >= value) {
          return a[i];
        }
      }

      return a[i - 1];
    } else {
      i = a.length;
      value += threshold;

      while (i--) {
        if (a[i] <= value) {
          return a[i];
        }
      }
    }

    return a[0];
  } : function (value, direction, threshold) {
    if (threshold === void 0) {
      threshold = 1e-3;
    }

    var snapped = snap(value);
    return !direction || Math.abs(snapped - value) < threshold || snapped - value < 0 === direction < 0 ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);
  };
},
    _getLabelAtDirection = function _getLabelAtDirection(timeline) {
  return function (value, st) {
    return _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction);
  };
},
    _multiListener = function _multiListener(func, element, types, callback) {
  return types.split(",").forEach(function (type) {
    return func(element, type, callback);
  });
},
    ScrollTrigger_addListener = function _addListener(element, type, func, nonPassive, capture) {
  return element.addEventListener(type, func, {
    passive: !nonPassive,
    capture: !!capture
  });
},
    ScrollTrigger_removeListener = function _removeListener(element, type, func, capture) {
  return element.removeEventListener(type, func, !!capture);
},
    _wheelListener = function _wheelListener(func, el, scrollFunc) {
  scrollFunc = scrollFunc && scrollFunc.wheelHandler;

  if (scrollFunc) {
    func(el, "wheel", scrollFunc);
    func(el, "touchmove", scrollFunc);
  }
},
    _markerDefaults = {
  startColor: "green",
  endColor: "red",
  indent: 0,
  fontSize: "16px",
  fontWeight: "normal"
},
    _defaults = {
  toggleActions: "play",
  anticipatePin: 0
},
    _keywords = {
  top: 0,
  left: 0,
  center: 0.5,
  bottom: 1,
  right: 1
},
    _offsetToPx = function _offsetToPx(value, size) {
  if (_isString(value)) {
    var eqIndex = value.indexOf("="),
        relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;

    if (~eqIndex) {
      value.indexOf("%") > eqIndex && (relative *= size / 100);
      value = value.substr(0, eqIndex - 1);
    }

    value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf("%") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);
  }

  return value;
},
    _createMarker = function _createMarker(type, name, container, direction, _ref4, offset, matchWidthEl, containerAnimation) {
  var startColor = _ref4.startColor,
      endColor = _ref4.endColor,
      fontSize = _ref4.fontSize,
      indent = _ref4.indent,
      fontWeight = _ref4.fontWeight;

  var e = ScrollTrigger_doc.createElement("div"),
      useFixedPosition = ScrollTrigger_isViewport(container) || _getProxyProp(container, "pinType") === "fixed",
      isScroller = type.indexOf("scroller") !== -1,
      parent = useFixedPosition ? ScrollTrigger_body : container,
      isStart = type.indexOf("start") !== -1,
      color = isStart ? startColor : endColor,
      css = "border-color:" + color + ";font-size:" + fontSize + ";color:" + color + ";font-weight:" + fontWeight + ";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";

  css += "position:" + ((isScroller || containerAnimation) && useFixedPosition ? "fixed;" : "absolute;");
  (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + ":" + (offset + parseFloat(indent)) + "px;");
  matchWidthEl && (css += "box-sizing:border-box;text-align:left;width:" + matchWidthEl.offsetWidth + "px;");
  e._isStart = isStart;
  e.setAttribute("class", "gsap-marker-" + type + (name ? " marker-" + name : ""));
  e.style.cssText = css;
  e.innerText = name || name === 0 ? type + "-" + name : type;
  parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);
  e._offset = e["offset" + direction.op.d2];

  _positionMarker(e, 0, direction, isStart);

  return e;
},
    _positionMarker = function _positionMarker(marker, start, direction, flipped) {
  var vars = {
    display: "block"
  },
      side = direction[flipped ? "os2" : "p2"],
      oppositeSide = direction[flipped ? "p2" : "os2"];
  marker._isFlipped = flipped;
  vars[direction.a + "Percent"] = flipped ? -100 : 0;
  vars[direction.a] = flipped ? "1px" : 0;
  vars["border" + side + _Width] = 1;
  vars["border" + oppositeSide + _Width] = 0;
  vars[direction.p] = start + "px";
  ScrollTrigger_gsap.set(marker, vars);
},
    _triggers = [],
    _ids = {},
    _rafID,
    _sync = function _sync() {
  return ScrollTrigger_getTime() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll)));
},
    ScrollTrigger_onScroll = function _onScroll() {
  // previously, we tried to optimize performance by batching/deferring to the next requestAnimationFrame(), but discovered that Safari has a few bugs that make this unworkable (especially on iOS). See https://codepen.io/GreenSock/pen/16c435b12ef09c38125204818e7b45fc?editors=0010 and https://codepen.io/GreenSock/pen/JjOxYpQ/3dd65ccec5a60f1d862c355d84d14562?editors=0010 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503?editors=0010
  if (!ScrollTrigger_normalizer || !ScrollTrigger_normalizer.isPressed || ScrollTrigger_normalizer.startX > ScrollTrigger_body.clientWidth) {
    // if the user is dragging the scrollbar, allow it.
    _scrollers.cache++;

    if (ScrollTrigger_normalizer) {
      _rafID || (_rafID = requestAnimationFrame(_updateAll));
    } else {
      _updateAll(); // Safari in particular (on desktop) NEEDS the immediate update rather than waiting for a requestAnimationFrame() whereas iOS seems to benefit from waiting for the requestAnimationFrame() tick, at least when normalizing. See https://codepen.io/GreenSock/pen/qBYozqO?editors=0110

    }

    _lastScrollTime || _dispatch("scrollStart");
    _lastScrollTime = ScrollTrigger_getTime();
  }
},
    _setBaseDimensions = function _setBaseDimensions() {
  _baseScreenWidth = ScrollTrigger_win.innerWidth;
  _baseScreenHeight = ScrollTrigger_win.innerHeight;
},
    _onResize = function _onResize() {
  _scrollers.cache++;
  !_refreshing && !_ignoreResize && !ScrollTrigger_doc.fullscreenElement && !ScrollTrigger_doc.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== ScrollTrigger_win.innerWidth || Math.abs(ScrollTrigger_win.innerHeight - _baseScreenHeight) > ScrollTrigger_win.innerHeight * 0.25) && _resizeDelay.restart(true);
},
    // ignore resizes triggered by refresh()
_listeners = {},
    _emptyArray = [],
    _softRefresh = function _softRefresh() {
  return ScrollTrigger_removeListener(ScrollTrigger_ScrollTrigger, "scrollEnd", _softRefresh) || _refreshAll(true);
},
    _dispatch = function _dispatch(type) {
  return _listeners[type] && _listeners[type].map(function (f) {
    return f();
  }) || _emptyArray;
},
    _savedStyles = [],
    // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.
_revertRecorded = function _revertRecorded(media) {
  for (var i = 0; i < _savedStyles.length; i += 5) {
    if (!media || _savedStyles[i + 4] && _savedStyles[i + 4].query === media) {
      _savedStyles[i].style.cssText = _savedStyles[i + 1];
      _savedStyles[i].getBBox && _savedStyles[i].setAttribute("transform", _savedStyles[i + 2] || "");
      _savedStyles[i + 3].uncache = 1;
    }
  }
},
    _revertAll = function _revertAll(kill, media) {
  var trigger;

  for (_i = 0; _i < _triggers.length; _i++) {
    trigger = _triggers[_i];

    if (trigger && (!media || trigger._ctx === media)) {
      if (kill) {
        trigger.kill(1);
      } else {
        trigger.revert(true, true);
      }
    }
  }

  _isReverted = true;
  media && _revertRecorded(media);
  media || _dispatch("revert");
},
    _clearScrollMemory = function _clearScrollMemory(scrollRestoration, force) {
  // zero-out all the recorded scroll positions. Don't use _triggers because if, for example, .matchMedia() is used to create some ScrollTriggers and then the user resizes and it removes ALL ScrollTriggers, and then go back to a size where there are ScrollTriggers, it would have kept the position(s) saved from the initial state.
  _scrollers.cache++;
  (force || !_refreshingAll) && _scrollers.forEach(function (obj) {
    return _isFunction(obj) && obj.cacheID++ && (obj.rec = 0);
  });
  _isString(scrollRestoration) && (ScrollTrigger_win.history.scrollRestoration = _scrollRestoration = scrollRestoration);
},
    _refreshingAll,
    _refreshID = 0,
    _queueRefreshID,
    _queueRefreshAll = function _queueRefreshAll() {
  // we don't want to call _refreshAll() every time we create a new ScrollTrigger (for performance reasons) - it's better to batch them. Some frameworks dynamically load content and we can't rely on the window's "load" or "DOMContentLoaded" events to trigger it.
  if (_queueRefreshID !== _refreshID) {
    var id = _queueRefreshID = _refreshID;
    requestAnimationFrame(function () {
      return id === _refreshID && _refreshAll(true);
    });
  }
},
    _refresh100vh = function _refresh100vh() {
  ScrollTrigger_body.appendChild(_div100vh);

  _100vh = !ScrollTrigger_normalizer && _div100vh.offsetHeight || ScrollTrigger_win.innerHeight;

  ScrollTrigger_body.removeChild(_div100vh);
},
    _hideAllMarkers = function _hideAllMarkers(hide) {
  return _toArray(".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end").forEach(function (el) {
    return el.style.display = hide ? "none" : "block";
  });
},
    _refreshAll = function _refreshAll(force, skipRevert) {
  if (_lastScrollTime && !force && !_isReverted) {
    ScrollTrigger_addListener(ScrollTrigger_ScrollTrigger, "scrollEnd", _softRefresh);

    return;
  }

  _refresh100vh();

  _refreshingAll = ScrollTrigger_ScrollTrigger.isRefreshing = true;

  _scrollers.forEach(function (obj) {
    return _isFunction(obj) && ++obj.cacheID && (obj.rec = obj());
  }); // force the clearing of the cache because some browsers take a little while to dispatch the "scroll" event and the user may have changed the scroll position and then called ScrollTrigger.refresh() right away


  var refreshInits = _dispatch("refreshInit");

  _sort && ScrollTrigger_ScrollTrigger.sort();
  skipRevert || _revertAll();

  _scrollers.forEach(function (obj) {
    if (_isFunction(obj)) {
      obj.smooth && (obj.target.style.scrollBehavior = "auto"); // smooth scrolling interferes

      obj(0);
    }
  });

  _triggers.slice(0).forEach(function (t) {
    return t.refresh();
  }); // don't loop with _i because during a refresh() someone could call ScrollTrigger.update() which would iterate through _i resulting in a skip.


  _isReverted = false;

  _triggers.forEach(function (t) {
    // nested pins (pinnedContainer) with pinSpacing may expand the container, so we must accommodate that here.
    if (t._subPinOffset && t.pin) {
      var prop = t.vars.horizontal ? "offsetWidth" : "offsetHeight",
          original = t.pin[prop];
      t.revert(true, 1);
      t.adjustPinSpacing(t.pin[prop] - original);
      t.refresh();
    }
  });

  _clampingMax = 1; // pinSpacing might be propping a page open, thus when we .setPositions() to clamp a ScrollTrigger's end we should leave the pinSpacing alone. That's what this flag is for.

  _hideAllMarkers(true);

  _triggers.forEach(function (t) {
    // the scroller's max scroll position may change after all the ScrollTriggers refreshed (like pinning could push it down), so we need to loop back and correct any with end: "max". Same for anything with a clamped end
    var max = _maxScroll(t.scroller, t._dir),
        endClamp = t.vars.end === "max" || t._endClamp && t.end > max,
        startClamp = t._startClamp && t.start >= max;

    (endClamp || startClamp) && t.setPositions(startClamp ? max - 1 : t.start, endClamp ? Math.max(startClamp ? max : t.start + 1, max) : t.end, true);
  });

  _hideAllMarkers(false);

  _clampingMax = 0;
  refreshInits.forEach(function (result) {
    return result && result.render && result.render(-1);
  }); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.

  _scrollers.forEach(function (obj) {
    if (_isFunction(obj)) {
      obj.smooth && requestAnimationFrame(function () {
        return obj.target.style.scrollBehavior = "smooth";
      });
      obj.rec && obj(obj.rec);
    }
  });

  _clearScrollMemory(_scrollRestoration, 1);

  _resizeDelay.pause();

  _refreshID++;
  _refreshingAll = 2;

  _updateAll(2);

  _triggers.forEach(function (t) {
    return _isFunction(t.vars.onRefresh) && t.vars.onRefresh(t);
  });

  _refreshingAll = ScrollTrigger_ScrollTrigger.isRefreshing = false;

  _dispatch("refresh");
},
    _lastScroll = 0,
    _direction = 1,
    _primary,
    _updateAll = function _updateAll(force) {
  if (force === 2 || !_refreshingAll && !_isReverted) {
    // _isReverted could be true if, for example, a matchMedia() is in the process of executing. We don't want to update during the time everything is reverted.
    ScrollTrigger_ScrollTrigger.isUpdating = true;
    _primary && _primary.update(0); // ScrollSmoother uses refreshPriority -9999 to become the primary that gets updated before all others because it affects the scroll position.

    var l = _triggers.length,
        time = ScrollTrigger_getTime(),
        recordVelocity = time - _time1 >= 50,
        scroll = l && _triggers[0].scroll();

    _direction = _lastScroll > scroll ? -1 : 1;
    _refreshingAll || (_lastScroll = scroll);

    if (recordVelocity) {
      if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {
        _lastScrollTime = 0;

        _dispatch("scrollEnd");
      }

      _time2 = _time1;
      _time1 = time;
    }

    if (_direction < 0) {
      _i = l;

      while (_i-- > 0) {
        _triggers[_i] && _triggers[_i].update(0, recordVelocity);
      }

      _direction = 1;
    } else {
      for (_i = 0; _i < l; _i++) {
        _triggers[_i] && _triggers[_i].update(0, recordVelocity);
      }
    }

    ScrollTrigger_ScrollTrigger.isUpdating = false;
  }

  _rafID = 0;
},
    _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, "display", "flexShrink", "float", "zIndex", "gridColumnStart", "gridColumnEnd", "gridRowStart", "gridRowEnd", "gridArea", "justifySelf", "alignSelf", "placeSelf", "order"],
    _stateProps = _propNamesToCopy.concat([_width, _height, "boxSizing", "max" + _Width, "max" + _Height, "position", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),
    _swapPinOut = function _swapPinOut(pin, spacer, state) {
  _setState(state);

  var cache = pin._gsap;

  if (cache.spacerIsNative) {
    _setState(cache.spacerState);
  } else if (pin._gsap.swappedIn) {
    var parent = spacer.parentNode;

    if (parent) {
      parent.insertBefore(pin, spacer);
      parent.removeChild(spacer);
    }
  }

  pin._gsap.swappedIn = false;
},
    _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {
  if (!pin._gsap.swappedIn) {
    var i = _propNamesToCopy.length,
        spacerStyle = spacer.style,
        pinStyle = pin.style,
        p;

    while (i--) {
      p = _propNamesToCopy[i];
      spacerStyle[p] = cs[p];
    }

    spacerStyle.position = cs.position === "absolute" ? "absolute" : "relative";
    cs.display === "inline" && (spacerStyle.display = "inline-block");
    pinStyle[_bottom] = pinStyle[_right] = "auto";
    spacerStyle.flexBasis = cs.flexBasis || "auto";
    spacerStyle.overflow = "visible";
    spacerStyle.boxSizing = "border-box";
    spacerStyle[_width] = _getSize(pin, _horizontal) + _px;
    spacerStyle[_height] = _getSize(pin, _vertical) + _px;
    spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = "0";

    _setState(spacerState);

    pinStyle[_width] = pinStyle["max" + _Width] = cs[_width];
    pinStyle[_height] = pinStyle["max" + _Height] = cs[_height];
    pinStyle[_padding] = cs[_padding];

    if (pin.parentNode !== spacer) {
      pin.parentNode.insertBefore(spacer, pin);
      spacer.appendChild(pin);
    }

    pin._gsap.swappedIn = true;
  }
},
    _capsExp = /([A-Z])/g,
    _setState = function _setState(state) {
  if (state) {
    var style = state.t.style,
        l = state.length,
        i = 0,
        p,
        value;
    (state.t._gsap || ScrollTrigger_gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off

    for (; i < l; i += 2) {
      value = state[i + 1];
      p = state[i];

      if (value) {
        style[p] = value;
      } else if (style[p]) {
        style.removeProperty(p.replace(_capsExp, "-$1").toLowerCase());
      }
    }
  }
},
    _getState = function _getState(element) {
  // returns an Array with alternating values like [property, value, property, value] and a "t" property pointing to the target (element). Makes it fast and cheap.
  var l = _stateProps.length,
      style = element.style,
      state = [],
      i = 0;

  for (; i < l; i++) {
    state.push(_stateProps[i], style[_stateProps[i]]);
  }

  state.t = element;
  return state;
},
    _copyState = function _copyState(state, override, omitOffsets) {
  var result = [],
      l = state.length,
      i = omitOffsets ? 8 : 0,
      // skip top, left, right, bottom if omitOffsets is true
  p;

  for (; i < l; i += 2) {
    p = state[i];
    result.push(p, p in override ? override[p] : state[i + 1]);
  }

  result.t = state.t;
  return result;
},
    _winOffsets = {
  left: 0,
  top: 0
},
    // // potential future feature (?) Allow users to calculate where a trigger hits (scroll position) like getScrollPosition("#id", "top bottom")
// _getScrollPosition = (trigger, position, {scroller, containerAnimation, horizontal}) => {
// 	scroller = _getTarget(scroller || _win);
// 	let direction = horizontal ? _horizontal : _vertical,
// 		isViewport = _isViewport(scroller);
// 	_getSizeFunc(scroller, isViewport, direction);
// 	return _parsePosition(position, _getTarget(trigger), _getSizeFunc(scroller, isViewport, direction)(), direction, _getScrollFunc(scroller, direction)(), 0, 0, 0, _getOffsetsFunc(scroller, isViewport)(), isViewport ? 0 : parseFloat(_getComputedStyle(scroller)["border" + direction.p2 + _Width]) || 0, 0, containerAnimation ? containerAnimation.duration() : _maxScroll(scroller), containerAnimation);
// },
_parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) {
  _isFunction(value) && (value = value(self));

  if (_isString(value) && value.substr(0, 3) === "max") {
    value = scrollerMax + (value.charAt(4) === "=" ? _offsetToPx("0" + value.substr(3), scrollerSize) : 0);
  }

  var time = containerAnimation ? containerAnimation.time() : 0,
      p1,
      p2,
      element;
  containerAnimation && containerAnimation.seek(0);
  isNaN(value) || (value = +value); // convert a string number like "45" to an actual number

  if (!_isNumber(value)) {
    _isFunction(trigger) && (trigger = trigger(self));
    var offsets = (value || "0").split(" "),
        bounds,
        localOffset,
        globalOffset,
        display;
    element = _getTarget(trigger, self) || ScrollTrigger_body;
    bounds = _getBounds(element) || {};

    if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === "none") {
      // if display is "none", it won't report getBoundingClientRect() properly
      display = element.style.display;
      element.style.display = "block";
      bounds = _getBounds(element);
      display ? element.style.display = display : element.style.removeProperty("display");
    }

    localOffset = _offsetToPx(offsets[0], bounds[direction.d]);
    globalOffset = _offsetToPx(offsets[1] || "0", scrollerSize);
    value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;
    markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);
    scrollerSize -= scrollerSize - globalOffset; // adjust for the marker
  } else {
    containerAnimation && (value = ScrollTrigger_gsap.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value));
    markerScroller && _positionMarker(markerScroller, scrollerSize, direction, true);
  }

  if (clampZeroProp) {
    self[clampZeroProp] = value || -0.001;
    value < 0 && (value = 0);
  }

  if (marker) {
    var position = value + scrollerSize,
        isStart = marker._isStart;
    p1 = "scroll" + direction.d2;

    _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(ScrollTrigger_body[p1], ScrollTrigger_docEl[p1]) : marker.parentNode[p1]) <= position + 1);

    if (useFixedPosition) {
      scrollerBounds = _getBounds(markerScroller);
      useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);
    }
  }

  if (containerAnimation && element) {
    p1 = _getBounds(element);
    containerAnimation.seek(scrollerMax);
    p2 = _getBounds(element);
    containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];
    value = value / containerAnimation._caScrollDist * scrollerMax;
  }

  containerAnimation && containerAnimation.seek(time);
  return containerAnimation ? value : Math.round(value);
},
    _prefixExp = /(webkit|moz|length|cssText|inset)/i,
    _reparent = function _reparent(element, parent, top, left) {
  if (element.parentNode !== parent) {
    var style = element.style,
        p,
        cs;

    if (parent === ScrollTrigger_body) {
      element._stOrig = style.cssText; // record original inline styles so we can revert them later

      cs = _getComputedStyle(element);

      for (p in cs) {
        // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones.
        if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === "string" && p !== "0") {
          style[p] = cs[p];
        }
      }

      style.top = top;
      style.left = left;
    } else {
      style.cssText = element._stOrig;
    }

    ScrollTrigger_gsap.core.getCache(element).uncache = 1;
    parent.appendChild(element);
  }
},
    _interruptionTracker = function _interruptionTracker(getValueFunc, initialValue, onInterrupt) {
  var last1 = initialValue,
      last2 = last1;
  return function (value) {
    var current = Math.round(getValueFunc()); // round because in some [very uncommon] Windows environments, scroll can get reported with decimals even though it was set without.

    if (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) {
      // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124.
      value = current;
      onInterrupt && onInterrupt();
    }

    last2 = last1;
    last1 = value;
    return value;
  };
},
    _shiftMarker = function _shiftMarker(marker, direction, value) {
  var vars = {};
  vars[direction.p] = "+=" + value;
  ScrollTrigger_gsap.set(marker, vars);
},
    // _mergeAnimations = animations => {
// 	let tl = gsap.timeline({smoothChildTiming: true}).startTime(Math.min(...animations.map(a => a.globalTime(0))));
// 	animations.forEach(a => {let time = a.totalTime(); tl.add(a); a.totalTime(time); });
// 	tl.smoothChildTiming = false;
// 	return tl;
// },
// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)
_getTweenCreator = function _getTweenCreator(scroller, direction) {
  var getScroll = _getScrollFunc(scroller, direction),
      prop = "_scroll" + direction.p2,
      // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.
  getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {
    var tween = getTween.tween,
        onComplete = vars.onComplete,
        modifiers = {};
    initialValue = initialValue || getScroll();

    var checkForInterruption = _interruptionTracker(getScroll, initialValue, function () {
      tween.kill();
      getTween.tween = 0;
    });

    change2 = change1 && change2 || 0; // if change1 is 0, we set that to the difference and ignore change2. Otherwise, there would be a compound effect.

    change1 = change1 || scrollTo - initialValue;
    tween && tween.kill();
    vars[prop] = scrollTo;
    vars.inherit = false;
    vars.modifiers = modifiers;

    modifiers[prop] = function () {
      return checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio);
    };

    vars.onUpdate = function () {
      _scrollers.cache++;
      getTween.tween && _updateAll(); // if it was interrupted/killed, like in a context.revert(), don't force an updateAll()
    };

    vars.onComplete = function () {
      getTween.tween = 0;
      onComplete && onComplete.call(tween);
    };

    tween = getTween.tween = ScrollTrigger_gsap.to(scroller, vars);
    return tween;
  };

  scroller[prop] = getScroll;

  getScroll.wheelHandler = function () {
    return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);
  };

  ScrollTrigger_addListener(scroller, "wheel", getScroll.wheelHandler); // Windows machines handle mousewheel scrolling in chunks (like "3 lines per scroll") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a wheel event.


  ScrollTrigger_ScrollTrigger.isTouch && ScrollTrigger_addListener(scroller, "touchmove", getScroll.wheelHandler);
  return getTween;
};

var ScrollTrigger_ScrollTrigger = /*#__PURE__*/function () {
  function ScrollTrigger(vars, animation) {
    ScrollTrigger_coreInitted || ScrollTrigger.register(ScrollTrigger_gsap) || console.warn("Please gsap.registerPlugin(ScrollTrigger)");

    ScrollTrigger_context(this);

    this.init(vars, animation);
  }

  var _proto = ScrollTrigger.prototype;

  _proto.init = function init(vars, animation) {
    this.progress = this.start = 0;
    this.vars && this.kill(true, true); // in case it's being initted again

    if (!_enabled) {
      this.update = this.refresh = this.kill = _passThrough;
      return;
    }

    vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {
      trigger: vars
    } : vars, _defaults);

    var _vars = vars,
        onUpdate = _vars.onUpdate,
        toggleClass = _vars.toggleClass,
        id = _vars.id,
        onToggle = _vars.onToggle,
        onRefresh = _vars.onRefresh,
        scrub = _vars.scrub,
        trigger = _vars.trigger,
        pin = _vars.pin,
        pinSpacing = _vars.pinSpacing,
        invalidateOnRefresh = _vars.invalidateOnRefresh,
        anticipatePin = _vars.anticipatePin,
        onScrubComplete = _vars.onScrubComplete,
        onSnapComplete = _vars.onSnapComplete,
        once = _vars.once,
        snap = _vars.snap,
        pinReparent = _vars.pinReparent,
        pinSpacer = _vars.pinSpacer,
        containerAnimation = _vars.containerAnimation,
        fastScrollEnd = _vars.fastScrollEnd,
        preventOverlaps = _vars.preventOverlaps,
        direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _horizontal : _vertical,
        isToggle = !scrub && scrub !== 0,
        scroller = _getTarget(vars.scroller || ScrollTrigger_win),
        scrollerCache = ScrollTrigger_gsap.core.getCache(scroller),
        isViewport = ScrollTrigger_isViewport(scroller),
        useFixedPosition = ("pinType" in vars ? vars.pinType : _getProxyProp(scroller, "pinType") || isViewport && "fixed") === "fixed",
        callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],
        toggleActions = isToggle && vars.toggleActions.split(" "),
        markers = "markers" in vars ? vars.markers : _defaults.markers,
        borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)["border" + direction.p2 + _Width]) || 0,
        self = this,
        onRefreshInit = vars.onRefreshInit && function () {
      return vars.onRefreshInit(self);
    },
        getScrollerSize = _getSizeFunc(scroller, isViewport, direction),
        getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),
        lastSnap = 0,
        lastRefresh = 0,
        prevProgress = 0,
        scrollFunc = _getScrollFunc(scroller, direction),
        tweenTo,
        pinCache,
        snapFunc,
        scroll1,
        scroll2,
        start,
        end,
        markerStart,
        markerEnd,
        markerStartTrigger,
        markerEndTrigger,
        markerVars,
        executingOnRefresh,
        change,
        pinOriginalState,
        pinActiveState,
        pinState,
        spacer,
        offset,
        pinGetter,
        pinSetter,
        pinStart,
        pinChange,
        spacingStart,
        spacerState,
        markerStartSetter,
        pinMoves,
        markerEndSetter,
        cs,
        snap1,
        snap2,
        scrubTween,
        scrubSmooth,
        snapDurClamp,
        snapDelayedCall,
        prevScroll,
        prevAnimProgress,
        caMarkerSetter,
        customRevertReturn; // for the sake of efficiency, _startClamp/_endClamp serve like a truthy value indicating that clamping was enabled on the start/end, and ALSO store the actual pre-clamped numeric value. We tap into that in ScrollSmoother for speed effects. So for example, if start="clamp(top bottom)" results in a start of -100 naturally, it would get clamped to 0 but -100 would be stored in _startClamp.


    self._startClamp = self._endClamp = false;
    self._dir = direction;
    anticipatePin *= 45;
    self.scroller = scroller;
    self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;
    scroll1 = scrollFunc();
    self.vars = vars;
    animation = animation || vars.animation;

    if ("refreshPriority" in vars) {
      _sort = 1;
      vars.refreshPriority === -9999 && (_primary = self); // used by ScrollSmoother
    }

    scrollerCache.tweenScroll = scrollerCache.tweenScroll || {
      top: _getTweenCreator(scroller, _vertical),
      left: _getTweenCreator(scroller, _horizontal)
    };
    self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];

    self.scrubDuration = function (value) {
      scrubSmooth = _isNumber(value) && value;

      if (!scrubSmooth) {
        scrubTween && scrubTween.progress(1).kill();
        scrubTween = 0;
      } else {
        scrubTween ? scrubTween.duration(value) : scrubTween = ScrollTrigger_gsap.to(animation, {
          ease: "expo",
          totalProgress: "+=0",
          inherit: false,
          duration: scrubSmooth,
          paused: true,
          onComplete: function onComplete() {
            return onScrubComplete && onScrubComplete(self);
          }
        });
      }
    };

    if (animation) {
      animation.vars.lazy = false;
      animation._initted && !self.isReverted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true); // special case: if this ScrollTrigger gets re-initted, a from() tween with a stagger could get initted initially and then reverted on the re-init which means it'll need to get rendered again here to properly display things. Otherwise, See https://gsap.com/forums/topic/36777-scrollsmoother-splittext-nextjs/ and https://codepen.io/GreenSock/pen/eYPyPpd?editors=0010

      self.animation = animation.pause();
      animation.scrollTrigger = self;
      self.scrubDuration(scrub);
      snap1 = 0;
      id || (id = animation.vars.id);
    }

    if (snap) {
      // TODO: potential idea: use legitimate CSS scroll snapping by pushing invisible elements into the DOM that serve as snap positions, and toggle the document.scrollingElement.style.scrollSnapType onToggle. See https://codepen.io/GreenSock/pen/JjLrgWM for a quick proof of concept.
      if (!_isObject(snap) || snap.push) {
        snap = {
          snapTo: snap
        };
      }

      "scrollBehavior" in ScrollTrigger_body.style && ScrollTrigger_gsap.set(isViewport ? [ScrollTrigger_body, ScrollTrigger_docEl] : scroller, {
        scrollBehavior: "auto"
      }); // smooth scrolling doesn't work with snap.

      _scrollers.forEach(function (o) {
        return _isFunction(o) && o.target === (isViewport ? ScrollTrigger_doc.scrollingElement || ScrollTrigger_docEl : scroller) && (o.smooth = false);
      }); // note: set smooth to false on both the vertical and horizontal scroll getters/setters


      snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === "labels" ? _getClosestLabel(animation) : snap.snapTo === "labelsDirectional" ? _getLabelAtDirection(animation) : snap.directional !== false ? function (value, st) {
        return _snapDirectional(snap.snapTo)(value, ScrollTrigger_getTime() - lastRefresh < 500 ? 0 : st.direction);
      } : ScrollTrigger_gsap.utils.snap(snap.snapTo);
      snapDurClamp = snap.duration || {
        min: 0.1,
        max: 2
      };
      snapDurClamp = _isObject(snapDurClamp) ? ScrollTrigger_clamp(snapDurClamp.min, snapDurClamp.max) : ScrollTrigger_clamp(snapDurClamp, snapDurClamp);
      snapDelayedCall = ScrollTrigger_gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {
        var scroll = scrollFunc(),
            refreshedRecently = ScrollTrigger_getTime() - lastRefresh < 500,
            tween = tweenTo.tween;

        if ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) {
          var progress = (scroll - start) / change,
              totalProgress = animation && !isToggle ? animation.totalProgress() : progress,
              velocity = refreshedRecently ? 0 : (totalProgress - snap2) / (ScrollTrigger_getTime() - _time2) * 1000 || 0,
              change1 = ScrollTrigger_gsap.utils.clamp(-progress, 1 - progress, _abs(velocity / 2) * velocity / 0.185),
              naturalEnd = progress + (snap.inertia === false ? 0 : change1),
              endValue,
              endScroll,
              _snap = snap,
              onStart = _snap.onStart,
              _onInterrupt = _snap.onInterrupt,
              _onComplete = _snap.onComplete;
          endValue = snapFunc(naturalEnd, self);
          _isNumber(endValue) || (endValue = naturalEnd); // in case the function didn't return a number, fall back to using the naturalEnd

          endScroll = Math.round(start + endValue * change);

          if (scroll <= end && scroll >= start && endScroll !== scroll) {
            if (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) {
              // there's an overlapping snap! So we must figure out which one is closer and let that tween live.
              return;
            }

            if (snap.inertia === false) {
              change1 = endValue - progress;
            }

            tweenTo(endScroll, {
              duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),
              ease: snap.ease || "power3",
              data: _abs(endScroll - scroll),
              // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.
              onInterrupt: function onInterrupt() {
                return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);
              },
              onComplete: function onComplete() {
                self.update();
                lastSnap = scrollFunc();

                if (animation) {
                  // the resolution of the scrollbar is limited, so we should correct the scrubbed animation's playhead at the end to match EXACTLY where it was supposed to snap
                  scrubTween ? scrubTween.resetTo("totalProgress", endValue, animation._tTime / animation._tDur) : animation.progress(endValue);
                }

                snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;
                onSnapComplete && onSnapComplete(self);
                _onComplete && _onComplete(self);
              }
            }, scroll, change1 * change, endScroll - scroll - change1 * change);
            onStart && onStart(self, tweenTo.tween);
          }
        } else if (self.isActive && lastSnap !== scroll) {
          snapDelayedCall.restart(true);
        }
      }).pause();
    }

    id && (_ids[id] = self);
    trigger = self.trigger = _getTarget(trigger || pin !== true && pin); // if a trigger has some kind of scroll-related effect applied that could contaminate the "y" or "x" position (like a ScrollSmoother effect), we needed a way to temporarily revert it, so we use the stRevert property of the gsCache. It can return another function that we'll call at the end so it can return to its normal state.

    customRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert;
    customRevertReturn && (customRevertReturn = customRevertReturn(self));
    pin = pin === true ? trigger : _getTarget(pin);
    _isString(toggleClass) && (toggleClass = {
      targets: trigger,
      className: toggleClass
    });

    if (pin) {
      pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle(pin.parentNode).display === "flex" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default. We should check that pin.parentNode is an element (not shadow dom window)

      self.pin = pin;
      pinCache = ScrollTrigger_gsap.core.getCache(pin);

      if (!pinCache.spacer) {
        // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the "original" pin state after it has already been affected by another ScrollTrigger.
        if (pinSpacer) {
          pinSpacer = _getTarget(pinSpacer);
          pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement); // for React & Angular

          pinCache.spacerIsNative = !!pinSpacer;
          pinSpacer && (pinCache.spacerState = _getState(pinSpacer));
        }

        pinCache.spacer = spacer = pinSpacer || ScrollTrigger_doc.createElement("div");
        spacer.classList.add("pin-spacer");
        id && spacer.classList.add("pin-spacer-" + id);
        pinCache.pinState = pinOriginalState = _getState(pin);
      } else {
        pinOriginalState = pinCache.pinState;
      }

      vars.force3D !== false && ScrollTrigger_gsap.set(pin, {
        force3D: true
      });
      self.spacer = spacer = pinCache.spacer;
      cs = _getComputedStyle(pin);
      spacingStart = cs[pinSpacing + direction.os2];
      pinGetter = ScrollTrigger_gsap.getProperty(pin);
      pinSetter = ScrollTrigger_gsap.quickSetter(pin, direction.a, _px); // pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = "hidden"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).

      _swapPinIn(pin, spacer, cs);

      pinState = _getState(pin);
    }

    if (markers) {
      markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;
      markerStartTrigger = _createMarker("scroller-start", id, scroller, direction, markerVars, 0);
      markerEndTrigger = _createMarker("scroller-end", id, scroller, direction, markerVars, 0, markerStartTrigger);
      offset = markerStartTrigger["offset" + direction.op.d2];

      var content = _getTarget(_getProxyProp(scroller, "content") || scroller);

      markerStart = this.markerStart = _createMarker("start", id, content, direction, markerVars, offset, 0, containerAnimation);
      markerEnd = this.markerEnd = _createMarker("end", id, content, direction, markerVars, offset, 0, containerAnimation);
      containerAnimation && (caMarkerSetter = ScrollTrigger_gsap.quickSetter([markerStart, markerEnd], direction.a, _px));

      if (!useFixedPosition && !(_proxies.length && _getProxyProp(scroller, "fixedMarkers") === true)) {
        _makePositionable(isViewport ? ScrollTrigger_body : scroller);

        ScrollTrigger_gsap.set([markerStartTrigger, markerEndTrigger], {
          force3D: true
        });
        markerStartSetter = ScrollTrigger_gsap.quickSetter(markerStartTrigger, direction.a, _px);
        markerEndSetter = ScrollTrigger_gsap.quickSetter(markerEndTrigger, direction.a, _px);
      }
    }

    if (containerAnimation) {
      var oldOnUpdate = containerAnimation.vars.onUpdate,
          oldParams = containerAnimation.vars.onUpdateParams;
      containerAnimation.eventCallback("onUpdate", function () {
        self.update(0, 0, 1);
        oldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []);
      });
    }

    self.previous = function () {
      return _triggers[_triggers.indexOf(self) - 1];
    };

    self.next = function () {
      return _triggers[_triggers.indexOf(self) + 1];
    };

    self.revert = function (revert, temp) {
      if (!temp) {
        return self.kill(true);
      } // for compatibility with gsap.context() and gsap.matchMedia() which call revert()


      var r = revert !== false || !self.enabled,
          prevRefreshing = _refreshing;

      if (r !== self.isReverted) {
        if (r) {
          prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.

          prevProgress = self.progress;
          prevAnimProgress = animation && animation.progress();
        }

        markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {
          return m.style.display = r ? "none" : "block";
        });

        if (r) {
          _refreshing = self;
          self.update(r); // make sure the pin is back in its original position so that all the measurements are correct. do this BEFORE swapping the pin out
        }

        if (pin && (!pinReparent || !self.isActive)) {
          if (r) {
            _swapPinOut(pin, spacer, pinOriginalState);
          } else {
            _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState);
          }
        }

        r || self.update(r); // when we're restoring, the update should run AFTER swapping the pin into its pin-spacer.

        _refreshing = prevRefreshing; // restore. We set it to true during the update() so that things fire properly in there.

        self.isReverted = r;
      }
    };

    self.refresh = function (soft, force, position, pinOffset) {
      // position is typically only defined if it's coming from setPositions() - it's a way to skip the normal parsing. pinOffset is also only from setPositions() and is mostly related to fancy stuff we need to do in ScrollSmoother with effects
      if ((_refreshing || !self.enabled) && !force) {
        return;
      }

      if (pin && soft && _lastScrollTime) {
        ScrollTrigger_addListener(ScrollTrigger, "scrollEnd", _softRefresh);

        return;
      }

      !_refreshingAll && onRefreshInit && onRefreshInit(self);
      _refreshing = self;

      if (tweenTo.tween && !position) {
        // we skip this if a position is passed in because typically that's from .setPositions() and it's best to allow in-progress snapping to continue.
        tweenTo.tween.kill();
        tweenTo.tween = 0;
      }

      scrubTween && scrubTween.pause();
      invalidateOnRefresh && animation && animation.revert({
        kill: false
      }).invalidate();
      self.isReverted || self.revert(true, true);
      self._subPinOffset = false; // we'll set this to true in the sub-pins if we find any

      var size = getScrollerSize(),
          scrollerBounds = getScrollerOffsets(),
          max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction),
          isFirstRefresh = change <= 0.01,
          offset = 0,
          otherPinOffset = pinOffset || 0,
          parsedEnd = _isObject(position) ? position.end : vars.end,
          parsedEndTrigger = vars.endTrigger || trigger,
          parsedStart = _isObject(position) ? position.start : vars.start || (vars.start === 0 || !trigger ? 0 : pin ? "0 0" : "0 100%"),
          pinnedContainer = self.pinnedContainer = vars.pinnedContainer && _getTarget(vars.pinnedContainer, self),
          triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,
          i = triggerIndex,
          cs,
          bounds,
          scroll,
          isVertical,
          override,
          curTrigger,
          curPin,
          oppositeScroll,
          initted,
          revertedPins,
          forcedOverflow,
          markerStartOffset,
          markerEndOffset;

      if (markers && _isObject(position)) {
        // if we alter the start/end positions with .setPositions(), it generally feeds in absolute NUMBERS which don't convey information about where to line up the markers, so to keep it intuitive, we record how far the trigger positions shift after applying the new numbers and then offset by that much in the opposite direction. We do the same to the associated trigger markers too of course.
        markerStartOffset = ScrollTrigger_gsap.getProperty(markerStartTrigger, direction.p);
        markerEndOffset = ScrollTrigger_gsap.getProperty(markerEndTrigger, direction.p);
      }

      while (i--) {
        // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things "rewind" properly.
        curTrigger = _triggers[i];
        curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self); // if it's a timeline-based trigger that hasn't been fully initialized yet because it's waiting for 1 tick, just force the refresh() here, otherwise if it contains a pin that's supposed to affect other ScrollTriggers further down the page, they won't be adjusted properly.

        curPin = curTrigger.pin;

        if (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) {
          revertedPins || (revertedPins = []);
          revertedPins.unshift(curTrigger); // we'll revert from first to last to make sure things reach their end state properly

          curTrigger.revert(true, true);
        }

        if (curTrigger !== _triggers[i]) {
          // in case it got removed.
          triggerIndex--;
          i--;
        }
      }

      _isFunction(parsedStart) && (parsedStart = parsedStart(self));
      parsedStart = _parseClamp(parsedStart, "start", self);
      start = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && "_startClamp") || (pin ? -0.001 : 0);
      _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));

      if (_isString(parsedEnd) && !parsedEnd.indexOf("+=")) {
        if (~parsedEnd.indexOf(" ")) {
          parsedEnd = (_isString(parsedStart) ? parsedStart.split(" ")[0] : "") + parsedEnd;
        } else {
          offset = _offsetToPx(parsedEnd.substr(2), size);
          parsedEnd = _isString(parsedStart) ? parsedStart : (containerAnimation ? ScrollTrigger_gsap.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.

          parsedEndTrigger = trigger;
        }
      }

      parsedEnd = _parseClamp(parsedEnd, "end", self);
      end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? "100% 0" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && "_endClamp")) || -0.001;
      offset = 0;
      i = triggerIndex;

      while (i--) {
        curTrigger = _triggers[i];
        curPin = curTrigger.pin;

        if (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) {
          cs = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start);

          if ((curPin === trigger && curTrigger.start - curTrigger._pinPush < start || curPin === pinnedContainer) && isNaN(parsedStart)) {
            // numeric start values shouldn't be offset at all - treat them as absolute
            offset += cs * (1 - curTrigger.progress);
          }

          curPin === pin && (otherPinOffset += cs);
        }
      }

      start += offset;
      end += offset;
      self._startClamp && (self._startClamp += offset);

      if (self._endClamp && !_refreshingAll) {
        self._endClamp = end || -0.001;
        end = Math.min(end, _maxScroll(scroller, direction));
      }

      change = end - start || (start -= 0.01) && 0.001;

      if (isFirstRefresh) {
        // on the very first refresh(), the prevProgress couldn't have been accurate yet because the start/end were never calculated, so we set it here. Before 3.11.5, it could lead to an inaccurate scroll position restoration with snapping.
        prevProgress = ScrollTrigger_gsap.utils.clamp(0, 1, ScrollTrigger_gsap.utils.normalize(start, end, prevScroll));
      }

      self._pinPush = otherPinOffset;

      if (markerStart && offset) {
        // offset the markers if necessary
        cs = {};
        cs[direction.a] = "+=" + offset;
        pinnedContainer && (cs[direction.p] = "-=" + scrollFunc());
        ScrollTrigger_gsap.set([markerStart, markerEnd], cs);
      }

      if (pin && !(_clampingMax && self.end >= _maxScroll(scroller, direction))) {
        cs = _getComputedStyle(pin);
        isVertical = direction === _vertical;
        scroll = scrollFunc(); // recalculate because the triggers can affect the scroll

        pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;

        if (!max && end > 1) {
          // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://gsap.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/
          forcedOverflow = (isViewport ? ScrollTrigger_doc.scrollingElement || ScrollTrigger_docEl : scroller).style;
          forcedOverflow = {
            style: forcedOverflow,
            value: forcedOverflow["overflow" + direction.a.toUpperCase()]
          };

          if (isViewport && _getComputedStyle(ScrollTrigger_body)["overflow" + direction.a.toUpperCase()] !== "scroll") {
            // avoid an extra scrollbar if BOTH <html> and <body> have overflow set to "scroll"
            forcedOverflow.style["overflow" + direction.a.toUpperCase()] = "scroll";
          }
        }

        _swapPinIn(pin, spacer, cs);

        pinState = _getState(pin); // transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.

        bounds = _getBounds(pin, true);
        oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();

        if (pinSpacing) {
          spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];
          spacerState.t = spacer;
          i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;

          if (i) {
            spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).

            spacer.style.flexBasis !== "auto" && (spacer.style.flexBasis = i + _px);
          }

          _setState(spacerState);

          if (pinnedContainer) {
            // in ScrollTrigger.refresh(), we need to re-evaluate the pinContainer's size because this pinSpacing may stretch it out, but we can't just add the exact distance because depending on layout, it may not push things down or it may only do so partially.
            _triggers.forEach(function (t) {
              if (t.pin === pinnedContainer && t.vars.pinSpacing !== false) {
                t._subPinOffset = true;
              }
            });
          }

          useFixedPosition && scrollFunc(prevScroll);
        } else {
          i = _getSize(pin, direction);
          i && spacer.style.flexBasis !== "auto" && (spacer.style.flexBasis = i + _px);
        }

        if (useFixedPosition) {
          override = {
            top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,
            left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,
            boxSizing: "border-box",
            position: "fixed"
          };
          override[_width] = override["max" + _Width] = Math.ceil(bounds.width) + _px;
          override[_height] = override["max" + _Height] = Math.ceil(bounds.height) + _px;
          override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = "0";
          override[_padding] = cs[_padding];
          override[_padding + _Top] = cs[_padding + _Top];
          override[_padding + _Right] = cs[_padding + _Right];
          override[_padding + _Bottom] = cs[_padding + _Bottom];
          override[_padding + _Left] = cs[_padding + _Left];
          pinActiveState = _copyState(pinOriginalState, override, pinReparent);
          _refreshingAll && scrollFunc(0);
        }

        if (animation) {
          // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.
          initted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely.

          _suppressOverwrites(1);

          animation.render(animation.duration(), true, true);
          pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;
          pinMoves = Math.abs(change - pinChange) > 1;
          useFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.

          animation.render(0, true, true);
          initted || animation.invalidate(true);
          animation.parent || animation.totalTime(animation.totalTime()); // if, for example, a toggleAction called play() and then refresh() happens and when we render(1) above, it would cause the animation to complete and get removed from its parent, so this makes sure it gets put back in.

          _suppressOverwrites(0);
        } else {
          pinChange = change;
        }

        forcedOverflow && (forcedOverflow.value ? forcedOverflow.style["overflow" + direction.a.toUpperCase()] = forcedOverflow.value : forcedOverflow.style.removeProperty("overflow-" + direction.a));
      } else if (trigger && scrollFunc() && !containerAnimation) {
        // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()
        bounds = trigger.parentNode;

        while (bounds && bounds !== ScrollTrigger_body) {
          if (bounds._pinOffset) {
            start -= bounds._pinOffset;
            end -= bounds._pinOffset;
          }

          bounds = bounds.parentNode;
        }
      }

      revertedPins && revertedPins.forEach(function (t) {
        return t.revert(false, true);
      });
      self.start = start;
      self.end = end;
      scroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc(); // reset velocity

      if (!containerAnimation && !_refreshingAll) {
        scroll1 < prevScroll && scrollFunc(prevScroll);
        self.scroll.rec = 0;
      }

      self.revert(false, true);
      lastRefresh = ScrollTrigger_getTime();

      if (snapDelayedCall) {
        lastSnap = -1; // just so snapping gets re-enabled, clear out any recorded last value
        // self.isActive && scrollFunc(start + change * prevProgress); // previously this line was here to ensure that when snapping kicks in, it's from the previous progress but in some cases that's not desirable, like an all-page ScrollTrigger when new content gets added to the page, that'd totally change the progress.

        snapDelayedCall.restart(true);
      }

      _refreshing = 0;
      animation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh().

      if (isFirstRefresh || prevProgress !== self.progress || containerAnimation || invalidateOnRefresh) {
        // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.
        animation && !isToggle && animation.totalProgress(containerAnimation && start < -0.001 && !prevProgress ? ScrollTrigger_gsap.utils.normalize(start, end, 0) : prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.

        self.progress = isFirstRefresh || (scroll1 - start) / change === prevProgress ? 0 : prevProgress;
      }

      pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));
      scrubTween && scrubTween.invalidate();

      if (!isNaN(markerStartOffset)) {
        // numbers were passed in for the position which are absolute, so instead of just putting the markers at the very bottom of the viewport, we figure out how far they shifted down (it's safe to assume they were originally positioned in closer relation to the trigger element with values like "top", "center", a percentage or whatever, so we offset that much in the opposite direction to basically revert them to the relative position thy were at previously.
        markerStartOffset -= ScrollTrigger_gsap.getProperty(markerStartTrigger, direction.p);
        markerEndOffset -= ScrollTrigger_gsap.getProperty(markerEndTrigger, direction.p);

        _shiftMarker(markerStartTrigger, direction, markerStartOffset);

        _shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0));

        _shiftMarker(markerEndTrigger, direction, markerEndOffset);

        _shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0));
      }

      isFirstRefresh && !_refreshingAll && self.update(); // edge case - when you reload a page when it's already scrolled down, some browsers fire a "scroll" event before DOMContentLoaded, triggering an updateAll(). If we don't update the self.progress as part of refresh(), then when it happens next, it may record prevProgress as 0 when it really shouldn't, potentially causing a callback in an animation to fire again.

      if (onRefresh && !_refreshingAll && !executingOnRefresh) {
        // when refreshing all, we do extra work to correct pinnedContainer sizes and ensure things don't exceed the maxScroll, so we should do all the refreshes at the end after all that work so that the start/end values are corrected.
        executingOnRefresh = true;
        onRefresh(self);
        executingOnRefresh = false;
      }
    };

    self.getVelocity = function () {
      return (scrollFunc() - scroll2) / (ScrollTrigger_getTime() - _time2) * 1000 || 0;
    };

    self.endAnimation = function () {
      _endAnimation(self.callbackAnimation);

      if (animation) {
        scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1);
      }
    };

    self.labelToScroll = function (label) {
      return animation && animation.labels && (start || self.refresh() || start) + animation.labels[label] / animation.duration() * change || 0;
    };

    self.getTrailing = function (name) {
      var i = _triggers.indexOf(self),
          a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1);

      return (_isString(name) ? a.filter(function (t) {
        return t.vars.preventOverlaps === name;
      }) : a).filter(function (t) {
        return self.direction > 0 ? t.end <= start : t.start >= end;
      });
    };

    self.update = function (reset, recordVelocity, forceFake) {
      if (containerAnimation && !forceFake && !reset) {
        return;
      }

      var scroll = _refreshingAll === true ? prevScroll : self.scroll(),
          p = reset ? 0 : (scroll - start) / change,
          clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,
          prevProgress = self.progress,
          isActive,
          wasActive,
          toggleState,
          action,
          stateChanged,
          toggled,
          isAtMax,
          isTakingAction;

      if (recordVelocity) {
        scroll2 = scroll1;
        scroll1 = containerAnimation ? scrollFunc() : scroll;

        if (snap) {
          snap2 = snap1;
          snap1 = animation && !isToggle ? animation.totalProgress() : clipped;
        }
      } // anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).


      if (anticipatePin && pin && !_refreshing && !ScrollTrigger_startup && _lastScrollTime) {
        if (!clipped && start < scroll + (scroll - scroll2) / (ScrollTrigger_getTime() - _time2) * anticipatePin) {
          clipped = 0.0001;
        } else if (clipped === 1 && end > scroll + (scroll - scroll2) / (ScrollTrigger_getTime() - _time2) * anticipatePin) {
          clipped = 0.9999;
        }
      }

      if (clipped !== prevProgress && self.enabled) {
        isActive = self.isActive = !!clipped && clipped < 1;
        wasActive = !!prevProgress && prevProgress < 1;
        toggled = isActive !== wasActive;
        stateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)

        self.direction = clipped > prevProgress ? 1 : -1;
        self.progress = clipped;

        if (stateChanged && !_refreshing) {
          toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.

          if (isToggle) {
            action = !toggled && toggleActions[toggleState + 1] !== "none" && toggleActions[toggleState + 1] || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the "enter" action, we should switch to the "leave" in this case (but only if one is defined)

            isTakingAction = animation && (action === "complete" || action === "reset" || action in animation);
          }
        }

        preventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function (t) {
          return t.endAnimation();
        }));

        if (!isToggle) {
          if (scrubTween && !_refreshing && !ScrollTrigger_startup) {
            scrubTween._dp._time - scrubTween._start !== scrubTween._time && scrubTween.render(scrubTween._dp._time - scrubTween._start); // if there's a scrub on both the container animation and this one (or a ScrollSmoother), the update order would cause this one not to have rendered yet, so it wouldn't make any progress before we .restart() it heading toward the new progress so it'd appear stuck thus we force a render here.

            if (scrubTween.resetTo) {
              scrubTween.resetTo("totalProgress", clipped, animation._tTime / animation._tDur);
            } else {
              // legacy support (courtesy), before 3.10.0
              scrubTween.vars.totalProgress = clipped;
              scrubTween.invalidate().restart();
            }
          } else if (animation) {
            animation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset)));
          }
        }

        if (pin) {
          reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);

          if (!useFixedPosition) {
            pinSetter(_round(pinStart + pinChange * clipped));
          } else if (stateChanged) {
            isAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)

            if (pinReparent) {
              if (!reset && (isActive || isAtMax)) {
                var bounds = _getBounds(pin, true),
                    _offset = scroll - start;

                _reparent(pin, ScrollTrigger_body, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);
              } else {
                _reparent(pin, spacer);
              }
            }

            _setState(isActive || isAtMax ? pinActiveState : pinState);

            pinMoves && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));
          }
        }

        snap && !tweenTo.tween && !_refreshing && !ScrollTrigger_startup && snapDelayedCall.restart(true);
        toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) {
          return el.classList[isActive || once ? "add" : "remove"](toggleClass.className);
        }); // classes could affect positioning, so do it even if reset or refreshing is true.

        onUpdate && !isToggle && !reset && onUpdate(self);

        if (stateChanged && !_refreshing) {
          if (isToggle) {
            if (isTakingAction) {
              if (action === "complete") {
                animation.pause().totalProgress(1);
              } else if (action === "reset") {
                animation.restart(true).pause();
              } else if (action === "restart") {
                animation.restart(true);
              } else {
                animation[action]();
              }
            }

            onUpdate && onUpdate(self);
          }

          if (toggled || !_limitCallbacks) {
            // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.
            onToggle && toggled && _callback(self, onToggle);
            callbacks[toggleState] && _callback(self, callbacks[toggleState]);
            once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0); // a callback shouldn't be called again if once is true.

            if (!toggled) {
              // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order
              toggleState = clipped === 1 ? 1 : 3;
              callbacks[toggleState] && _callback(self, callbacks[toggleState]);
            }
          }

          if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) {
            _endAnimation(self.callbackAnimation);

            scrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === "reverse" ? 1 : !clipped, 1);
          }
        } else if (isToggle && onUpdate && !_refreshing) {
          onUpdate(self);
        }
      } // update absolutely-positioned markers (only if the scroller isn't the viewport)


      if (markerEndSetter) {
        var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;
        markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));
        markerEndSetter(n);
      }

      caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));
    };

    self.enable = function (reset, refresh) {
      if (!self.enabled) {
        self.enabled = true;

        ScrollTrigger_addListener(scroller, "resize", _onResize);

        isViewport || ScrollTrigger_addListener(scroller, "scroll", ScrollTrigger_onScroll);
        onRefreshInit && ScrollTrigger_addListener(ScrollTrigger, "refreshInit", onRefreshInit);

        if (reset !== false) {
          self.progress = prevProgress = 0;
          scroll1 = scroll2 = lastSnap = scrollFunc();
        }

        refresh !== false && self.refresh();
      }
    };

    self.getTween = function (snap) {
      return snap && tweenTo ? tweenTo.tween : scrubTween;
    };

    self.setPositions = function (newStart, newEnd, keepClamp, pinOffset) {
      // doesn't persist after refresh()! Intended to be a way to override values that were set during refresh(), like you could set it in onRefresh()
      if (containerAnimation) {
        // convert ratios into scroll positions. Remember, start/end values on ScrollTriggers that have a containerAnimation refer to the time (in seconds), NOT scroll positions.
        var st = containerAnimation.scrollTrigger,
            duration = containerAnimation.duration(),
            _change = st.end - st.start;

        newStart = st.start + _change * newStart / duration;
        newEnd = st.start + _change * newEnd / duration;
      }

      self.refresh(false, false, {
        start: _keepClamp(newStart, keepClamp && !!self._startClamp),
        end: _keepClamp(newEnd, keepClamp && !!self._endClamp)
      }, pinOffset);
      self.update();
    };

    self.adjustPinSpacing = function (amount) {
      if (spacerState && amount) {
        var i = spacerState.indexOf(direction.d) + 1;
        spacerState[i] = parseFloat(spacerState[i]) + amount + _px;
        spacerState[1] = parseFloat(spacerState[1]) + amount + _px;

        _setState(spacerState);
      }
    };

    self.disable = function (reset, allowAnimation) {
      if (self.enabled) {
        reset !== false && self.revert(true, true);
        self.enabled = self.isActive = false;
        allowAnimation || scrubTween && scrubTween.pause();
        prevScroll = 0;
        pinCache && (pinCache.uncache = 1);
        onRefreshInit && ScrollTrigger_removeListener(ScrollTrigger, "refreshInit", onRefreshInit);

        if (snapDelayedCall) {
          snapDelayedCall.pause();
          tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);
        }

        if (!isViewport) {
          var i = _triggers.length;

          while (i--) {
            if (_triggers[i].scroller === scroller && _triggers[i] !== self) {
              return; //don't remove the listeners if there are still other triggers referencing it.
            }
          }

          ScrollTrigger_removeListener(scroller, "resize", _onResize);

          isViewport || ScrollTrigger_removeListener(scroller, "scroll", ScrollTrigger_onScroll);
        }
      }
    };

    self.kill = function (revert, allowAnimation) {
      self.disable(revert, allowAnimation);
      scrubTween && !allowAnimation && scrubTween.kill();
      id && delete _ids[id];

      var i = _triggers.indexOf(self);

      i >= 0 && _triggers.splice(i, 1);
      i === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...
      // if no other ScrollTrigger instances of the same scroller are found, wipe out any recorded scroll position. Otherwise, in a single page application, for example, it could maintain scroll position when it really shouldn't.

      i = 0;

      _triggers.forEach(function (t) {
        return t.scroller === self.scroller && (i = 1);
      });

      i || _refreshingAll || (self.scroll.rec = 0);

      if (animation) {
        animation.scrollTrigger = null;
        revert && animation.revert({
          kill: false
        });
        allowAnimation || animation.kill();
      }

      markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {
        return m.parentNode && m.parentNode.removeChild(m);
      });
      _primary === self && (_primary = 0);

      if (pin) {
        pinCache && (pinCache.uncache = 1);
        i = 0;

        _triggers.forEach(function (t) {
          return t.pin === pin && i++;
        });

        i || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element.
      }

      vars.onKill && vars.onKill(self);
    };

    _triggers.push(self);

    self.enable(false, false);
    customRevertReturn && customRevertReturn(self);

    if (animation && animation.add && !change) {
      // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick. If "change" is defined, we know it must be re-enabling, thus we can refresh() right away.
      var updateFunc = self.update; // some browsers may fire a scroll event BEFORE a tick elapses and/or the DOMContentLoaded fires. So there's a chance update() will be called BEFORE a refresh() has happened on a Timeline-attached ScrollTrigger which means the start/end won't be calculated yet. We don't want to add conditional logic inside the update() method (like check to see if end is defined and if not, force a refresh()) because that's a function that gets hit a LOT (performance). So we swap out the real update() method for this one that'll re-attach it the first time it gets called and of course forces a refresh().

      self.update = function () {
        self.update = updateFunc;
        start || end || self.refresh();
      };

      ScrollTrigger_gsap.delayedCall(0.01, self.update);
      change = 0.01;
      start = end = 0;
    } else {
      self.refresh();
    }

    pin && _queueRefreshAll(); // pinning could affect the positions of other things, so make sure we queue a full refresh()
  };

  ScrollTrigger.register = function register(core) {
    if (!ScrollTrigger_coreInitted) {
      ScrollTrigger_gsap = core || ScrollTrigger_getGSAP();
      _windowExists() && window.document && ScrollTrigger.enable();
      ScrollTrigger_coreInitted = _enabled;
    }

    return ScrollTrigger_coreInitted;
  };

  ScrollTrigger.defaults = function defaults(config) {
    if (config) {
      for (var p in config) {
        _defaults[p] = config[p];
      }
    }

    return _defaults;
  };

  ScrollTrigger.disable = function disable(reset, kill) {
    _enabled = 0;

    _triggers.forEach(function (trigger) {
      return trigger[kill ? "kill" : "disable"](reset);
    });

    ScrollTrigger_removeListener(ScrollTrigger_win, "wheel", ScrollTrigger_onScroll);

    ScrollTrigger_removeListener(ScrollTrigger_doc, "scroll", ScrollTrigger_onScroll);

    clearInterval(_syncInterval);

    ScrollTrigger_removeListener(ScrollTrigger_doc, "touchcancel", _passThrough);

    ScrollTrigger_removeListener(ScrollTrigger_body, "touchstart", _passThrough);

    _multiListener(ScrollTrigger_removeListener, ScrollTrigger_doc, "pointerdown,touchstart,mousedown", _pointerDownHandler);

    _multiListener(ScrollTrigger_removeListener, ScrollTrigger_doc, "pointerup,touchend,mouseup", _pointerUpHandler);

    _resizeDelay.kill();

    _iterateAutoRefresh(ScrollTrigger_removeListener);

    for (var i = 0; i < _scrollers.length; i += 3) {
      _wheelListener(ScrollTrigger_removeListener, _scrollers[i], _scrollers[i + 1]);

      _wheelListener(ScrollTrigger_removeListener, _scrollers[i], _scrollers[i + 2]);
    }
  };

  ScrollTrigger.enable = function enable() {
    ScrollTrigger_win = window;
    ScrollTrigger_doc = document;
    ScrollTrigger_docEl = ScrollTrigger_doc.documentElement;
    ScrollTrigger_body = ScrollTrigger_doc.body;

    if (ScrollTrigger_gsap) {
      _toArray = ScrollTrigger_gsap.utils.toArray;
      ScrollTrigger_clamp = ScrollTrigger_gsap.utils.clamp;
      ScrollTrigger_context = ScrollTrigger_gsap.core.context || _passThrough;
      _suppressOverwrites = ScrollTrigger_gsap.core.suppressOverwrites || _passThrough;
      _scrollRestoration = ScrollTrigger_win.history.scrollRestoration || "auto";
      _lastScroll = ScrollTrigger_win.pageYOffset;
      ScrollTrigger_gsap.core.globals("ScrollTrigger", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a "name" property.

      if (ScrollTrigger_body) {
        _enabled = 1;
        _div100vh = document.createElement("div"); // to solve mobile browser address bar show/hide resizing, we shouldn't rely on window.innerHeight. Instead, use a <div> with its height set to 100vh and measure that since that's what the scrolling is based on anyway and it's not affected by address bar showing/hiding.

        _div100vh.style.height = "100vh";
        _div100vh.style.position = "absolute";

        _refresh100vh();

        _rafBugFix();

        Observer.register(ScrollTrigger_gsap); // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.

        ScrollTrigger.isTouch = Observer.isTouch;
        _fixIOSBug = Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent); // since 2017, iOS has had a bug that causes event.clientX/Y to be inaccurate when a scroll occurs, thus we must alternate ignoring every other touchmove event to work around it. See https://bugs.webkit.org/show_bug.cgi?id=181954 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503

        _ignoreMobileResize = Observer.isTouch === 1;

        ScrollTrigger_addListener(ScrollTrigger_win, "wheel", ScrollTrigger_onScroll); // mostly for 3rd party smooth scrolling libraries.


        ScrollTrigger_root = [ScrollTrigger_win, ScrollTrigger_doc, ScrollTrigger_docEl, ScrollTrigger_body];

        if (ScrollTrigger_gsap.matchMedia) {
          ScrollTrigger.matchMedia = function (vars) {
            var mm = ScrollTrigger_gsap.matchMedia(),
                p;

            for (p in vars) {
              mm.add(p, vars[p]);
            }

            return mm;
          };

          ScrollTrigger_gsap.addEventListener("matchMediaInit", function () {
            return _revertAll();
          });
          ScrollTrigger_gsap.addEventListener("matchMediaRevert", function () {
            return _revertRecorded();
          });
          ScrollTrigger_gsap.addEventListener("matchMedia", function () {
            _refreshAll(0, 1);

            _dispatch("matchMedia");
          });
          ScrollTrigger_gsap.matchMedia("(orientation: portrait)", function () {
            // when orientation changes, we should take new base measurements for the ignoreMobileResize feature.
            _setBaseDimensions();

            return _setBaseDimensions;
          });
        } else {
          console.warn("Requires GSAP 3.11.0 or later");
        }

        _setBaseDimensions();

        ScrollTrigger_addListener(ScrollTrigger_doc, "scroll", ScrollTrigger_onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!


        var bodyStyle = ScrollTrigger_body.style,
            border = bodyStyle.borderTopStyle,
            AnimationProto = ScrollTrigger_gsap.core.Animation.prototype,
            bounds,
            i;
        AnimationProto.revert || Object.defineProperty(AnimationProto, "revert", {
          value: function value() {
            return this.time(-0.01, true);
          }
        }); // only for backwards compatibility (Animation.revert() was added after 3.10.4)

        bodyStyle.borderTopStyle = "solid"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.

        bounds = _getBounds(ScrollTrigger_body);
        _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding

        _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;
        border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty("border-top-style"); // TODO: (?) maybe move to leveraging the velocity mechanism in Observer and skip intervals.

        _syncInterval = setInterval(_sync, 250);
        ScrollTrigger_gsap.delayedCall(0.5, function () {
          return ScrollTrigger_startup = 0;
        });

        ScrollTrigger_addListener(ScrollTrigger_doc, "touchcancel", _passThrough); // some older Android devices intermittently stop dispatching "touchmove" events if we don't listen for "touchcancel" on the document.


        ScrollTrigger_addListener(ScrollTrigger_body, "touchstart", _passThrough); //works around Safari bug: https://gsap.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/


        _multiListener(ScrollTrigger_addListener, ScrollTrigger_doc, "pointerdown,touchstart,mousedown", _pointerDownHandler);

        _multiListener(ScrollTrigger_addListener, ScrollTrigger_doc, "pointerup,touchend,mouseup", _pointerUpHandler);

        _transformProp = ScrollTrigger_gsap.utils.checkPrefix("transform");

        _stateProps.push(_transformProp);

        ScrollTrigger_coreInitted = ScrollTrigger_getTime();
        _resizeDelay = ScrollTrigger_gsap.delayedCall(0.2, _refreshAll).pause();
        _autoRefresh = [ScrollTrigger_doc, "visibilitychange", function () {
          var w = ScrollTrigger_win.innerWidth,
              h = ScrollTrigger_win.innerHeight;

          if (ScrollTrigger_doc.hidden) {
            _prevWidth = w;
            _prevHeight = h;
          } else if (_prevWidth !== w || _prevHeight !== h) {
            _onResize();
          }
        }, ScrollTrigger_doc, "DOMContentLoaded", _refreshAll, ScrollTrigger_win, "load", _refreshAll, ScrollTrigger_win, "resize", _onResize];

        _iterateAutoRefresh(ScrollTrigger_addListener);

        _triggers.forEach(function (trigger) {
          return trigger.enable(0, 1);
        });

        for (i = 0; i < _scrollers.length; i += 3) {
          _wheelListener(ScrollTrigger_removeListener, _scrollers[i], _scrollers[i + 1]);

          _wheelListener(ScrollTrigger_removeListener, _scrollers[i], _scrollers[i + 2]);
        }
      }
    }
  };

  ScrollTrigger.config = function config(vars) {
    "limitCallbacks" in vars && (_limitCallbacks = !!vars.limitCallbacks);
    var ms = vars.syncInterval;
    ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);
    "ignoreMobileResize" in vars && (_ignoreMobileResize = ScrollTrigger.isTouch === 1 && vars.ignoreMobileResize);

    if ("autoRefreshEvents" in vars) {
      _iterateAutoRefresh(ScrollTrigger_removeListener) || _iterateAutoRefresh(ScrollTrigger_addListener, vars.autoRefreshEvents || "none");
      _ignoreResize = (vars.autoRefreshEvents + "").indexOf("resize") === -1;
    }
  };

  ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {
    var t = _getTarget(target),
        i = _scrollers.indexOf(t),
        isViewport = ScrollTrigger_isViewport(t);

    if (~i) {
      _scrollers.splice(i, isViewport ? 6 : 2);
    }

    if (vars) {
      isViewport ? _proxies.unshift(ScrollTrigger_win, vars, ScrollTrigger_body, vars, ScrollTrigger_docEl, vars) : _proxies.unshift(t, vars);
    }
  };

  ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {
    _triggers.forEach(function (t) {
      return t._ctx && t._ctx.query === query && t._ctx.kill(true, true);
    });
  };

  ScrollTrigger.isInViewport = function isInViewport(element, ratio, horizontal) {
    var bounds = (_isString(element) ? _getTarget(element) : element).getBoundingClientRect(),
        offset = bounds[horizontal ? _width : _height] * ratio || 0;
    return horizontal ? bounds.right - offset > 0 && bounds.left + offset < ScrollTrigger_win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < ScrollTrigger_win.innerHeight;
  };

  ScrollTrigger.positionInViewport = function positionInViewport(element, referencePoint, horizontal) {
    _isString(element) && (element = _getTarget(element));
    var bounds = element.getBoundingClientRect(),
        size = bounds[horizontal ? _width : _height],
        offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf("%") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0;
    return horizontal ? (bounds.left + offset) / ScrollTrigger_win.innerWidth : (bounds.top + offset) / ScrollTrigger_win.innerHeight;
  };

  ScrollTrigger.killAll = function killAll(allowListeners) {
    _triggers.slice(0).forEach(function (t) {
      return t.vars.id !== "ScrollSmoother" && t.kill();
    });

    if (allowListeners !== true) {
      var listeners = _listeners.killAll || [];
      _listeners = {};
      listeners.forEach(function (f) {
        return f();
      });
    }
  };

  return ScrollTrigger;
}();
ScrollTrigger_ScrollTrigger.version = "3.12.5";

ScrollTrigger_ScrollTrigger.saveStyles = function (targets) {
  return targets ? _toArray(targets).forEach(function (target) {
    // saved styles are recorded in a consecutive alternating Array, like [element, cssText, transform attribute, cache, matchMedia, ...]
    if (target && target.style) {
      var i = _savedStyles.indexOf(target);

      i >= 0 && _savedStyles.splice(i, 5);

      _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute("transform"), ScrollTrigger_gsap.core.getCache(target), ScrollTrigger_context());
    }
  }) : _savedStyles;
};

ScrollTrigger_ScrollTrigger.revert = function (soft, media) {
  return _revertAll(!soft, media);
};

ScrollTrigger_ScrollTrigger.create = function (vars, animation) {
  return new ScrollTrigger_ScrollTrigger(vars, animation);
};

ScrollTrigger_ScrollTrigger.refresh = function (safe) {
  return safe ? _onResize() : (ScrollTrigger_coreInitted || ScrollTrigger_ScrollTrigger.register()) && _refreshAll(true);
};

ScrollTrigger_ScrollTrigger.update = function (force) {
  return ++_scrollers.cache && _updateAll(force === true ? 2 : 0);
};

ScrollTrigger_ScrollTrigger.clearScrollMemory = _clearScrollMemory;

ScrollTrigger_ScrollTrigger.maxScroll = function (element, horizontal) {
  return _maxScroll(element, horizontal ? _horizontal : _vertical);
};

ScrollTrigger_ScrollTrigger.getScrollFunc = function (element, horizontal) {
  return _getScrollFunc(_getTarget(element), horizontal ? _horizontal : _vertical);
};

ScrollTrigger_ScrollTrigger.getById = function (id) {
  return _ids[id];
};

ScrollTrigger_ScrollTrigger.getAll = function () {
  return _triggers.filter(function (t) {
    return t.vars.id !== "ScrollSmoother";
  });
}; // it's common for people to ScrollTrigger.getAll(t => t.kill()) on page routes, for example, and we don't want it to ruin smooth scrolling by killing the main ScrollSmoother one.


ScrollTrigger_ScrollTrigger.isScrolling = function () {
  return !!_lastScrollTime;
};

ScrollTrigger_ScrollTrigger.snapDirectional = _snapDirectional;

ScrollTrigger_ScrollTrigger.addEventListener = function (type, callback) {
  var a = _listeners[type] || (_listeners[type] = []);
  ~a.indexOf(callback) || a.push(callback);
};

ScrollTrigger_ScrollTrigger.removeEventListener = function (type, callback) {
  var a = _listeners[type],
      i = a && a.indexOf(callback);
  i >= 0 && a.splice(i, 1);
};

ScrollTrigger_ScrollTrigger.batch = function (targets, vars) {
  var result = [],
      varsCopy = {},
      interval = vars.interval || 0.016,
      batchMax = vars.batchMax || 1e9,
      proxyCallback = function proxyCallback(type, callback) {
    var elements = [],
        triggers = [],
        delay = ScrollTrigger_gsap.delayedCall(interval, function () {
      callback(elements, triggers);
      elements = [];
      triggers = [];
    }).pause();
    return function (self) {
      elements.length || delay.restart(true);
      elements.push(self.trigger);
      triggers.push(self);
      batchMax <= elements.length && delay.progress(1);
    };
  },
      p;

  for (p in vars) {
    varsCopy[p] = p.substr(0, 2) === "on" && _isFunction(vars[p]) && p !== "onRefreshInit" ? proxyCallback(p, vars[p]) : vars[p];
  }

  if (_isFunction(batchMax)) {
    batchMax = batchMax();

    ScrollTrigger_addListener(ScrollTrigger_ScrollTrigger, "refresh", function () {
      return batchMax = vars.batchMax();
    });
  }

  _toArray(targets).forEach(function (target) {
    var config = {};

    for (p in varsCopy) {
      config[p] = varsCopy[p];
    }

    config.trigger = target;
    result.push(ScrollTrigger_ScrollTrigger.create(config));
  });

  return result;
}; // to reduce file size. clamps the scroll and also returns a duration multiplier so that if the scroll gets chopped shorter, the duration gets curtailed as well (otherwise if you're very close to the top of the page, for example, and swipe up really fast, it'll suddenly slow down and take a long time to reach the top).


var _clampScrollAndGetDurationMultiplier = function _clampScrollAndGetDurationMultiplier(scrollFunc, current, end, max) {
  current > max ? scrollFunc(max) : current < 0 && scrollFunc(0);
  return end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1;
},
    _allowNativePanning = function _allowNativePanning(target, direction) {
  if (direction === true) {
    target.style.removeProperty("touch-action");
  } else {
    target.style.touchAction = direction === true ? "auto" : direction ? "pan-" + direction + (Observer.isTouch ? " pinch-zoom" : "") : "none"; // note: Firefox doesn't support it pinch-zoom properly, at least in addition to a pan-x or pan-y.
  }

  target === ScrollTrigger_docEl && _allowNativePanning(ScrollTrigger_body, direction);
},
    _overflow = {
  auto: 1,
  scroll: 1
},
    _nestedScroll = function _nestedScroll(_ref5) {
  var event = _ref5.event,
      target = _ref5.target,
      axis = _ref5.axis;

  var node = (event.changedTouches ? event.changedTouches[0] : event).target,
      cache = node._gsap || ScrollTrigger_gsap.core.getCache(node),
      time = ScrollTrigger_getTime(),
      cs;

  if (!cache._isScrollT || time - cache._isScrollT > 2000) {
    // cache for 2 seconds to improve performance.
    while (node && node !== ScrollTrigger_body && (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth || !(_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]))) {
      node = node.parentNode;
    }

    cache._isScroll = node && node !== target && !ScrollTrigger_isViewport(node) && (_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]);
    cache._isScrollT = time;
  }

  if (cache._isScroll || axis === "x") {
    event.stopPropagation();
    event._gsapAllow = true;
  }
},
    // capture events on scrollable elements INSIDE the <body> and allow those by calling stopPropagation() when we find a scrollable ancestor
_inputObserver = function _inputObserver(target, type, inputs, nested) {
  return Observer.create({
    target: target,
    capture: true,
    debounce: false,
    lockAxis: true,
    type: type,
    onWheel: nested = nested && _nestedScroll,
    onPress: nested,
    onDrag: nested,
    onScroll: nested,
    onEnable: function onEnable() {
      return inputs && ScrollTrigger_addListener(ScrollTrigger_doc, Observer.eventTypes[0], _captureInputs, false, true);
    },
    onDisable: function onDisable() {
      return ScrollTrigger_removeListener(ScrollTrigger_doc, Observer.eventTypes[0], _captureInputs, true);
    }
  });
},
    _inputExp = /(input|label|select|textarea)/i,
    _inputIsFocused,
    _captureInputs = function _captureInputs(e) {
  var isInput = _inputExp.test(e.target.tagName);

  if (isInput || _inputIsFocused) {
    e._gsapAllow = true;
    _inputIsFocused = isInput;
  }
},
    _getScrollNormalizer = function _getScrollNormalizer(vars) {
  _isObject(vars) || (vars = {});
  vars.preventDefault = vars.isNormalizer = vars.allowClicks = true;
  vars.type || (vars.type = "wheel,touch");
  vars.debounce = !!vars.debounce;
  vars.id = vars.id || "normalizer";

  var _vars2 = vars,
      normalizeScrollX = _vars2.normalizeScrollX,
      momentum = _vars2.momentum,
      allowNestedScroll = _vars2.allowNestedScroll,
      onRelease = _vars2.onRelease,
      self,
      maxY,
      target = _getTarget(vars.target) || ScrollTrigger_docEl,
      smoother = ScrollTrigger_gsap.core.globals().ScrollSmoother,
      smootherInstance = smoother && smoother.get(),
      content = _fixIOSBug && (vars.content && _getTarget(vars.content) || smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content()),
      scrollFuncY = _getScrollFunc(target, _vertical),
      scrollFuncX = _getScrollFunc(target, _horizontal),
      scale = 1,
      initialScale = (Observer.isTouch && ScrollTrigger_win.visualViewport ? ScrollTrigger_win.visualViewport.scale * ScrollTrigger_win.visualViewport.width : ScrollTrigger_win.outerWidth) / ScrollTrigger_win.innerWidth,
      wheelRefresh = 0,
      resolveMomentumDuration = _isFunction(momentum) ? function () {
    return momentum(self);
  } : function () {
    return momentum || 2.8;
  },
      lastRefreshID,
      skipTouchMove,
      inputObserver = _inputObserver(target, vars.type, true, allowNestedScroll),
      resumeTouchMove = function resumeTouchMove() {
    return skipTouchMove = false;
  },
      scrollClampX = _passThrough,
      scrollClampY = _passThrough,
      updateClamps = function updateClamps() {
    maxY = _maxScroll(target, _vertical);
    scrollClampY = ScrollTrigger_clamp(_fixIOSBug ? 1 : 0, maxY);
    normalizeScrollX && (scrollClampX = ScrollTrigger_clamp(0, _maxScroll(target, _horizontal)));
    lastRefreshID = _refreshID;
  },
      removeContentOffset = function removeContentOffset() {
    content._gsap.y = _round(parseFloat(content._gsap.y) + scrollFuncY.offset) + "px";
    content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + parseFloat(content._gsap.y) + ", 0, 1)";
    scrollFuncY.offset = scrollFuncY.cacheID = 0;
  },
      ignoreDrag = function ignoreDrag() {
    if (skipTouchMove) {
      requestAnimationFrame(resumeTouchMove);

      var offset = _round(self.deltaY / 2),
          scroll = scrollClampY(scrollFuncY.v - offset);

      if (content && scroll !== scrollFuncY.v + scrollFuncY.offset) {
        scrollFuncY.offset = scroll - scrollFuncY.v;

        var y = _round((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset);

        content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + y + ", 0, 1)";
        content._gsap.y = y + "px";
        scrollFuncY.cacheID = _scrollers.cache;

        _updateAll();
      }

      return true;
    }

    scrollFuncY.offset && removeContentOffset();
    skipTouchMove = true;
  },
      tween,
      startScrollX,
      startScrollY,
      onStopDelayedCall,
      onResize = function onResize() {
    // if the window resizes, like on an iPhone which Apple FORCES the address bar to show/hide even if we event.preventDefault(), it may be scrolling too far now that the address bar is showing, so we must dynamically adjust the momentum tween.
    updateClamps();

    if (tween.isActive() && tween.vars.scrollY > maxY) {
      scrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo("scrollY", maxY);
    }
  };

  content && ScrollTrigger_gsap.set(content, {
    y: "+=0"
  }); // to ensure there's a cache (element._gsap)

  vars.ignoreCheck = function (e) {
    return _fixIOSBug && e.type === "touchmove" && ignoreDrag(e) || scale > 1.05 && e.type !== "touchstart" || self.isGesturing || e.touches && e.touches.length > 1;
  };

  vars.onPress = function () {
    skipTouchMove = false;
    var prevScale = scale;
    scale = _round((ScrollTrigger_win.visualViewport && ScrollTrigger_win.visualViewport.scale || 1) / initialScale);
    tween.pause();
    prevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : "x");
    startScrollX = scrollFuncX();
    startScrollY = scrollFuncY();
    updateClamps();
    lastRefreshID = _refreshID;
  };

  vars.onRelease = vars.onGestureStart = function (self, wasDragging) {
    scrollFuncY.offset && removeContentOffset();

    if (!wasDragging) {
      onStopDelayedCall.restart(true);
    } else {
      _scrollers.cache++; // make sure we're pulling the non-cached value
      // alternate algorithm: durX = Math.min(6, Math.abs(self.velocityX / 800)),	dur = Math.max(durX, Math.min(6, Math.abs(self.velocityY / 800))); dur = dur * (0.4 + (1 - _power4In(dur / 6)) * 0.6)) * (momentumSpeed || 1)

      var dur = resolveMomentumDuration(),
          currentScroll,
          endScroll;

      if (normalizeScrollX) {
        currentScroll = scrollFuncX();
        endScroll = currentScroll + dur * 0.05 * -self.velocityX / 0.227; // the constant .227 is from power4(0.05). velocity is inverted because scrolling goes in the opposite direction.

        dur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _horizontal));
        tween.vars.scrollX = scrollClampX(endScroll);
      }

      currentScroll = scrollFuncY();
      endScroll = currentScroll + dur * 0.05 * -self.velocityY / 0.227; // the constant .227 is from power4(0.05)

      dur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _vertical));
      tween.vars.scrollY = scrollClampY(endScroll);
      tween.invalidate().duration(dur).play(0.01);

      if (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY - 1) {
        // iOS bug: it'll show the address bar but NOT fire the window "resize" event until the animation is done but we must protect against overshoot so we leverage an onUpdate to do so.
        ScrollTrigger_gsap.to({}, {
          onUpdate: onResize,
          duration: dur
        });
      }
    }

    onRelease && onRelease(self);
  };

  vars.onWheel = function () {
    tween._ts && tween.pause();

    if (ScrollTrigger_getTime() - wheelRefresh > 1000) {
      // after 1 second, refresh the clamps otherwise that'll only happen when ScrollTrigger.refresh() is called or for touch-scrolling.
      lastRefreshID = 0;
      wheelRefresh = ScrollTrigger_getTime();
    }
  };

  vars.onChange = function (self, dx, dy, xArray, yArray) {
    _refreshID !== lastRefreshID && updateClamps();
    dx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self.startX - self.x) : scrollFuncX() + dx - xArray[1])); // for more precision, we track pointer/touch movement from the start, otherwise it'll drift.

    if (dy) {
      scrollFuncY.offset && removeContentOffset();
      var isTouch = yArray[2] === dy,
          y = isTouch ? startScrollY + self.startY - self.y : scrollFuncY() + dy - yArray[1],
          yClamped = scrollClampY(y);
      isTouch && y !== yClamped && (startScrollY += yClamped - y);
      scrollFuncY(yClamped);
    }

    (dy || dx) && _updateAll();
  };

  vars.onEnable = function () {
    _allowNativePanning(target, normalizeScrollX ? false : "x");

    ScrollTrigger_ScrollTrigger.addEventListener("refresh", onResize);

    ScrollTrigger_addListener(ScrollTrigger_win, "resize", onResize);

    if (scrollFuncY.smooth) {
      scrollFuncY.target.style.scrollBehavior = "auto";
      scrollFuncY.smooth = scrollFuncX.smooth = false;
    }

    inputObserver.enable();
  };

  vars.onDisable = function () {
    _allowNativePanning(target, true);

    ScrollTrigger_removeListener(ScrollTrigger_win, "resize", onResize);

    ScrollTrigger_ScrollTrigger.removeEventListener("refresh", onResize);
    inputObserver.kill();
  };

  vars.lockAxis = vars.lockAxis !== false;
  self = new Observer(vars);
  self.iOS = _fixIOSBug; // used in the Observer getCachedScroll() function to work around an iOS bug that wreaks havoc with TouchEvent.clientY if we allow scroll to go all the way back to 0.

  _fixIOSBug && !scrollFuncY() && scrollFuncY(1); // iOS bug causes event.clientY values to freak out (wildly inaccurate) if the scroll position is exactly 0.

  _fixIOSBug && ScrollTrigger_gsap.ticker.add(_passThrough); // prevent the ticker from sleeping

  onStopDelayedCall = self._dc;
  tween = ScrollTrigger_gsap.to(self, {
    ease: "power4",
    paused: true,
    inherit: false,
    scrollX: normalizeScrollX ? "+=0.1" : "+=0",
    scrollY: "+=0.1",
    modifiers: {
      scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), function () {
        return tween.pause();
      })
    },
    onUpdate: _updateAll,
    onComplete: onStopDelayedCall.vars.onComplete
  }); // we need the modifier to sense if the scroll position is altered outside of the momentum tween (like with a scrollTo tween) so we can pause() it to prevent conflicts.

  return self;
};

ScrollTrigger_ScrollTrigger.sort = function (func) {
  return _triggers.sort(func || function (a, b) {
    return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6);
  });
};

ScrollTrigger_ScrollTrigger.observe = function (vars) {
  return new Observer(vars);
};

ScrollTrigger_ScrollTrigger.normalizeScroll = function (vars) {
  if (typeof vars === "undefined") {
    return ScrollTrigger_normalizer;
  }

  if (vars === true && ScrollTrigger_normalizer) {
    return ScrollTrigger_normalizer.enable();
  }

  if (vars === false) {
    ScrollTrigger_normalizer && ScrollTrigger_normalizer.kill();
    ScrollTrigger_normalizer = vars;
    return;
  }

  var normalizer = vars instanceof Observer ? vars : _getScrollNormalizer(vars);
  ScrollTrigger_normalizer && ScrollTrigger_normalizer.target === normalizer.target && ScrollTrigger_normalizer.kill();
  ScrollTrigger_isViewport(normalizer.target) && (ScrollTrigger_normalizer = normalizer);
  return normalizer;
};

ScrollTrigger_ScrollTrigger.core = {
  // smaller file size way to leverage in ScrollSmoother and Observer
  _getVelocityProp: _getVelocityProp,
  _inputObserver: _inputObserver,
  _scrollers: _scrollers,
  _proxies: _proxies,
  bridge: {
    // when normalizeScroll sets the scroll position (ss = setScroll)
    ss: function ss() {
      _lastScrollTime || _dispatch("scrollStart");
      _lastScrollTime = ScrollTrigger_getTime();
    },
    // a way to get the _refreshing value in Observer
    ref: function ref() {
      return _refreshing;
    }
  }
};
ScrollTrigger_getGSAP() && ScrollTrigger_gsap.registerPlugin(ScrollTrigger_ScrollTrigger);


/***/ }),

/***/ 66358:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "ZP": () => (/* binding */ gsapWithCSS)
});

// UNUSED EXPORTS: Back, Bounce, CSSPlugin, Circ, Cubic, Elastic, Expo, Linear, Power0, Power1, Power2, Power3, Power4, Quad, Quart, Quint, Sine, SteppedEase, Strong, TimelineLite, TimelineMax, TweenLite, TweenMax, gsap

;// CONCATENATED MODULE: ./node_modules/gsap/gsap-core.js
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }

/*!
 * GSAP 3.12.5
 * https://gsap.com
 *
 * @license Copyright 2008-2024, GreenSock. All rights reserved.
 * Subject to the terms at https://gsap.com/standard-license or for
 * Club GSAP members, the agreement issued with that membership.
 * @author: Jack Doyle, jack@greensock.com
*/

/* eslint-disable */
var _config = {
  autoSleep: 120,
  force3D: "auto",
  nullTargetWarn: 1,
  units: {
    lineHeight: ""
  }
},
    _defaults = {
  duration: .5,
  overwrite: false,
  delay: 0
},
    _suppressOverwrites,
    _reverting,
    _context,
    _bigNum = 1e8,
    _tinyNum = 1 / _bigNum,
    _2PI = Math.PI * 2,
    _HALF_PI = _2PI / 4,
    _gsID = 0,
    _sqrt = Math.sqrt,
    _cos = Math.cos,
    _sin = Math.sin,
    _isString = function _isString(value) {
  return typeof value === "string";
},
    _isFunction = function _isFunction(value) {
  return typeof value === "function";
},
    _isNumber = function _isNumber(value) {
  return typeof value === "number";
},
    _isUndefined = function _isUndefined(value) {
  return typeof value === "undefined";
},
    _isObject = function _isObject(value) {
  return typeof value === "object";
},
    _isNotFalse = function _isNotFalse(value) {
  return value !== false;
},
    _windowExists = function _windowExists() {
  return typeof window !== "undefined";
},
    _isFuncOrString = function _isFuncOrString(value) {
  return _isFunction(value) || _isString(value);
},
    _isTypedArray = typeof ArrayBuffer === "function" && ArrayBuffer.isView || function () {},
    // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().
_isArray = Array.isArray,
    _strictNumExp = /(?:-?\.?\d|\.)+/gi,
    //only numbers (including negatives and decimals) but NOT relative values.
_numExp = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,
    //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.
_numWithUnitExp = /[-+=.]*\d+[.e-]*\d*[a-z%]*/g,
    _complexStringNumExp = /[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,
    //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.
_relExp = /[+-]=-?[.\d]+/,
    _delimitedValueExp = /[^,'"\[\]\s]+/gi,
    // previously /[#\-+.]*\b[a-z\d\-=+%.]+/gi but didn't catch special characters.
_unitExp = /^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,
    _globalTimeline,
    _win,
    _coreInitted,
    _doc,
    _globals = {},
    _installScope = {},
    _coreReady,
    _install = function _install(scope) {
  return (_installScope = _merge(scope, _globals)) && gsap;
},
    _missingPlugin = function _missingPlugin(property, value) {
  return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()");
},
    _warn = function _warn(message, suppress) {
  return !suppress && console.warn(message);
},
    _addGlobal = function _addGlobal(name, obj) {
  return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;
},
    _emptyFunc = function _emptyFunc() {
  return 0;
},
    _startAtRevertConfig = {
  suppressEvents: true,
  isStart: true,
  kill: false
},
    _revertConfigNoKill = {
  suppressEvents: true,
  kill: false
},
    _revertConfig = {
  suppressEvents: true
},
    _reservedProps = {},
    _lazyTweens = [],
    _lazyLookup = {},
    _lastRenderedFrame,
    _plugins = {},
    _effects = {},
    _nextGCFrame = 30,
    _harnessPlugins = [],
    _callbackNames = "",
    _harness = function _harness(targets) {
  var target = targets[0],
      harnessPlugin,
      i;
  _isObject(target) || _isFunction(target) || (targets = [targets]);

  if (!(harnessPlugin = (target._gsap || {}).harness)) {
    // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)
    i = _harnessPlugins.length;

    while (i-- && !_harnessPlugins[i].targetTest(target)) {}

    harnessPlugin = _harnessPlugins[i];
  }

  i = targets.length;

  while (i--) {
    targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);
  }

  return targets;
},
    _getCache = function _getCache(target) {
  return target._gsap || _harness(toArray(target))[0]._gsap;
},
    _getProperty = function _getProperty(target, property, v) {
  return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;
},
    _forEachName = function _forEachName(names, func) {
  return (names = names.split(",")).forEach(func) || names;
},
    //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).
_round = function _round(value) {
  return Math.round(value * 100000) / 100000 || 0;
},
    _roundPrecise = function _roundPrecise(value) {
  return Math.round(value * 10000000) / 10000000 || 0;
},
    // increased precision mostly for timing values.
_parseRelative = function _parseRelative(start, value) {
  var operator = value.charAt(0),
      end = parseFloat(value.substr(2));
  start = parseFloat(start);
  return operator === "+" ? start + end : operator === "-" ? start - end : operator === "*" ? start * end : start / end;
},
    _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {
  //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.
  var l = toFind.length,
      i = 0;

  for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}

  return i < l;
},
    _lazyRender = function _lazyRender() {
  var l = _lazyTweens.length,
      a = _lazyTweens.slice(0),
      i,
      tween;

  _lazyLookup = {};
  _lazyTweens.length = 0;

  for (i = 0; i < l; i++) {
    tween = a[i];
    tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);
  }
},
    _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {
  _lazyTweens.length && !_reverting && _lazyRender();
  animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt));
  _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.
},
    _numericIfPossible = function _numericIfPossible(value) {
  var n = parseFloat(value);
  return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;
},
    _passThrough = function _passThrough(p) {
  return p;
},
    _setDefaults = function _setDefaults(obj, defaults) {
  for (var p in defaults) {
    p in obj || (obj[p] = defaults[p]);
  }

  return obj;
},
    _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {
  return function (obj, defaults) {
    for (var p in defaults) {
      p in obj || p === "duration" && excludeDuration || p === "ease" || (obj[p] = defaults[p]);
    }
  };
},
    _merge = function _merge(base, toMerge) {
  for (var p in toMerge) {
    base[p] = toMerge[p];
  }

  return base;
},
    _mergeDeep = function _mergeDeep(base, toMerge) {
  for (var p in toMerge) {
    p !== "__proto__" && p !== "constructor" && p !== "prototype" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);
  }

  return base;
},
    _copyExcluding = function _copyExcluding(obj, excluding) {
  var copy = {},
      p;

  for (p in obj) {
    p in excluding || (copy[p] = obj[p]);
  }

  return copy;
},
    _inheritDefaults = function _inheritDefaults(vars) {
  var parent = vars.parent || _globalTimeline,
      func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;

  if (_isNotFalse(vars.inherit)) {
    while (parent) {
      func(vars, parent.vars.defaults);
      parent = parent.parent || parent._dp;
    }
  }

  return vars;
},
    _arraysMatch = function _arraysMatch(a1, a2) {
  var i = a1.length,
      match = i === a2.length;

  while (match && i-- && a1[i] === a2[i]) {}

  return i < 0;
},
    _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {
  if (firstProp === void 0) {
    firstProp = "_first";
  }

  if (lastProp === void 0) {
    lastProp = "_last";
  }

  var prev = parent[lastProp],
      t;

  if (sortBy) {
    t = child[sortBy];

    while (prev && prev[sortBy] > t) {
      prev = prev._prev;
    }
  }

  if (prev) {
    child._next = prev._next;
    prev._next = child;
  } else {
    child._next = parent[firstProp];
    parent[firstProp] = child;
  }

  if (child._next) {
    child._next._prev = child;
  } else {
    parent[lastProp] = child;
  }

  child._prev = prev;
  child.parent = child._dp = parent;
  return child;
},
    _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {
  if (firstProp === void 0) {
    firstProp = "_first";
  }

  if (lastProp === void 0) {
    lastProp = "_last";
  }

  var prev = child._prev,
      next = child._next;

  if (prev) {
    prev._next = next;
  } else if (parent[firstProp] === child) {
    parent[firstProp] = next;
  }

  if (next) {
    next._prev = prev;
  } else if (parent[lastProp] === child) {
    parent[lastProp] = prev;
  }

  child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.
},
    _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {
  child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);
  child._act = 0;
},
    _uncache = function _uncache(animation, child) {
  if (animation && (!child || child._end > animation._dur || child._start < 0)) {
    // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)
    var a = animation;

    while (a) {
      a._dirty = 1;
      a = a.parent;
    }
  }

  return animation;
},
    _recacheAncestors = function _recacheAncestors(animation) {
  var parent = animation.parent;

  while (parent && parent.parent) {
    //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.
    parent._dirty = 1;
    parent.totalDuration();
    parent = parent.parent;
  }

  return animation;
},
    _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {
  return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));
},
    _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {
  return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);
},
    _elapsedCycleDuration = function _elapsedCycleDuration(animation) {
  return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;
},
    // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.
_animationCycle = function _animationCycle(tTime, cycleDuration) {
  var whole = Math.floor(tTime /= cycleDuration);
  return tTime && whole === tTime ? whole - 1 : whole;
},
    _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {
  return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);
},
    _setEnd = function _setEnd(animation) {
  return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));
},
    _alignPlayhead = function _alignPlayhead(animation, totalTime) {
  // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.
  var parent = animation._dp;

  if (parent && parent.smoothChildTiming && animation._ts) {
    animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));

    _setEnd(animation);

    parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.
  }

  return animation;
},

/*
_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {
	let cycleDuration = duration + repeatDelay,
		time = _round(clampedTotalTime % cycleDuration);
	if (time > duration) {
		time = duration;
	}
	return (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;
},
*/
_postAddChecks = function _postAddChecks(timeline, child) {
  var t;

  if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) {
    // in case, for example, the _start is moved on a tween that has already rendered, or if it's being inserted into a timeline BEFORE where the playhead is currently. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning. Special case: if it's a timeline (has .add() method) and no duration, we can skip rendering because the user may be populating it AFTER adding it to a parent timeline (unconventional, but possible, and we wouldn't want it to get removed if the parent's autoRemoveChildren is true).
    t = _parentToChildTotalTime(timeline.rawTime(), child);

    if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {
      child.render(t, true);
    }
  } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.


  if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {
    //in case any of the ancestors had completed but should now be enabled...
    if (timeline._dur < timeline.duration()) {
      t = timeline;

      while (t._dp) {
        t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.

        t = t._dp;
      }
    }

    timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.
  }
},
    _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {
  child.parent && _removeFromParent(child);
  child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);
  child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));

  _addLinkedListItem(timeline, child, "_first", "_last", timeline._sort ? "_start" : 0);

  _isFromOrFromStart(child) || (timeline._recent = child);
  skipChecks || _postAddChecks(timeline, child);
  timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back)

  return timeline;
},
    _scrollTrigger = function _scrollTrigger(animation, trigger) {
  return (_globals.ScrollTrigger || _missingPlugin("scrollTrigger", trigger)) && _globals.ScrollTrigger.create(trigger, animation);
},
    _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {
  _initTween(tween, time, tTime);

  if (!tween._initted) {
    return 1;
  }

  if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {
    _lazyTweens.push(tween);

    tween._lazy = [tTime, suppressEvents];
    return 1;
  }
},
    _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {
  var parent = _ref.parent;
  return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));
},
    // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0
_isFromOrFromStart = function _isFromOrFromStart(_ref2) {
  var data = _ref2.data;
  return data === "isFromStart" || data === "isStart";
},
    _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {
  var prevRatio = tween.ratio,
      ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,
      // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the "startAt" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any "from" and "fromTo" startAt tweens are rendered the first time at a ratio of 1.
  repeatDelay = tween._rDelay,
      tTime = 0,
      pt,
      iteration,
      prevIteration;

  if (repeatDelay && tween._repeat) {
    // in case there's a zero-duration tween that has a repeat with a repeatDelay
    tTime = _clamp(0, tween._tDur, totalTime);
    iteration = _animationCycle(tTime, repeatDelay);
    tween._yoyo && iteration & 1 && (ratio = 1 - ratio);

    if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {
      // if iteration changed
      prevRatio = 1 - ratio;
      tween.vars.repeatRefresh && tween._initted && tween.invalidate();
    }
  }

  if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {
    if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {
      // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.
      return;
    }

    prevIteration = tween._zTime;
    tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.

    suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.

    tween.ratio = ratio;
    tween._from && (ratio = 1 - ratio);
    tween._time = 0;
    tween._tTime = tTime;
    pt = tween._pt;

    while (pt) {
      pt.r(ratio, pt.d);
      pt = pt._next;
    }

    totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);
    tween._onUpdate && !suppressEvents && _callback(tween, "onUpdate");
    tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, "onRepeat");

    if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {
      ratio && _removeFromParent(tween, 1);

      if (!suppressEvents && !_reverting) {
        _callback(tween, ratio ? "onComplete" : "onReverseComplete", true);

        tween._prom && tween._prom();
      }
    }
  } else if (!tween._zTime) {
    tween._zTime = totalTime;
  }
},
    _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {
  var child;

  if (time > prevTime) {
    child = animation._first;

    while (child && child._start <= time) {
      if (child.data === "isPause" && child._start > prevTime) {
        return child;
      }

      child = child._next;
    }
  } else {
    child = animation._last;

    while (child && child._start >= time) {
      if (child.data === "isPause" && child._start < prevTime) {
        return child;
      }

      child = child._prev;
    }
  }
},
    _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {
  var repeat = animation._repeat,
      dur = _roundPrecise(duration) || 0,
      totalProgress = animation._tTime / animation._tDur;
  totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);
  animation._dur = dur;
  animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);
  totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);
  animation.parent && _setEnd(animation);
  skipUncache || _uncache(animation.parent, animation);
  return animation;
},
    _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {
  return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);
},
    _zeroPosition = {
  _start: 0,
  endTime: _emptyFunc,
  totalDuration: _emptyFunc
},
    _parsePosition = function _parsePosition(animation, position, percentAnimation) {
  var labels = animation.labels,
      recent = animation._recent || _zeroPosition,
      clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,
      //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.
  i,
      offset,
      isPercent;

  if (_isString(position) && (isNaN(position) || position in labels)) {
    //if the string is a number like "1", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).
    offset = position.charAt(0);
    isPercent = position.substr(-1) === "%";
    i = position.indexOf("=");

    if (offset === "<" || offset === ">") {
      i >= 0 && (position = position.replace(/=/, ""));
      return (offset === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);
    }

    if (i < 0) {
      position in labels || (labels[position] = clippedDuration);
      return labels[position];
    }

    offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));

    if (isPercent && percentAnimation) {
      offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();
    }

    return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;
  }

  return position == null ? clippedDuration : +position;
},
    _createTweenType = function _createTweenType(type, params, timeline) {
  var isLegacy = _isNumber(params[1]),
      varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),
      vars = params[varsIndex],
      irVars,
      parent;

  isLegacy && (vars.duration = params[1]);
  vars.parent = timeline;

  if (type) {
    irVars = vars;
    parent = timeline;

    while (parent && !("immediateRender" in irVars)) {
      // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.
      irVars = parent.vars.defaults || {};
      parent = _isNotFalse(parent.vars.inherit) && parent.parent;
    }

    vars.immediateRender = _isNotFalse(irVars.immediateRender);
    type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // "from" vars
  }

  return new Tween(params[0], vars, params[varsIndex + 1]);
},
    _conditionalReturn = function _conditionalReturn(value, func) {
  return value || value === 0 ? func(value) : func;
},
    _clamp = function _clamp(min, max, value) {
  return value < min ? min : value > max ? max : value;
},
    getUnit = function getUnit(value, v) {
  return !_isString(value) || !(v = _unitExp.exec(value)) ? "" : v[1];
},
    // note: protect against padded numbers as strings, like "100.100". That shouldn't return "00" as the unit. If it's numeric, return no unit.
clamp = function clamp(min, max, value) {
  return _conditionalReturn(value, function (v) {
    return _clamp(min, max, v);
  });
},
    _slice = [].slice,
    _isArrayLike = function _isArrayLike(value, nonEmpty) {
  return value && _isObject(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;
},
    _flatten = function _flatten(ar, leaveStrings, accumulator) {
  if (accumulator === void 0) {
    accumulator = [];
  }

  return ar.forEach(function (value) {
    var _accumulator;

    return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);
  }) || accumulator;
},
    //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.
toArray = function toArray(value, scope, leaveStrings) {
  return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];
},
    selector = function selector(value) {
  value = toArray(value)[0] || _warn("Invalid scope") || {};
  return function (v) {
    var el = value.current || value.nativeElement || value;
    return toArray(v, el.querySelectorAll ? el : el === value ? _warn("Invalid scope") || _doc.createElement("div") : value);
  };
},
    shuffle = function shuffle(a) {
  return a.sort(function () {
    return .5 - Math.random();
  });
},
    // alternative that's a bit faster and more reliably diverse but bigger:   for (let j, v, i = a.length; i; j = Math.floor(Math.random() * i), v = a[--i], a[i] = a[j], a[j] = v); return a;
//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following
distribute = function distribute(v) {
  if (_isFunction(v)) {
    return v;
  }

  var vars = _isObject(v) ? v : {
    each: v
  },
      //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total "amount" that's chunked out among them all.
  ease = _parseEase(vars.ease),
      from = vars.from || 0,
      base = parseFloat(vars.base) || 0,
      cache = {},
      isDecimal = from > 0 && from < 1,
      ratios = isNaN(from) || isDecimal,
      axis = vars.axis,
      ratioX = from,
      ratioY = from;

  if (_isString(from)) {
    ratioX = ratioY = {
      center: .5,
      edges: .5,
      end: 1
    }[from] || 0;
  } else if (!isDecimal && ratios) {
    ratioX = from[0];
    ratioY = from[1];
  }

  return function (i, target, a) {
    var l = (a || vars).length,
        distances = cache[l],
        originX,
        originY,
        x,
        y,
        d,
        j,
        max,
        min,
        wrapAt;

    if (!distances) {
      wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum])[1];

      if (!wrapAt) {
        max = -_bigNum;

        while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}

        wrapAt < l && wrapAt--;
      }

      distances = cache[l] = [];
      originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;
      originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;
      max = 0;
      min = _bigNum;

      for (j = 0; j < l; j++) {
        x = j % wrapAt - originX;
        y = originY - (j / wrapAt | 0);
        distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x);
        d > max && (max = d);
        d < min && (min = d);
      }

      from === "random" && shuffle(distances);
      distances.max = max - min;
      distances.min = min;
      distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1);
      distances.b = l < 0 ? base - l : base;
      distances.u = getUnit(vars.amount || vars.each) || 0; //unit

      ease = ease && l < 0 ? _invertEase(ease) : ease;
    }

    l = (distances[i] - distances.min) / distances.max || 0;
    return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors
  };
},
    _roundModifier = function _roundModifier(v) {
  //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.
  var p = Math.pow(10, ((v + "").split(".")[1] || "").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())

  return function (raw) {
    var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);

    return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!
  };
},
    snap = function snap(snapTo, value) {
  var isArray = _isArray(snapTo),
      radius,
      is2D;

  if (!isArray && _isObject(snapTo)) {
    radius = isArray = snapTo.radius || _bigNum;

    if (snapTo.values) {
      snapTo = toArray(snapTo.values);

      if (is2D = !_isNumber(snapTo[0])) {
        radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.
      }
    } else {
      snapTo = _roundModifier(snapTo.increment);
    }
  }

  return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {
    is2D = snapTo(raw);
    return Math.abs(is2D - raw) <= radius ? is2D : raw;
  } : function (raw) {
    var x = parseFloat(is2D ? raw.x : raw),
        y = parseFloat(is2D ? raw.y : 0),
        min = _bigNum,
        closest = 0,
        i = snapTo.length,
        dx,
        dy;

    while (i--) {
      if (is2D) {
        dx = snapTo[i].x - x;
        dy = snapTo[i].y - y;
        dx = dx * dx + dy * dy;
      } else {
        dx = Math.abs(snapTo[i] - x);
      }

      if (dx < min) {
        min = dx;
        closest = i;
      }
    }

    closest = !radius || min <= radius ? snapTo[closest] : raw;
    return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);
  });
},
    random = function random(min, max, roundingIncrement, returnFunction) {
  return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {
    return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;
  });
},
    pipe = function pipe() {
  for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {
    functions[_key] = arguments[_key];
  }

  return function (value) {
    return functions.reduce(function (v, f) {
      return f(v);
    }, value);
  };
},
    unitize = function unitize(func, unit) {
  return function (value) {
    return func(parseFloat(value)) + (unit || getUnit(value));
  };
},
    normalize = function normalize(min, max, value) {
  return mapRange(min, max, 0, 1, value);
},
    _wrapArray = function _wrapArray(a, wrapper, value) {
  return _conditionalReturn(value, function (index) {
    return a[~~wrapper(index)];
  });
},
    wrap = function wrap(min, max, value) {
  // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).
  var range = max - min;
  return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {
    return (range + (value - min) % range) % range + min;
  });
},
    wrapYoyo = function wrapYoyo(min, max, value) {
  var range = max - min,
      total = range * 2;
  return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {
    value = (total + (value - min) % total) % total || 0;
    return min + (value > range ? total - value : value);
  });
},
    _replaceRandom = function _replaceRandom(value) {
  //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])
  var prev = 0,
      s = "",
      i,
      nums,
      end,
      isArray;

  while (~(i = value.indexOf("random(", prev))) {
    end = value.indexOf(")", i);
    isArray = value.charAt(i + 7) === "[";
    nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);
    s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);
    prev = end + 1;
  }

  return s + value.substr(prev, value.length - prev);
},
    mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {
  var inRange = inMax - inMin,
      outRange = outMax - outMin;
  return _conditionalReturn(value, function (value) {
    return outMin + ((value - inMin) / inRange * outRange || 0);
  });
},
    interpolate = function interpolate(start, end, progress, mutate) {
  var func = isNaN(start + end) ? 0 : function (p) {
    return (1 - p) * start + p * end;
  };

  if (!func) {
    var isString = _isString(start),
        master = {},
        p,
        i,
        interpolators,
        l,
        il;

    progress === true && (mutate = 1) && (progress = null);

    if (isString) {
      start = {
        p: start
      };
      end = {
        p: end
      };
    } else if (_isArray(start) && !_isArray(end)) {
      interpolators = [];
      l = start.length;
      il = l - 2;

      for (i = 1; i < l; i++) {
        interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.
      }

      l--;

      func = function func(p) {
        p *= l;
        var i = Math.min(il, ~~p);
        return interpolators[i](p - i);
      };

      progress = end;
    } else if (!mutate) {
      start = _merge(_isArray(start) ? [] : {}, start);
    }

    if (!interpolators) {
      for (p in end) {
        _addPropTween.call(master, start, p, "get", end[p]);
      }

      func = function func(p) {
        return _renderPropTweens(p, master) || (isString ? start.p : start);
      };
    }
  }

  return _conditionalReturn(progress, func);
},
    _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {
  //used for nextLabel() and previousLabel()
  var labels = timeline.labels,
      min = _bigNum,
      p,
      distance,
      label;

  for (p in labels) {
    distance = labels[p] - fromTime;

    if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {
      label = p;
      min = distance;
    }
  }

  return label;
},
    _callback = function _callback(animation, type, executeLazyFirst) {
  var v = animation.vars,
      callback = v[type],
      prevContext = _context,
      context = animation._ctx,
      params,
      scope,
      result;

  if (!callback) {
    return;
  }

  params = v[type + "Params"];
  scope = v.callbackScope || animation;
  executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.

  context && (_context = context);
  result = params ? callback.apply(scope, params) : callback.call(scope);
  _context = prevContext;
  return result;
},
    _interrupt = function _interrupt(animation) {
  _removeFromParent(animation);

  animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);
  animation.progress() < 1 && _callback(animation, "onInterrupt");
  return animation;
},
    _quickTween,
    _registerPluginQueue = [],
    _createPlugin = function _createPlugin(config) {
  if (!config) return;
  config = !config.name && config["default"] || config; // UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.

  if (_windowExists() || config.headless) {
    // edge case: some build tools may pass in a null/undefined value
    var name = config.name,
        isFunc = _isFunction(config),
        Plugin = name && !isFunc && config.init ? function () {
      this._props = [];
    } : config,
        //in case someone passes in an object that's not a plugin, like CustomEase
    instanceDefaults = {
      init: _emptyFunc,
      render: _renderPropTweens,
      add: _addPropTween,
      kill: _killPropTweensOf,
      modifier: _addPluginModifier,
      rawVars: 0
    },
        statics = {
      targetTest: 0,
      get: 0,
      getSetter: _getSetter,
      aliases: {},
      register: 0
    };

    _wake();

    if (config !== Plugin) {
      if (_plugins[name]) {
        return;
      }

      _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods


      _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods


      _plugins[Plugin.prop = name] = Plugin;

      if (config.targetTest) {
        _harnessPlugins.push(Plugin);

        _reservedProps[name] = 1;
      }

      name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin"; //for the global name. "motionPath" should become MotionPathPlugin
    }

    _addGlobal(name, Plugin);

    config.register && config.register(gsap, Plugin, PropTween);
  } else {
    _registerPluginQueue.push(config);
  }
},

/*
 * --------------------------------------------------------------------------------------
 * COLORS
 * --------------------------------------------------------------------------------------
 */
_255 = 255,
    _colorLookup = {
  aqua: [0, _255, _255],
  lime: [0, _255, 0],
  silver: [192, 192, 192],
  black: [0, 0, 0],
  maroon: [128, 0, 0],
  teal: [0, 128, 128],
  blue: [0, 0, _255],
  navy: [0, 0, 128],
  white: [_255, _255, _255],
  olive: [128, 128, 0],
  yellow: [_255, _255, 0],
  orange: [_255, 165, 0],
  gray: [128, 128, 128],
  purple: [128, 0, 128],
  green: [0, 128, 0],
  red: [_255, 0, 0],
  pink: [_255, 192, 203],
  cyan: [0, _255, _255],
  transparent: [_255, _255, _255, 0]
},
    // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc:
// let ctx = _doc.createElement("canvas").getContext("2d");
// _forEachName("aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)});
_hue = function _hue(h, m1, m2) {
  h += h < 0 ? 1 : h > 1 ? -1 : 0;
  return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;
},
    splitColor = function splitColor(v, toHSL, forceAlpha) {
  var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,
      r,
      g,
      b,
      h,
      s,
      l,
      max,
      min,
      d,
      wasHSL;

  if (!a) {
    if (v.substr(-1) === ",") {
      //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)" - in this example "blue," has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.
      v = v.substr(0, v.length - 1);
    }

    if (_colorLookup[v]) {
      a = _colorLookup[v];
    } else if (v.charAt(0) === "#") {
      if (v.length < 6) {
        //for shorthand like #9F0 or #9F0F (could have alpha)
        r = v.charAt(1);
        g = v.charAt(2);
        b = v.charAt(3);
        v = "#" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : "");
      }

      if (v.length === 9) {
        // hex with alpha, like #fd5e53ff
        a = parseInt(v.substr(1, 6), 16);
        return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];
      }

      v = parseInt(v.substr(1), 16);
      a = [v >> 16, v >> 8 & _255, v & _255];
    } else if (v.substr(0, 3) === "hsl") {
      a = wasHSL = v.match(_strictNumExp);

      if (!toHSL) {
        h = +a[0] % 360 / 360;
        s = +a[1] / 100;
        l = +a[2] / 100;
        g = l <= .5 ? l * (s + 1) : l + s - l * s;
        r = l * 2 - g;
        a.length > 3 && (a[3] *= 1); //cast as number

        a[0] = _hue(h + 1 / 3, r, g);
        a[1] = _hue(h, r, g);
        a[2] = _hue(h - 1 / 3, r, g);
      } else if (~v.indexOf("=")) {
        //if relative values are found, just return the raw strings with the relative prefixes in place.
        a = v.match(_numExp);
        forceAlpha && a.length < 4 && (a[3] = 1);
        return a;
      }
    } else {
      a = v.match(_strictNumExp) || _colorLookup.transparent;
    }

    a = a.map(Number);
  }

  if (toHSL && !wasHSL) {
    r = a[0] / _255;
    g = a[1] / _255;
    b = a[2] / _255;
    max = Math.max(r, g, b);
    min = Math.min(r, g, b);
    l = (max + min) / 2;

    if (max === min) {
      h = s = 0;
    } else {
      d = max - min;
      s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
      h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
      h *= 60;
    }

    a[0] = ~~(h + .5);
    a[1] = ~~(s * 100 + .5);
    a[2] = ~~(l * 100 + .5);
  }

  forceAlpha && a.length < 4 && (a[3] = 1);
  return a;
},
    _colorOrderData = function _colorOrderData(v) {
  // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a "c" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()
  var values = [],
      c = [],
      i = -1;
  v.split(_colorExp).forEach(function (v) {
    var a = v.match(_numWithUnitExp) || [];
    values.push.apply(values, a);
    c.push(i += a.length + 1);
  });
  values.c = c;
  return values;
},
    _formatColors = function _formatColors(s, toHSL, orderMatchData) {
  var result = "",
      colors = (s + result).match(_colorExp),
      type = toHSL ? "hsla(" : "rgba(",
      i = 0,
      c,
      shell,
      d,
      l;

  if (!colors) {
    return s;
  }

  colors = colors.map(function (color) {
    return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : color.join(",")) + ")";
  });

  if (orderMatchData) {
    d = _colorOrderData(s);
    c = orderMatchData.c;

    if (c.join(result) !== d.c.join(result)) {
      shell = s.replace(_colorExp, "1").split(_numWithUnitExp);
      l = shell.length - 1;

      for (; i < l; i++) {
        result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + "0,0,0,0)" : (d.length ? d : colors.length ? colors : orderMatchData).shift());
      }
    }
  }

  if (!shell) {
    shell = s.split(_colorExp);
    l = shell.length - 1;

    for (; i < l; i++) {
      result += shell[i] + colors[i];
    }
  }

  return result + shell[l];
},
    _colorExp = function () {
  var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b",
      //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,
  p;

  for (p in _colorLookup) {
    s += "|" + p + "\\b";
  }

  return new RegExp(s + ")", "gi");
}(),
    _hslExp = /hsl[a]?\(/,
    _colorStringFilter = function _colorStringFilter(a) {
  var combined = a.join(" "),
      toHSL;
  _colorExp.lastIndex = 0;

  if (_colorExp.test(combined)) {
    toHSL = _hslExp.test(combined);
    a[1] = _formatColors(a[1], toHSL);
    a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.

    return true;
  }
},

/*
 * --------------------------------------------------------------------------------------
 * TICKER
 * --------------------------------------------------------------------------------------
 */
_tickerActive,
    _ticker = function () {
  var _getTime = Date.now,
      _lagThreshold = 500,
      _adjustedLag = 33,
      _startTime = _getTime(),
      _lastUpdate = _startTime,
      _gap = 1000 / 240,
      _nextTime = _gap,
      _listeners = [],
      _id,
      _req,
      _raf,
      _self,
      _delta,
      _i,
      _tick = function _tick(v) {
    var elapsed = _getTime() - _lastUpdate,
        manual = v === true,
        overlap,
        dispatch,
        time,
        frame;

    (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);
    _lastUpdate += elapsed;
    time = _lastUpdate - _startTime;
    overlap = time - _nextTime;

    if (overlap > 0 || manual) {
      frame = ++_self.frame;
      _delta = time - _self.time * 1000;
      _self.time = time = time / 1000;
      _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);
      dispatch = 1;
    }

    manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the "tick" event so that timing is maintained. Otherwise, if processing the "tick" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.

    if (dispatch) {
      for (_i = 0; _i < _listeners.length; _i++) {
        // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.
        _listeners[_i](time, _delta, frame, v);
      }
    }
  };

  _self = {
    time: 0,
    frame: 0,
    tick: function tick() {
      _tick(true);
    },
    deltaRatio: function deltaRatio(fps) {
      return _delta / (1000 / (fps || 60));
    },
    wake: function wake() {
      if (_coreReady) {
        if (!_coreInitted && _windowExists()) {
          _win = _coreInitted = window;
          _doc = _win.document || {};
          _globals.gsap = gsap;
          (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);

          _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});

          _registerPluginQueue.forEach(_createPlugin);
        }

        _raf = typeof requestAnimationFrame !== "undefined" && requestAnimationFrame;
        _id && _self.sleep();

        _req = _raf || function (f) {
          return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);
        };

        _tickerActive = 1;

        _tick(2);
      }
    },
    sleep: function sleep() {
      (_raf ? cancelAnimationFrame : clearTimeout)(_id);
      _tickerActive = 0;
      _req = _emptyFunc;
    },
    lagSmoothing: function lagSmoothing(threshold, adjustedLag) {
      _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited

      _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);
    },
    fps: function fps(_fps) {
      _gap = 1000 / (_fps || 240);
      _nextTime = _self.time * 1000 + _gap;
    },
    add: function add(callback, once, prioritize) {
      var func = once ? function (t, d, f, v) {
        callback(t, d, f, v);

        _self.remove(func);
      } : callback;

      _self.remove(callback);

      _listeners[prioritize ? "unshift" : "push"](func);

      _wake();

      return func;
    },
    remove: function remove(callback, i) {
      ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;
    },
    _listeners: _listeners
  };
  return _self;
}(),
    _wake = function _wake() {
  return !_tickerActive && _ticker.wake();
},
    //also ensures the core classes are initialized.

/*
* -------------------------------------------------
* EASING
* -------------------------------------------------
*/
_easeMap = {},
    _customEaseExp = /^[\d.\-M][\d.\-,\s]/,
    _quotesExp = /["']/g,
    _parseObjectInString = function _parseObjectInString(value) {
  //takes a string like "{wiggles:10, type:anticipate})" and turns it into a real object. Notice it ends in ")" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.
  var obj = {},
      split = value.substr(1, value.length - 3).split(":"),
      key = split[0],
      i = 1,
      l = split.length,
      index,
      val,
      parsedVal;

  for (; i < l; i++) {
    val = split[i];
    index = i !== l - 1 ? val.lastIndexOf(",") : val.length;
    parsedVal = val.substr(0, index);
    obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal;
    key = val.substr(index + 1).trim();
  }

  return obj;
},
    _valueInParentheses = function _valueInParentheses(value) {
  var open = value.indexOf("(") + 1,
      close = value.indexOf(")"),
      nested = value.indexOf("(", open);
  return value.substring(open, ~nested && nested < close ? value.indexOf(")", close + 1) : close);
},
    _configEaseFromString = function _configEaseFromString(name) {
  //name can be a string like "elastic.out(1,0.5)", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).
  var split = (name + "").split("("),
      ease = _easeMap[split[0]];
  return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease;
},
    _invertEase = function _invertEase(ease) {
  return function (p) {
    return 1 - ease(1 - p);
  };
},
    // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.
_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {
  var child = timeline._first,
      ease;

  while (child) {
    if (child instanceof Timeline) {
      _propagateYoyoEase(child, isYoyo);
    } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {
      if (child.timeline) {
        _propagateYoyoEase(child.timeline, isYoyo);
      } else {
        ease = child._ease;
        child._ease = child._yEase;
        child._yEase = ease;
        child._yoyo = isYoyo;
      }
    }

    child = child._next;
  }
},
    _parseEase = function _parseEase(ease, defaultEase) {
  return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;
},
    _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {
  if (easeOut === void 0) {
    easeOut = function easeOut(p) {
      return 1 - easeIn(1 - p);
    };
  }

  if (easeInOut === void 0) {
    easeInOut = function easeInOut(p) {
      return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;
    };
  }

  var ease = {
    easeIn: easeIn,
    easeOut: easeOut,
    easeInOut: easeInOut
  },
      lowercaseName;

  _forEachName(names, function (name) {
    _easeMap[name] = _globals[name] = ease;
    _easeMap[lowercaseName = name.toLowerCase()] = easeOut;

    for (var p in ease) {
      _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p];
    }
  });

  return ease;
},
    _easeInOutFromOut = function _easeInOutFromOut(easeOut) {
  return function (p) {
    return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;
  };
},
    _configElastic = function _configElastic(type, amplitude, period) {
  var p1 = amplitude >= 1 ? amplitude : 1,
      //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.
  p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),
      p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),
      easeOut = function easeOut(p) {
    return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;
  },
      ease = type === "out" ? easeOut : type === "in" ? function (p) {
    return 1 - easeOut(1 - p);
  } : _easeInOutFromOut(easeOut);

  p2 = _2PI / p2; //precalculate to optimize

  ease.config = function (amplitude, period) {
    return _configElastic(type, amplitude, period);
  };

  return ease;
},
    _configBack = function _configBack(type, overshoot) {
  if (overshoot === void 0) {
    overshoot = 1.70158;
  }

  var easeOut = function easeOut(p) {
    return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;
  },
      ease = type === "out" ? easeOut : type === "in" ? function (p) {
    return 1 - easeOut(1 - p);
  } : _easeInOutFromOut(easeOut);

  ease.config = function (overshoot) {
    return _configBack(type, overshoot);
  };

  return ease;
}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.
// _weightedEase = ratio => {
// 	let y = 0.5 + ratio / 2;
// 	return p => (2 * (1 - p) * p * y + p * p);
// },
// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.
// _weightedEaseStrong = ratio => {
// 	ratio = .5 + ratio / 2;
// 	let o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),
// 		b = ratio - o,
// 		c = ratio + o;
// 	return p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;
// };


_forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function (name, i) {
  var power = i < 5 ? i + 1 : i;

  _insertEase(name + ",Power" + (power - 1), i ? function (p) {
    return Math.pow(p, power);
  } : function (p) {
    return p;
  }, function (p) {
    return 1 - Math.pow(1 - p, power);
  }, function (p) {
    return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;
  });
});

_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;

_insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic());

(function (n, c) {
  var n1 = 1 / c,
      n2 = 2 * n1,
      n3 = 2.5 * n1,
      easeOut = function easeOut(p) {
    return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;
  };

  _insertEase("Bounce", function (p) {
    return 1 - easeOut(1 - p);
  }, easeOut);
})(7.5625, 2.75);

_insertEase("Expo", function (p) {
  return p ? Math.pow(2, 10 * (p - 1)) : 0;
});

_insertEase("Circ", function (p) {
  return -(_sqrt(1 - p * p) - 1);
});

_insertEase("Sine", function (p) {
  return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;
});

_insertEase("Back", _configBack("in"), _configBack("out"), _configBack());

_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {
  config: function config(steps, immediateStart) {
    if (steps === void 0) {
      steps = 1;
    }

    var p1 = 1 / steps,
        p2 = steps + (immediateStart ? 0 : 1),
        p3 = immediateStart ? 1 : 0,
        max = 1 - _tinyNum;
    return function (p) {
      return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;
    };
  }
};
_defaults.ease = _easeMap["quad.out"];

_forEachName("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt", function (name) {
  return _callbackNames += name + "," + name + "Params,";
});
/*
 * --------------------------------------------------------------------------------------
 * CACHE
 * --------------------------------------------------------------------------------------
 */


var GSCache = function GSCache(target, harness) {
  this.id = _gsID++;
  target._gsap = this;
  this.target = target;
  this.harness = harness;
  this.get = harness ? harness.get : _getProperty;
  this.set = harness ? harness.getSetter : _getSetter;
};
/*
 * --------------------------------------------------------------------------------------
 * ANIMATION
 * --------------------------------------------------------------------------------------
 */

var Animation = /*#__PURE__*/function () {
  function Animation(vars) {
    this.vars = vars;
    this._delay = +vars.delay || 0;

    if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {
      // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.
      this._rDelay = vars.repeatDelay || 0;
      this._yoyo = !!vars.yoyo || !!vars.yoyoEase;
    }

    this._ts = 1;

    _setDuration(this, +vars.duration, 1, 1);

    this.data = vars.data;

    if (_context) {
      this._ctx = _context;

      _context.data.push(this);
    }

    _tickerActive || _ticker.wake();
  }

  var _proto = Animation.prototype;

  _proto.delay = function delay(value) {
    if (value || value === 0) {
      this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);
      this._delay = value;
      return this;
    }

    return this._delay;
  };

  _proto.duration = function duration(value) {
    return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;
  };

  _proto.totalDuration = function totalDuration(value) {
    if (!arguments.length) {
      return this._tDur;
    }

    this._dirty = 0;
    return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));
  };

  _proto.totalTime = function totalTime(_totalTime, suppressEvents) {
    _wake();

    if (!arguments.length) {
      return this._tTime;
    }

    var parent = this._dp;

    if (parent && parent.smoothChildTiming && this._ts) {
      _alignPlayhead(this, _totalTime);

      !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.
      //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.

      while (parent && parent.parent) {
        if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {
          parent.totalTime(parent._tTime, true);
        }

        parent = parent.parent;
      }

      if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {
        //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.
        _addToTimeline(this._dp, this, this._start - this._delay);
      }
    }

    if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {
      // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)
      this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause
      //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)
      //   this._lock = 1;

      _lazySafeRender(this, _totalTime, suppressEvents); //   this._lock = 0;
      //}

    }

    return this;
  };

  _proto.time = function time(value, suppressEvents) {
    return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!
  };

  _proto.totalProgress = function totalProgress(value, suppressEvents) {
    return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() > 0 ? 1 : 0;
  };

  _proto.progress = function progress(value, suppressEvents) {
    return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;
  };

  _proto.iteration = function iteration(value, suppressEvents) {
    var cycleDuration = this.duration() + this._rDelay;

    return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;
  } // potential future addition:
  // isPlayingBackwards() {
  // 	let animation = this,
  // 		orientation = 1; // 1 = forward, -1 = backward
  // 	while (animation) {
  // 		orientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;
  // 		animation = animation.parent;
  // 	}
  // 	return orientation < 0;
  // }
  ;

  _proto.timeScale = function timeScale(value, suppressEvents) {
    if (!arguments.length) {
      return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.
    }

    if (this._rts === value) {
      return this;
    }

    var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.
    // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.
    //(+value < 0 && this._rts >= 0) && _callback(this, "onReverse", true);
    // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.

    this._rts = +value || 0;
    this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.

    this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), suppressEvents !== false);

    _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.


    return _recacheAncestors(this);
  };

  _proto.paused = function paused(value) {
    if (!arguments.length) {
      return this._ps;
    }

    if (this._ps !== value) {
      this._ps = value;

      if (value) {
        this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.

        this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the "real" timeScale as _rts (recorded time scale)
      } else {
        _wake();

        this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.

        this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.
      }
    }

    return this;
  };

  _proto.startTime = function startTime(value) {
    if (arguments.length) {
      this._start = value;
      var parent = this.parent || this._dp;
      parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);
      return this;
    }

    return this._start;
  };

  _proto.endTime = function endTime(includeRepeats) {
    return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);
  };

  _proto.rawTime = function rawTime(wrapRepeats) {
    var parent = this.parent || this._dp; // _dp = detached parent

    return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);
  };

  _proto.revert = function revert(config) {
    if (config === void 0) {
      config = _revertConfig;
    }

    var prevIsReverting = _reverting;
    _reverting = config;

    if (this._initted || this._startAt) {
      this.timeline && this.timeline.revert(config);
      this.totalTime(-0.01, config.suppressEvents);
    }

    this.data !== "nested" && config.kill !== false && this.kill();
    _reverting = prevIsReverting;
    return this;
  };

  _proto.globalTime = function globalTime(rawTime) {
    var animation = this,
        time = arguments.length ? rawTime : animation.rawTime();

    while (animation) {
      time = animation._start + time / (Math.abs(animation._ts) || 1);
      animation = animation._dp;
    }

    return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). "_sat" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert().
  };

  _proto.repeat = function repeat(value) {
    if (arguments.length) {
      this._repeat = value === Infinity ? -2 : value;
      return _onUpdateTotalDuration(this);
    }

    return this._repeat === -2 ? Infinity : this._repeat;
  };

  _proto.repeatDelay = function repeatDelay(value) {
    if (arguments.length) {
      var time = this._time;
      this._rDelay = value;

      _onUpdateTotalDuration(this);

      return time ? this.time(time) : this;
    }

    return this._rDelay;
  };

  _proto.yoyo = function yoyo(value) {
    if (arguments.length) {
      this._yoyo = value;
      return this;
    }

    return this._yoyo;
  };

  _proto.seek = function seek(position, suppressEvents) {
    return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));
  };

  _proto.restart = function restart(includeDelay, suppressEvents) {
    return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));
  };

  _proto.play = function play(from, suppressEvents) {
    from != null && this.seek(from, suppressEvents);
    return this.reversed(false).paused(false);
  };

  _proto.reverse = function reverse(from, suppressEvents) {
    from != null && this.seek(from || this.totalDuration(), suppressEvents);
    return this.reversed(true).paused(false);
  };

  _proto.pause = function pause(atTime, suppressEvents) {
    atTime != null && this.seek(atTime, suppressEvents);
    return this.paused(true);
  };

  _proto.resume = function resume() {
    return this.paused(false);
  };

  _proto.reversed = function reversed(value) {
    if (arguments.length) {
      !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.

      return this;
    }

    return this._rts < 0;
  };

  _proto.invalidate = function invalidate() {
    this._initted = this._act = 0;
    this._zTime = -_tinyNum;
    return this;
  };

  _proto.isActive = function isActive() {
    var parent = this.parent || this._dp,
        start = this._start,
        rawTime;
    return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);
  };

  _proto.eventCallback = function eventCallback(type, callback, params) {
    var vars = this.vars;

    if (arguments.length > 1) {
      if (!callback) {
        delete vars[type];
      } else {
        vars[type] = callback;
        params && (vars[type + "Params"] = params);
        type === "onUpdate" && (this._onUpdate = callback);
      }

      return this;
    }

    return vars[type];
  };

  _proto.then = function then(onFulfilled) {
    var self = this;
    return new Promise(function (resolve) {
      var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,
          _resolve = function _resolve() {
        var _then = self.then;
        self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)

        _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);
        resolve(f);
        self.then = _then;
      };

      if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {
        _resolve();
      } else {
        self._prom = _resolve;
      }
    });
  };

  _proto.kill = function kill() {
    _interrupt(this);
  };

  return Animation;
}();

_setDefaults(Animation.prototype, {
  _time: 0,
  _start: 0,
  _end: 0,
  _tTime: 0,
  _tDur: 0,
  _dirty: 0,
  _repeat: 0,
  _yoyo: false,
  parent: null,
  _initted: false,
  _rDelay: 0,
  _ts: 1,
  _dp: 0,
  ratio: 0,
  _zTime: -_tinyNum,
  _prom: 0,
  _ps: false,
  _rts: 1
});
/*
 * -------------------------------------------------
 * TIMELINE
 * -------------------------------------------------
 */


var Timeline = /*#__PURE__*/function (_Animation) {
  _inheritsLoose(Timeline, _Animation);

  function Timeline(vars, position) {
    var _this;

    if (vars === void 0) {
      vars = {};
    }

    _this = _Animation.call(this, vars) || this;
    _this.labels = {};
    _this.smoothChildTiming = !!vars.smoothChildTiming;
    _this.autoRemoveChildren = !!vars.autoRemoveChildren;
    _this._sort = _isNotFalse(vars.sortChildren);
    _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);
    vars.reversed && _this.reverse();
    vars.paused && _this.paused(true);
    vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);
    return _this;
  }

  var _proto2 = Timeline.prototype;

  _proto2.to = function to(targets, vars, position) {
    _createTweenType(0, arguments, this);

    return this;
  };

  _proto2.from = function from(targets, vars, position) {
    _createTweenType(1, arguments, this);

    return this;
  };

  _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {
    _createTweenType(2, arguments, this);

    return this;
  };

  _proto2.set = function set(targets, vars, position) {
    vars.duration = 0;
    vars.parent = this;
    _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);
    vars.immediateRender = !!vars.immediateRender;
    new Tween(targets, vars, _parsePosition(this, position), 1);
    return this;
  };

  _proto2.call = function call(callback, params, position) {
    return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);
  } //ONLY for backward compatibility! Maybe delete?
  ;

  _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
    vars.duration = duration;
    vars.stagger = vars.stagger || stagger;
    vars.onComplete = onCompleteAll;
    vars.onCompleteParams = onCompleteAllParams;
    vars.parent = this;
    new Tween(targets, vars, _parsePosition(this, position));
    return this;
  };

  _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
    vars.runBackwards = 1;
    _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);
    return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);
  };

  _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {
    toVars.startAt = fromVars;
    _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);
    return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);
  };

  _proto2.render = function render(totalTime, suppressEvents, force) {
    var prevTime = this._time,
        tDur = this._dirty ? this.totalDuration() : this._tDur,
        dur = this._dur,
        tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),
        // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.
    crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),
        time,
        child,
        next,
        iteration,
        cycleDuration,
        prevPaused,
        pauseTween,
        timeScale,
        prevStart,
        prevIteration,
        yoyo,
        isYoyo;
    this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);

    if (tTime !== this._tTime || force || crossingStart) {
      if (prevTime !== this._time && dur) {
        //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).
        tTime += this._time - prevTime;
        totalTime += this._time - prevTime;
      }

      time = tTime;
      prevStart = this._start;
      timeScale = this._ts;
      prevPaused = !timeScale;

      if (crossingStart) {
        dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.

        (totalTime || !suppressEvents) && (this._zTime = totalTime);
      }

      if (this._repeat) {
        //adjust the time for repeats and yoyos
        yoyo = this._yoyo;
        cycleDuration = dur + this._rDelay;

        if (this._repeat < -1 && totalTime < 0) {
          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
        }

        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)

        if (tTime === tDur) {
          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)
          iteration = this._repeat;
          time = dur;
        } else {
          iteration = ~~(tTime / cycleDuration);

          if (iteration && iteration === tTime / cycleDuration) {
            time = dur;
            iteration--;
          }

          time > dur && (time = dur);
        }

        prevIteration = _animationCycle(this._tTime, cycleDuration);
        !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://gsap.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the "repeatDelay" portion

        if (yoyo && iteration & 1) {
          time = dur - time;
          isYoyo = 1;
        }
        /*
        make sure children at the end/beginning of the timeline are rendered properly. If, for example,
        a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which
        would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there
        could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So
        we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must
        ensure that zero-duration tweens at the very beginning or end of the Timeline work.
        */


        if (iteration !== prevIteration && !this._lock) {
          var rewinding = yoyo && prevIteration & 1,
              doesWrap = rewinding === (yoyo && iteration & 1);
          iteration < prevIteration && (rewinding = !rewinding);
          prevTime = rewinding ? 0 : tTime % dur ? dur : tTime; // if the playhead is landing exactly at the end of an iteration, use that totalTime rather than only the duration, otherwise it'll skip the 2nd render since it's effectively at the same time.

          this._lock = 1;
          this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;
          this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.

          !suppressEvents && this.parent && _callback(this, "onRepeat");
          this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);

          if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {
            // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.
            return this;
          }

          dur = this._dur; // in case the duration changed in the onRepeat

          tDur = this._tDur;

          if (doesWrap) {
            this._lock = 2;
            prevTime = rewinding ? dur : -0.0001;
            this.render(prevTime, true);
            this.vars.repeatRefresh && !isYoyo && this.invalidate();
          }

          this._lock = 0;

          if (!this._ts && !prevPaused) {
            return this;
          } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.


          _propagateYoyoEase(this, isYoyo);
        }
      }

      if (this._hasPause && !this._forcing && this._lock < 2) {
        pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));

        if (pauseTween) {
          tTime -= time - (time = pauseTween._start);
        }
      }

      this._tTime = tTime;
      this._time = time;
      this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.

      if (!this._initted) {
        this._onUpdate = this.vars.onUpdate;
        this._initted = 1;
        this._zTime = totalTime;
        prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).
      }

      if (!prevTime && time && !suppressEvents && !iteration) {
        _callback(this, "onStart");

        if (this._tTime !== tTime) {
          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.
          return this;
        }
      }

      if (time >= prevTime && totalTime >= 0) {
        child = this._first;

        while (child) {
          next = child._next;

          if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {
            if (child.parent !== this) {
              // an extreme edge case - the child's render could do something like kill() the "next" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.
              return this.render(totalTime, suppressEvents, force);
            }

            child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);

            if (time !== this._time || !this._ts && !prevPaused) {
              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete
              pauseTween = 0;
              next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that so that the next time render() is called it'll be forced (to render any remaining children)

              break;
            }
          }

          child = next;
        }
      } else {
        child = this._last;
        var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.

        while (child) {
          next = child._prev;

          if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {
            if (child.parent !== this) {
              // an extreme edge case - the child's render could do something like kill() the "next" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.
              return this.render(totalTime, suppressEvents, force);
            }

            child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert.

            if (time !== this._time || !this._ts && !prevPaused) {
              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete
              pauseTween = 0;
              next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)

              break;
            }
          }

          child = next;
        }
      }

      if (pauseTween && !suppressEvents) {
        this.pause();
        pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;

        if (this._ts) {
          //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).
          this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.

          _setEnd(this);

          return this.render(totalTime, suppressEvents, force);
        }
      }

      this._onUpdate && !suppressEvents && _callback(this, "onUpdate", true);
      if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {
        // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks.
        (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.

        if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {
          _callback(this, tTime === tDur && totalTime >= 0 ? "onComplete" : "onReverseComplete", true);

          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
        }
      }
    }

    return this;
  };

  _proto2.add = function add(child, position) {
    var _this2 = this;

    _isNumber(position) || (position = _parsePosition(this, position, child));

    if (!(child instanceof Animation)) {
      if (_isArray(child)) {
        child.forEach(function (obj) {
          return _this2.add(obj, position);
        });
        return this;
      }

      if (_isString(child)) {
        return this.addLabel(child, position);
      }

      if (_isFunction(child)) {
        child = Tween.delayedCall(0, child);
      } else {
        return this;
      }
    }

    return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!
  };

  _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {
    if (nested === void 0) {
      nested = true;
    }

    if (tweens === void 0) {
      tweens = true;
    }

    if (timelines === void 0) {
      timelines = true;
    }

    if (ignoreBeforeTime === void 0) {
      ignoreBeforeTime = -_bigNum;
    }

    var a = [],
        child = this._first;

    while (child) {
      if (child._start >= ignoreBeforeTime) {
        if (child instanceof Tween) {
          tweens && a.push(child);
        } else {
          timelines && a.push(child);
          nested && a.push.apply(a, child.getChildren(true, tweens, timelines));
        }
      }

      child = child._next;
    }

    return a;
  };

  _proto2.getById = function getById(id) {
    var animations = this.getChildren(1, 1, 1),
        i = animations.length;

    while (i--) {
      if (animations[i].vars.id === id) {
        return animations[i];
      }
    }
  };

  _proto2.remove = function remove(child) {
    if (_isString(child)) {
      return this.removeLabel(child);
    }

    if (_isFunction(child)) {
      return this.killTweensOf(child);
    }

    _removeLinkedListItem(this, child);

    if (child === this._recent) {
      this._recent = this._last;
    }

    return _uncache(this);
  };

  _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {
    if (!arguments.length) {
      return this._tTime;
    }

    this._forcing = 1;

    if (!this._dp && this._ts) {
      //special case for the global timeline (or any other that has no parent or detached parent).
      this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));
    }

    _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);

    this._forcing = 0;
    return this;
  };

  _proto2.addLabel = function addLabel(label, position) {
    this.labels[label] = _parsePosition(this, position);
    return this;
  };

  _proto2.removeLabel = function removeLabel(label) {
    delete this.labels[label];
    return this;
  };

  _proto2.addPause = function addPause(position, callback, params) {
    var t = Tween.delayedCall(0, callback || _emptyFunc, params);
    t.data = "isPause";
    this._hasPause = 1;
    return _addToTimeline(this, t, _parsePosition(this, position));
  };

  _proto2.removePause = function removePause(position) {
    var child = this._first;
    position = _parsePosition(this, position);

    while (child) {
      if (child._start === position && child.data === "isPause") {
        _removeFromParent(child);
      }

      child = child._next;
    }
  };

  _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {
    var tweens = this.getTweensOf(targets, onlyActive),
        i = tweens.length;

    while (i--) {
      _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);
    }

    return this;
  };

  _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {
    var a = [],
        parsedTargets = toArray(targets),
        child = this._first,
        isGlobalTime = _isNumber(onlyActive),
        // a number is interpreted as a global time. If the animation spans
    children;

    while (child) {
      if (child instanceof Tween) {
        if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {
          // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.
          a.push(child);
        }
      } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {
        a.push.apply(a, children);
      }

      child = child._next;
    }

    return a;
  } // potential future feature - targets() on timelines
  // targets() {
  // 	let result = [];
  // 	this.getChildren(true, true, false).forEach(t => result.push(...t.targets()));
  // 	return result.filter((v, i) => result.indexOf(v) === i);
  // }
  ;

  _proto2.tweenTo = function tweenTo(position, vars) {
    vars = vars || {};

    var tl = this,
        endTime = _parsePosition(tl, position),
        _vars = vars,
        startAt = _vars.startAt,
        _onStart = _vars.onStart,
        onStartParams = _vars.onStartParams,
        immediateRender = _vars.immediateRender,
        initted,
        tween = Tween.to(tl, _setDefaults({
      ease: vars.ease || "none",
      lazy: false,
      immediateRender: false,
      time: endTime,
      overwrite: "auto",
      duration: vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,
      onStart: function onStart() {
        tl.pause();

        if (!initted) {
          var duration = vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale());
          tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);
          initted = 1;
        }

        _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.
      }
    }, vars));

    return immediateRender ? tween.render(0) : tween;
  };

  _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {
    return this.tweenTo(toPosition, _setDefaults({
      startAt: {
        time: _parsePosition(this, fromPosition)
      }
    }, vars));
  };

  _proto2.recent = function recent() {
    return this._recent;
  };

  _proto2.nextLabel = function nextLabel(afterTime) {
    if (afterTime === void 0) {
      afterTime = this._time;
    }

    return _getLabelInDirection(this, _parsePosition(this, afterTime));
  };

  _proto2.previousLabel = function previousLabel(beforeTime) {
    if (beforeTime === void 0) {
      beforeTime = this._time;
    }

    return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);
  };

  _proto2.currentLabel = function currentLabel(value) {
    return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);
  };

  _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {
    if (ignoreBeforeTime === void 0) {
      ignoreBeforeTime = 0;
    }

    var child = this._first,
        labels = this.labels,
        p;

    while (child) {
      if (child._start >= ignoreBeforeTime) {
        child._start += amount;
        child._end += amount;
      }

      child = child._next;
    }

    if (adjustLabels) {
      for (p in labels) {
        if (labels[p] >= ignoreBeforeTime) {
          labels[p] += amount;
        }
      }
    }

    return _uncache(this);
  };

  _proto2.invalidate = function invalidate(soft) {
    var child = this._first;
    this._lock = 0;

    while (child) {
      child.invalidate(soft);
      child = child._next;
    }

    return _Animation.prototype.invalidate.call(this, soft);
  };

  _proto2.clear = function clear(includeLabels) {
    if (includeLabels === void 0) {
      includeLabels = true;
    }

    var child = this._first,
        next;

    while (child) {
      next = child._next;
      this.remove(child);
      child = next;
    }

    this._dp && (this._time = this._tTime = this._pTime = 0);
    includeLabels && (this.labels = {});
    return _uncache(this);
  };

  _proto2.totalDuration = function totalDuration(value) {
    var max = 0,
        self = this,
        child = self._last,
        prevStart = _bigNum,
        prev,
        start,
        parent;

    if (arguments.length) {
      return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));
    }

    if (self._dirty) {
      parent = self.parent;

      while (child) {
        prev = child._prev; //record it here in case the tween changes position in the sequence...

        child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.

        start = child._start;

        if (start > prevStart && self._sort && child._ts && !self._lock) {
          //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence
          self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().

          _addToTimeline(self, child, start - child._delay, 1)._lock = 0;
        } else {
          prevStart = start;
        }

        if (start < 0 && child._ts) {
          //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.
          max -= start;

          if (!parent && !self._dp || parent && parent.smoothChildTiming) {
            self._start += start / self._ts;
            self._time -= start;
            self._tTime -= start;
          }

          self.shiftChildren(-start, false, -1e999);
          prevStart = 0;
        }

        child._end > max && child._ts && (max = child._end);
        child = prev;
      }

      _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);

      self._dirty = 0;
    }

    return self._tDur;
  };

  Timeline.updateRoot = function updateRoot(time) {
    if (_globalTimeline._ts) {
      _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));

      _lastRenderedFrame = _ticker.frame;
    }

    if (_ticker.frame >= _nextGCFrame) {
      _nextGCFrame += _config.autoSleep || 120;
      var child = _globalTimeline._first;
      if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {
        while (child && !child._ts) {
          child = child._next;
        }

        child || _ticker.sleep();
      }
    }
  };

  return Timeline;
}(Animation);

_setDefaults(Timeline.prototype, {
  _lock: 0,
  _hasPause: 0,
  _forcing: 0
});

var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {
  //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus "this" would refer to the plugin.
  var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),
      index = 0,
      matchIndex = 0,
      result,
      startNums,
      color,
      endNum,
      chunk,
      startNum,
      hasRandom,
      a;
  pt.b = start;
  pt.e = end;
  start += ""; //ensure values are strings

  end += "";

  if (hasRandom = ~end.indexOf("random(")) {
    end = _replaceRandom(end);
  }

  if (stringFilter) {
    a = [start, end];
    stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.

    start = a[0];
    end = a[1];
  }

  startNums = start.match(_complexStringNumExp) || [];

  while (result = _complexStringNumExp.exec(end)) {
    endNum = result[0];
    chunk = end.substring(index, result.index);

    if (color) {
      color = (color + 1) % 5;
    } else if (chunk.substr(-5) === "rgba(") {
      color = 1;
    }

    if (endNum !== startNums[matchIndex++]) {
      startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.

      pt._pt = {
        _next: pt._pt,
        p: chunk || matchIndex === 1 ? chunk : ",",
        //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.
        s: startNum,
        c: endNum.charAt(1) === "=" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,
        m: color && color < 4 ? Math.round : 0
      };
      index = _complexStringNumExp.lastIndex;
    }
  }

  pt.c = index < end.length ? end.substring(index, end.length) : ""; //we use the "c" of the PropTween to store the final part of the string (after the last number)

  pt.fp = funcParam;

  if (_relExp.test(end) || hasRandom) {
    pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).
  }

  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus "this" would refer to the plugin.

  return pt;
},
    _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {
  _isFunction(end) && (end = end(index || 0, target, targets));
  var currentValue = target[prop],
      parsedStart = start !== "get" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](),
      setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,
      pt;

  if (_isString(end)) {
    if (~end.indexOf("random(")) {
      end = _replaceRandom(end);
    }

    if (end.charAt(1) === "=") {
      pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);

      if (pt || pt === 0) {
        // to avoid isNaN, like if someone passes in a value like "!= whatever"
        end = pt;
      }
    }
  }

  if (!optional || parsedStart !== end || _forceAllPropTweens) {
    if (!isNaN(parsedStart * end) && end !== "") {
      // fun fact: any number multiplied by "" is evaluated as the number 0!
      pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter);
      funcParam && (pt.fp = funcParam);
      modifier && pt.modifier(modifier, this, target);
      return this._pt = pt;
    }

    !currentValue && !(prop in target) && _missingPlugin(prop, end);
    return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);
  }
},
    //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with "random()" in them. It does NOT process relative values.
_processVars = function _processVars(vars, index, target, targets, tween) {
  _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));

  if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {
    return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;
  }

  var copy = {},
      p;

  for (p in vars) {
    copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);
  }

  return copy;
},
    _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {
  var plugin, pt, ptLookup, i;

  if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {
    tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);

    if (tween !== _quickTween) {
      ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.

      i = plugin._props.length;

      while (i--) {
        ptLookup[plugin._props[i]] = pt;
      }
    }
  }

  return plugin;
},
    _overwritingTween,
    //store a reference temporarily so we can avoid overwriting itself.
_forceAllPropTweens,
    _initTween = function _initTween(tween, time, tTime) {
  var vars = tween.vars,
      ease = vars.ease,
      startAt = vars.startAt,
      immediateRender = vars.immediateRender,
      lazy = vars.lazy,
      onUpdate = vars.onUpdate,
      runBackwards = vars.runBackwards,
      yoyoEase = vars.yoyoEase,
      keyframes = vars.keyframes,
      autoRevert = vars.autoRevert,
      dur = tween._dur,
      prevStartAt = tween._startAt,
      targets = tween._targets,
      parent = tween.parent,
      fullTargets = parent && parent.data === "nested" ? parent.vars.targets : targets,
      autoOverwrite = tween._overwrite === "auto" && !_suppressOverwrites,
      tl = tween.timeline,
      cleanVars,
      i,
      p,
      pt,
      target,
      hasPriority,
      gsData,
      harness,
      plugin,
      ptLookup,
      index,
      harnessVars,
      overwritten;
  tl && (!keyframes || !ease) && (ease = "none");
  tween._ease = _parseEase(ease, _defaults.ease);
  tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;

  if (yoyoEase && tween._yoyo && !tween._repeat) {
    //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.
    yoyoEase = tween._yEase;
    tween._yEase = tween._ease;
    tween._ease = yoyoEase;
  }

  tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.

  if (!tl || keyframes && !vars.stagger) {
    //if there's an internal timeline, skip all the parsing because we passed that task down the chain.
    harness = targets[0] ? _getCache(targets[0]).harness : 0;
    harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an "x" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.

    cleanVars = _copyExcluding(vars, _reservedProps);

    if (prevStartAt) {
      prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet.

      time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a "startAt" (not "from()" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin)
      // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for "startAt" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded.

      prevStartAt._lazy = 0;
    }

    if (startAt) {
      _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({
        data: "isStart",
        overwrite: false,
        parent: parent,
        immediateRender: true,
        lazy: !prevStartAt && _isNotFalse(lazy),
        startAt: null,
        delay: 0,
        onUpdate: onUpdate && function () {
          return _callback(tween, "onUpdate");
        },
        stagger: 0
      }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);


      tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set.

      tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween

      time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.

      if (immediateRender) {
        if (dur && time <= 0 && tTime <= 0) {
          // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly.
          time && (tween._zTime = time);
          return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.
        }
      }
    } else if (runBackwards && dur) {
      //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)
      if (!prevStartAt) {
        time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0

        p = _setDefaults({
          overwrite: false,
          data: "isFromStart",
          //we tag the tween with as "isFromStart" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a "from()" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:"height", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.
          lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),
          immediateRender: immediateRender,
          //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)
          stagger: 0,
          parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(".class", {y: gsap.utils.wrap([-100,100]), stagger: 0.5})

        }, cleanVars);
        harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})

        _removeFromParent(tween._startAt = Tween.set(targets, p));

        tween._startAt._dp = 0; // don't allow it to get put back into root timeline!

        tween._startAt._sat = tween; // used in globalTime()

        time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));
        tween._zTime = time;

        if (!immediateRender) {
          _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded

        } else if (!time) {
          return;
        }
      }
    }

    tween._pt = tween._ptCache = 0;
    lazy = dur && _isNotFalse(lazy) || lazy && !dur;

    for (i = 0; i < targets.length; i++) {
      target = targets[i];
      gsData = target._gsap || _harness(targets)[i]._gsap;
      tween._ptLookup[i] = ptLookup = {};
      _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)

      index = fullTargets === targets ? i : fullTargets.indexOf(target);

      if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {
        tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);

        plugin._props.forEach(function (name) {
          ptLookup[name] = pt;
        });

        plugin.priority && (hasPriority = 1);
      }

      if (!harness || harnessVars) {
        for (p in cleanVars) {
          if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {
            plugin.priority && (hasPriority = 1);
          } else {
            ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter);
          }
        }
      }

      tween._op && tween._op[i] && tween.kill(target, tween._op[i]);

      if (autoOverwrite && tween._pt) {
        _overwritingTween = tween;

        _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!


        overwritten = !tween.parent;
        _overwritingTween = 0;
      }

      tween._pt && lazy && (_lazyLookup[gsData.id] = 1);
    }

    hasPriority && _sortPropTweensByPriority(tween);
    tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.
  }

  tween._onUpdate = onUpdate;
  tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.

  keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the "before" state for any staggered/delayed animations thus when the following tween initializes, it'll use the "before" state instead of the "after" state as the initial values.
},
    _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {
  var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],
      pt,
      rootPT,
      lookup,
      i;

  if (!ptCache) {
    ptCache = tween._ptCache[property] = [];
    lookup = tween._ptLookup;
    i = tween._targets.length;

    while (i--) {
      pt = lookup[i][property];

      if (pt && pt.d && pt.d._pt) {
        // it's a plugin, so find the nested PropTween
        pt = pt.d._pt;

        while (pt && pt.p !== property && pt.fp !== property) {
          // "fp" is functionParam for things like setting CSS variables which require .setProperty("--var-name", value)
          pt = pt._next;
        }
      }

      if (!pt) {
        // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this
        // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo("x", 200) for example.
        _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it.

        tween.vars[property] = "+=0";

        _initTween(tween, time);

        _forceAllPropTweens = 0;
        return skipRecursion ? _warn(property + " not eligible for reset") : 1; // if someone tries to do a quickTo() on a special property like borderRadius which must get split into 4 different properties, that's not eligible for .resetTo().
      }

      ptCache.push(pt);
    }
  }

  i = ptCache.length;

  while (i--) {
    rootPT = ptCache[i];
    pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value.

    pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;
    pt.c = value - pt.s;
    rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value)

    rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value)
  }
},
    _addAliasesToVars = function _addAliasesToVars(targets, vars) {
  var harness = targets[0] ? _getCache(targets[0]).harness : 0,
      propertyAliases = harness && harness.aliases,
      copy,
      p,
      i,
      aliases;

  if (!propertyAliases) {
    return vars;
  }

  copy = _merge({}, vars);

  for (p in propertyAliases) {
    if (p in copy) {
      aliases = propertyAliases[p].split(",");
      i = aliases.length;

      while (i--) {
        copy[aliases[i]] = copy[p];
      }
    }
  }

  return copy;
},
    // parses multiple formats, like {"0%": {x: 100}, {"50%": {x: -20}} and { x: {"0%": 100, "50%": -20} }, and an "ease" can be set on any object. We populate an "allProps" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a "t" (time), "v", (value), and "e" (ease) property. This allows us to piece together a timeline later.
_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {
  var ease = obj.ease || easeEach || "power1.inOut",
      p,
      a;

  if (_isArray(obj)) {
    a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease

    obj.forEach(function (value, i) {
      return a.push({
        t: i / (obj.length - 1) * 100,
        v: value,
        e: ease
      });
    });
  } else {
    for (p in obj) {
      a = allProps[p] || (allProps[p] = []);
      p === "ease" || a.push({
        t: parseFloat(prop),
        v: obj[p],
        e: ease
      });
    }
  }
},
    _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {
  return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value;
},
    _staggerTweenProps = _callbackNames + "repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert",
    _staggerPropsToSkip = {};

_forEachName(_staggerTweenProps + ",id,stagger,delay,duration,paused,scrollTrigger", function (name) {
  return _staggerPropsToSkip[name] = 1;
});
/*
 * --------------------------------------------------------------------------------------
 * TWEEN
 * --------------------------------------------------------------------------------------
 */


var Tween = /*#__PURE__*/function (_Animation2) {
  _inheritsLoose(Tween, _Animation2);

  function Tween(targets, vars, position, skipInherit) {
    var _this3;

    if (typeof vars === "number") {
      position.duration = vars;
      vars = position;
      position = null;
    }

    _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;
    var _this3$vars = _this3.vars,
        duration = _this3$vars.duration,
        delay = _this3$vars.delay,
        immediateRender = _this3$vars.immediateRender,
        stagger = _this3$vars.stagger,
        overwrite = _this3$vars.overwrite,
        keyframes = _this3$vars.keyframes,
        defaults = _this3$vars.defaults,
        scrollTrigger = _this3$vars.scrollTrigger,
        yoyoEase = _this3$vars.yoyoEase,
        parent = vars.parent || _globalTimeline,
        parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : "length" in vars) ? [targets] : toArray(targets),
        tl,
        i,
        copy,
        l,
        p,
        curTarget,
        staggerFunc,
        staggerVarsToMerge;
    _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://gsap.com", !_config.nullTargetWarn) || [];
    _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property

    _this3._overwrite = overwrite;

    if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
      vars = _this3.vars;
      tl = _this3.timeline = new Timeline({
        data: "nested",
        defaults: defaults || {},
        targets: parent && parent.data === "nested" ? parent.vars.targets : parsedTargets
      }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets.

      tl.kill();
      tl.parent = tl._dp = _assertThisInitialized(_this3);
      tl._start = 0;

      if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
        l = parsedTargets.length;
        staggerFunc = stagger && distribute(stagger);

        if (_isObject(stagger)) {
          //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.
          for (p in stagger) {
            if (~_staggerTweenProps.indexOf(p)) {
              staggerVarsToMerge || (staggerVarsToMerge = {});
              staggerVarsToMerge[p] = stagger[p];
            }
          }
        }

        for (i = 0; i < l; i++) {
          copy = _copyExcluding(vars, _staggerPropsToSkip);
          copy.stagger = 0;
          yoyoEase && (copy.yoyoEase = yoyoEase);
          staggerVarsToMerge && _merge(copy, staggerVarsToMerge);
          curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.

          copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);
          copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;

          if (!stagger && l === 1 && copy.delay) {
            // if someone does delay:"random(1, 5)", repeat:-1, for example, the delay shouldn't be inside the repeat.
            _this3._delay = delay = copy.delay;
            _this3._start += delay;
            copy.delay = 0;
          }

          tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);
          tl._ease = _easeMap.none;
        }

        tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!
      } else if (keyframes) {
        _inheritDefaults(_setDefaults(tl.vars.defaults, {
          ease: "none"
        }));

        tl._ease = _parseEase(keyframes.ease || vars.ease || "none");
        var time = 0,
            a,
            kf,
            v;

        if (_isArray(keyframes)) {
          keyframes.forEach(function (frame) {
            return tl.to(parsedTargets, frame, ">");
          });
          tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method.
        } else {
          copy = {};

          for (p in keyframes) {
            p === "ease" || p === "easeEach" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);
          }

          for (p in copy) {
            a = copy[p].sort(function (a, b) {
              return a.t - b.t;
            });
            time = 0;

            for (i = 0; i < a.length; i++) {
              kf = a[i];
              v = {
                ease: kf.e,
                duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration
              };
              v[p] = kf.v;
              tl.to(parsedTargets, v, time);
              time += v.duration;
            }
          }

          tl.duration() < duration && tl.to({}, {
            duration: duration - tl.duration()
          }); // in case keyframes didn't go to 100%
        }
      }

      duration || _this3.duration(duration = tl.duration());
    } else {
      _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)
    }

    if (overwrite === true && !_suppressOverwrites) {
      _overwritingTween = _assertThisInitialized(_this3);

      _globalTimeline.killTweensOf(parsedTargets);

      _overwritingTween = 0;
    }

    _addToTimeline(parent, _assertThisInitialized(_this3), position);

    vars.reversed && _this3.reverse();
    vars.paused && _this3.paused(true);

    if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== "nested") {
      _this3._tTime = -_tinyNum; //forces a render without having to set the render() "force" parameter to true because we want to allow lazying by default (using the "force" parameter always forces an immediate full render)

      _this3.render(Math.max(0, -delay) || 0); //in case delay is negative

    }

    scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);
    return _this3;
  }

  var _proto3 = Tween.prototype;

  _proto3.render = function render(totalTime, suppressEvents, force) {
    var prevTime = this._time,
        tDur = this._tDur,
        dur = this._dur,
        isNegative = totalTime < 0,
        tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,
        time,
        pt,
        iteration,
        cycleDuration,
        prevIteration,
        isYoyo,
        ratio,
        timeline,
        yoyoEase;

    if (!dur) {
      _renderZeroDurationTween(this, totalTime, suppressEvents, force);
    } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative) {
      //this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)
      time = tTime;
      timeline = this.timeline;

      if (this._repeat) {
        //adjust the time for repeats and yoyos
        cycleDuration = dur + this._rDelay;

        if (this._repeat < -1 && isNegative) {
          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
        }

        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)

        if (tTime === tDur) {
          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)
          iteration = this._repeat;
          time = dur;
        } else {
          iteration = ~~(tTime / cycleDuration);

          if (iteration && iteration === _roundPrecise(tTime / cycleDuration)) {
            time = dur;
            iteration--;
          }

          time > dur && (time = dur);
        }

        isYoyo = this._yoyo && iteration & 1;

        if (isYoyo) {
          yoyoEase = this._yEase;
          time = dur - time;
        }

        prevIteration = _animationCycle(this._tTime, cycleDuration);

        if (time === prevTime && !force && this._initted && iteration === prevIteration) {
          //could be during the repeatDelay part. No need to render and fire callbacks.
          this._tTime = tTime;
          return this;
        }

        if (iteration !== prevIteration) {
          timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality

          if (this.vars.repeatRefresh && !isYoyo && !this._lock && this._time !== cycleDuration && this._initted) {
            // this._time will === cycleDuration when we render at EXACTLY the end of an iteration. Without this condition, it'd often do the repeatRefresh render TWICE (again on the very next tick).
            this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.

            this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;
          }
        }
      }

      if (!this._initted) {
        if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {
          this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.

          return this;
        }

        if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {
          // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values. But we also don't want to dump if we're doing a repeatRefresh render!
          return this;
        }

        if (dur !== this._dur) {
          // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.
          return this.render(totalTime, suppressEvents, force);
        }
      }

      this._tTime = tTime;
      this._time = time;

      if (!this._act && this._ts) {
        this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.

        this._lazy = 0;
      }

      this.ratio = ratio = (yoyoEase || this._ease)(time / dur);

      if (this._from) {
        this.ratio = ratio = 1 - ratio;
      }

      if (time && !prevTime && !suppressEvents && !iteration) {
        _callback(this, "onStart");

        if (this._tTime !== tTime) {
          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.
          return this;
        }
      }

      pt = this._pt;

      while (pt) {
        pt.r(ratio, pt.d);
        pt = pt._next;
      }

      timeline && timeline.render(totalTime < 0 ? totalTime : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);

      if (this._onUpdate && !suppressEvents) {
        isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.

        _callback(this, "onUpdate");
      }

      this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, "onRepeat");

      if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {
        isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);
        (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.

        if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {
          // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();
          _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true);

          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
        }
      }
    }

    return this;
  };

  _proto3.targets = function targets() {
    return this._targets;
  };

  _proto3.invalidate = function invalidate(soft) {
    // "soft" gives us a way to clear out everything EXCEPT the recorded pre-"from" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the "from" values would persist and then on the next render, the from() tweens would initialize and the current value would match the "from" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page.
    (!soft || !this.vars.runBackwards) && (this._startAt = 0);
    this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;
    this._ptLookup = [];
    this.timeline && this.timeline.invalidate(soft);
    return _Animation2.prototype.invalidate.call(this, soft);
  };

  _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {
    _tickerActive || _ticker.wake();
    this._ts || this.play();
    var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),
        ratio;
    this._initted || _initTween(this, time);
    ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet.
    // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method.
    // if (_isObject(property)) { // performance optimization
    // 	for (p in property) {
    // 		if (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) {
    // 			return this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.
    // 		}
    // 	}
    // } else {

    if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {
      return this.resetTo(property, value, start, startIsRelative, 1); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.
    } //}


    _alignPlayhead(this, 0);

    this.parent || _addLinkedListItem(this._dp, this, "_first", "_last", this._dp._sort ? "_start" : 0);
    return this.render(0);
  };

  _proto3.kill = function kill(targets, vars) {
    if (vars === void 0) {
      vars = "all";
    }

    if (!targets && (!vars || vars === "all")) {
      this._lazy = this._pt = 0;
      return this.parent ? _interrupt(this) : this;
    }

    if (this.timeline) {
      var tDur = this.timeline.totalDuration();
      this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.

      this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.

      return this;
    }

    var parsedTargets = this._targets,
        killingTargets = targets ? toArray(targets) : parsedTargets,
        propTweenLookup = this._ptLookup,
        firstPT = this._pt,
        overwrittenProps,
        curLookup,
        curOverwriteProps,
        props,
        p,
        pt,
        i;

    if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) {
      vars === "all" && (this._pt = 0);
      return _interrupt(this);
    }

    overwrittenProps = this._op = this._op || [];

    if (vars !== "all") {
      //so people can pass in a comma-delimited list of property names
      if (_isString(vars)) {
        p = {};

        _forEachName(vars, function (name) {
          return p[name] = 1;
        });

        vars = p;
      }

      vars = _addAliasesToVars(parsedTargets, vars);
    }

    i = parsedTargets.length;

    while (i--) {
      if (~killingTargets.indexOf(parsedTargets[i])) {
        curLookup = propTweenLookup[i];

        if (vars === "all") {
          overwrittenProps[i] = vars;
          props = curLookup;
          curOverwriteProps = {};
        } else {
          curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};
          props = vars;
        }

        for (p in props) {
          pt = curLookup && curLookup[p];

          if (pt) {
            if (!("kill" in pt.d) || pt.d.kill(p) === true) {
              _removeLinkedListItem(this, pt, "_pt");
            }

            delete curLookup[p];
          }

          if (curOverwriteProps !== "all") {
            curOverwriteProps[p] = 1;
          }
        }
      }
    }

    this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.

    return this;
  };

  Tween.to = function to(targets, vars) {
    return new Tween(targets, vars, arguments[2]);
  };

  Tween.from = function from(targets, vars) {
    return _createTweenType(1, arguments);
  };

  Tween.delayedCall = function delayedCall(delay, callback, params, scope) {
    return new Tween(callback, 0, {
      immediateRender: false,
      lazy: false,
      overwrite: false,
      delay: delay,
      onComplete: callback,
      onReverseComplete: callback,
      onCompleteParams: params,
      onReverseCompleteParams: params,
      callbackScope: scope
    }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse)
  };

  Tween.fromTo = function fromTo(targets, fromVars, toVars) {
    return _createTweenType(2, arguments);
  };

  Tween.set = function set(targets, vars) {
    vars.duration = 0;
    vars.repeatDelay || (vars.repeat = 0);
    return new Tween(targets, vars);
  };

  Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {
    return _globalTimeline.killTweensOf(targets, props, onlyActive);
  };

  return Tween;
}(Animation);

_setDefaults(Tween.prototype, {
  _targets: [],
  _lazy: 0,
  _startAt: 0,
  _op: 0,
  _onInit: 0
}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)
// _forEachName("to,from,fromTo,set,call,add,addLabel,addPause", name => {
// 	Tween.prototype[name] = function() {
// 		let tl = new Timeline();
// 		return _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));
// 	}
// });
//for backward compatibility. Leverage the timeline calls.


_forEachName("staggerTo,staggerFrom,staggerFromTo", function (name) {
  Tween[name] = function () {
    var tl = new Timeline(),
        params = _slice.call(arguments, 0);

    params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0);
    return tl[name].apply(tl, params);
  };
});
/*
 * --------------------------------------------------------------------------------------
 * PROPTWEEN
 * --------------------------------------------------------------------------------------
 */


var _setterPlain = function _setterPlain(target, property, value) {
  return target[property] = value;
},
    _setterFunc = function _setterFunc(target, property, value) {
  return target[property](value);
},
    _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {
  return target[property](data.fp, value);
},
    _setterAttribute = function _setterAttribute(target, property, value) {
  return target.setAttribute(property, value);
},
    _getSetter = function _getSetter(target, property) {
  return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;
},
    _renderPlain = function _renderPlain(ratio, data) {
  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);
},
    _renderBoolean = function _renderBoolean(ratio, data) {
  return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);
},
    _renderComplexString = function _renderComplexString(ratio, data) {
  var pt = data._pt,
      s = "";

  if (!ratio && data.b) {
    //b = beginning string
    s = data.b;
  } else if (ratio === 1 && data.e) {
    //e = ending string
    s = data.e;
  } else {
    while (pt) {
      s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the "p" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.

      pt = pt._next;
    }

    s += data.c; //we use the "c" of the PropTween to store the final chunk of non-numeric text.
  }

  data.set(data.t, data.p, s, data);
},
    _renderPropTweens = function _renderPropTweens(ratio, data) {
  var pt = data._pt;

  while (pt) {
    pt.r(ratio, pt.d);
    pt = pt._next;
  }
},
    _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {
  var pt = this._pt,
      next;

  while (pt) {
    next = pt._next;
    pt.p === property && pt.modifier(modifier, tween, target);
    pt = next;
  }
},
    _killPropTweensOf = function _killPropTweensOf(property) {
  var pt = this._pt,
      hasNonDependentRemaining,
      next;

  while (pt) {
    next = pt._next;

    if (pt.p === property && !pt.op || pt.op === property) {
      _removeLinkedListItem(this, pt, "_pt");
    } else if (!pt.dep) {
      hasNonDependentRemaining = 1;
    }

    pt = next;
  }

  return !hasNonDependentRemaining;
},
    _setterWithModifier = function _setterWithModifier(target, property, value, data) {
  data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);
},
    _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {
  var pt = parent._pt,
      next,
      pt2,
      first,
      last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)

  while (pt) {
    next = pt._next;
    pt2 = first;

    while (pt2 && pt2.pr > pt.pr) {
      pt2 = pt2._next;
    }

    if (pt._prev = pt2 ? pt2._prev : last) {
      pt._prev._next = pt;
    } else {
      first = pt;
    }

    if (pt._next = pt2) {
      pt2._prev = pt;
    } else {
      last = pt;
    }

    pt = next;
  }

  parent._pt = first;
}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)


var PropTween = /*#__PURE__*/function () {
  function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {
    this.t = target;
    this.s = start;
    this.c = change;
    this.p = prop;
    this.r = renderer || _renderPlain;
    this.d = data || this;
    this.set = setter || _setterPlain;
    this.pr = priority || 0;
    this._next = next;

    if (next) {
      next._prev = this;
    }
  }

  var _proto4 = PropTween.prototype;

  _proto4.modifier = function modifier(func, tween, target) {
    this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)

    this.set = _setterWithModifier;
    this.m = func;
    this.mt = target; //modifier target

    this.tween = tween;
  };

  return PropTween;
}(); //Initialization tasks

_forEachName(_callbackNames + "parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger", function (name) {
  return _reservedProps[name] = 1;
});

_globals.TweenMax = _globals.TweenLite = Tween;
_globals.TimelineLite = _globals.TimelineMax = Timeline;
_globalTimeline = new Timeline({
  sortChildren: false,
  defaults: _defaults,
  autoRemoveChildren: true,
  id: "root",
  smoothChildTiming: true
});
_config.stringFilter = _colorStringFilter;

var _media = [],
    _listeners = {},
    _emptyArray = [],
    _lastMediaTime = 0,
    _contextID = 0,
    _dispatch = function _dispatch(type) {
  return (_listeners[type] || _emptyArray).map(function (f) {
    return f();
  });
},
    _onMediaChange = function _onMediaChange() {
  var time = Date.now(),
      matches = [];

  if (time - _lastMediaTime > 2) {
    _dispatch("matchMediaInit");

    _media.forEach(function (c) {
      var queries = c.queries,
          conditions = c.conditions,
          match,
          p,
          anyMatch,
          toggled;

      for (p in queries) {
        match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the "matches" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.

        match && (anyMatch = 1);

        if (match !== conditions[p]) {
          conditions[p] = match;
          toggled = 1;
        }
      }

      if (toggled) {
        c.revert();
        anyMatch && matches.push(c);
      }
    });

    _dispatch("matchMediaRevert");

    matches.forEach(function (c) {
      return c.onMatch(c, function (func) {
        return c.add(null, func);
      });
    });
    _lastMediaTime = time;

    _dispatch("matchMedia");
  }
};

var Context = /*#__PURE__*/function () {
  function Context(func, scope) {
    this.selector = scope && selector(scope);
    this.data = [];
    this._r = []; // returned/cleanup functions

    this.isReverted = false;
    this.id = _contextID++; // to work around issues that frameworks like Vue cause by making things into Proxies which make it impossible to do something like _media.indexOf(this) because "this" would no longer refer to the Context instance itself - it'd refer to a Proxy! We needed a way to identify the context uniquely

    func && this.add(func);
  }

  var _proto5 = Context.prototype;

  _proto5.add = function add(name, func, scope) {
    // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function.
    // if (name && _isFunction(name.revert)) {
    // 	this.data.push(name);
    // 	return (name._ctx = this);
    // }
    if (_isFunction(name)) {
      scope = func;
      func = name;
      name = _isFunction;
    }

    var self = this,
        f = function f() {
      var prev = _context,
          prevSelector = self.selector,
          result;
      prev && prev !== self && prev.data.push(self);
      scope && (self.selector = selector(scope));
      _context = self;
      result = func.apply(self, arguments);
      _isFunction(result) && self._r.push(result);
      _context = prev;
      self.selector = prevSelector;
      self.isReverted = false;
      return result;
    };

    self.last = f;
    return name === _isFunction ? f(self, function (func) {
      return self.add(null, func);
    }) : name ? self[name] = f : f;
  };

  _proto5.ignore = function ignore(func) {
    var prev = _context;
    _context = null;
    func(this);
    _context = prev;
  };

  _proto5.getTweens = function getTweens() {
    var a = [];
    this.data.forEach(function (e) {
      return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === "nested") && a.push(e);
    });
    return a;
  };

  _proto5.clear = function clear() {
    this._r.length = this.data.length = 0;
  };

  _proto5.kill = function kill(revert, matchMedia) {
    var _this4 = this;

    if (revert) {
      (function () {
        var tweens = _this4.getTweens(),
            i = _this4.data.length,
            t;

        while (i--) {
          // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted.
          t = _this4.data[i];

          if (t.data === "isFlip") {
            t.revert();
            t.getChildren(true, true, false).forEach(function (tween) {
              return tweens.splice(tweens.indexOf(tween), 1);
            });
          }
        } // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort


        tweens.map(function (t) {
          return {
            g: t._dur || t._delay || t._sat && !t._sat.vars.immediateRender ? t.globalTime(0) : -Infinity,
            t: t
          };
        }).sort(function (a, b) {
          return b.g - a.g || -Infinity;
        }).forEach(function (o) {
          return o.t.revert(revert);
        }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the " || -1" in the sort keeps the order properly.

        i = _this4.data.length;

        while (i--) {
          // make sure we loop backwards so that, for example, SplitTexts that were created later on the same element get reverted first
          t = _this4.data[i];

          if (t instanceof Timeline) {
            if (t.data !== "nested") {
              t.scrollTrigger && t.scrollTrigger.revert();
              t.kill(); // don't revert() the timeline because that's duplicating efforts since we already reverted all the tweens
            }
          } else {
            !(t instanceof Tween) && t.revert && t.revert(revert);
          }
        }

        _this4._r.forEach(function (f) {
          return f(revert, _this4);
        });

        _this4.isReverted = true;
      })();
    } else {
      this.data.forEach(function (e) {
        return e.kill && e.kill();
      });
    }

    this.clear();

    if (matchMedia) {
      var i = _media.length;

      while (i--) {
        // previously, we checked _media.indexOf(this), but some frameworks like Vue enforce Proxy objects that make it impossible to get the proper result that way, so we must use a unique ID number instead.
        _media[i].id === this.id && _media.splice(i, 1);
      }
    }
  };

  _proto5.revert = function revert(config) {
    this.kill(config || {});
  };

  return Context;
}();

var MatchMedia = /*#__PURE__*/function () {
  function MatchMedia(scope) {
    this.contexts = [];
    this.scope = scope;
    _context && _context.data.push(this);
  }

  var _proto6 = MatchMedia.prototype;

  _proto6.add = function add(conditions, func, scope) {
    _isObject(conditions) || (conditions = {
      matches: conditions
    });
    var context = new Context(0, scope || this.scope),
        cond = context.conditions = {},
        mq,
        p,
        active;
    _context && !context.selector && (context.selector = _context.selector); // in case a context is created inside a context. Like a gsap.matchMedia() that's inside a scoped gsap.context()

    this.contexts.push(context);
    func = context.add("onMatch", func);
    context.queries = conditions;

    for (p in conditions) {
      if (p === "all") {
        active = 1;
      } else {
        mq = _win.matchMedia(conditions[p]);

        if (mq) {
          _media.indexOf(context) < 0 && _media.push(context);
          (cond[p] = mq.matches) && (active = 1);
          mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener("change", _onMediaChange);
        }
      }
    }

    active && func(context, function (f) {
      return context.add(null, f);
    });
    return this;
  } // refresh() {
  // 	let time = _lastMediaTime,
  // 		media = _media;
  // 	_lastMediaTime = -1;
  // 	_media = this.contexts;
  // 	_onMediaChange();
  // 	_lastMediaTime = time;
  // 	_media = media;
  // }
  ;

  _proto6.revert = function revert(config) {
    this.kill(config || {});
  };

  _proto6.kill = function kill(revert) {
    this.contexts.forEach(function (c) {
      return c.kill(revert, true);
    });
  };

  return MatchMedia;
}();
/*
 * --------------------------------------------------------------------------------------
 * GSAP
 * --------------------------------------------------------------------------------------
 */


var _gsap = {
  registerPlugin: function registerPlugin() {
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }

    args.forEach(function (config) {
      return _createPlugin(config);
    });
  },
  timeline: function timeline(vars) {
    return new Timeline(vars);
  },
  getTweensOf: function getTweensOf(targets, onlyActive) {
    return _globalTimeline.getTweensOf(targets, onlyActive);
  },
  getProperty: function getProperty(target, property, unit, uncache) {
    _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in

    var getter = _getCache(target || {}).get,
        format = unit ? _passThrough : _numericIfPossible;

    unit === "native" && (unit = "");
    return !target ? target : !property ? function (property, unit, uncache) {
      return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
    } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
  },
  quickSetter: function quickSetter(target, property, unit) {
    target = toArray(target);

    if (target.length > 1) {
      var setters = target.map(function (t) {
        return gsap.quickSetter(t, property, unit);
      }),
          l = setters.length;
      return function (value) {
        var i = l;

        while (i--) {
          setters[i](value);
        }
      };
    }

    target = target[0] || {};

    var Plugin = _plugins[property],
        cache = _getCache(target),
        p = cache.harness && (cache.harness.aliases || {})[property] || property,
        // in case it's an alias, like "rotate" for "rotation".
    setter = Plugin ? function (value) {
      var p = new Plugin();
      _quickTween._pt = 0;
      p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);
      p.render(1, p);
      _quickTween._pt && _renderPropTweens(1, _quickTween);
    } : cache.set(target, p);

    return Plugin ? setter : function (value) {
      return setter(target, p, unit ? value + unit : value, cache, 1);
    };
  },
  quickTo: function quickTo(target, property, vars) {
    var _merge2;

    var tween = gsap.to(target, _merge((_merge2 = {}, _merge2[property] = "+=0.1", _merge2.paused = true, _merge2), vars || {})),
        func = function func(value, start, startIsRelative) {
      return tween.resetTo(property, value, start, startIsRelative);
    };

    func.tween = tween;
    return func;
  },
  isTweening: function isTweening(targets) {
    return _globalTimeline.getTweensOf(targets, true).length > 0;
  },
  defaults: function defaults(value) {
    value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));
    return _mergeDeep(_defaults, value || {});
  },
  config: function config(value) {
    return _mergeDeep(_config, value || {});
  },
  registerEffect: function registerEffect(_ref3) {
    var name = _ref3.name,
        effect = _ref3.effect,
        plugins = _ref3.plugins,
        defaults = _ref3.defaults,
        extendTimeline = _ref3.extendTimeline;
    (plugins || "").split(",").forEach(function (pluginName) {
      return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin.");
    });

    _effects[name] = function (targets, vars, tl) {
      return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);
    };

    if (extendTimeline) {
      Timeline.prototype[name] = function (targets, vars, position) {
        return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);
      };
    }
  },
  registerEase: function registerEase(name, ease) {
    _easeMap[name] = _parseEase(ease);
  },
  parseEase: function parseEase(ease, defaultEase) {
    return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;
  },
  getById: function getById(id) {
    return _globalTimeline.getById(id);
  },
  exportRoot: function exportRoot(vars, includeDelayedCalls) {
    if (vars === void 0) {
      vars = {};
    }

    var tl = new Timeline(vars),
        child,
        next;
    tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);

    _globalTimeline.remove(tl);

    tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).

    tl._time = tl._tTime = _globalTimeline._time;
    child = _globalTimeline._first;

    while (child) {
      next = child._next;

      if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {
        _addToTimeline(tl, child, child._start - child._delay);
      }

      child = next;
    }

    _addToTimeline(_globalTimeline, tl, 0);

    return tl;
  },
  context: function context(func, scope) {
    return func ? new Context(func, scope) : _context;
  },
  matchMedia: function matchMedia(scope) {
    return new MatchMedia(scope);
  },
  matchMediaRefresh: function matchMediaRefresh() {
    return _media.forEach(function (c) {
      var cond = c.conditions,
          found,
          p;

      for (p in cond) {
        if (cond[p]) {
          cond[p] = false;
          found = 1;
        }
      }

      found && c.revert();
    }) || _onMediaChange();
  },
  addEventListener: function addEventListener(type, callback) {
    var a = _listeners[type] || (_listeners[type] = []);
    ~a.indexOf(callback) || a.push(callback);
  },
  removeEventListener: function removeEventListener(type, callback) {
    var a = _listeners[type],
        i = a && a.indexOf(callback);
    i >= 0 && a.splice(i, 1);
  },
  utils: {
    wrap: wrap,
    wrapYoyo: wrapYoyo,
    distribute: distribute,
    random: random,
    snap: snap,
    normalize: normalize,
    getUnit: getUnit,
    clamp: clamp,
    splitColor: splitColor,
    toArray: toArray,
    selector: selector,
    mapRange: mapRange,
    pipe: pipe,
    unitize: unitize,
    interpolate: interpolate,
    shuffle: shuffle
  },
  install: _install,
  effects: _effects,
  ticker: _ticker,
  updateRoot: Timeline.updateRoot,
  plugins: _plugins,
  globalTimeline: _globalTimeline,
  core: {
    PropTween: PropTween,
    globals: _addGlobal,
    Tween: Tween,
    Timeline: Timeline,
    Animation: Animation,
    getCache: _getCache,
    _removeLinkedListItem: _removeLinkedListItem,
    reverting: function reverting() {
      return _reverting;
    },
    context: function context(toAdd) {
      if (toAdd && _context) {
        _context.data.push(toAdd);

        toAdd._ctx = _context;
      }

      return _context;
    },
    suppressOverwrites: function suppressOverwrites(value) {
      return _suppressOverwrites = value;
    }
  }
};

_forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function (name) {
  return _gsap[name] = Tween[name];
});

_ticker.add(Timeline.updateRoot);

_quickTween = _gsap.to({}, {
  duration: 0
}); // ---- EXTRA PLUGINS --------------------------------------------------------

var _getPluginPropTween = function _getPluginPropTween(plugin, prop) {
  var pt = plugin._pt;

  while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {
    pt = pt._next;
  }

  return pt;
},
    _addModifiers = function _addModifiers(tween, modifiers) {
  var targets = tween._targets,
      p,
      i,
      pt;

  for (p in modifiers) {
    i = targets.length;

    while (i--) {
      pt = tween._ptLookup[i][p];

      if (pt && (pt = pt.d)) {
        if (pt._pt) {
          // is a plugin
          pt = _getPluginPropTween(pt, p);
        }

        pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);
      }
    }
  }
},
    _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {
  return {
    name: name,
    rawVars: 1,
    //don't pre-process function-based values or "random()" strings.
    init: function init(target, vars, tween) {
      tween._onInit = function (tween) {
        var temp, p;

        if (_isString(vars)) {
          temp = {};

          _forEachName(vars, function (name) {
            return temp[name] = 1;
          }); //if the user passes in a comma-delimited list of property names to roundProps, like "x,y", we round to whole numbers.


          vars = temp;
        }

        if (modifier) {
          temp = {};

          for (p in vars) {
            temp[p] = modifier(vars[p]);
          }

          vars = temp;
        }

        _addModifiers(tween, vars);
      };
    }
  };
}; //register core plugins


var gsap = _gsap.registerPlugin({
  name: "attr",
  init: function init(target, vars, tween, index, targets) {
    var p, pt, v;
    this.tween = tween;

    for (p in vars) {
      v = target.getAttribute(p) || "";
      pt = this.add(target, "setAttribute", (v || 0) + "", vars[p], index, targets, 0, 0, p);
      pt.op = p;
      pt.b = v; // record the beginning value so we can revert()

      this._props.push(p);
    }
  },
  render: function render(ratio, data) {
    var pt = data._pt;

    while (pt) {
      _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b)

      pt = pt._next;
    }
  }
}, {
  name: "endArray",
  init: function init(target, value) {
    var i = value.length;

    while (i--) {
      this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);
    }
  }
}, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.

Tween.version = Timeline.version = gsap.version = "3.12.5";
_coreReady = 1;
_windowExists() && _wake();
var Power0 = _easeMap.Power0,
    Power1 = _easeMap.Power1,
    Power2 = _easeMap.Power2,
    Power3 = _easeMap.Power3,
    Power4 = _easeMap.Power4,
    Linear = _easeMap.Linear,
    Quad = _easeMap.Quad,
    Cubic = _easeMap.Cubic,
    Quart = _easeMap.Quart,
    Quint = _easeMap.Quint,
    Strong = _easeMap.Strong,
    Elastic = _easeMap.Elastic,
    Back = _easeMap.Back,
    SteppedEase = _easeMap.SteppedEase,
    Bounce = _easeMap.Bounce,
    Sine = _easeMap.Sine,
    Expo = _easeMap.Expo,
    Circ = _easeMap.Circ;

 //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.


;// CONCATENATED MODULE: ./node_modules/gsap/CSSPlugin.js
/*!
 * CSSPlugin 3.12.5
 * https://gsap.com
 *
 * Copyright 2008-2024, GreenSock. All rights reserved.
 * Subject to the terms at https://gsap.com/standard-license or for
 * Club GSAP members, the agreement issued with that membership.
 * @author: Jack Doyle, jack@greensock.com
*/

/* eslint-disable */


var CSSPlugin_win,
    CSSPlugin_doc,
    _docElement,
    _pluginInitted,
    _tempDiv,
    _tempDivStyler,
    _recentSetterPlugin,
    CSSPlugin_reverting,
    CSSPlugin_windowExists = function _windowExists() {
  return typeof window !== "undefined";
},
    _transformProps = {},
    _RAD2DEG = 180 / Math.PI,
    _DEG2RAD = Math.PI / 180,
    _atan2 = Math.atan2,
    CSSPlugin_bigNum = 1e8,
    _capsExp = /([A-Z])/g,
    _horizontalExp = /(left|right|width|margin|padding|x)/i,
    _complexExp = /[\s,\(]\S/,
    _propertyAliases = {
  autoAlpha: "opacity,visibility",
  scale: "scaleX,scaleY",
  alpha: "opacity"
},
    _renderCSSProp = function _renderCSSProp(ratio, data) {
  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);
},
    _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {
  return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);
},
    _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {
  return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);
},
    //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)
_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {
  var value = data.s + data.c * ratio;
  data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);
},
    _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {
  return data.set(data.t, data.p, ratio ? data.e : data.b, data);
},
    _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {
  return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);
},
    _setterCSSStyle = function _setterCSSStyle(target, property, value) {
  return target.style[property] = value;
},
    _setterCSSProp = function _setterCSSProp(target, property, value) {
  return target.style.setProperty(property, value);
},
    _setterTransform = function _setterTransform(target, property, value) {
  return target._gsap[property] = value;
},
    _setterScale = function _setterScale(target, property, value) {
  return target._gsap.scaleX = target._gsap.scaleY = value;
},
    _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {
  var cache = target._gsap;
  cache.scaleX = cache.scaleY = value;
  cache.renderTransform(ratio, cache);
},
    _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {
  var cache = target._gsap;
  cache[property] = value;
  cache.renderTransform(ratio, cache);
},
    _transformProp = "transform",
    _transformOriginProp = _transformProp + "Origin",
    _saveStyle = function _saveStyle(property, isNotCSS) {
  var _this = this;

  var target = this.target,
      style = target.style,
      cache = target._gsap;

  if (property in _transformProps && style) {
    this.tfm = this.tfm || {};

    if (property !== "transform") {
      property = _propertyAliases[property] || property;
      ~property.indexOf(",") ? property.split(",").forEach(function (a) {
        return _this.tfm[a] = _get(target, a);
      }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property); // note: scale would map to "scaleX,scaleY", thus we loop and apply them both.

      property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);
    } else {
      return _propertyAliases.transform.split(",").forEach(function (p) {
        return _saveStyle.call(_this, p, isNotCSS);
      });
    }

    if (this.props.indexOf(_transformProp) >= 0) {
      return;
    }

    if (cache.svg) {
      this.svgo = target.getAttribute("data-svg-origin");
      this.props.push(_transformOriginProp, isNotCSS, "");
    }

    property = _transformProp;
  }

  (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);
},
    _removeIndependentTransforms = function _removeIndependentTransforms(style) {
  if (style.translate) {
    style.removeProperty("translate");
    style.removeProperty("scale");
    style.removeProperty("rotate");
  }
},
    _revertStyle = function _revertStyle() {
  var props = this.props,
      target = this.target,
      style = target.style,
      cache = target._gsap,
      i,
      p;

  for (i = 0; i < props.length; i += 3) {
    // stored like this: property, isNotCSS, value
    props[i + 1] ? target[props[i]] = props[i + 2] : props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === "--" ? props[i] : props[i].replace(_capsExp, "-$1").toLowerCase());
  }

  if (this.tfm) {
    for (p in this.tfm) {
      cache[p] = this.tfm[p];
    }

    if (cache.svg) {
      cache.renderTransform();
      target.setAttribute("data-svg-origin", this.svgo || "");
    }

    i = CSSPlugin_reverting();

    if ((!i || !i.isStart) && !style[_transformProp]) {
      _removeIndependentTransforms(style);

      if (cache.zOrigin && style[_transformOriginProp]) {
        style[_transformOriginProp] += " " + cache.zOrigin + "px"; // since we're uncaching, we must put the zOrigin back into the transformOrigin so that we can pull it out accurately when we parse again. Otherwise, we'd lose the z portion of the origin since we extract it to protect from Safari bugs.

        cache.zOrigin = 0;
        cache.renderTransform();
      }

      cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization.
    }
  }
},
    _getStyleSaver = function _getStyleSaver(target, properties) {
  var saver = {
    target: target,
    props: [],
    revert: _revertStyle,
    save: _saveStyle
  };
  target._gsap || gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once.

  properties && properties.split(",").forEach(function (p) {
    return saver.save(p);
  });
  return saver;
},
    _supports3D,
    _createElement = function _createElement(type, ns) {
  var e = CSSPlugin_doc.createElementNS ? CSSPlugin_doc.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : CSSPlugin_doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making "style" inaccessible.

  return e && e.style ? e : CSSPlugin_doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://gsap.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).
},
    _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {
  var cs = getComputedStyle(target);
  return cs[property] || cs.getPropertyValue(property.replace(_capsExp, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || ""; //css variables may not need caps swapped out for dashes and lowercase.
},
    _prefixes = "O,Moz,ms,Ms,Webkit".split(","),
    _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {
  var e = element || _tempDiv,
      s = e.style,
      i = 5;

  if (property in s && !preferPrefix) {
    return property;
  }

  property = property.charAt(0).toUpperCase() + property.substr(1);

  while (i-- && !(_prefixes[i] + property in s)) {}

  return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property;
},
    _initCore = function _initCore() {
  if (CSSPlugin_windowExists() && window.document) {
    CSSPlugin_win = window;
    CSSPlugin_doc = CSSPlugin_win.document;
    _docElement = CSSPlugin_doc.documentElement;
    _tempDiv = _createElement("div") || {
      style: {}
    };
    _tempDivStyler = _createElement("div");
    _transformProp = _checkPropPrefix(_transformProp);
    _transformOriginProp = _transformProp + "Origin";
    _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.

    _supports3D = !!_checkPropPrefix("perspective");
    CSSPlugin_reverting = gsap.core.reverting;
    _pluginInitted = 1;
  }
},
    _getBBoxHack = function _getBBoxHack(swapIfPossible) {
  //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).
  var svg = _createElement("svg", this.ownerSVGElement && this.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg"),
      oldParent = this.parentNode,
      oldSibling = this.nextSibling,
      oldCSS = this.style.cssText,
      bbox;

  _docElement.appendChild(svg);

  svg.appendChild(this);
  this.style.display = "block";

  if (swapIfPossible) {
    try {
      bbox = this.getBBox();
      this._gsapBBox = this.getBBox; //store the original

      this.getBBox = _getBBoxHack;
    } catch (e) {}
  } else if (this._gsapBBox) {
    bbox = this._gsapBBox();
  }

  if (oldParent) {
    if (oldSibling) {
      oldParent.insertBefore(this, oldSibling);
    } else {
      oldParent.appendChild(this);
    }
  }

  _docElement.removeChild(svg);

  this.style.cssText = oldCSS;
  return bbox;
},
    _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {
  var i = attributesArray.length;

  while (i--) {
    if (target.hasAttribute(attributesArray[i])) {
      return target.getAttribute(attributesArray[i]);
    }
  }
},
    _getBBox = function _getBBox(target) {
  var bounds;

  try {
    bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118
  } catch (error) {
    bounds = _getBBoxHack.call(target, true);
  }

  bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.

  return bounds && !bounds.width && !bounds.x && !bounds.y ? {
    x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0,
    y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0,
    width: 0,
    height: 0
  } : bounds;
},
    _isSVG = function _isSVG(e) {
  return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));
},
    //reports if the element is an SVG on which getBBox() actually works
_removeProperty = function _removeProperty(target, property) {
  if (property) {
    var style = target.style,
        first2Chars;

    if (property in _transformProps && property !== _transformOriginProp) {
      property = _transformProp;
    }

    if (style.removeProperty) {
      first2Chars = property.substr(0, 2);

      if (first2Chars === "ms" || property.substr(0, 6) === "webkit") {
        //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be "ms-transform" instead of "-ms-transform" for IE9, for example)
        property = "-" + property;
      }

      style.removeProperty(first2Chars === "--" ? property : property.replace(_capsExp, "-$1").toLowerCase());
    } else {
      //note: old versions of IE use "removeAttribute()" instead of "removeProperty()"
      style.removeAttribute(property);
    }
  }
},
    _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {
  var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);
  plugin._pt = pt;
  pt.b = beginning;
  pt.e = end;

  plugin._props.push(property);

  return pt;
},
    _nonConvertibleUnits = {
  deg: 1,
  rad: 1,
  turn: 1
},
    _nonStandardLayouts = {
  grid: 1,
  flex: 1
},
    //takes a single value like 20px and converts it to the unit specified, like "%", returning only the numeric amount.
_convertToUnit = function _convertToUnit(target, property, value, unit) {
  var curValue = parseFloat(value) || 0,
      curUnit = (value + "").trim().substr((curValue + "").length) || "px",
      // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()
  style = _tempDiv.style,
      horizontal = _horizontalExp.test(property),
      isRootSVG = target.tagName.toLowerCase() === "svg",
      measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"),
      amount = 100,
      toPixels = unit === "px",
      toPercent = unit === "%",
      px,
      parent,
      cache,
      isSVG;

  if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {
    return curValue;
  }

  curUnit !== "px" && !toPixels && (curValue = _convertToUnit(target, property, value, "px"));
  isSVG = target.getCTM && _isSVG(target);

  if ((toPercent || curUnit === "%") && (_transformProps[property] || ~property.indexOf("adius"))) {
    px = isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty];
    return _round(toPercent ? curValue / px * amount : curValue / 100 * px);
  }

  style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit);
  parent = ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode;

  if (isSVG) {
    parent = (target.ownerSVGElement || {}).parentNode;
  }

  if (!parent || parent === CSSPlugin_doc || !parent.appendChild) {
    parent = CSSPlugin_doc.body;
  }

  cache = parent._gsap;

  if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time && !cache.uncache) {
    return _round(curValue / cache.width * amount);
  } else {
    if (toPercent && (property === "height" || property === "width")) {
      // if we're dealing with width/height that's inside a container with padding and/or it's a flexbox/grid container, we must apply it to the target itself rather than the _tempDiv in order to ensure complete accuracy, factoring in the parent's padding.
      var v = target.style[property];
      target.style[property] = amount + unit;
      px = target[measureProperty];
      v ? target.style[property] = v : _removeProperty(target, property);
    } else {
      (toPercent || curUnit === "%") && !_nonStandardLayouts[_getComputedProperty(parent, "display")] && (style.position = _getComputedProperty(target, "position"));
      parent === target && (style.position = "static"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.

      parent.appendChild(_tempDiv);
      px = _tempDiv[measureProperty];
      parent.removeChild(_tempDiv);
      style.position = "absolute";
    }

    if (horizontal && toPercent) {
      cache = _getCache(parent);
      cache.time = _ticker.time;
      cache.width = parent[measureProperty];
    }
  }

  return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);
},
    _get = function _get(target, property, unit, uncache) {
  var value;
  _pluginInitted || _initCore();

  if (property in _propertyAliases && property !== "transform") {
    property = _propertyAliases[property];

    if (~property.indexOf(",")) {
      property = property.split(",")[0];
    }
  }

  if (_transformProps[property] && property !== "transform") {
    value = _parseTransform(target, uncache);
    value = property !== "transformOrigin" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + " " + value.zOrigin + "px";
  } else {
    value = target.style[property];

    if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) {
      value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === "opacity" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like  borderTopLeftRadius
    }
  }

  return unit && !~(value + "").trim().indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value;
},
    _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {
  // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus "this" would refer to the plugin.
  if (!start || start === "none") {
    // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style ("clipPath" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as "none" whereas WebkitClipPath reports accurately like "ellipse(100% 0% at 50% 0%)", so in this case we must SWITCH to using the prefixed property instead. See https://gsap.com/forums/topic/18310-clippath-doesnt-work-on-ios/
    var p = _checkPropPrefix(prop, target, 1),
        s = p && _getComputedProperty(target, p, 1);

    if (s && s !== start) {
      prop = p;
      start = s;
    } else if (prop === "borderColor") {
      start = _getComputedProperty(target, "borderTopColor"); // Firefox bug: always reports "borderColor" as "", so we must fall back to borderTopColor. See https://gsap.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/
    }
  }

  var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),
      index = 0,
      matchIndex = 0,
      a,
      result,
      startValues,
      startNum,
      color,
      startValue,
      endValue,
      endNum,
      chunk,
      endUnit,
      startUnit,
      endValues;
  pt.b = start;
  pt.e = end;
  start += ""; // ensure values are strings

  end += "";

  if (end === "auto") {
    startValue = target.style[prop];
    target.style[prop] = end;
    end = _getComputedProperty(target, prop) || end;
    startValue ? target.style[prop] = startValue : _removeProperty(target, prop);
  }

  a = [start, end];

  _colorStringFilter(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().


  start = a[0];
  end = a[1];
  startValues = start.match(_numWithUnitExp) || [];
  endValues = end.match(_numWithUnitExp) || [];

  if (endValues.length) {
    while (result = _numWithUnitExp.exec(end)) {
      endValue = result[0];
      chunk = end.substring(index, result.index);

      if (color) {
        color = (color + 1) % 5;
      } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") {
        color = 1;
      }

      if (endValue !== (startValue = startValues[matchIndex++] || "")) {
        startNum = parseFloat(startValue) || 0;
        startUnit = startValue.substr((startNum + "").length);
        endValue.charAt(1) === "=" && (endValue = _parseRelative(startNum, endValue) + startUnit);
        endNum = parseFloat(endValue);
        endUnit = endValue.substr((endNum + "").length);
        index = _numWithUnitExp.lastIndex - endUnit.length;

        if (!endUnit) {
          //if something like "perspective:300" is passed in and we must add a unit to the end
          endUnit = endUnit || _config.units[prop] || startUnit;

          if (index === end.length) {
            end += endUnit;
            pt.e += endUnit;
          }
        }

        if (startUnit !== endUnit) {
          startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;
        } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.


        pt._pt = {
          _next: pt._pt,
          p: chunk || matchIndex === 1 ? chunk : ",",
          //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.
          s: startNum,
          c: endNum - startNum,
          m: color && color < 4 || prop === "zIndex" ? Math.round : 0
        };
      }
    }

    pt.c = index < end.length ? end.substring(index, end.length) : ""; //we use the "c" of the PropTween to store the final part of the string (after the last number)
  } else {
    pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;
  }

  _relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).

  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus "this" would refer to the plugin.

  return pt;
},
    _keywordToPercent = {
  top: "0%",
  bottom: "100%",
  left: "0%",
  right: "100%",
  center: "50%"
},
    _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {
  var split = value.split(" "),
      x = split[0],
      y = split[1] || "50%";

  if (x === "top" || x === "bottom" || y === "left" || y === "right") {
    //the user provided them in the wrong order, so flip them
    value = x;
    x = y;
    y = value;
  }

  split[0] = _keywordToPercent[x] || x;
  split[1] = _keywordToPercent[y] || y;
  return split.join(" ");
},
    _renderClearProps = function _renderClearProps(ratio, data) {
  if (data.tween && data.tween._time === data.tween._dur) {
    var target = data.t,
        style = target.style,
        props = data.u,
        cache = target._gsap,
        prop,
        clearTransforms,
        i;

    if (props === "all" || props === true) {
      style.cssText = "";
      clearTransforms = 1;
    } else {
      props = props.split(",");
      i = props.length;

      while (--i > -1) {
        prop = props[i];

        if (_transformProps[prop]) {
          clearTransforms = 1;
          prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp;
        }

        _removeProperty(target, prop);
      }
    }

    if (clearTransforms) {
      _removeProperty(target, _transformProp);

      if (cache) {
        cache.svg && target.removeAttribute("transform");

        _parseTransform(target, 1); // force all the cached values back to "normal"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.


        cache.uncache = 1;

        _removeIndependentTransforms(style);
      }
    }
  }
},
    // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.
_specialProps = {
  clearProps: function clearProps(plugin, target, property, endValue, tween) {
    if (tween.data !== "isFromStart") {
      var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);
      pt.u = endValue;
      pt.pr = -10;
      pt.tween = tween;

      plugin._props.push(property);

      return 1;
    }
  }
  /* className feature (about 0.4kb gzipped).
  , className(plugin, target, property, endValue, tween) {
  	let _renderClassName = (ratio, data) => {
  			data.css.render(ratio, data.css);
  			if (!ratio || ratio === 1) {
  				let inline = data.rmv,
  					target = data.t,
  					p;
  				target.setAttribute("class", ratio ? data.e : data.b);
  				for (p in inline) {
  					_removeProperty(target, p);
  				}
  			}
  		},
  		_getAllStyles = (target) => {
  			let styles = {},
  				computed = getComputedStyle(target),
  				p;
  			for (p in computed) {
  				if (isNaN(p) && p !== "cssText" && p !== "length") {
  					styles[p] = computed[p];
  				}
  			}
  			_setDefaults(styles, _parseTransform(target, 1));
  			return styles;
  		},
  		startClassList = target.getAttribute("class"),
  		style = target.style,
  		cssText = style.cssText,
  		cache = target._gsap,
  		classPT = cache.classPT,
  		inlineToRemoveAtEnd = {},
  		data = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== "=") ? endValue : startClassList.replace(new RegExp("(?:\\s|^)" + endValue.substr(2) + "(?![\\w-])"), "") + ((endValue.charAt(0) === "+") ? " " + endValue.substr(2) : "")},
  		changingVars = {},
  		startVars = _getAllStyles(target),
  		transformRelated = /(transform|perspective)/i,
  		endVars, p;
  	if (classPT) {
  		classPT.r(1, classPT.d);
  		_removeLinkedListItem(classPT.d.plugin, classPT, "_pt");
  	}
  	target.setAttribute("class", data.e);
  	endVars = _getAllStyles(target, true);
  	target.setAttribute("class", startClassList);
  	for (p in endVars) {
  		if (endVars[p] !== startVars[p] && !transformRelated.test(p)) {
  			changingVars[p] = endVars[p];
  			if (!style[p] && style[p] !== "0") {
  				inlineToRemoveAtEnd[p] = 1;
  			}
  		}
  	}
  	cache.classPT = plugin._pt = new PropTween(plugin._pt, target, "className", 0, 0, _renderClassName, data, 0, -11);
  	if (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://gsap.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.
  		style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).
  	}
  	_parseTransform(target, true); //to clear the caching of transforms
  	data.css = new gsap.plugins.css();
  	data.css.init(target, changingVars, tween);
  	plugin._props.push(...data.css._props);
  	return 1;
  }
  */

},

/*
 * --------------------------------------------------------------------------------------
 * TRANSFORMS
 * --------------------------------------------------------------------------------------
 */
_identity2DMatrix = [1, 0, 0, 1, 0, 0],
    _rotationalProperties = {},
    _isNullTransform = function _isNullTransform(value) {
  return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value;
},
    _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {
  var matrixString = _getComputedProperty(target, _transformProp);

  return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);
},
    _getMatrix = function _getMatrix(target, force2D) {
  var cache = target._gsap || _getCache(target),
      style = target.style,
      matrix = _getComputedTransformMatrixAsArray(target),
      parent,
      nextSibling,
      temp,
      addedToDOM;

  if (cache.svg && target.getAttribute("transform")) {
    temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like "translate(50,60) rotate(135,0,0)" are parsed because it mashes it into a matrix.

    matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];
    return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix;
  } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {
    //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397
    //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not "none". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).
    temp = style.display;
    style.display = "block";
    parent = target.parentNode;

    if (!parent || !target.offsetParent) {
      // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375
      addedToDOM = 1; //flag

      nextSibling = target.nextElementSibling;

      _docElement.appendChild(target); //we must add it to the DOM in order to get values properly

    }

    matrix = _getComputedTransformMatrixAsArray(target);
    temp ? style.display = temp : _removeProperty(target, "display");

    if (addedToDOM) {
      nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);
    }
  }

  return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;
},
    _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {
  var cache = target._gsap,
      matrix = matrixArray || _getMatrix(target, true),
      xOriginOld = cache.xOrigin || 0,
      yOriginOld = cache.yOrigin || 0,
      xOffsetOld = cache.xOffset || 0,
      yOffsetOld = cache.yOffset || 0,
      a = matrix[0],
      b = matrix[1],
      c = matrix[2],
      d = matrix[3],
      tx = matrix[4],
      ty = matrix[5],
      originSplit = origin.split(" "),
      xOrigin = parseFloat(originSplit[0]) || 0,
      yOrigin = parseFloat(originSplit[1]) || 0,
      bounds,
      determinant,
      x,
      y;

  if (!originIsAbsolute) {
    bounds = _getBBox(target);
    xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * bounds.width : xOrigin);
    yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin); // if (!("xOrigin" in cache) && (xOrigin || yOrigin)) { // added in 3.12.3, reverted in 3.12.4; requires more exploration
    // 	xOrigin -= bounds.x;
    // 	yOrigin -= bounds.y;
    // }
  } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {
    //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.
    x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;
    y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;
    xOrigin = x;
    yOrigin = y; // theory: we only had to do this for smoothing and it assumes that the previous one was not originIsAbsolute.
  }

  if (smooth || smooth !== false && cache.smooth) {
    tx = xOrigin - xOriginOld;
    ty = yOrigin - yOriginOld;
    cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;
    cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;
  } else {
    cache.xOffset = cache.yOffset = 0;
  }

  cache.xOrigin = xOrigin;
  cache.yOrigin = yOrigin;
  cache.smooth = !!smooth;
  cache.origin = origin;
  cache.originIsAbsolute = !!originIsAbsolute;
  target.style[_transformOriginProp] = "0px 0px"; //otherwise, if someone sets  an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).

  if (pluginToAddPropTweensTo) {
    _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin);

    _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin);

    _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset);

    _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset);
  }

  target.setAttribute("data-svg-origin", xOrigin + " " + yOrigin);
},
    _parseTransform = function _parseTransform(target, uncache) {
  var cache = target._gsap || new GSCache(target);

  if ("x" in cache && !uncache && !cache.uncache) {
    return cache;
  }

  var style = target.style,
      invertedScaleX = cache.scaleX < 0,
      px = "px",
      deg = "deg",
      cs = getComputedStyle(target),
      origin = _getComputedProperty(target, _transformOriginProp) || "0",
      x,
      y,
      z,
      scaleX,
      scaleY,
      rotation,
      rotationX,
      rotationY,
      skewX,
      skewY,
      perspective,
      xOrigin,
      yOrigin,
      matrix,
      angle,
      cos,
      sin,
      a,
      b,
      c,
      d,
      a12,
      a22,
      t1,
      t2,
      t3,
      a13,
      a23,
      a33,
      a42,
      a43,
      a32;
  x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;
  scaleX = scaleY = 1;
  cache.svg = !!(target.getCTM && _isSVG(target));

  if (cs.translate) {
    // accommodate independent transforms by combining them into normal ones.
    if (cs.translate !== "none" || cs.scale !== "none" || cs.rotate !== "none") {
      style[_transformProp] = (cs.translate !== "none" ? "translate3d(" + (cs.translate + " 0 0").split(" ").slice(0, 3).join(", ") + ") " : "") + (cs.rotate !== "none" ? "rotate(" + cs.rotate + ") " : "") + (cs.scale !== "none" ? "scale(" + cs.scale.split(" ").join(",") + ") " : "") + (cs[_transformProp] !== "none" ? cs[_transformProp] : "");
    }

    style.scale = style.rotate = style.translate = "none";
  }

  matrix = _getMatrix(target, cache.svg);

  if (cache.svg) {
    if (cache.uncache) {
      // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + "px " + (cache.yOrigin - bbox.y) + "px". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things.
      t2 = target.getBBox();
      origin = cache.xOrigin - t2.x + "px " + (cache.yOrigin - t2.y) + "px";
      t1 = "";
    } else {
      t1 = !uncache && target.getAttribute("data-svg-origin"); //  Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.
    }

    _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);
  }

  xOrigin = cache.xOrigin || 0;
  yOrigin = cache.yOrigin || 0;

  if (matrix !== _identity2DMatrix) {
    a = matrix[0]; //a11

    b = matrix[1]; //a21

    c = matrix[2]; //a31

    d = matrix[3]; //a41

    x = a12 = matrix[4];
    y = a22 = matrix[5]; //2D matrix

    if (matrix.length === 6) {
      scaleX = Math.sqrt(a * a + b * b);
      scaleY = Math.sqrt(d * d + c * c);
      rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).

      skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;
      skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));

      if (cache.svg) {
        x -= xOrigin - (xOrigin * a + yOrigin * c);
        y -= yOrigin - (xOrigin * b + yOrigin * d);
      } //3D matrix

    } else {
      a32 = matrix[6];
      a42 = matrix[7];
      a13 = matrix[8];
      a23 = matrix[9];
      a33 = matrix[10];
      a43 = matrix[11];
      x = matrix[12];
      y = matrix[13];
      z = matrix[14];
      angle = _atan2(a32, a33);
      rotationX = angle * _RAD2DEG; //rotationX

      if (angle) {
        cos = Math.cos(-angle);
        sin = Math.sin(-angle);
        t1 = a12 * cos + a13 * sin;
        t2 = a22 * cos + a23 * sin;
        t3 = a32 * cos + a33 * sin;
        a13 = a12 * -sin + a13 * cos;
        a23 = a22 * -sin + a23 * cos;
        a33 = a32 * -sin + a33 * cos;
        a43 = a42 * -sin + a43 * cos;
        a12 = t1;
        a22 = t2;
        a32 = t3;
      } //rotationY


      angle = _atan2(-c, a33);
      rotationY = angle * _RAD2DEG;

      if (angle) {
        cos = Math.cos(-angle);
        sin = Math.sin(-angle);
        t1 = a * cos - a13 * sin;
        t2 = b * cos - a23 * sin;
        t3 = c * cos - a33 * sin;
        a43 = d * sin + a43 * cos;
        a = t1;
        b = t2;
        c = t3;
      } //rotationZ


      angle = _atan2(b, a);
      rotation = angle * _RAD2DEG;

      if (angle) {
        cos = Math.cos(angle);
        sin = Math.sin(angle);
        t1 = a * cos + b * sin;
        t2 = a12 * cos + a22 * sin;
        b = b * cos - a * sin;
        a22 = a22 * cos - a12 * sin;
        a = t1;
        a12 = t2;
      }

      if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {
        //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.
        rotationX = rotation = 0;
        rotationY = 180 - rotationY;
      }

      scaleX = _round(Math.sqrt(a * a + b * b + c * c));
      scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));
      angle = _atan2(a12, a22);
      skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;
      perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;
    }

    if (cache.svg) {
      //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).
      t1 = target.getAttribute("transform");
      cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp));
      t1 && target.setAttribute("transform", t1);
    }
  }

  if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
    if (invertedScaleX) {
      scaleX *= -1;
      skewX += rotation <= 0 ? 180 : -180;
      rotation += rotation <= 0 ? 180 : -180;
    } else {
      scaleY *= -1;
      skewX += skewX <= 0 ? 180 : -180;
    }
  }

  uncache = uncache || cache.uncache;
  cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;
  cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;
  cache.z = z + px;
  cache.scaleX = _round(scaleX);
  cache.scaleY = _round(scaleY);
  cache.rotation = _round(rotation) + deg;
  cache.rotationX = _round(rotationX) + deg;
  cache.rotationY = _round(rotationY) + deg;
  cache.skewX = skewX + deg;
  cache.skewY = skewY + deg;
  cache.transformPerspective = perspective + px;

  if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || !uncache && cache.zOrigin || 0) {
    style[_transformOriginProp] = _firstTwoOnly(origin);
  }

  cache.xOffset = cache.yOffset = 0;
  cache.force3D = _config.force3D;
  cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;
  cache.uncache = 0;
  return cache;
},
    _firstTwoOnly = function _firstTwoOnly(value) {
  return (value = value.split(" "))[0] + " " + value[1];
},
    //for handling transformOrigin values, stripping out the 3rd dimension
_addPxTranslate = function _addPxTranslate(target, start, value) {
  var unit = getUnit(start);
  return _round(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit;
},
    _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {
  cache.z = "0px";
  cache.rotationY = cache.rotationX = "0deg";
  cache.force3D = 0;

  _renderCSSTransforms(ratio, cache);
},
    _zeroDeg = "0deg",
    _zeroPx = "0px",
    _endParenthesis = ") ",
    _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {
  var _ref = cache || this,
      xPercent = _ref.xPercent,
      yPercent = _ref.yPercent,
      x = _ref.x,
      y = _ref.y,
      z = _ref.z,
      rotation = _ref.rotation,
      rotationY = _ref.rotationY,
      rotationX = _ref.rotationX,
      skewX = _ref.skewX,
      skewY = _ref.skewY,
      scaleX = _ref.scaleX,
      scaleY = _ref.scaleY,
      transformPerspective = _ref.transformPerspective,
      force3D = _ref.force3D,
      target = _ref.target,
      zOrigin = _ref.zOrigin,
      transforms = "",
      use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)


  if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {
    var angle = parseFloat(rotationY) * _DEG2RAD,
        a13 = Math.sin(angle),
        a33 = Math.cos(angle),
        cos;

    angle = parseFloat(rotationX) * _DEG2RAD;
    cos = Math.cos(angle);
    x = _addPxTranslate(target, x, a13 * cos * -zOrigin);
    y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);
    z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);
  }

  if (transformPerspective !== _zeroPx) {
    transforms += "perspective(" + transformPerspective + _endParenthesis;
  }

  if (xPercent || yPercent) {
    transforms += "translate(" + xPercent + "%, " + yPercent + "%) ";
  }

  if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {
    transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis;
  }

  if (rotation !== _zeroDeg) {
    transforms += "rotate(" + rotation + _endParenthesis;
  }

  if (rotationY !== _zeroDeg) {
    transforms += "rotateY(" + rotationY + _endParenthesis;
  }

  if (rotationX !== _zeroDeg) {
    transforms += "rotateX(" + rotationX + _endParenthesis;
  }

  if (skewX !== _zeroDeg || skewY !== _zeroDeg) {
    transforms += "skew(" + skewX + ", " + skewY + _endParenthesis;
  }

  if (scaleX !== 1 || scaleY !== 1) {
    transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis;
  }

  target.style[_transformProp] = transforms || "translate(0, 0)";
},
    _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {
  var _ref2 = cache || this,
      xPercent = _ref2.xPercent,
      yPercent = _ref2.yPercent,
      x = _ref2.x,
      y = _ref2.y,
      rotation = _ref2.rotation,
      skewX = _ref2.skewX,
      skewY = _ref2.skewY,
      scaleX = _ref2.scaleX,
      scaleY = _ref2.scaleY,
      target = _ref2.target,
      xOrigin = _ref2.xOrigin,
      yOrigin = _ref2.yOrigin,
      xOffset = _ref2.xOffset,
      yOffset = _ref2.yOffset,
      forceCSS = _ref2.forceCSS,
      tx = parseFloat(x),
      ty = parseFloat(y),
      a11,
      a21,
      a12,
      a22,
      temp;

  rotation = parseFloat(rotation);
  skewX = parseFloat(skewX);
  skewY = parseFloat(skewY);

  if (skewY) {
    //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.
    skewY = parseFloat(skewY);
    skewX += skewY;
    rotation += skewY;
  }

  if (rotation || skewX) {
    rotation *= _DEG2RAD;
    skewX *= _DEG2RAD;
    a11 = Math.cos(rotation) * scaleX;
    a21 = Math.sin(rotation) * scaleX;
    a12 = Math.sin(rotation - skewX) * -scaleY;
    a22 = Math.cos(rotation - skewX) * scaleY;

    if (skewX) {
      skewY *= _DEG2RAD;
      temp = Math.tan(skewX - skewY);
      temp = Math.sqrt(1 + temp * temp);
      a12 *= temp;
      a22 *= temp;

      if (skewY) {
        temp = Math.tan(skewY);
        temp = Math.sqrt(1 + temp * temp);
        a11 *= temp;
        a21 *= temp;
      }
    }

    a11 = _round(a11);
    a21 = _round(a21);
    a12 = _round(a12);
    a22 = _round(a22);
  } else {
    a11 = scaleX;
    a22 = scaleY;
    a21 = a12 = 0;
  }

  if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) {
    tx = _convertToUnit(target, "x", x, "px");
    ty = _convertToUnit(target, "y", y, "px");
  }

  if (xOrigin || yOrigin || xOffset || yOffset) {
    tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);
    ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);
  }

  if (xPercent || yPercent) {
    //The SVG spec doesn't support percentage-based translation in the "transform" attribute, so we merge it into the translation to simulate it.
    temp = target.getBBox();
    tx = _round(tx + xPercent / 100 * temp.width);
    ty = _round(ty + yPercent / 100 * temp.height);
  }

  temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")";
  target.setAttribute("transform", temp);
  forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)
},
    _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {
  var cap = 360,
      isString = _isString(endValue),
      endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1),
      change = endNum - startNum,
      finalValue = startNum + change + "deg",
      direction,
      pt;

  if (isString) {
    direction = endValue.split("_")[1];

    if (direction === "short") {
      change %= cap;

      if (change !== change % (cap / 2)) {
        change += change < 0 ? cap : -cap;
      }
    }

    if (direction === "cw" && change < 0) {
      change = (change + cap * CSSPlugin_bigNum) % cap - ~~(change / cap) * cap;
    } else if (direction === "ccw" && change > 0) {
      change = (change - cap * CSSPlugin_bigNum) % cap - ~~(change / cap) * cap;
    }
  }

  plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);
  pt.e = finalValue;
  pt.u = "deg";

  plugin._props.push(property);

  return pt;
},
    _assign = function _assign(target, source) {
  // Internet Explorer doesn't have Object.assign(), so we recreate it here.
  for (var p in source) {
    target[p] = source[p];
  }

  return target;
},
    _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {
  //for handling cases where someone passes in a whole transform string, like transform: "scale(2, 3) rotate(20deg) translateY(30em)"
  var startCache = _assign({}, target._gsap),
      exclude = "perspective,force3D,transformOrigin,svgOrigin",
      style = target.style,
      endCache,
      p,
      startValue,
      endValue,
      startNum,
      endNum,
      startUnit,
      endUnit;

  if (startCache.svg) {
    startValue = target.getAttribute("transform");
    target.setAttribute("transform", "");
    style[_transformProp] = transforms;
    endCache = _parseTransform(target, 1);

    _removeProperty(target, _transformProp);

    target.setAttribute("transform", startValue);
  } else {
    startValue = getComputedStyle(target)[_transformProp];
    style[_transformProp] = transforms;
    endCache = _parseTransform(target, 1);
    style[_transformProp] = startValue;
  }

  for (p in _transformProps) {
    startValue = startCache[p];
    endValue = endCache[p];

    if (startValue !== endValue && exclude.indexOf(p) < 0) {
      //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.
      startUnit = getUnit(startValue);
      endUnit = getUnit(endValue);
      startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);
      endNum = parseFloat(endValue);
      plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);
      plugin._pt.u = endUnit || 0;

      plugin._props.push(p);
    }
  }

  _assign(endCache, startCache);
}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.


_forEachName("padding,margin,Width,Radius", function (name, index) {
  var t = "Top",
      r = "Right",
      b = "Bottom",
      l = "Left",
      props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {
    return index < 2 ? name + side : "border" + side + name;
  });

  _specialProps[index > 1 ? "border" + name : name] = function (plugin, target, property, endValue, tween) {
    var a, vars;

    if (arguments.length < 4) {
      // getter, passed target, property, and unit (from _get())
      a = props.map(function (prop) {
        return _get(plugin, prop, property);
      });
      vars = a.join(" ");
      return vars.split(a[0]).length === 5 ? a[0] : vars;
    }

    a = (endValue + "").split(" ");
    vars = {};
    props.forEach(function (prop, i) {
      return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];
    });
    plugin.init(target, vars, tween);
  };
});

var CSSPlugin = {
  name: "css",
  register: _initCore,
  targetTest: function targetTest(target) {
    return target.style && target.nodeType;
  },
  init: function init(target, vars, tween, index, targets) {
    var props = this._props,
        style = target.style,
        startAt = tween.vars.startAt,
        startValue,
        endValue,
        endNum,
        startNum,
        type,
        specialProp,
        p,
        startUnit,
        endUnit,
        relative,
        isTransformRelated,
        transformPropTween,
        cache,
        smooth,
        hasPriority,
        inlineProps;
    _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps

    this.styles = this.styles || _getStyleSaver(target);
    inlineProps = this.styles.props;
    this.tween = tween;

    for (p in vars) {
      if (p === "autoRound") {
        continue;
      }

      endValue = vars[p];

      if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {
        // plugins
        continue;
      }

      type = typeof endValue;
      specialProp = _specialProps[p];

      if (type === "function") {
        endValue = endValue.call(tween, index, target, targets);
        type = typeof endValue;
      }

      if (type === "string" && ~endValue.indexOf("random(")) {
        endValue = _replaceRandom(endValue);
      }

      if (specialProp) {
        specialProp(this, target, p, endValue, tween) && (hasPriority = 1);
      } else if (p.substr(0, 2) === "--") {
        //CSS variable
        startValue = (getComputedStyle(target).getPropertyValue(p) + "").trim();
        endValue += "";
        _colorExp.lastIndex = 0;

        if (!_colorExp.test(startValue)) {
          // colors don't have units
          startUnit = getUnit(startValue);
          endUnit = getUnit(endValue);
        }

        endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);
        this.add(style, "setProperty", startValue, endValue, index, targets, 0, 0, p);
        props.push(p);
        inlineProps.push(p, 0, style[p]);
      } else if (type !== "undefined") {
        if (startAt && p in startAt) {
          // in case someone hard-codes a complex value as the start, like top: "calc(2vh / 2)". Without this, it'd use the computed value (always in px)
          startValue = typeof startAt[p] === "function" ? startAt[p].call(tween, index, target, targets) : startAt[p];
          _isString(startValue) && ~startValue.indexOf("random(") && (startValue = _replaceRandom(startValue));
          getUnit(startValue + "") || startValue === "auto" || (startValue += _config.units[p] || getUnit(_get(target, p)) || ""); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.

          (startValue + "").charAt(1) === "=" && (startValue = _get(target, p)); // can't work with relative values
        } else {
          startValue = _get(target, p);
        }

        startNum = parseFloat(startValue);
        relative = type === "string" && endValue.charAt(1) === "=" && endValue.substr(0, 2);
        relative && (endValue = endValue.substr(2));
        endNum = parseFloat(endValue);

        if (p in _propertyAliases) {
          if (p === "autoAlpha") {
            //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.
            if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) {
              //if visibility is initially set to "hidden", we should interpret that as intent to make opacity 0 (a convenience)
              startNum = 0;
            }

            inlineProps.push("visibility", 0, style.visibility);

            _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum);
          }

          if (p !== "scale" && p !== "transform") {
            p = _propertyAliases[p];
            ~p.indexOf(",") && (p = p.split(",")[0]);
          }
        }

        isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---

        if (isTransformRelated) {
          this.styles.save(p);

          if (!transformPropTween) {
            cache = target._gsap;
            cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:"translateX(50vw)"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.

            smooth = vars.smoothOrigin !== false && cache.smooth;
            transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)

            transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.
          }

          if (p === "scale") {
            this._pt = new PropTween(this._pt, cache, "scaleY", cache.scaleY, (relative ? _parseRelative(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);
            this._pt.u = 0;
            props.push("scaleY", p);
            p += "X";
          } else if (p === "transformOrigin") {
            inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);
            endValue = _convertKeywordsToPercentages(endValue); //in case something like "left top" or "bottom right" is passed in. Convert to percentages.

            if (cache.svg) {
              _applySVGOrigin(target, endValue, 0, smooth, 0, this);
            } else {
              endUnit = parseFloat(endValue.split(" ")[2]) || 0; //handle the zOrigin separately!

              endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit);

              _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));
            }

            continue;
          } else if (p === "svgOrigin") {
            _applySVGOrigin(target, endValue, 1, smooth, 0, this);

            continue;
          } else if (p in _rotationalProperties) {
            _addRotationalPropTween(this, cache, p, startNum, relative ? _parseRelative(startNum, relative + endValue) : endValue);

            continue;
          } else if (p === "smoothOrigin") {
            _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue);

            continue;
          } else if (p === "force3D") {
            cache[p] = endValue;
            continue;
          } else if (p === "transform") {
            _addRawTransformPTs(this, endValue, target);

            continue;
          }
        } else if (!(p in style)) {
          p = _checkPropPrefix(p) || p;
        }

        if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {
          startUnit = (startValue + "").substr((startNum + "").length);
          endNum || (endNum = 0); // protect against NaN

          endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);
          startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));
          this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? _parseRelative(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === "px" || p === "zIndex") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);
          this._pt.u = endUnit || 0;

          if (startUnit !== endUnit && endUnit !== "%") {
            //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a "b" (beginning) property and point to a render method that handles that. (performance optimization)
            this._pt.b = startValue;
            this._pt.r = _renderCSSPropWithBeginning;
          }
        } else if (!(p in style)) {
          if (p in target) {
            //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.
            this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);
          } else if (p !== "parseTransform") {
            _missingPlugin(p, endValue);

            continue;
          }
        } else {
          _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);
        }

        isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : inlineProps.push(p, 1, startValue || target[p]));
        props.push(p);
      }
    }

    hasPriority && _sortPropTweensByPriority(this);
  },
  render: function render(ratio, data) {
    if (data.tween._time || !CSSPlugin_reverting()) {
      var pt = data._pt;

      while (pt) {
        pt.r(ratio, pt.d);
        pt = pt._next;
      }
    } else {
      data.styles.revert();
    }
  },
  get: _get,
  aliases: _propertyAliases,
  getSetter: function getSetter(target, property, plugin) {
    //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like "x" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.
    var p = _propertyAliases[property];
    p && p.indexOf(",") < 0 && (property = p);
    return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : _getSetter(target, property);
  },
  core: {
    _removeProperty: _removeProperty,
    _getMatrix: _getMatrix
  }
};
gsap.utils.checkPrefix = _checkPropPrefix;
gsap.core.getStyleSaver = _getStyleSaver;

(function (positionAndScale, rotation, others, aliases) {
  var all = _forEachName(positionAndScale + "," + rotation + "," + others, function (name) {
    _transformProps[name] = 1;
  });

  _forEachName(rotation, function (name) {
    _config.units[name] = "deg";
    _rotationalProperties[name] = 1;
  });

  _propertyAliases[all[13]] = positionAndScale + "," + rotation;

  _forEachName(aliases, function (name) {
    var split = name.split(":");
    _propertyAliases[split[1]] = all[split[0]];
  });
})("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY");

_forEachName("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function (name) {
  _config.units[name] = "px";
});

gsap.registerPlugin(CSSPlugin);

;// CONCATENATED MODULE: ./node_modules/gsap/index.js


var gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,
    // to protect from tree shaking
TweenMaxWithCSS = gsapWithCSS.core.Tween;


/***/ }),

/***/ 1989:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var hashClear = __webpack_require__(51789),
    hashDelete = __webpack_require__(80401),
    hashGet = __webpack_require__(57667),
    hashHas = __webpack_require__(21327),
    hashSet = __webpack_require__(81866);

/**
 * Creates a hash object.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function Hash(entries) {
  var index = -1,
      length = entries == null ? 0 : entries.length;

  this.clear();
  while (++index < length) {
    var entry = entries[index];
    this.set(entry[0], entry[1]);
  }
}

// Add methods to `Hash`.
Hash.prototype.clear = hashClear;
Hash.prototype['delete'] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;

module.exports = Hash;


/***/ }),

/***/ 38407:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var listCacheClear = __webpack_require__(27040),
    listCacheDelete = __webpack_require__(14125),
    listCacheGet = __webpack_require__(82117),
    listCacheHas = __webpack_require__(67518),
    listCacheSet = __webpack_require__(13399);

/**
 * Creates an list cache object.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function ListCache(entries) {
  var index = -1,
      length = entries == null ? 0 : entries.length;

  this.clear();
  while (++index < length) {
    var entry = entries[index];
    this.set(entry[0], entry[1]);
  }
}

// Add methods to `ListCache`.
ListCache.prototype.clear = listCacheClear;
ListCache.prototype['delete'] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;

module.exports = ListCache;


/***/ }),

/***/ 57071:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var getNative = __webpack_require__(10852),
    root = __webpack_require__(55639);

/* Built-in method references that are verified to be native. */
var Map = getNative(root, 'Map');

module.exports = Map;


/***/ }),

/***/ 83369:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var mapCacheClear = __webpack_require__(24785),
    mapCacheDelete = __webpack_require__(11285),
    mapCacheGet = __webpack_require__(96000),
    mapCacheHas = __webpack_require__(49916),
    mapCacheSet = __webpack_require__(28295);

/**
 * Creates a map cache object to store key-value pairs.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function MapCache(entries) {
  var index = -1,
      length = entries == null ? 0 : entries.length;

  this.clear();
  while (++index < length) {
    var entry = entries[index];
    this.set(entry[0], entry[1]);
  }
}

// Add methods to `MapCache`.
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype['delete'] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;

module.exports = MapCache;


/***/ }),

/***/ 29932:
/***/ ((module) => {

/**
 * A specialized version of `_.map` for arrays without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 */
function arrayMap(array, iteratee) {
  var index = -1,
      length = array == null ? 0 : array.length,
      result = Array(length);

  while (++index < length) {
    result[index] = iteratee(array[index], index, array);
  }
  return result;
}

module.exports = arrayMap;


/***/ }),

/***/ 62663:
/***/ ((module) => {

/**
 * A specialized version of `_.reduce` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {*} [accumulator] The initial value.
 * @param {boolean} [initAccum] Specify using the first element of `array` as
 *  the initial value.
 * @returns {*} Returns the accumulated value.
 */
function arrayReduce(array, iteratee, accumulator, initAccum) {
  var index = -1,
      length = array == null ? 0 : array.length;

  if (initAccum && length) {
    accumulator = array[++index];
  }
  while (++index < length) {
    accumulator = iteratee(accumulator, array[index], index, array);
  }
  return accumulator;
}

module.exports = arrayReduce;


/***/ }),

/***/ 44286:
/***/ ((module) => {

/**
 * Converts an ASCII `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function asciiToArray(string) {
  return string.split('');
}

module.exports = asciiToArray;


/***/ }),

/***/ 49029:
/***/ ((module) => {

/** Used to match words composed of alphanumeric characters. */
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

/**
 * Splits an ASCII `string` into an array of its words.
 *
 * @private
 * @param {string} The string to inspect.
 * @returns {Array} Returns the words of `string`.
 */
function asciiWords(string) {
  return string.match(reAsciiWord) || [];
}

module.exports = asciiWords;


/***/ }),

/***/ 18470:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var eq = __webpack_require__(77813);

/**
 * Gets the index at which the `key` is found in `array` of key-value pairs.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} key The key to search for.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function assocIndexOf(array, key) {
  var length = array.length;
  while (length--) {
    if (eq(array[length][0], key)) {
      return length;
    }
  }
  return -1;
}

module.exports = assocIndexOf;


/***/ }),

/***/ 28458:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var isFunction = __webpack_require__(23560),
    isMasked = __webpack_require__(15346),
    isObject = __webpack_require__(13218),
    toSource = __webpack_require__(80346);

/**
 * Used to match `RegExp`
 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
 */
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;

/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;

/** Used for built-in method references. */
var funcProto = Function.prototype,
    objectProto = Object.prototype;

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);

/**
 * The base implementation of `_.isNative` without bad shim checks.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a native function,
 *  else `false`.
 */
function baseIsNative(value) {
  if (!isObject(value) || isMasked(value)) {
    return false;
  }
  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
  return pattern.test(toSource(value));
}

module.exports = baseIsNative;


/***/ }),

/***/ 18674:
/***/ ((module) => {

/**
 * The base implementation of `_.propertyOf` without support for deep paths.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Function} Returns the new accessor function.
 */
function basePropertyOf(object) {
  return function(key) {
    return object == null ? undefined : object[key];
  };
}

module.exports = basePropertyOf;


/***/ }),

/***/ 14259:
/***/ ((module) => {

/**
 * The base implementation of `_.slice` without an iteratee call guard.
 *
 * @private
 * @param {Array} array The array to slice.
 * @param {number} [start=0] The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the slice of `array`.
 */
function baseSlice(array, start, end) {
  var index = -1,
      length = array.length;

  if (start < 0) {
    start = -start > length ? 0 : (length + start);
  }
  end = end > length ? length : end;
  if (end < 0) {
    end += length;
  }
  length = start > end ? 0 : ((end - start) >>> 0);
  start >>>= 0;

  var result = Array(length);
  while (++index < length) {
    result[index] = array[index + start];
  }
  return result;
}

module.exports = baseSlice;


/***/ }),

/***/ 80531:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var Symbol = __webpack_require__(62705),
    arrayMap = __webpack_require__(29932),
    isArray = __webpack_require__(1469),
    isSymbol = __webpack_require__(33448);

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
    symbolToString = symbolProto ? symbolProto.toString : undefined;

/**
 * The base implementation of `_.toString` which doesn't convert nullish
 * values to empty strings.
 *
 * @private
 * @param {*} value The value to process.
 * @returns {string} Returns the string.
 */
function baseToString(value) {
  // Exit early for strings to avoid a performance hit in some environments.
  if (typeof value == 'string') {
    return value;
  }
  if (isArray(value)) {
    // Recursively convert values (susceptible to call stack limits).
    return arrayMap(value, baseToString) + '';
  }
  if (isSymbol(value)) {
    return symbolToString ? symbolToString.call(value) : '';
  }
  var result = (value + '');
  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}

module.exports = baseToString;


/***/ }),

/***/ 40180:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var baseSlice = __webpack_require__(14259);

/**
 * Casts `array` to a slice if it's needed.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {number} start The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the cast slice.
 */
function castSlice(array, start, end) {
  var length = array.length;
  end = end === undefined ? length : end;
  return (!start && end >= length) ? array : baseSlice(array, start, end);
}

module.exports = castSlice;


/***/ }),

/***/ 14429:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var root = __webpack_require__(55639);

/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];

module.exports = coreJsData;


/***/ }),

/***/ 98805:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var castSlice = __webpack_require__(40180),
    hasUnicode = __webpack_require__(62689),
    stringToArray = __webpack_require__(83140),
    toString = __webpack_require__(79833);

/**
 * Creates a function like `_.lowerFirst`.
 *
 * @private
 * @param {string} methodName The name of the `String` case method to use.
 * @returns {Function} Returns the new case function.
 */
function createCaseFirst(methodName) {
  return function(string) {
    string = toString(string);

    var strSymbols = hasUnicode(string)
      ? stringToArray(string)
      : undefined;

    var chr = strSymbols
      ? strSymbols[0]
      : string.charAt(0);

    var trailing = strSymbols
      ? castSlice(strSymbols, 1).join('')
      : string.slice(1);

    return chr[methodName]() + trailing;
  };
}

module.exports = createCaseFirst;


/***/ }),

/***/ 35393:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var arrayReduce = __webpack_require__(62663),
    deburr = __webpack_require__(53816),
    words = __webpack_require__(58748);

/** Used to compose unicode capture groups. */
var rsApos = "['\u2019]";

/** Used to match apostrophes. */
var reApos = RegExp(rsApos, 'g');

/**
 * Creates a function like `_.camelCase`.
 *
 * @private
 * @param {Function} callback The function to combine each word.
 * @returns {Function} Returns the new compounder function.
 */
function createCompounder(callback) {
  return function(string) {
    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
  };
}

module.exports = createCompounder;


/***/ }),

/***/ 69389:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var basePropertyOf = __webpack_require__(18674);

/** Used to map Latin Unicode letters to basic Latin letters. */
var deburredLetters = {
  // Latin-1 Supplement block.
  '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
  '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
  '\xc7': 'C',  '\xe7': 'c',
  '\xd0': 'D',  '\xf0': 'd',
  '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
  '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
  '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
  '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
  '\xd1': 'N',  '\xf1': 'n',
  '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
  '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
  '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
  '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
  '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
  '\xc6': 'Ae', '\xe6': 'ae',
  '\xde': 'Th', '\xfe': 'th',
  '\xdf': 'ss',
  // Latin Extended-A block.
  '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
  '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
  '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
  '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
  '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
  '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
  '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
  '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
  '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
  '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
  '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
  '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
  '\u0134': 'J',  '\u0135': 'j',
  '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
  '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
  '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
  '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
  '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
  '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
  '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
  '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
  '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
  '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
  '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
  '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
  '\u0163': 't',  '\u0165': 't', '\u0167': 't',
  '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
  '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
  '\u0174': 'W',  '\u0175': 'w',
  '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
  '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
  '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
  '\u0132': 'IJ', '\u0133': 'ij',
  '\u0152': 'Oe', '\u0153': 'oe',
  '\u0149': "'n", '\u017f': 's'
};

/**
 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
 * letters to basic Latin letters.
 *
 * @private
 * @param {string} letter The matched letter to deburr.
 * @returns {string} Returns the deburred letter.
 */
var deburrLetter = basePropertyOf(deburredLetters);

module.exports = deburrLetter;


/***/ }),

/***/ 45050:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var isKeyable = __webpack_require__(37019);

/**
 * Gets the data for `map`.
 *
 * @private
 * @param {Object} map The map to query.
 * @param {string} key The reference key.
 * @returns {*} Returns the map data.
 */
function getMapData(map, key) {
  var data = map.__data__;
  return isKeyable(key)
    ? data[typeof key == 'string' ? 'string' : 'hash']
    : data.map;
}

module.exports = getMapData;


/***/ }),

/***/ 10852:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var baseIsNative = __webpack_require__(28458),
    getValue = __webpack_require__(47801);

/**
 * Gets the native function at `key` of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {string} key The key of the method to get.
 * @returns {*} Returns the function if it's native, else `undefined`.
 */
function getNative(object, key) {
  var value = getValue(object, key);
  return baseIsNative(value) ? value : undefined;
}

module.exports = getNative;


/***/ }),

/***/ 47801:
/***/ ((module) => {

/**
 * Gets the value at `key` of `object`.
 *
 * @private
 * @param {Object} [object] The object to query.
 * @param {string} key The key of the property to get.
 * @returns {*} Returns the property value.
 */
function getValue(object, key) {
  return object == null ? undefined : object[key];
}

module.exports = getValue;


/***/ }),

/***/ 62689:
/***/ ((module) => {

/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';

/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

/**
 * Checks if `string` contains Unicode symbols.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
 */
function hasUnicode(string) {
  return reHasUnicode.test(string);
}

module.exports = hasUnicode;


/***/ }),

/***/ 93157:
/***/ ((module) => {

/** Used to detect strings that need a more robust regexp to match words. */
var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

/**
 * Checks if `string` contains a word composed of Unicode symbols.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {boolean} Returns `true` if a word is found, else `false`.
 */
function hasUnicodeWord(string) {
  return reHasUnicodeWord.test(string);
}

module.exports = hasUnicodeWord;


/***/ }),

/***/ 51789:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var nativeCreate = __webpack_require__(94536);

/**
 * Removes all key-value entries from the hash.
 *
 * @private
 * @name clear
 * @memberOf Hash
 */
function hashClear() {
  this.__data__ = nativeCreate ? nativeCreate(null) : {};
  this.size = 0;
}

module.exports = hashClear;


/***/ }),

/***/ 80401:
/***/ ((module) => {

/**
 * Removes `key` and its value from the hash.
 *
 * @private
 * @name delete
 * @memberOf Hash
 * @param {Object} hash The hash to modify.
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function hashDelete(key) {
  var result = this.has(key) && delete this.__data__[key];
  this.size -= result ? 1 : 0;
  return result;
}

module.exports = hashDelete;


/***/ }),

/***/ 57667:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var nativeCreate = __webpack_require__(94536);

/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Gets the hash value for `key`.
 *
 * @private
 * @name get
 * @memberOf Hash
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function hashGet(key) {
  var data = this.__data__;
  if (nativeCreate) {
    var result = data[key];
    return result === HASH_UNDEFINED ? undefined : result;
  }
  return hasOwnProperty.call(data, key) ? data[key] : undefined;
}

module.exports = hashGet;


/***/ }),

/***/ 21327:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var nativeCreate = __webpack_require__(94536);

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Checks if a hash value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf Hash
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function hashHas(key) {
  var data = this.__data__;
  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
}

module.exports = hashHas;


/***/ }),

/***/ 81866:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var nativeCreate = __webpack_require__(94536);

/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';

/**
 * Sets the hash `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf Hash
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the hash instance.
 */
function hashSet(key, value) {
  var data = this.__data__;
  this.size += this.has(key) ? 0 : 1;
  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
  return this;
}

module.exports = hashSet;


/***/ }),

/***/ 37019:
/***/ ((module) => {

/**
 * Checks if `value` is suitable for use as unique object key.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
 */
function isKeyable(value) {
  var type = typeof value;
  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
    ? (value !== '__proto__')
    : (value === null);
}

module.exports = isKeyable;


/***/ }),

/***/ 15346:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var coreJsData = __webpack_require__(14429);

/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
  return uid ? ('Symbol(src)_1.' + uid) : '';
}());

/**
 * Checks if `func` has its source masked.
 *
 * @private
 * @param {Function} func The function to check.
 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
 */
function isMasked(func) {
  return !!maskSrcKey && (maskSrcKey in func);
}

module.exports = isMasked;


/***/ }),

/***/ 27040:
/***/ ((module) => {

/**
 * Removes all key-value entries from the list cache.
 *
 * @private
 * @name clear
 * @memberOf ListCache
 */
function listCacheClear() {
  this.__data__ = [];
  this.size = 0;
}

module.exports = listCacheClear;


/***/ }),

/***/ 14125:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var assocIndexOf = __webpack_require__(18470);

/** Used for built-in method references. */
var arrayProto = Array.prototype;

/** Built-in value references. */
var splice = arrayProto.splice;

/**
 * Removes `key` and its value from the list cache.
 *
 * @private
 * @name delete
 * @memberOf ListCache
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function listCacheDelete(key) {
  var data = this.__data__,
      index = assocIndexOf(data, key);

  if (index < 0) {
    return false;
  }
  var lastIndex = data.length - 1;
  if (index == lastIndex) {
    data.pop();
  } else {
    splice.call(data, index, 1);
  }
  --this.size;
  return true;
}

module.exports = listCacheDelete;


/***/ }),

/***/ 82117:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var assocIndexOf = __webpack_require__(18470);

/**
 * Gets the list cache value for `key`.
 *
 * @private
 * @name get
 * @memberOf ListCache
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function listCacheGet(key) {
  var data = this.__data__,
      index = assocIndexOf(data, key);

  return index < 0 ? undefined : data[index][1];
}

module.exports = listCacheGet;


/***/ }),

/***/ 67518:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var assocIndexOf = __webpack_require__(18470);

/**
 * Checks if a list cache value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf ListCache
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function listCacheHas(key) {
  return assocIndexOf(this.__data__, key) > -1;
}

module.exports = listCacheHas;


/***/ }),

/***/ 13399:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var assocIndexOf = __webpack_require__(18470);

/**
 * Sets the list cache `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf ListCache
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the list cache instance.
 */
function listCacheSet(key, value) {
  var data = this.__data__,
      index = assocIndexOf(data, key);

  if (index < 0) {
    ++this.size;
    data.push([key, value]);
  } else {
    data[index][1] = value;
  }
  return this;
}

module.exports = listCacheSet;


/***/ }),

/***/ 24785:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var Hash = __webpack_require__(1989),
    ListCache = __webpack_require__(38407),
    Map = __webpack_require__(57071);

/**
 * Removes all key-value entries from the map.
 *
 * @private
 * @name clear
 * @memberOf MapCache
 */
function mapCacheClear() {
  this.size = 0;
  this.__data__ = {
    'hash': new Hash,
    'map': new (Map || ListCache),
    'string': new Hash
  };
}

module.exports = mapCacheClear;


/***/ }),

/***/ 11285:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var getMapData = __webpack_require__(45050);

/**
 * Removes `key` and its value from the map.
 *
 * @private
 * @name delete
 * @memberOf MapCache
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function mapCacheDelete(key) {
  var result = getMapData(this, key)['delete'](key);
  this.size -= result ? 1 : 0;
  return result;
}

module.exports = mapCacheDelete;


/***/ }),

/***/ 96000:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var getMapData = __webpack_require__(45050);

/**
 * Gets the map value for `key`.
 *
 * @private
 * @name get
 * @memberOf MapCache
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function mapCacheGet(key) {
  return getMapData(this, key).get(key);
}

module.exports = mapCacheGet;


/***/ }),

/***/ 49916:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var getMapData = __webpack_require__(45050);

/**
 * Checks if a map value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf MapCache
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function mapCacheHas(key) {
  return getMapData(this, key).has(key);
}

module.exports = mapCacheHas;


/***/ }),

/***/ 28295:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var getMapData = __webpack_require__(45050);

/**
 * Sets the map `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf MapCache
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the map cache instance.
 */
function mapCacheSet(key, value) {
  var data = getMapData(this, key),
      size = data.size;

  data.set(key, value);
  this.size += data.size == size ? 0 : 1;
  return this;
}

module.exports = mapCacheSet;


/***/ }),

/***/ 94536:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var getNative = __webpack_require__(10852);

/* Built-in method references that are verified to be native. */
var nativeCreate = getNative(Object, 'create');

module.exports = nativeCreate;


/***/ }),

/***/ 83140:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var asciiToArray = __webpack_require__(44286),
    hasUnicode = __webpack_require__(62689),
    unicodeToArray = __webpack_require__(676);

/**
 * Converts `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function stringToArray(string) {
  return hasUnicode(string)
    ? unicodeToArray(string)
    : asciiToArray(string);
}

module.exports = stringToArray;


/***/ }),

/***/ 80346:
/***/ ((module) => {

/** Used for built-in method references. */
var funcProto = Function.prototype;

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/**
 * Converts `func` to its source code.
 *
 * @private
 * @param {Function} func The function to convert.
 * @returns {string} Returns the source code.
 */
function toSource(func) {
  if (func != null) {
    try {
      return funcToString.call(func);
    } catch (e) {}
    try {
      return (func + '');
    } catch (e) {}
  }
  return '';
}

module.exports = toSource;


/***/ }),

/***/ 676:
/***/ ((module) => {

/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
    rsCombo = '[' + rsComboRange + ']',
    rsFitz = '\\ud83c[\\udffb-\\udfff]',
    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
    rsNonAstral = '[^' + rsAstralRange + ']',
    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
    rsZWJ = '\\u200d';

/** Used to compose unicode regexes. */
var reOptMod = rsModifier + '?',
    rsOptVar = '[' + rsVarRange + ']?',
    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
    rsSeq = rsOptVar + reOptMod + rsOptJoin,
    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

/**
 * Converts a Unicode `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function unicodeToArray(string) {
  return string.match(reUnicode) || [];
}

module.exports = unicodeToArray;


/***/ }),

/***/ 2757:
/***/ ((module) => {

/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsDingbatRange = '\\u2700-\\u27bf',
    rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
    rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
    rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
    rsPunctuationRange = '\\u2000-\\u206f',
    rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
    rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
    rsVarRange = '\\ufe0e\\ufe0f',
    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

/** Used to compose unicode capture groups. */
var rsApos = "['\u2019]",
    rsBreak = '[' + rsBreakRange + ']',
    rsCombo = '[' + rsComboRange + ']',
    rsDigits = '\\d+',
    rsDingbat = '[' + rsDingbatRange + ']',
    rsLower = '[' + rsLowerRange + ']',
    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
    rsFitz = '\\ud83c[\\udffb-\\udfff]',
    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
    rsNonAstral = '[^' + rsAstralRange + ']',
    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
    rsUpper = '[' + rsUpperRange + ']',
    rsZWJ = '\\u200d';

/** Used to compose unicode regexes. */
var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
    reOptMod = rsModifier + '?',
    rsOptVar = '[' + rsVarRange + ']?',
    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
    rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
    rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
    rsSeq = rsOptVar + reOptMod + rsOptJoin,
    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;

/** Used to match complex or compound words. */
var reUnicodeWord = RegExp([
  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
  rsUpper + '+' + rsOptContrUpper,
  rsOrdUpper,
  rsOrdLower,
  rsDigits,
  rsEmoji
].join('|'), 'g');

/**
 * Splits a Unicode `string` into an array of its words.
 *
 * @private
 * @param {string} The string to inspect.
 * @returns {Array} Returns the words of `string`.
 */
function unicodeWords(string) {
  return string.match(reUnicodeWord) || [];
}

module.exports = unicodeWords;


/***/ }),

/***/ 68929:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var capitalize = __webpack_require__(48403),
    createCompounder = __webpack_require__(35393);

/**
 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the camel cased string.
 * @example
 *
 * _.camelCase('Foo Bar');
 * // => 'fooBar'
 *
 * _.camelCase('--foo-bar--');
 * // => 'fooBar'
 *
 * _.camelCase('__FOO_BAR__');
 * // => 'fooBar'
 */
var camelCase = createCompounder(function(result, word, index) {
  word = word.toLowerCase();
  return result + (index ? capitalize(word) : word);
});

module.exports = camelCase;


/***/ }),

/***/ 48403:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var toString = __webpack_require__(79833),
    upperFirst = __webpack_require__(11700);

/**
 * Converts the first character of `string` to upper case and the remaining
 * to lower case.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to capitalize.
 * @returns {string} Returns the capitalized string.
 * @example
 *
 * _.capitalize('FRED');
 * // => 'Fred'
 */
function capitalize(string) {
  return upperFirst(toString(string).toLowerCase());
}

module.exports = capitalize;


/***/ }),

/***/ 53816:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var deburrLetter = __webpack_require__(69389),
    toString = __webpack_require__(79833);

/** Used to match Latin Unicode letters (excluding mathematical operators). */
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

/** Used to compose unicode character classes. */
var rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;

/** Used to compose unicode capture groups. */
var rsCombo = '[' + rsComboRange + ']';

/**
 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
 */
var reComboMark = RegExp(rsCombo, 'g');

/**
 * Deburrs `string` by converting
 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
 * letters to basic Latin letters and removing
 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to deburr.
 * @returns {string} Returns the deburred string.
 * @example
 *
 * _.deburr('déjà vu');
 * // => 'deja vu'
 */
function deburr(string) {
  string = toString(string);
  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
}

module.exports = deburr;


/***/ }),

/***/ 77813:
/***/ ((module) => {

/**
 * Performs a
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * comparison between two values to determine if they are equivalent.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
 * @example
 *
 * var object = { 'a': 1 };
 * var other = { 'a': 1 };
 *
 * _.eq(object, object);
 * // => true
 *
 * _.eq(object, other);
 * // => false
 *
 * _.eq('a', 'a');
 * // => true
 *
 * _.eq('a', Object('a'));
 * // => false
 *
 * _.eq(NaN, NaN);
 * // => true
 */
function eq(value, other) {
  return value === other || (value !== value && other !== other);
}

module.exports = eq;


/***/ }),

/***/ 1469:
/***/ ((module) => {

/**
 * Checks if `value` is classified as an `Array` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
 * @example
 *
 * _.isArray([1, 2, 3]);
 * // => true
 *
 * _.isArray(document.body.children);
 * // => false
 *
 * _.isArray('abc');
 * // => false
 *
 * _.isArray(_.noop);
 * // => false
 */
var isArray = Array.isArray;

module.exports = isArray;


/***/ }),

/***/ 23560:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var baseGetTag = __webpack_require__(44239),
    isObject = __webpack_require__(13218);

/** `Object#toString` result references. */
var asyncTag = '[object AsyncFunction]',
    funcTag = '[object Function]',
    genTag = '[object GeneratorFunction]',
    proxyTag = '[object Proxy]';

/**
 * Checks if `value` is classified as a `Function` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
 * @example
 *
 * _.isFunction(_);
 * // => true
 *
 * _.isFunction(/abc/);
 * // => false
 */
function isFunction(value) {
  if (!isObject(value)) {
    return false;
  }
  // The use of `Object#toString` avoids issues with the `typeof` operator
  // in Safari 9 which returns 'object' for typed arrays and other constructors.
  var tag = baseGetTag(value);
  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}

module.exports = isFunction;


/***/ }),

/***/ 88306:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var MapCache = __webpack_require__(83369);

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a function that memoizes the result of `func`. If `resolver` is
 * provided, it determines the cache key for storing the result based on the
 * arguments provided to the memoized function. By default, the first argument
 * provided to the memoized function is used as the map cache key. The `func`
 * is invoked with the `this` binding of the memoized function.
 *
 * **Note:** The cache is exposed as the `cache` property on the memoized
 * function. Its creation may be customized by replacing the `_.memoize.Cache`
 * constructor with one whose instances implement the
 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
 * method interface of `clear`, `delete`, `get`, `has`, and `set`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to have its output memoized.
 * @param {Function} [resolver] The function to resolve the cache key.
 * @returns {Function} Returns the new memoized function.
 * @example
 *
 * var object = { 'a': 1, 'b': 2 };
 * var other = { 'c': 3, 'd': 4 };
 *
 * var values = _.memoize(_.values);
 * values(object);
 * // => [1, 2]
 *
 * values(other);
 * // => [3, 4]
 *
 * object.a = 2;
 * values(object);
 * // => [1, 2]
 *
 * // Modify the result cache.
 * values.cache.set(object, ['a', 'b']);
 * values(object);
 * // => ['a', 'b']
 *
 * // Replace `_.memoize.Cache`.
 * _.memoize.Cache = WeakMap;
 */
function memoize(func, resolver) {
  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  var memoized = function() {
    var args = arguments,
        key = resolver ? resolver.apply(this, args) : args[0],
        cache = memoized.cache;

    if (cache.has(key)) {
      return cache.get(key);
    }
    var result = func.apply(this, args);
    memoized.cache = cache.set(key, result) || cache;
    return result;
  };
  memoized.cache = new (memoize.Cache || MapCache);
  return memoized;
}

// Expose `MapCache`.
memoize.Cache = MapCache;

module.exports = memoize;


/***/ }),

/***/ 79833:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var baseToString = __webpack_require__(80531);

/**
 * Converts `value` to a string. An empty string is returned for `null`
 * and `undefined` values. The sign of `-0` is preserved.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 * @example
 *
 * _.toString(null);
 * // => ''
 *
 * _.toString(-0);
 * // => '-0'
 *
 * _.toString([1, 2, 3]);
 * // => '1,2,3'
 */
function toString(value) {
  return value == null ? '' : baseToString(value);
}

module.exports = toString;


/***/ }),

/***/ 11700:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var createCaseFirst = __webpack_require__(98805);

/**
 * Converts the first character of `string` to upper case.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the converted string.
 * @example
 *
 * _.upperFirst('fred');
 * // => 'Fred'
 *
 * _.upperFirst('FRED');
 * // => 'FRED'
 */
var upperFirst = createCaseFirst('toUpperCase');

module.exports = upperFirst;


/***/ }),

/***/ 58748:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var asciiWords = __webpack_require__(49029),
    hasUnicodeWord = __webpack_require__(93157),
    toString = __webpack_require__(79833),
    unicodeWords = __webpack_require__(2757);

/**
 * Splits `string` into an array of its words.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to inspect.
 * @param {RegExp|string} [pattern] The pattern to match words.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the words of `string`.
 * @example
 *
 * _.words('fred, barney, & pebbles');
 * // => ['fred', 'barney', 'pebbles']
 *
 * _.words('fred, barney, & pebbles', /[^, ]+/g);
 * // => ['fred', 'barney', '&', 'pebbles']
 */
function words(string, pattern, guard) {
  string = toString(string);
  pattern = guard ? undefined : pattern;

  if (pattern === undefined) {
    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
  }
  return string.match(pattern) || [];
}

module.exports = words;


/***/ }),

/***/ 74838:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 93638:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 68182:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 5664:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 96979:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 82331:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 42607:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 72904:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 98393:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 21220:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 47725:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 99770:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 39250:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 74510:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 87887:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 42983:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 55828:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 83251:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 64348:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 48379:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 32427:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 50465:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 63527:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 52080:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 62284:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 63050:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 75460:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 60566:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 83212:
/***/ (() => {

// extracted by mini-css-extract-plugin

/***/ }),

/***/ 72433:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
var __webpack_unused_export__;

 /*! 
  * portal-vue © Thorsten Lünborg, 2019 
  * 
  * Version: 2.1.7
  * 
  * LICENCE: MIT 
  * 
  * https://github.com/linusborg/portal-vue
  * 
 */



__webpack_unused_export__ = ({ value: true });

function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

var Vue = _interopDefault(__webpack_require__(72100));

function _typeof(obj) {
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function (obj) {
      return typeof obj;
    };
  } else {
    _typeof = function (obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
}

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) {
    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];

    return arr2;
  }
}

function _iterableToArray(iter) {
  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}

function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance");
}

var inBrowser = typeof window !== 'undefined';
function freeze(item) {
  if (Array.isArray(item) || _typeof(item) === 'object') {
    return Object.freeze(item);
  }

  return item;
}
function combinePassengers(transports) {
  var slotProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  return transports.reduce(function (passengers, transport) {
    var temp = transport.passengers[0];
    var newPassengers = typeof temp === 'function' ? temp(slotProps) : transport.passengers;
    return passengers.concat(newPassengers);
  }, []);
}
function stableSort(array, compareFn) {
  return array.map(function (v, idx) {
    return [idx, v];
  }).sort(function (a, b) {
    return compareFn(a[1], b[1]) || a[0] - b[0];
  }).map(function (c) {
    return c[1];
  });
}
function pick(obj, keys) {
  return keys.reduce(function (acc, key) {
    if (obj.hasOwnProperty(key)) {
      acc[key] = obj[key];
    }

    return acc;
  }, {});
}

var transports = {};
var targets = {};
var sources = {};
var Wormhole = Vue.extend({
  data: function data() {
    return {
      transports: transports,
      targets: targets,
      sources: sources,
      trackInstances: inBrowser
    };
  },
  methods: {
    open: function open(transport) {
      if (!inBrowser) return;
      var to = transport.to,
          from = transport.from,
          passengers = transport.passengers,
          _transport$order = transport.order,
          order = _transport$order === void 0 ? Infinity : _transport$order;
      if (!to || !from || !passengers) return;
      var newTransport = {
        to: to,
        from: from,
        passengers: freeze(passengers),
        order: order
      };
      var keys = Object.keys(this.transports);

      if (keys.indexOf(to) === -1) {
        Vue.set(this.transports, to, []);
      }

      var currentIndex = this.$_getTransportIndex(newTransport); // Copying the array here so that the PortalTarget change event will actually contain two distinct arrays

      var newTransports = this.transports[to].slice(0);

      if (currentIndex === -1) {
        newTransports.push(newTransport);
      } else {
        newTransports[currentIndex] = newTransport;
      }

      this.transports[to] = stableSort(newTransports, function (a, b) {
        return a.order - b.order;
      });
    },
    close: function close(transport) {
      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var to = transport.to,
          from = transport.from;
      if (!to || !from && force === false) return;

      if (!this.transports[to]) {
        return;
      }

      if (force) {
        this.transports[to] = [];
      } else {
        var index = this.$_getTransportIndex(transport);

        if (index >= 0) {
          // Copying the array here so that the PortalTarget change event will actually contain two distinct arrays
          var newTransports = this.transports[to].slice(0);
          newTransports.splice(index, 1);
          this.transports[to] = newTransports;
        }
      }
    },
    registerTarget: function registerTarget(target, vm, force) {
      if (!inBrowser) return;

      if (this.trackInstances && !force && this.targets[target]) {
        console.warn("[portal-vue]: Target ".concat(target, " already exists"));
      }

      this.$set(this.targets, target, Object.freeze([vm]));
    },
    unregisterTarget: function unregisterTarget(target) {
      this.$delete(this.targets, target);
    },
    registerSource: function registerSource(source, vm, force) {
      if (!inBrowser) return;

      if (this.trackInstances && !force && this.sources[source]) {
        console.warn("[portal-vue]: source ".concat(source, " already exists"));
      }

      this.$set(this.sources, source, Object.freeze([vm]));
    },
    unregisterSource: function unregisterSource(source) {
      this.$delete(this.sources, source);
    },
    hasTarget: function hasTarget(to) {
      return !!(this.targets[to] && this.targets[to][0]);
    },
    hasSource: function hasSource(to) {
      return !!(this.sources[to] && this.sources[to][0]);
    },
    hasContentFor: function hasContentFor(to) {
      return !!this.transports[to] && !!this.transports[to].length;
    },
    // Internal
    $_getTransportIndex: function $_getTransportIndex(_ref) {
      var to = _ref.to,
          from = _ref.from;

      for (var i in this.transports[to]) {
        if (this.transports[to][i].from === from) {
          return +i;
        }
      }

      return -1;
    }
  }
});
var wormhole = new Wormhole(transports);

var _id = 1;
var Portal = Vue.extend({
  name: 'portal',
  props: {
    disabled: {
      type: Boolean
    },
    name: {
      type: String,
      default: function _default() {
        return String(_id++);
      }
    },
    order: {
      type: Number,
      default: 0
    },
    slim: {
      type: Boolean
    },
    slotProps: {
      type: Object,
      default: function _default() {
        return {};
      }
    },
    tag: {
      type: String,
      default: 'DIV'
    },
    to: {
      type: String,
      default: function _default() {
        return String(Math.round(Math.random() * 10000000));
      }
    }
  },
  created: function created() {
    var _this = this;

    this.$nextTick(function () {
      wormhole.registerSource(_this.name, _this);
    });
  },
  mounted: function mounted() {
    if (!this.disabled) {
      this.sendUpdate();
    }
  },
  updated: function updated() {
    if (this.disabled) {
      this.clear();
    } else {
      this.sendUpdate();
    }
  },
  beforeDestroy: function beforeDestroy() {
    wormhole.unregisterSource(this.name);
    this.clear();
  },
  watch: {
    to: function to(newValue, oldValue) {
      oldValue && oldValue !== newValue && this.clear(oldValue);
      this.sendUpdate();
    }
  },
  methods: {
    clear: function clear(target) {
      var closer = {
        from: this.name,
        to: target || this.to
      };
      wormhole.close(closer);
    },
    normalizeSlots: function normalizeSlots() {
      return this.$scopedSlots.default ? [this.$scopedSlots.default] : this.$slots.default;
    },
    normalizeOwnChildren: function normalizeOwnChildren(children) {
      return typeof children === 'function' ? children(this.slotProps) : children;
    },
    sendUpdate: function sendUpdate() {
      var slotContent = this.normalizeSlots();

      if (slotContent) {
        var transport = {
          from: this.name,
          to: this.to,
          passengers: _toConsumableArray(slotContent),
          order: this.order
        };
        wormhole.open(transport);
      } else {
        this.clear();
      }
    }
  },
  render: function render(h) {
    var children = this.$slots.default || this.$scopedSlots.default || [];
    var Tag = this.tag;

    if (children && this.disabled) {
      return children.length <= 1 && this.slim ? this.normalizeOwnChildren(children)[0] : h(Tag, [this.normalizeOwnChildren(children)]);
    } else {
      return this.slim ? h() : h(Tag, {
        class: {
          'v-portal': true
        },
        style: {
          display: 'none'
        },
        key: 'v-portal-placeholder'
      });
    }
  }
});

var PortalTarget = Vue.extend({
  name: 'portalTarget',
  props: {
    multiple: {
      type: Boolean,
      default: false
    },
    name: {
      type: String,
      required: true
    },
    slim: {
      type: Boolean,
      default: false
    },
    slotProps: {
      type: Object,
      default: function _default() {
        return {};
      }
    },
    tag: {
      type: String,
      default: 'div'
    },
    transition: {
      type: [String, Object, Function]
    }
  },
  data: function data() {
    return {
      transports: wormhole.transports,
      firstRender: true
    };
  },
  created: function created() {
    var _this = this;

    this.$nextTick(function () {
      wormhole.registerTarget(_this.name, _this);
    });
  },
  watch: {
    ownTransports: function ownTransports() {
      this.$emit('change', this.children().length > 0);
    },
    name: function name(newVal, oldVal) {
      /**
       * TODO
       * This should warn as well ...
       */
      wormhole.unregisterTarget(oldVal);
      wormhole.registerTarget(newVal, this);
    }
  },
  mounted: function mounted() {
    var _this2 = this;

    if (this.transition) {
      this.$nextTick(function () {
        // only when we have a transition, because it causes a re-render
        _this2.firstRender = false;
      });
    }
  },
  beforeDestroy: function beforeDestroy() {
    wormhole.unregisterTarget(this.name);
  },
  computed: {
    ownTransports: function ownTransports() {
      var transports = this.transports[this.name] || [];

      if (this.multiple) {
        return transports;
      }

      return transports.length === 0 ? [] : [transports[transports.length - 1]];
    },
    passengers: function passengers() {
      return combinePassengers(this.ownTransports, this.slotProps);
    }
  },
  methods: {
    // can't be a computed prop because it has to "react" to $slot changes.
    children: function children() {
      return this.passengers.length !== 0 ? this.passengers : this.$scopedSlots.default ? this.$scopedSlots.default(this.slotProps) : this.$slots.default || [];
    },
    // can't be a computed prop because it has to "react" to this.children().
    noWrapper: function noWrapper() {
      var noWrapper = this.slim && !this.transition;

      if (noWrapper && this.children().length > 1) {
        console.warn('[portal-vue]: PortalTarget with `slim` option received more than one child element.');
      }

      return noWrapper;
    }
  },
  render: function render(h) {
    var noWrapper = this.noWrapper();
    var children = this.children();
    var Tag = this.transition || this.tag;
    return noWrapper ? children[0] : this.slim && !Tag ? h() : h(Tag, {
      props: {
        // if we have a transition component, pass the tag if it exists
        tag: this.transition && this.tag ? this.tag : undefined
      },
      class: {
        'vue-portal-target': true
      }
    }, children);
  }
});

var _id$1 = 0;
var portalProps = ['disabled', 'name', 'order', 'slim', 'slotProps', 'tag', 'to'];
var targetProps = ['multiple', 'transition'];
var MountingPortal = Vue.extend({
  name: 'MountingPortal',
  inheritAttrs: false,
  props: {
    append: {
      type: [Boolean, String]
    },
    bail: {
      type: Boolean
    },
    mountTo: {
      type: String,
      required: true
    },
    // Portal
    disabled: {
      type: Boolean
    },
    // name for the portal
    name: {
      type: String,
      default: function _default() {
        return 'mounted_' + String(_id$1++);
      }
    },
    order: {
      type: Number,
      default: 0
    },
    slim: {
      type: Boolean
    },
    slotProps: {
      type: Object,
      default: function _default() {
        return {};
      }
    },
    tag: {
      type: String,
      default: 'DIV'
    },
    // name for the target
    to: {
      type: String,
      default: function _default() {
        return String(Math.round(Math.random() * 10000000));
      }
    },
    // Target
    multiple: {
      type: Boolean,
      default: false
    },
    targetSlim: {
      type: Boolean
    },
    targetSlotProps: {
      type: Object,
      default: function _default() {
        return {};
      }
    },
    targetTag: {
      type: String,
      default: 'div'
    },
    transition: {
      type: [String, Object, Function]
    }
  },
  created: function created() {
    if (typeof document === 'undefined') return;
    var el = document.querySelector(this.mountTo);

    if (!el) {
      console.error("[portal-vue]: Mount Point '".concat(this.mountTo, "' not found in document"));
      return;
    }

    var props = this.$props; // Target already exists

    if (wormhole.targets[props.name]) {
      if (props.bail) {
        console.warn("[portal-vue]: Target ".concat(props.name, " is already mounted.\n        Aborting because 'bail: true' is set"));
      } else {
        this.portalTarget = wormhole.targets[props.name];
      }

      return;
    }

    var append = props.append;

    if (append) {
      var type = typeof append === 'string' ? append : 'DIV';
      var mountEl = document.createElement(type);
      el.appendChild(mountEl);
      el = mountEl;
    } // get props for target from $props
    // we have to rename a few of them


    var _props = pick(this.$props, targetProps);

    _props.slim = this.targetSlim;
    _props.tag = this.targetTag;
    _props.slotProps = this.targetSlotProps;
    _props.name = this.to;
    this.portalTarget = new PortalTarget({
      el: el,
      parent: this.$parent || this,
      propsData: _props
    });
  },
  beforeDestroy: function beforeDestroy() {
    var target = this.portalTarget;

    if (this.append) {
      var el = target.$el;
      el.parentNode.removeChild(el);
    }

    target.$destroy();
  },
  render: function render(h) {
    if (!this.portalTarget) {
      console.warn("[portal-vue] Target wasn't mounted");
      return h();
    } // if there's no "manual" scoped slot, so we create a <Portal> ourselves


    if (!this.$scopedSlots.manual) {
      var props = pick(this.$props, portalProps);
      return h(Portal, {
        props: props,
        attrs: this.$attrs,
        on: this.$listeners,
        scopedSlots: this.$scopedSlots
      }, this.$slots.default);
    } // else, we render the scoped slot


    var content = this.$scopedSlots.manual({
      to: this.to
    }); // if user used <template> for the scoped slot
    // content will be an array

    if (Array.isArray(content)) {
      content = content[0];
    }

    if (!content) return h();
    return content;
  }
});

function install(Vue$$1) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  Vue$$1.component(options.portalName || 'Portal', Portal);
  Vue$$1.component(options.portalTargetName || 'PortalTarget', PortalTarget);
  Vue$$1.component(options.MountingPortalName || 'MountingPortal', MountingPortal);
}

var index = {
  install: install
};

__webpack_unused_export__ = index;
exports.h_ = Portal;
exports.YC = PortalTarget;
__webpack_unused_export__ = MountingPortal;
__webpack_unused_export__ = wormhole;
//# sourceMappingURL=portal-vue.common.js.map


/***/ }),

/***/ 37003:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "default": () => (/* binding */ swiper_esm_bundle)
});

;// CONCATENATED MODULE: ./node_modules/ssr-window/dist/ssr-window.esm.js
/**
 * SSR Window 2.0.0
 * Better handling for window object in SSR environment
 * https://github.com/nolimits4web/ssr-window
 *
 * Copyright 2020, Vladimir Kharlampidi
 *
 * Licensed under MIT
 *
 * Released on: May 12, 2020
 */
/* eslint-disable no-param-reassign */
function isObject(obj) {
    return (obj !== null &&
        typeof obj === 'object' &&
        'constructor' in obj &&
        obj.constructor === Object);
}
function extend(target, src) {
    if (target === void 0) { target = {}; }
    if (src === void 0) { src = {}; }
    Object.keys(src).forEach(function (key) {
        if (typeof target[key] === 'undefined')
            target[key] = src[key];
        else if (isObject(src[key]) &&
            isObject(target[key]) &&
            Object.keys(src[key]).length > 0) {
            extend(target[key], src[key]);
        }
    });
}

var doc = typeof document !== 'undefined' ? document : {};
var ssrDocument = {
    body: {},
    addEventListener: function () { },
    removeEventListener: function () { },
    activeElement: {
        blur: function () { },
        nodeName: '',
    },
    querySelector: function () {
        return null;
    },
    querySelectorAll: function () {
        return [];
    },
    getElementById: function () {
        return null;
    },
    createEvent: function () {
        return {
            initEvent: function () { },
        };
    },
    createElement: function () {
        return {
            children: [],
            childNodes: [],
            style: {},
            setAttribute: function () { },
            getElementsByTagName: function () {
                return [];
            },
        };
    },
    createElementNS: function () {
        return {};
    },
    importNode: function () {
        return null;
    },
    location: {
        hash: '',
        host: '',
        hostname: '',
        href: '',
        origin: '',
        pathname: '',
        protocol: '',
        search: '',
    },
};
extend(doc, ssrDocument);

var win = typeof window !== 'undefined' ? window : {};
var ssrWindow = {
    document: ssrDocument,
    navigator: {
        userAgent: '',
    },
    location: {
        hash: '',
        host: '',
        hostname: '',
        href: '',
        origin: '',
        pathname: '',
        protocol: '',
        search: '',
    },
    history: {
        replaceState: function () { },
        pushState: function () { },
        go: function () { },
        back: function () { },
    },
    CustomEvent: function CustomEvent() {
        return this;
    },
    addEventListener: function () { },
    removeEventListener: function () { },
    getComputedStyle: function () {
        return {
            getPropertyValue: function () {
                return '';
            },
        };
    },
    Image: function () { },
    Date: function () { },
    screen: {},
    setTimeout: function () { },
    clearTimeout: function () { },
    matchMedia: function () {
        return {};
    },
};
extend(win, ssrWindow);



;// CONCATENATED MODULE: ./node_modules/dom7/dist/dom7.modular.js
/**
 * Dom7 2.1.5
 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
 * http://framework7.io/docs/dom.html
 *
 * Copyright 2020, Vladimir Kharlampidi
 * The iDangero.us
 * http://www.idangero.us/
 *
 * Licensed under MIT
 *
 * Released on: May 15, 2020
 */


class Dom7 {
  constructor(arr) {
    const self = this;
    // Create array-like object
    for (let i = 0; i < arr.length; i += 1) {
      self[i] = arr[i];
    }
    self.length = arr.length;
    // Return collection with methods
    return this;
  }
}

function $(selector, context) {
  const arr = [];
  let i = 0;
  if (selector && !context) {
    if (selector instanceof Dom7) {
      return selector;
    }
  }
  if (selector) {
      // String
    if (typeof selector === 'string') {
      let els;
      let tempParent;
      const html = selector.trim();
      if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
        let toCreate = 'div';
        if (html.indexOf('<li') === 0) toCreate = 'ul';
        if (html.indexOf('<tr') === 0) toCreate = 'tbody';
        if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';
        if (html.indexOf('<tbody') === 0) toCreate = 'table';
        if (html.indexOf('<option') === 0) toCreate = 'select';
        tempParent = doc.createElement(toCreate);
        tempParent.innerHTML = html;
        for (i = 0; i < tempParent.childNodes.length; i += 1) {
          arr.push(tempParent.childNodes[i]);
        }
      } else {
        if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
          // Pure ID selector
          els = [doc.getElementById(selector.trim().split('#')[1])];
        } else {
          // Other selectors
          els = (context || doc).querySelectorAll(selector.trim());
        }
        for (i = 0; i < els.length; i += 1) {
          if (els[i]) arr.push(els[i]);
        }
      }
    } else if (selector.nodeType || selector === win || selector === doc) {
      // Node/element
      arr.push(selector);
    } else if (selector.length > 0 && selector[0].nodeType) {
      // Array of elements or instance of Dom
      for (i = 0; i < selector.length; i += 1) {
        arr.push(selector[i]);
      }
    }
  }
  return new Dom7(arr);
}

$.fn = Dom7.prototype;
$.Class = Dom7;
$.Dom7 = Dom7;

function unique(arr) {
  const uniqueArray = [];
  for (let i = 0; i < arr.length; i += 1) {
    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);
  }
  return uniqueArray;
}
function toCamelCase(string) {
  return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase());
}

function requestAnimationFrame(callback) {
  if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);
  else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);
  return window.setTimeout(callback, 1000 / 60);
}
function cancelAnimationFrame(id) {
  if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id);
  else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id);
  return window.clearTimeout(id);
}

// Classes and attributes
function addClass(className) {
  if (typeof className === 'undefined') {
    return this;
  }
  const classes = className.split(' ');
  for (let i = 0; i < classes.length; i += 1) {
    for (let j = 0; j < this.length; j += 1) {
      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);
    }
  }
  return this;
}
function removeClass(className) {
  const classes = className.split(' ');
  for (let i = 0; i < classes.length; i += 1) {
    for (let j = 0; j < this.length; j += 1) {
      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);
    }
  }
  return this;
}
function hasClass(className) {
  if (!this[0]) return false;
  return this[0].classList.contains(className);
}
function toggleClass(className) {
  const classes = className.split(' ');
  for (let i = 0; i < classes.length; i += 1) {
    for (let j = 0; j < this.length; j += 1) {
      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);
    }
  }
  return this;
}
function attr(attrs, value) {
  if (arguments.length === 1 && typeof attrs === 'string') {
    // Get attr
    if (this[0]) return this[0].getAttribute(attrs);
    return undefined;
  }

  // Set attrs
  for (let i = 0; i < this.length; i += 1) {
    if (arguments.length === 2) {
      // String
      this[i].setAttribute(attrs, value);
    } else {
      // Object
      // eslint-disable-next-line
      for (const attrName in attrs) {
        this[i][attrName] = attrs[attrName];
        this[i].setAttribute(attrName, attrs[attrName]);
      }
    }
  }
  return this;
}
// eslint-disable-next-line
function removeAttr(attr) {
  for (let i = 0; i < this.length; i += 1) {
    this[i].removeAttribute(attr);
  }
  return this;
}
// eslint-disable-next-line
function prop(props, value) {
  if (arguments.length === 1 && typeof props === 'string') {
    // Get prop
    if (this[0]) return this[0][props];
  } else {
    // Set props
    for (let i = 0; i < this.length; i += 1) {
      if (arguments.length === 2) {
        // String
        this[i][props] = value;
      } else {
        // Object
        // eslint-disable-next-line
        for (const propName in props) {
          this[i][propName] = props[propName];
        }
      }
    }
    return this;
  }
}
function data(key, value) {
  let el;
  if (typeof value === 'undefined') {
    el = this[0];
    // Get value
    if (el) {
      if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {
        return el.dom7ElementDataStorage[key];
      }

      const dataKey = el.getAttribute(`data-${key}`);
      if (dataKey) {
        return dataKey;
      }
      return undefined;
    }
    return undefined;
  }

  // Set value
  for (let i = 0; i < this.length; i += 1) {
    el = this[i];
    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};
    el.dom7ElementDataStorage[key] = value;
  }
  return this;
}
function removeData(key) {
  for (let i = 0; i < this.length; i += 1) {
    const el = this[i];
    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {
      el.dom7ElementDataStorage[key] = null;
      delete el.dom7ElementDataStorage[key];
    }
  }
}
function dataset() {
  const el = this[0];
  if (!el) return undefined;
  const dataset = {}; // eslint-disable-line
  if (el.dataset) {
    // eslint-disable-next-line
    for (const dataKey in el.dataset) {
      dataset[dataKey] = el.dataset[dataKey];
    }
  } else {
    for (let i = 0; i < el.attributes.length; i += 1) {
      // eslint-disable-next-line
      const attr = el.attributes[i];
      if (attr.name.indexOf('data-') >= 0) {
        dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;
      }
    }
  }
  // eslint-disable-next-line
  for (const key in dataset) {
    if (dataset[key] === 'false') dataset[key] = false;
    else if (dataset[key] === 'true') dataset[key] = true;
    else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;
  }
  return dataset;
}
function val(value) {
  const dom = this;
  if (typeof value === 'undefined') {
    if (dom[0]) {
      if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {
        const values = [];
        for (let i = 0; i < dom[0].selectedOptions.length; i += 1) {
          values.push(dom[0].selectedOptions[i].value);
        }
        return values;
      }
      return dom[0].value;
    }
    return undefined;
  }

  for (let i = 0; i < dom.length; i += 1) {
    const el = dom[i];
    if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {
      for (let j = 0; j < el.options.length; j += 1) {
        el.options[j].selected = value.indexOf(el.options[j].value) >= 0;
      }
    } else {
      el.value = value;
    }
  }
  return dom;
}
// Transforms
// eslint-disable-next-line
function transform(transform) {
  for (let i = 0; i < this.length; i += 1) {
    const elStyle = this[i].style;
    elStyle.webkitTransform = transform;
    elStyle.transform = transform;
  }
  return this;
}
function transition(duration) {
  if (typeof duration !== 'string') {
    duration = `${duration}ms`; // eslint-disable-line
  }
  for (let i = 0; i < this.length; i += 1) {
    const elStyle = this[i].style;
    elStyle.webkitTransitionDuration = duration;
    elStyle.transitionDuration = duration;
  }
  return this;
}
// Events
function on(...args) {
  let [eventType, targetSelector, listener, capture] = args;
  if (typeof args[1] === 'function') {
    [eventType, listener, capture] = args;
    targetSelector = undefined;
  }
  if (!capture) capture = false;

  function handleLiveEvent(e) {
    const target = e.target;
    if (!target) return;
    const eventData = e.target.dom7EventData || [];
    if (eventData.indexOf(e) < 0) {
      eventData.unshift(e);
    }
    if ($(target).is(targetSelector)) listener.apply(target, eventData);
    else {
      const parents = $(target).parents(); // eslint-disable-line
      for (let k = 0; k < parents.length; k += 1) {
        if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);
      }
    }
  }
  function handleEvent(e) {
    const eventData = e && e.target ? e.target.dom7EventData || [] : [];
    if (eventData.indexOf(e) < 0) {
      eventData.unshift(e);
    }
    listener.apply(this, eventData);
  }
  const events = eventType.split(' ');
  let j;
  for (let i = 0; i < this.length; i += 1) {
    const el = this[i];
    if (!targetSelector) {
      for (j = 0; j < events.length; j += 1) {
        const event = events[j];
        if (!el.dom7Listeners) el.dom7Listeners = {};
        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];
        el.dom7Listeners[event].push({
          listener,
          proxyListener: handleEvent,
        });
        el.addEventListener(event, handleEvent, capture);
      }
    } else {
      // Live events
      for (j = 0; j < events.length; j += 1) {
        const event = events[j];
        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};
        if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];
        el.dom7LiveListeners[event].push({
          listener,
          proxyListener: handleLiveEvent,
        });
        el.addEventListener(event, handleLiveEvent, capture);
      }
    }
  }
  return this;
}
function off(...args) {
  let [eventType, targetSelector, listener, capture] = args;
  if (typeof args[1] === 'function') {
    [eventType, listener, capture] = args;
    targetSelector = undefined;
  }
  if (!capture) capture = false;

  const events = eventType.split(' ');
  for (let i = 0; i < events.length; i += 1) {
    const event = events[i];
    for (let j = 0; j < this.length; j += 1) {
      const el = this[j];
      let handlers;
      if (!targetSelector && el.dom7Listeners) {
        handlers = el.dom7Listeners[event];
      } else if (targetSelector && el.dom7LiveListeners) {
        handlers = el.dom7LiveListeners[event];
      }
      if (handlers && handlers.length) {
        for (let k = handlers.length - 1; k >= 0; k -= 1) {
          const handler = handlers[k];
          if (listener && handler.listener === listener) {
            el.removeEventListener(event, handler.proxyListener, capture);
            handlers.splice(k, 1);
          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
            el.removeEventListener(event, handler.proxyListener, capture);
            handlers.splice(k, 1);
          } else if (!listener) {
            el.removeEventListener(event, handler.proxyListener, capture);
            handlers.splice(k, 1);
          }
        }
      }
    }
  }
  return this;
}
function once(...args) {
  const dom = this;
  let [eventName, targetSelector, listener, capture] = args;
  if (typeof args[1] === 'function') {
    [eventName, listener, capture] = args;
    targetSelector = undefined;
  }
  function onceHandler(...eventArgs) {
    listener.apply(this, eventArgs);
    dom.off(eventName, targetSelector, onceHandler, capture);
    if (onceHandler.dom7proxy) {
      delete onceHandler.dom7proxy;
    }
  }
  onceHandler.dom7proxy = listener;
  return dom.on(eventName, targetSelector, onceHandler, capture);
}
function trigger(...args) {
  const events = args[0].split(' ');
  const eventData = args[1];
  for (let i = 0; i < events.length; i += 1) {
    const event = events[i];
    for (let j = 0; j < this.length; j += 1) {
      const el = this[j];
      let evt;
      try {
        evt = new win.CustomEvent(event, {
          detail: eventData,
          bubbles: true,
          cancelable: true,
        });
      } catch (e) {
        evt = doc.createEvent('Event');
        evt.initEvent(event, true, true);
        evt.detail = eventData;
      }
      // eslint-disable-next-line
      el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);
      el.dispatchEvent(evt);
      el.dom7EventData = [];
      delete el.dom7EventData;
    }
  }
  return this;
}
function transitionEnd(callback) {
  const events = ['webkitTransitionEnd', 'transitionend'];
  const dom = this;
  let i;
  function fireCallBack(e) {
    /* jshint validthis:true */
    if (e.target !== this) return;
    callback.call(this, e);
    for (i = 0; i < events.length; i += 1) {
      dom.off(events[i], fireCallBack);
    }
  }
  if (callback) {
    for (i = 0; i < events.length; i += 1) {
      dom.on(events[i], fireCallBack);
    }
  }
  return this;
}
function animationEnd(callback) {
  const events = ['webkitAnimationEnd', 'animationend'];
  const dom = this;
  let i;
  function fireCallBack(e) {
    if (e.target !== this) return;
    callback.call(this, e);
    for (i = 0; i < events.length; i += 1) {
      dom.off(events[i], fireCallBack);
    }
  }
  if (callback) {
    for (i = 0; i < events.length; i += 1) {
      dom.on(events[i], fireCallBack);
    }
  }
  return this;
}
// Sizing/Styles
function width() {
  if (this[0] === window) {
    return window.innerWidth;
  }

  if (this.length > 0) {
    return parseFloat(this.css('width'));
  }

  return null;
}
function dom7_modular_outerWidth(includeMargins) {
  if (this.length > 0) {
    if (includeMargins) {
      // eslint-disable-next-line
      const styles = this.styles();
      return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));
    }
    return this[0].offsetWidth;
  }
  return null;
}
function height() {
  if (this[0] === window) {
    return window.innerHeight;
  }

  if (this.length > 0) {
    return parseFloat(this.css('height'));
  }

  return null;
}
function dom7_modular_outerHeight(includeMargins) {
  if (this.length > 0) {
    if (includeMargins) {
      // eslint-disable-next-line
      const styles = this.styles();
      return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));
    }
    return this[0].offsetHeight;
  }
  return null;
}
function offset() {
  if (this.length > 0) {
    const el = this[0];
    const box = el.getBoundingClientRect();
    const body = doc.body;
    const clientTop = el.clientTop || body.clientTop || 0;
    const clientLeft = el.clientLeft || body.clientLeft || 0;
    const scrollTop = el === win ? win.scrollY : el.scrollTop;
    const scrollLeft = el === win ? win.scrollX : el.scrollLeft;
    return {
      top: (box.top + scrollTop) - clientTop,
      left: (box.left + scrollLeft) - clientLeft,
    };
  }

  return null;
}
function hide() {
  for (let i = 0; i < this.length; i += 1) {
    this[i].style.display = 'none';
  }
  return this;
}
function show() {
  for (let i = 0; i < this.length; i += 1) {
    const el = this[i];
    if (el.style.display === 'none') {
      el.style.display = '';
    }
    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {
      // Still not visible
      el.style.display = 'block';
    }
  }
  return this;
}
function styles() {
  if (this[0]) return win.getComputedStyle(this[0], null);
  return {};
}
function css(props, value) {
  let i;
  if (arguments.length === 1) {
    if (typeof props === 'string') {
      if (this[0]) return win.getComputedStyle(this[0], null).getPropertyValue(props);
    } else {
      for (i = 0; i < this.length; i += 1) {
        // eslint-disable-next-line
        for (let prop in props) {
          this[i].style[prop] = props[prop];
        }
      }
      return this;
    }
  }
  if (arguments.length === 2 && typeof props === 'string') {
    for (i = 0; i < this.length; i += 1) {
      this[i].style[props] = value;
    }
    return this;
  }
  return this;
}

// Dom manipulation
function toArray() {
  const arr = [];
  for (let i = 0; i < this.length; i += 1) {
    arr.push(this[i]);
  }
  return arr;
}
// Iterate over the collection passing elements to `callback`
function each(callback) {
  // Don't bother continuing without a callback
  if (!callback) return this;
  // Iterate over the current collection
  for (let i = 0; i < this.length; i += 1) {
    // If the callback returns false
    if (callback.call(this[i], i, this[i]) === false) {
      // End the loop early
      return this;
    }
  }
  // Return `this` to allow chained DOM operations
  return this;
}
function forEach(callback) {
  // Don't bother continuing without a callback
  if (!callback) return this;
  // Iterate over the current collection
  for (let i = 0; i < this.length; i += 1) {
    // If the callback returns false
    if (callback.call(this[i], this[i], i) === false) {
      // End the loop early
      return this;
    }
  }
  // Return `this` to allow chained DOM operations
  return this;
}
function filter(callback) {
  const matchedItems = [];
  const dom = this;
  for (let i = 0; i < dom.length; i += 1) {
    if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);
  }
  return new Dom7(matchedItems);
}
function map(callback) {
  const modifiedItems = [];
  const dom = this;
  for (let i = 0; i < dom.length; i += 1) {
    modifiedItems.push(callback.call(dom[i], i, dom[i]));
  }
  return new Dom7(modifiedItems);
}
// eslint-disable-next-line
function html(html) {
  if (typeof html === 'undefined') {
    return this[0] ? this[0].innerHTML : undefined;
  }

  for (let i = 0; i < this.length; i += 1) {
    this[i].innerHTML = html;
  }
  return this;
}
// eslint-disable-next-line
function dom7_modular_text(text) {
  if (typeof text === 'undefined') {
    if (this[0]) {
      return this[0].textContent.trim();
    }
    return null;
  }

  for (let i = 0; i < this.length; i += 1) {
    this[i].textContent = text;
  }
  return this;
}
function is(selector) {
  const el = this[0];
  let compareWith;
  let i;
  if (!el || typeof selector === 'undefined') return false;
  if (typeof selector === 'string') {
    if (el.matches) return el.matches(selector);
    else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);
    else if (el.msMatchesSelector) return el.msMatchesSelector(selector);

    compareWith = $(selector);
    for (i = 0; i < compareWith.length; i += 1) {
      if (compareWith[i] === el) return true;
    }
    return false;
  } else if (selector === doc) return el === doc;
  else if (selector === win) return el === win;

  if (selector.nodeType || selector instanceof Dom7) {
    compareWith = selector.nodeType ? [selector] : selector;
    for (i = 0; i < compareWith.length; i += 1) {
      if (compareWith[i] === el) return true;
    }
    return false;
  }
  return false;
}
function indexOf(el) {
  for (let i = 0; i < this.length; i += 1) {
    if (this[i] === el) return i;
  }
  return -1;
}
function index() {
  let child = this[0];
  let i;
  if (child) {
    i = 0;
    // eslint-disable-next-line
    while ((child = child.previousSibling) !== null) {
      if (child.nodeType === 1) i += 1;
    }
    return i;
  }
  return undefined;
}
// eslint-disable-next-line
function eq(index) {
  if (typeof index === 'undefined') return this;
  const length = this.length;
  let returnIndex;
  if (index > length - 1) {
    return new Dom7([]);
  }
  if (index < 0) {
    returnIndex = length + index;
    if (returnIndex < 0) return new Dom7([]);
    return new Dom7([this[returnIndex]]);
  }
  return new Dom7([this[index]]);
}
function append(...args) {
  let newChild;

  for (let k = 0; k < args.length; k += 1) {
    newChild = args[k];
    for (let i = 0; i < this.length; i += 1) {
      if (typeof newChild === 'string') {
        const tempDiv = doc.createElement('div');
        tempDiv.innerHTML = newChild;
        while (tempDiv.firstChild) {
          this[i].appendChild(tempDiv.firstChild);
        }
      } else if (newChild instanceof Dom7) {
        for (let j = 0; j < newChild.length; j += 1) {
          this[i].appendChild(newChild[j]);
        }
      } else {
        this[i].appendChild(newChild);
      }
    }
  }

  return this;
}
// eslint-disable-next-line
function appendTo(parent) {
  $(parent).append(this);
  return this;
}
function prepend(newChild) {
  let i;
  let j;
  for (i = 0; i < this.length; i += 1) {
    if (typeof newChild === 'string') {
      const tempDiv = doc.createElement('div');
      tempDiv.innerHTML = newChild;
      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
      }
    } else if (newChild instanceof Dom7) {
      for (j = 0; j < newChild.length; j += 1) {
        this[i].insertBefore(newChild[j], this[i].childNodes[0]);
      }
    } else {
      this[i].insertBefore(newChild, this[i].childNodes[0]);
    }
  }
  return this;
}
// eslint-disable-next-line
function prependTo(parent) {
  $(parent).prepend(this);
  return this;
}
function insertBefore(selector) {
  const before = $(selector);
  for (let i = 0; i < this.length; i += 1) {
    if (before.length === 1) {
      before[0].parentNode.insertBefore(this[i], before[0]);
    } else if (before.length > 1) {
      for (let j = 0; j < before.length; j += 1) {
        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);
      }
    }
  }
}
function insertAfter(selector) {
  const after = $(selector);
  for (let i = 0; i < this.length; i += 1) {
    if (after.length === 1) {
      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);
    } else if (after.length > 1) {
      for (let j = 0; j < after.length; j += 1) {
        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);
      }
    }
  }
}
function next(selector) {
  if (this.length > 0) {
    if (selector) {
      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
        return new Dom7([this[0].nextElementSibling]);
      }
      return new Dom7([]);
    }

    if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);
    return new Dom7([]);
  }
  return new Dom7([]);
}
function nextAll(selector) {
  const nextEls = [];
  let el = this[0];
  if (!el) return new Dom7([]);
  while (el.nextElementSibling) {
    const next = el.nextElementSibling; // eslint-disable-line
    if (selector) {
      if ($(next).is(selector)) nextEls.push(next);
    } else nextEls.push(next);
    el = next;
  }
  return new Dom7(nextEls);
}
function prev(selector) {
  if (this.length > 0) {
    const el = this[0];
    if (selector) {
      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
        return new Dom7([el.previousElementSibling]);
      }
      return new Dom7([]);
    }

    if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);
    return new Dom7([]);
  }
  return new Dom7([]);
}
function prevAll(selector) {
  const prevEls = [];
  let el = this[0];
  if (!el) return new Dom7([]);
  while (el.previousElementSibling) {
    const prev = el.previousElementSibling; // eslint-disable-line
    if (selector) {
      if ($(prev).is(selector)) prevEls.push(prev);
    } else prevEls.push(prev);
    el = prev;
  }
  return new Dom7(prevEls);
}
function siblings(selector) {
  return this.nextAll(selector).add(this.prevAll(selector));
}
function dom7_modular_parent(selector) {
  const parents = []; // eslint-disable-line
  for (let i = 0; i < this.length; i += 1) {
    if (this[i].parentNode !== null) {
      if (selector) {
        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
      } else {
        parents.push(this[i].parentNode);
      }
    }
  }
  return $(unique(parents));
}
function parents(selector) {
  const parents = []; // eslint-disable-line
  for (let i = 0; i < this.length; i += 1) {
    let parent = this[i].parentNode; // eslint-disable-line
    while (parent) {
      if (selector) {
        if ($(parent).is(selector)) parents.push(parent);
      } else {
        parents.push(parent);
      }
      parent = parent.parentNode;
    }
  }
  return $(unique(parents));
}
function closest(selector) {
  let closest = this; // eslint-disable-line
  if (typeof selector === 'undefined') {
    return new Dom7([]);
  }
  if (!closest.is(selector)) {
    closest = closest.parents(selector).eq(0);
  }
  return closest;
}
function find(selector) {
  const foundElements = [];
  for (let i = 0; i < this.length; i += 1) {
    const found = this[i].querySelectorAll(selector);
    for (let j = 0; j < found.length; j += 1) {
      foundElements.push(found[j]);
    }
  }
  return new Dom7(foundElements);
}
function children(selector) {
  const children = []; // eslint-disable-line
  for (let i = 0; i < this.length; i += 1) {
    const childNodes = this[i].childNodes;

    for (let j = 0; j < childNodes.length; j += 1) {
      if (!selector) {
        if (childNodes[j].nodeType === 1) children.push(childNodes[j]);
      } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
        children.push(childNodes[j]);
      }
    }
  }
  return new Dom7(unique(children));
}
function remove() {
  for (let i = 0; i < this.length; i += 1) {
    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
  }
  return this;
}
function detach() {
  return this.remove();
}
function add(...args) {
  const dom = this;
  let i;
  let j;
  for (i = 0; i < args.length; i += 1) {
    const toAdd = $(args[i]);
    for (j = 0; j < toAdd.length; j += 1) {
      dom[dom.length] = toAdd[j];
      dom.length += 1;
    }
  }
  return dom;
}
function empty() {
  for (let i = 0; i < this.length; i += 1) {
    const el = this[i];
    if (el.nodeType === 1) {
      for (let j = 0; j < el.childNodes.length; j += 1) {
        if (el.childNodes[j].parentNode) {
          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);
        }
      }
      el.textContent = '';
    }
  }
  return this;
}

function scrollTo(...args) {
  let [left, top, duration, easing, callback] = args;
  if (args.length === 4 && typeof easing === 'function') {
    callback = easing;
    [left, top, duration, callback, easing] = args;
  }
  if (typeof easing === 'undefined') easing = 'swing';

  return this.each(function animate() {
    const el = this;
    let currentTop;
    let currentLeft;
    let maxTop;
    let maxLeft;
    let newTop;
    let newLeft;
    let scrollTop; // eslint-disable-line
    let scrollLeft; // eslint-disable-line
    let animateTop = top > 0 || top === 0;
    let animateLeft = left > 0 || left === 0;
    if (typeof easing === 'undefined') {
      easing = 'swing';
    }
    if (animateTop) {
      currentTop = el.scrollTop;
      if (!duration) {
        el.scrollTop = top;
      }
    }
    if (animateLeft) {
      currentLeft = el.scrollLeft;
      if (!duration) {
        el.scrollLeft = left;
      }
    }
    if (!duration) return;
    if (animateTop) {
      maxTop = el.scrollHeight - el.offsetHeight;
      newTop = Math.max(Math.min(top, maxTop), 0);
    }
    if (animateLeft) {
      maxLeft = el.scrollWidth - el.offsetWidth;
      newLeft = Math.max(Math.min(left, maxLeft), 0);
    }
    let startTime = null;
    if (animateTop && newTop === currentTop) animateTop = false;
    if (animateLeft && newLeft === currentLeft) animateLeft = false;
    function render(time = new Date().getTime()) {
      if (startTime === null) {
        startTime = time;
      }
      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
      const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));
      let done;
      if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop));
      if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft));
      if (animateTop && newTop > currentTop && scrollTop >= newTop) {
        el.scrollTop = newTop;
        done = true;
      }
      if (animateTop && newTop < currentTop && scrollTop <= newTop) {
        el.scrollTop = newTop;
        done = true;
      }
      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {
        el.scrollLeft = newLeft;
        done = true;
      }
      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {
        el.scrollLeft = newLeft;
        done = true;
      }

      if (done) {
        if (callback) callback();
        return;
      }
      if (animateTop) el.scrollTop = scrollTop;
      if (animateLeft) el.scrollLeft = scrollLeft;
      requestAnimationFrame(render);
    }
    requestAnimationFrame(render);
  });
}
// scrollTop(top, duration, easing, callback) {
function scrollTop(...args) {
  let [top, duration, easing, callback] = args;
  if (args.length === 3 && typeof easing === 'function') {
    [top, duration, callback, easing] = args;
  }
  const dom = this;
  if (typeof top === 'undefined') {
    if (dom.length > 0) return dom[0].scrollTop;
    return null;
  }
  return dom.scrollTo(undefined, top, duration, easing, callback);
}
function scrollLeft(...args) {
  let [left, duration, easing, callback] = args;
  if (args.length === 3 && typeof easing === 'function') {
    [left, duration, callback, easing] = args;
  }
  const dom = this;
  if (typeof left === 'undefined') {
    if (dom.length > 0) return dom[0].scrollLeft;
    return null;
  }
  return dom.scrollTo(left, undefined, duration, easing, callback);
}

function animate(initialProps, initialParams) {
  const els = this;
  const a = {
    props: Object.assign({}, initialProps),
    params: Object.assign({
      duration: 300,
      easing: 'swing', // or 'linear'
      /* Callbacks
      begin(elements)
      complete(elements)
      progress(elements, complete, remaining, start, tweenValue)
      */
    }, initialParams),

    elements: els,
    animating: false,
    que: [],

    easingProgress(easing, progress) {
      if (easing === 'swing') {
        return 0.5 - (Math.cos(progress * Math.PI) / 2);
      }
      if (typeof easing === 'function') {
        return easing(progress);
      }
      return progress;
    },
    stop() {
      if (a.frameId) {
        cancelAnimationFrame(a.frameId);
      }
      a.animating = false;
      a.elements.each((index, el) => {
        const element = el;
        delete element.dom7AnimateInstance;
      });
      a.que = [];
    },
    done(complete) {
      a.animating = false;
      a.elements.each((index, el) => {
        const element = el;
        delete element.dom7AnimateInstance;
      });
      if (complete) complete(els);
      if (a.que.length > 0) {
        const que = a.que.shift();
        a.animate(que[0], que[1]);
      }
    },
    animate(props, params) {
      if (a.animating) {
        a.que.push([props, params]);
        return a;
      }
      const elements = [];

      // Define & Cache Initials & Units
      a.elements.each((index, el) => {
        let initialFullValue;
        let initialValue;
        let unit;
        let finalValue;
        let finalFullValue;

        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;

        elements[index] = {
          container: el,
        };
        Object.keys(props).forEach((prop) => {
          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');
          initialValue = parseFloat(initialFullValue);
          unit = initialFullValue.replace(initialValue, '');
          finalValue = parseFloat(props[prop]);
          finalFullValue = props[prop] + unit;
          elements[index][prop] = {
            initialFullValue,
            initialValue,
            unit,
            finalValue,
            finalFullValue,
            currentValue: initialValue,
          };
        });
      });

      let startTime = null;
      let time;
      let elementsDone = 0;
      let propsDone = 0;
      let done;
      let began = false;

      a.animating = true;

      function render() {
        time = new Date().getTime();
        let progress;
        let easeProgress;
        // let el;
        if (!began) {
          began = true;
          if (params.begin) params.begin(els);
        }
        if (startTime === null) {
          startTime = time;
        }
        if (params.progress) {
          // eslint-disable-next-line
          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);
        }

        elements.forEach((element) => {
          const el = element;
          if (done || el.done) return;
          Object.keys(props).forEach((prop) => {
            if (done || el.done) return;
            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);
            easeProgress = a.easingProgress(params.easing, progress);
            const { initialValue, finalValue, unit } = el[prop];
            el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));
            const currentValue = el[prop].currentValue;

            if (
              (finalValue > initialValue && currentValue >= finalValue) ||
              (finalValue < initialValue && currentValue <= finalValue)) {
              el.container.style[prop] = finalValue + unit;
              propsDone += 1;
              if (propsDone === Object.keys(props).length) {
                el.done = true;
                elementsDone += 1;
              }
              if (elementsDone === elements.length) {
                done = true;
              }
            }
            if (done) {
              a.done(params.complete);
              return;
            }
            el.container.style[prop] = currentValue + unit;
          });
        });
        if (done) return;
        // Then call
        a.frameId = requestAnimationFrame(render);
      }
      a.frameId = requestAnimationFrame(render);
      return a;
    },
  };

  if (a.elements.length === 0) {
    return els;
  }

  let animateInstance;
  for (let i = 0; i < a.elements.length; i += 1) {
    if (a.elements[i].dom7AnimateInstance) {
      animateInstance = a.elements[i].dom7AnimateInstance;
    } else a.elements[i].dom7AnimateInstance = a;
  }
  if (!animateInstance) {
    animateInstance = a;
  }

  if (initialProps === 'stop') {
    animateInstance.stop();
  } else {
    animateInstance.animate(a.props, a.params);
  }

  return els;
}

function stop() {
  const els = this;
  for (let i = 0; i < els.length; i += 1) {
    if (els[i].dom7AnimateInstance) {
      els[i].dom7AnimateInstance.stop();
    }
  }
}

const noTrigger = ('resize scroll').split(' ');
function eventShortcut(name, ...args) {
  if (typeof args[0] === 'undefined') {
    for (let i = 0; i < this.length; i += 1) {
      if (noTrigger.indexOf(name) < 0) {
        if (name in this[i]) this[i][name]();
        else {
          $(this[i]).trigger(name);
        }
      }
    }
    return this;
  }
  return this.on(name, ...args);
}

function click(...args) {
  return eventShortcut.bind(this)('click', ...args);
}
function dom7_modular_blur(...args) {
  return eventShortcut.bind(this)('blur', ...args);
}
function dom7_modular_focus(...args) {
  return eventShortcut.bind(this)('focus', ...args);
}
function focusin(...args) {
  return eventShortcut.bind(this)('focusin', ...args);
}
function focusout(...args) {
  return eventShortcut.bind(this)('focusout', ...args);
}
function keyup(...args) {
  return eventShortcut.bind(this)('keyup', ...args);
}
function keydown(...args) {
  return eventShortcut.bind(this)('keydown', ...args);
}
function keypress(...args) {
  return eventShortcut.bind(this)('keypress', ...args);
}
function dom7_modular_submit(...args) {
  return eventShortcut.bind(this)('submit', ...args);
}
function change(...args) {
  return eventShortcut.bind(this)('change', ...args);
}
function mousedown(...args) {
  return eventShortcut.bind(this)('mousedown', ...args);
}
function mousemove(...args) {
  return eventShortcut.bind(this)('mousemove', ...args);
}
function mouseup(...args) {
  return eventShortcut.bind(this)('mouseup', ...args);
}
function mouseenter(...args) {
  return eventShortcut.bind(this)('mouseenter', ...args);
}
function mouseleave(...args) {
  return eventShortcut.bind(this)('mouseleave', ...args);
}
function mouseout(...args) {
  return eventShortcut.bind(this)('mouseout', ...args);
}
function mouseover(...args) {
  return eventShortcut.bind(this)('mouseover', ...args);
}
function touchstart(...args) {
  return eventShortcut.bind(this)('touchstart', ...args);
}
function touchend(...args) {
  return eventShortcut.bind(this)('touchend', ...args);
}
function touchmove(...args) {
  return eventShortcut.bind(this)('touchmove', ...args);
}
function resize(...args) {
  return eventShortcut.bind(this)('resize', ...args);
}
function dom7_modular_scroll(...args) {
  return eventShortcut.bind(this)('scroll', ...args);
}



;// CONCATENATED MODULE: ./node_modules/swiper/js/swiper.esm.bundle.js
/**
 * Swiper 5.4.5
 * Most modern mobile touch slider and framework with hardware accelerated transitions
 * http://swiperjs.com
 *
 * Copyright 2014-2020 Vladimir Kharlampidi
 *
 * Released under the MIT License
 *
 * Released on: June 16, 2020
 */




const Methods = {
  addClass: addClass,
  removeClass: removeClass,
  hasClass: hasClass,
  toggleClass: toggleClass,
  attr: attr,
  removeAttr: removeAttr,
  data: data,
  transform: transform,
  transition: transition,
  on: on,
  off: off,
  trigger: trigger,
  transitionEnd: transitionEnd,
  outerWidth: dom7_modular_outerWidth,
  outerHeight: dom7_modular_outerHeight,
  offset: offset,
  css: css,
  each: each,
  html: html,
  text: dom7_modular_text,
  is: is,
  index: index,
  eq: eq,
  append: append,
  prepend: prepend,
  next: next,
  nextAll: nextAll,
  prev: prev,
  prevAll: prevAll,
  parent: dom7_modular_parent,
  parents: parents,
  closest: closest,
  find: find,
  children: children,
  filter: filter,
  remove: remove,
  add: add,
  styles: styles,
};

Object.keys(Methods).forEach((methodName) => {
  $.fn[methodName] = $.fn[methodName] || Methods[methodName];
});

const Utils = {
  deleteProps(obj) {
    const object = obj;
    Object.keys(object).forEach((key) => {
      try {
        object[key] = null;
      } catch (e) {
        // no getter for object
      }
      try {
        delete object[key];
      } catch (e) {
        // something got wrong
      }
    });
  },
  nextTick(callback, delay = 0) {
    return setTimeout(callback, delay);
  },
  now() {
    return Date.now();
  },
  getTranslate(el, axis = 'x') {
    let matrix;
    let curTransform;
    let transformMatrix;

    const curStyle = win.getComputedStyle(el, null);

    if (win.WebKitCSSMatrix) {
      curTransform = curStyle.transform || curStyle.webkitTransform;
      if (curTransform.split(',').length > 6) {
        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');
      }
      // Some old versions of Webkit choke when 'none' is passed; pass
      // empty string instead in this case
      transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
    } else {
      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
      matrix = transformMatrix.toString().split(',');
    }

    if (axis === 'x') {
      // Latest Chrome and webkits Fix
      if (win.WebKitCSSMatrix) curTransform = transformMatrix.m41;
      // Crazy IE10 Matrix
      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
      // Normal Browsers
      else curTransform = parseFloat(matrix[4]);
    }
    if (axis === 'y') {
      // Latest Chrome and webkits Fix
      if (win.WebKitCSSMatrix) curTransform = transformMatrix.m42;
      // Crazy IE10 Matrix
      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
      // Normal Browsers
      else curTransform = parseFloat(matrix[5]);
    }
    return curTransform || 0;
  },
  parseUrlQuery(url) {
    const query = {};
    let urlToParse = url || win.location.href;
    let i;
    let params;
    let param;
    let length;
    if (typeof urlToParse === 'string' && urlToParse.length) {
      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');
      length = params.length;

      for (i = 0; i < length; i += 1) {
        param = params[i].replace(/#\S+/g, '').split('=');
        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
      }
    }
    return query;
  },
  isObject(o) {
    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
  },
  extend(...args) {
    const to = Object(args[0]);
    for (let i = 1; i < args.length; i += 1) {
      const nextSource = args[i];
      if (nextSource !== undefined && nextSource !== null) {
        const keysArray = Object.keys(Object(nextSource));
        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
          const nextKey = keysArray[nextIndex];
          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
          if (desc !== undefined && desc.enumerable) {
            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
              Utils.extend(to[nextKey], nextSource[nextKey]);
            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
              to[nextKey] = {};
              Utils.extend(to[nextKey], nextSource[nextKey]);
            } else {
              to[nextKey] = nextSource[nextKey];
            }
          }
        }
      }
    }
    return to;
  },
};

const Support = (function Support() {
  return {
    touch: !!(("ontouchstart" in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch)),

    pointerEvents: !!win.PointerEvent && ("maxTouchPoints" in win.navigator) && win.navigator.maxTouchPoints >= 0,

    observer: (function checkObserver() {
      return ("MutationObserver" in win || "WebkitMutationObserver" in win);
    }()),

    passiveListener: (function checkPassiveListener() {
      let supportsPassive = false;
      try {
        const opts = Object.defineProperty({}, 'passive', {
          // eslint-disable-next-line
          get() {
            supportsPassive = true;
          },
        });
        win.addEventListener('testPassiveListener', null, opts);
      } catch (e) {
        // No support
      }
      return supportsPassive;
    }()),

    gestures: (function checkGestures() {
      return "ongesturestart" in win;
    }()),
  };
}());

class SwiperClass {
  constructor(params = {}) {
    const self = this;
    self.params = params;

    // Events
    self.eventsListeners = {};

    if (self.params && self.params.on) {
      Object.keys(self.params.on).forEach((eventName) => {
        self.on(eventName, self.params.on[eventName]);
      });
    }
  }

  on(events, handler, priority) {
    const self = this;
    if (typeof handler !== 'function') return self;
    const method = priority ? 'unshift' : 'push';
    events.split(' ').forEach((event) => {
      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
      self.eventsListeners[event][method](handler);
    });
    return self;
  }

  once(events, handler, priority) {
    const self = this;
    if (typeof handler !== 'function') return self;
    function onceHandler(...args) {
      self.off(events, onceHandler);
      if (onceHandler.f7proxy) {
        delete onceHandler.f7proxy;
      }
      handler.apply(self, args);
    }
    onceHandler.f7proxy = handler;
    return self.on(events, onceHandler, priority);
  }

  off(events, handler) {
    const self = this;
    if (!self.eventsListeners) return self;
    events.split(' ').forEach((event) => {
      if (typeof handler === 'undefined') {
        self.eventsListeners[event] = [];
      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
        self.eventsListeners[event].forEach((eventHandler, index) => {
          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {
            self.eventsListeners[event].splice(index, 1);
          }
        });
      }
    });
    return self;
  }

  emit(...args) {
    const self = this;
    if (!self.eventsListeners) return self;
    let events;
    let data;
    let context;
    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
      events = args[0];
      data = args.slice(1, args.length);
      context = self;
    } else {
      events = args[0].events;
      data = args[0].data;
      context = args[0].context || self;
    }
    const eventsArray = Array.isArray(events) ? events : events.split(' ');
    eventsArray.forEach((event) => {
      if (self.eventsListeners && self.eventsListeners[event]) {
        const handlers = [];
        self.eventsListeners[event].forEach((eventHandler) => {
          handlers.push(eventHandler);
        });
        handlers.forEach((eventHandler) => {
          eventHandler.apply(context, data);
        });
      }
    });
    return self;
  }

  useModulesParams(instanceParams) {
    const instance = this;
    if (!instance.modules) return;
    Object.keys(instance.modules).forEach((moduleName) => {
      const module = instance.modules[moduleName];
      // Extend params
      if (module.params) {
        Utils.extend(instanceParams, module.params);
      }
    });
  }

  useModules(modulesParams = {}) {
    const instance = this;
    if (!instance.modules) return;
    Object.keys(instance.modules).forEach((moduleName) => {
      const module = instance.modules[moduleName];
      const moduleParams = modulesParams[moduleName] || {};
      // Extend instance methods and props
      if (module.instance) {
        Object.keys(module.instance).forEach((modulePropName) => {
          const moduleProp = module.instance[modulePropName];
          if (typeof moduleProp === 'function') {
            instance[modulePropName] = moduleProp.bind(instance);
          } else {
            instance[modulePropName] = moduleProp;
          }
        });
      }
      // Add event listeners
      if (module.on && instance.on) {
        Object.keys(module.on).forEach((moduleEventName) => {
          instance.on(moduleEventName, module.on[moduleEventName]);
        });
      }

      // Module create callback
      if (module.create) {
        module.create.bind(instance)(moduleParams);
      }
    });
  }

  static set components(components) {
    const Class = this;
    if (!Class.use) return;
    Class.use(components);
  }

  static installModule(module, ...params) {
    const Class = this;
    if (!Class.prototype.modules) Class.prototype.modules = {};
    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);
    Class.prototype.modules[name] = module;
    // Prototype
    if (module.proto) {
      Object.keys(module.proto).forEach((key) => {
        Class.prototype[key] = module.proto[key];
      });
    }
    // Class
    if (module.static) {
      Object.keys(module.static).forEach((key) => {
        Class[key] = module.static[key];
      });
    }
    // Callback
    if (module.install) {
      module.install.apply(Class, params);
    }
    return Class;
  }

  static use(module, ...params) {
    const Class = this;
    if (Array.isArray(module)) {
      module.forEach((m) => Class.installModule(m));
      return Class;
    }
    return Class.installModule(module, ...params);
  }
}

function updateSize () {
  const swiper = this;
  let width;
  let height;
  const $el = swiper.$el;
  if (typeof swiper.params.width !== 'undefined') {
    width = swiper.params.width;
  } else {
    width = $el[0].clientWidth;
  }
  if (typeof swiper.params.height !== 'undefined') {
    height = swiper.params.height;
  } else {
    height = $el[0].clientHeight;
  }
  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
    return;
  }

  // Subtract paddings
  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);

  Utils.extend(swiper, {
    width,
    height,
    size: swiper.isHorizontal() ? width : height,
  });
}

function updateSlides () {
  const swiper = this;
  const params = swiper.params;

  const {
    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,
  } = swiper;
  const isVirtual = swiper.virtual && params.virtual.enabled;
  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);
  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
  let snapGrid = [];
  const slidesGrid = [];
  const slidesSizesGrid = [];

  function slidesForMargin(slideIndex) {
    if (!params.cssMode) return true;
    if (slideIndex === slides.length - 1) {
      return false;
    }
    return true;
  }

  let offsetBefore = params.slidesOffsetBefore;
  if (typeof offsetBefore === 'function') {
    offsetBefore = params.slidesOffsetBefore.call(swiper);
  }

  let offsetAfter = params.slidesOffsetAfter;
  if (typeof offsetAfter === 'function') {
    offsetAfter = params.slidesOffsetAfter.call(swiper);
  }

  const previousSnapGridLength = swiper.snapGrid.length;
  const previousSlidesGridLength = swiper.snapGrid.length;

  let spaceBetween = params.spaceBetween;
  let slidePosition = -offsetBefore;
  let prevSlideSize = 0;
  let index = 0;
  if (typeof swiperSize === 'undefined') {
    return;
  }
  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
  }

  swiper.virtualSize = -spaceBetween;

  // reset margins
  if (rtl) slides.css({ marginLeft: '', marginTop: '' });
  else slides.css({ marginRight: '', marginBottom: '' });

  let slidesNumberEvenToRows;
  if (params.slidesPerColumn > 1) {
    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
      slidesNumberEvenToRows = slidesLength;
    } else {
      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
    }
    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
    }
  }

  // Calc slides
  let slideSize;
  const slidesPerColumn = params.slidesPerColumn;
  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
  for (let i = 0; i < slidesLength; i += 1) {
    slideSize = 0;
    const slide = slides.eq(i);
    if (params.slidesPerColumn > 1) {
      // Set slides order
      let newSlideOrderIndex;
      let column;
      let row;
      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
        const columnsInGroup = groupIndex === 0
          ? params.slidesPerGroup
          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
        row = Math.floor(slideIndexInGroup / columnsInGroup);
        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;

        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
        slide
          .css({
            '-webkit-box-ordinal-group': newSlideOrderIndex,
            '-moz-box-ordinal-group': newSlideOrderIndex,
            '-ms-flex-order': newSlideOrderIndex,
            '-webkit-order': newSlideOrderIndex,
            order: newSlideOrderIndex,
          });
      } else if (params.slidesPerColumnFill === 'column') {
        column = Math.floor(i / slidesPerColumn);
        row = i - (column * slidesPerColumn);
        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
          row += 1;
          if (row >= slidesPerColumn) {
            row = 0;
            column += 1;
          }
        }
      } else {
        row = Math.floor(i / slidesPerRow);
        column = i - (row * slidesPerRow);
      }
      slide.css(
        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,
        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)
      );
    }
    if (slide.css('display') === 'none') continue; // eslint-disable-line

    if (params.slidesPerView === 'auto') {
      const slideStyles = win.getComputedStyle(slide[0], null);
      const currentTransform = slide[0].style.transform;
      const currentWebKitTransform = slide[0].style.webkitTransform;
      if (currentTransform) {
        slide[0].style.transform = 'none';
      }
      if (currentWebKitTransform) {
        slide[0].style.webkitTransform = 'none';
      }
      if (params.roundLengths) {
        slideSize = swiper.isHorizontal()
          ? slide.outerWidth(true)
          : slide.outerHeight(true);
      } else {
        // eslint-disable-next-line
        if (swiper.isHorizontal()) {
          const width = parseFloat(slideStyles.getPropertyValue('width'));
          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
          const boxSizing = slideStyles.getPropertyValue('box-sizing');
          if (boxSizing && boxSizing === 'border-box') {
            slideSize = width + marginLeft + marginRight;
          } else {
            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
          }
        } else {
          const height = parseFloat(slideStyles.getPropertyValue('height'));
          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
          const boxSizing = slideStyles.getPropertyValue('box-sizing');
          if (boxSizing && boxSizing === 'border-box') {
            slideSize = height + marginTop + marginBottom;
          } else {
            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
          }
        }
      }
      if (currentTransform) {
        slide[0].style.transform = currentTransform;
      }
      if (currentWebKitTransform) {
        slide[0].style.webkitTransform = currentWebKitTransform;
      }
      if (params.roundLengths) slideSize = Math.floor(slideSize);
    } else {
      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
      if (params.roundLengths) slideSize = Math.floor(slideSize);

      if (slides[i]) {
        if (swiper.isHorizontal()) {
          slides[i].style.width = `${slideSize}px`;
        } else {
          slides[i].style.height = `${slideSize}px`;
        }
      }
    }
    if (slides[i]) {
      slides[i].swiperSlideSize = slideSize;
    }
    slidesSizesGrid.push(slideSize);


    if (params.centeredSlides) {
      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
      slidesGrid.push(slidePosition);
    } else {
      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
      slidesGrid.push(slidePosition);
      slidePosition = slidePosition + slideSize + spaceBetween;
    }

    swiper.virtualSize += slideSize + spaceBetween;

    prevSlideSize = slideSize;

    index += 1;
  }
  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
  let newSlidesGrid;

  if (
    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
  }
  if (params.setWrapperSize) {
    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
  }

  if (params.slidesPerColumn > 1) {
    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
    if (params.centeredSlides) {
      newSlidesGrid = [];
      for (let i = 0; i < snapGrid.length; i += 1) {
        let slidesGridItem = snapGrid[i];
        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
      }
      snapGrid = newSlidesGrid;
    }
  }

  // Remove last grid elements depending on width
  if (!params.centeredSlides) {
    newSlidesGrid = [];
    for (let i = 0; i < snapGrid.length; i += 1) {
      let slidesGridItem = snapGrid[i];
      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
        newSlidesGrid.push(slidesGridItem);
      }
    }
    snapGrid = newSlidesGrid;
    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
      snapGrid.push(swiper.virtualSize - swiperSize);
    }
  }
  if (snapGrid.length === 0) snapGrid = [0];

  if (params.spaceBetween !== 0) {
    if (swiper.isHorizontal()) {
      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });
      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });
    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });
  }

  if (params.centeredSlides && params.centeredSlidesBounds) {
    let allSlidesSize = 0;
    slidesSizesGrid.forEach((slideSizeValue) => {
      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
    });
    allSlidesSize -= params.spaceBetween;
    const maxSnap = allSlidesSize - swiperSize;
    snapGrid = snapGrid.map((snap) => {
      if (snap < 0) return -offsetBefore;
      if (snap > maxSnap) return maxSnap + offsetAfter;
      return snap;
    });
  }

  if (params.centerInsufficientSlides) {
    let allSlidesSize = 0;
    slidesSizesGrid.forEach((slideSizeValue) => {
      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
    });
    allSlidesSize -= params.spaceBetween;
    if (allSlidesSize < swiperSize) {
      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
      snapGrid.forEach((snap, snapIndex) => {
        snapGrid[snapIndex] = snap - allSlidesOffset;
      });
      slidesGrid.forEach((snap, snapIndex) => {
        slidesGrid[snapIndex] = snap + allSlidesOffset;
      });
    }
  }

  Utils.extend(swiper, {
    slides,
    snapGrid,
    slidesGrid,
    slidesSizesGrid,
  });

  if (slidesLength !== previousSlidesLength) {
    swiper.emit('slidesLengthChange');
  }
  if (snapGrid.length !== previousSnapGridLength) {
    if (swiper.params.watchOverflow) swiper.checkOverflow();
    swiper.emit('snapGridLengthChange');
  }
  if (slidesGrid.length !== previousSlidesGridLength) {
    swiper.emit('slidesGridLengthChange');
  }

  if (params.watchSlidesProgress || params.watchSlidesVisibility) {
    swiper.updateSlidesOffset();
  }
}

function updateAutoHeight (speed) {
  const swiper = this;
  const activeSlides = [];
  let newHeight = 0;
  let i;
  if (typeof speed === 'number') {
    swiper.setTransition(speed);
  } else if (speed === true) {
    swiper.setTransition(swiper.params.speed);
  }
  // Find slides currently in view
  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
    if (swiper.params.centeredSlides) {
      swiper.visibleSlides.each((index, slide) => {
        activeSlides.push(slide);
      });
    } else {
      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
        const index = swiper.activeIndex + i;
        if (index > swiper.slides.length) break;
        activeSlides.push(swiper.slides.eq(index)[0]);
      }
    }
  } else {
    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
  }

  // Find new height from highest slide in view
  for (i = 0; i < activeSlides.length; i += 1) {
    if (typeof activeSlides[i] !== 'undefined') {
      const height = activeSlides[i].offsetHeight;
      newHeight = height > newHeight ? height : newHeight;
    }
  }

  // Update Height
  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);
}

function updateSlidesOffset () {
  const swiper = this;
  const slides = swiper.slides;
  for (let i = 0; i < slides.length; i += 1) {
    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
  }
}

function updateSlidesProgress (translate = (this && this.translate) || 0) {
  const swiper = this;
  const params = swiper.params;

  const { slides, rtlTranslate: rtl } = swiper;

  if (slides.length === 0) return;
  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();

  let offsetCenter = -translate;
  if (rtl) offsetCenter = translate;

  // Visible Slides
  slides.removeClass(params.slideVisibleClass);

  swiper.visibleSlidesIndexes = [];
  swiper.visibleSlides = [];

  for (let i = 0; i < slides.length; i += 1) {
    const slide = slides[i];
    const slideProgress = (
      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
    ) / (slide.swiperSlideSize + params.spaceBetween);
    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {
      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);
      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)
                || (slideAfter > 1 && slideAfter <= swiper.size)
                || (slideBefore <= 0 && slideAfter >= swiper.size);
      if (isVisible) {
        swiper.visibleSlides.push(slide);
        swiper.visibleSlidesIndexes.push(i);
        slides.eq(i).addClass(params.slideVisibleClass);
      }
    }
    slide.progress = rtl ? -slideProgress : slideProgress;
  }
  swiper.visibleSlides = $(swiper.visibleSlides);
}

function updateProgress (translate) {
  const swiper = this;
  if (typeof translate === 'undefined') {
    const multiplier = swiper.rtlTranslate ? -1 : 1;
    // eslint-disable-next-line
    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;
  }
  const params = swiper.params;
  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  let { progress, isBeginning, isEnd } = swiper;
  const wasBeginning = isBeginning;
  const wasEnd = isEnd;
  if (translatesDiff === 0) {
    progress = 0;
    isBeginning = true;
    isEnd = true;
  } else {
    progress = (translate - swiper.minTranslate()) / (translatesDiff);
    isBeginning = progress <= 0;
    isEnd = progress >= 1;
  }
  Utils.extend(swiper, {
    progress,
    isBeginning,
    isEnd,
  });

  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);

  if (isBeginning && !wasBeginning) {
    swiper.emit('reachBeginning toEdge');
  }
  if (isEnd && !wasEnd) {
    swiper.emit('reachEnd toEdge');
  }
  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
    swiper.emit('fromEdge');
  }

  swiper.emit('progress', progress);
}

function updateSlidesClasses () {
  const swiper = this;

  const {
    slides, params, $wrapperEl, activeIndex, realIndex,
  } = swiper;
  const isVirtual = swiper.virtual && params.virtual.enabled;

  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);

  let activeSlide;
  if (isVirtual) {
    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`);
  } else {
    activeSlide = slides.eq(activeIndex);
  }

  // Active classes
  activeSlide.addClass(params.slideActiveClass);

  if (params.loop) {
    // Duplicate to all looped slides
    if (activeSlide.hasClass(params.slideDuplicateClass)) {
      $wrapperEl
        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`)
        .addClass(params.slideDuplicateActiveClass);
    } else {
      $wrapperEl
        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`)
        .addClass(params.slideDuplicateActiveClass);
    }
  }
  // Next Slide
  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);
  if (params.loop && nextSlide.length === 0) {
    nextSlide = slides.eq(0);
    nextSlide.addClass(params.slideNextClass);
  }
  // Prev Slide
  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);
  if (params.loop && prevSlide.length === 0) {
    prevSlide = slides.eq(-1);
    prevSlide.addClass(params.slidePrevClass);
  }
  if (params.loop) {
    // Duplicate to all looped slides
    if (nextSlide.hasClass(params.slideDuplicateClass)) {
      $wrapperEl
        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
        .addClass(params.slideDuplicateNextClass);
    } else {
      $wrapperEl
        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
        .addClass(params.slideDuplicateNextClass);
    }
    if (prevSlide.hasClass(params.slideDuplicateClass)) {
      $wrapperEl
        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
        .addClass(params.slideDuplicatePrevClass);
    } else {
      $wrapperEl
        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
        .addClass(params.slideDuplicatePrevClass);
    }
  }
}

function updateActiveIndex (newActiveIndex) {
  const swiper = this;
  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
  const {
    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,
  } = swiper;
  let activeIndex = newActiveIndex;
  let snapIndex;
  if (typeof activeIndex === 'undefined') {
    for (let i = 0; i < slidesGrid.length; i += 1) {
      if (typeof slidesGrid[i + 1] !== 'undefined') {
        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
          activeIndex = i;
        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
          activeIndex = i + 1;
        }
      } else if (translate >= slidesGrid[i]) {
        activeIndex = i;
      }
    }
    // Normalize slideIndex
    if (params.normalizeSlideIndex) {
      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
    }
  }
  if (snapGrid.indexOf(translate) >= 0) {
    snapIndex = snapGrid.indexOf(translate);
  } else {
    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
  }
  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
  if (activeIndex === previousIndex) {
    if (snapIndex !== previousSnapIndex) {
      swiper.snapIndex = snapIndex;
      swiper.emit('snapIndexChange');
    }
    return;
  }

  // Get real index
  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);

  Utils.extend(swiper, {
    snapIndex,
    realIndex,
    previousIndex,
    activeIndex,
  });
  swiper.emit('activeIndexChange');
  swiper.emit('snapIndexChange');
  if (previousRealIndex !== realIndex) {
    swiper.emit('realIndexChange');
  }
  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
    swiper.emit('slideChange');
  }
}

function updateClickedSlide (e) {
  const swiper = this;
  const params = swiper.params;
  const slide = $(e.target).closest(`.${params.slideClass}`)[0];
  let slideFound = false;
  if (slide) {
    for (let i = 0; i < swiper.slides.length; i += 1) {
      if (swiper.slides[i] === slide) slideFound = true;
    }
  }

  if (slide && slideFound) {
    swiper.clickedSlide = slide;
    if (swiper.virtual && swiper.params.virtual.enabled) {
      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
    } else {
      swiper.clickedIndex = $(slide).index();
    }
  } else {
    swiper.clickedSlide = undefined;
    swiper.clickedIndex = undefined;
    return;
  }
  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
    swiper.slideToClickedSlide();
  }
}

var update = {
  updateSize,
  updateSlides,
  updateAutoHeight,
  updateSlidesOffset,
  updateSlidesProgress,
  updateProgress,
  updateSlidesClasses,
  updateActiveIndex,
  updateClickedSlide,
};

function getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {
  const swiper = this;

  const {
    params, rtlTranslate: rtl, translate, $wrapperEl,
  } = swiper;

  if (params.virtualTranslate) {
    return rtl ? -translate : translate;
  }
  if (params.cssMode) {
    return translate;
  }

  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
  if (rtl) currentTranslate = -currentTranslate;

  return currentTranslate || 0;
}

function setTranslate (translate, byController) {
  const swiper = this;
  const {
    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,
  } = swiper;
  let x = 0;
  let y = 0;
  const z = 0;

  if (swiper.isHorizontal()) {
    x = rtl ? -translate : translate;
  } else {
    y = translate;
  }

  if (params.roundLengths) {
    x = Math.floor(x);
    y = Math.floor(y);
  }

  if (params.cssMode) {
    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
  } else if (!params.virtualTranslate) {
    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);
  }
  swiper.previousTranslate = swiper.translate;
  swiper.translate = swiper.isHorizontal() ? x : y;

  // Check if we need to update progress
  let newProgress;
  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  if (translatesDiff === 0) {
    newProgress = 0;
  } else {
    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
  }
  if (newProgress !== progress) {
    swiper.updateProgress(translate);
  }

  swiper.emit('setTranslate', swiper.translate, byController);
}

function minTranslate () {
  return (-this.snapGrid[0]);
}

function maxTranslate () {
  return (-this.snapGrid[this.snapGrid.length - 1]);
}

function translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {
  const swiper = this;

  const {
    params,
    wrapperEl,
  } = swiper;

  if (swiper.animating && params.preventInteractionOnTransition) {
    return false;
  }

  const minTranslate = swiper.minTranslate();
  const maxTranslate = swiper.maxTranslate();
  let newTranslate;
  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
  else newTranslate = translate;

  // Update progress
  swiper.updateProgress(newTranslate);

  if (params.cssMode) {
    const isH = swiper.isHorizontal();
    if (speed === 0) {
      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
    } else {
      // eslint-disable-next-line
      if (wrapperEl.scrollTo) {
        wrapperEl.scrollTo({
          [isH ? 'left' : 'top']: -newTranslate,
          behavior: 'smooth',
        });
      } else {
        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
      }
    }
    return true;
  }

  if (speed === 0) {
    swiper.setTransition(0);
    swiper.setTranslate(newTranslate);
    if (runCallbacks) {
      swiper.emit('beforeTransitionStart', speed, internal);
      swiper.emit('transitionEnd');
    }
  } else {
    swiper.setTransition(speed);
    swiper.setTranslate(newTranslate);
    if (runCallbacks) {
      swiper.emit('beforeTransitionStart', speed, internal);
      swiper.emit('transitionStart');
    }
    if (!swiper.animating) {
      swiper.animating = true;
      if (!swiper.onTranslateToWrapperTransitionEnd) {
        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
          if (!swiper || swiper.destroyed) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
          swiper.onTranslateToWrapperTransitionEnd = null;
          delete swiper.onTranslateToWrapperTransitionEnd;
          if (runCallbacks) {
            swiper.emit('transitionEnd');
          }
        };
      }
      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
    }
  }

  return true;
}

var translate = {
  getTranslate,
  setTranslate,
  minTranslate,
  maxTranslate,
  translateTo,
};

function setTransition (duration, byController) {
  const swiper = this;

  if (!swiper.params.cssMode) {
    swiper.$wrapperEl.transition(duration);
  }

  swiper.emit('setTransition', duration, byController);
}

function transitionStart (runCallbacks = true, direction) {
  const swiper = this;
  const { activeIndex, params, previousIndex } = swiper;
  if (params.cssMode) return;
  if (params.autoHeight) {
    swiper.updateAutoHeight();
  }

  let dir = direction;
  if (!dir) {
    if (activeIndex > previousIndex) dir = 'next';
    else if (activeIndex < previousIndex) dir = 'prev';
    else dir = 'reset';
  }

  swiper.emit('transitionStart');

  if (runCallbacks && activeIndex !== previousIndex) {
    if (dir === 'reset') {
      swiper.emit('slideResetTransitionStart');
      return;
    }
    swiper.emit('slideChangeTransitionStart');
    if (dir === 'next') {
      swiper.emit('slideNextTransitionStart');
    } else {
      swiper.emit('slidePrevTransitionStart');
    }
  }
}

function swiper_esm_bundle_transitionEnd (runCallbacks = true, direction) {
  const swiper = this;
  const { activeIndex, previousIndex, params } = swiper;
  swiper.animating = false;
  if (params.cssMode) return;
  swiper.setTransition(0);

  let dir = direction;
  if (!dir) {
    if (activeIndex > previousIndex) dir = 'next';
    else if (activeIndex < previousIndex) dir = 'prev';
    else dir = 'reset';
  }

  swiper.emit('transitionEnd');

  if (runCallbacks && activeIndex !== previousIndex) {
    if (dir === 'reset') {
      swiper.emit('slideResetTransitionEnd');
      return;
    }
    swiper.emit('slideChangeTransitionEnd');
    if (dir === 'next') {
      swiper.emit('slideNextTransitionEnd');
    } else {
      swiper.emit('slidePrevTransitionEnd');
    }
  }
}

var swiper_esm_bundle_transition = {
  setTransition,
  transitionStart,
  transitionEnd: swiper_esm_bundle_transitionEnd,
};

function slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
  const swiper = this;
  let slideIndex = index;
  if (slideIndex < 0) slideIndex = 0;

  const {
    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,
  } = swiper;
  if (swiper.animating && params.preventInteractionOnTransition) {
    return false;
  }

  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;

  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
    swiper.emit('beforeSlideChangeStart');
  }

  const translate = -snapGrid[snapIndex];

  // Update progress
  swiper.updateProgress(translate);

  // Normalize slideIndex
  if (params.normalizeSlideIndex) {
    for (let i = 0; i < slidesGrid.length; i += 1) {
      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
        slideIndex = i;
      }
    }
  }
  // Directions locks
  if (swiper.initialized && slideIndex !== activeIndex) {
    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
      return false;
    }
    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
      if ((activeIndex || 0) !== slideIndex) return false;
    }
  }

  let direction;
  if (slideIndex > activeIndex) direction = 'next';
  else if (slideIndex < activeIndex) direction = 'prev';
  else direction = 'reset';


  // Update Index
  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
    swiper.updateActiveIndex(slideIndex);
    // Update Height
    if (params.autoHeight) {
      swiper.updateAutoHeight();
    }
    swiper.updateSlidesClasses();
    if (params.effect !== 'slide') {
      swiper.setTranslate(translate);
    }
    if (direction !== 'reset') {
      swiper.transitionStart(runCallbacks, direction);
      swiper.transitionEnd(runCallbacks, direction);
    }
    return false;
  }
  if (params.cssMode) {
    const isH = swiper.isHorizontal();
    let t = -translate;
    if (rtl) {
      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
    }
    if (speed === 0) {
      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
    } else {
      // eslint-disable-next-line
      if (wrapperEl.scrollTo) {
        wrapperEl.scrollTo({
          [isH ? 'left' : 'top']: t,
          behavior: 'smooth',
        });
      } else {
        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
      }
    }
    return true;
  }

  if (speed === 0) {
    swiper.setTransition(0);
    swiper.setTranslate(translate);
    swiper.updateActiveIndex(slideIndex);
    swiper.updateSlidesClasses();
    swiper.emit('beforeTransitionStart', speed, internal);
    swiper.transitionStart(runCallbacks, direction);
    swiper.transitionEnd(runCallbacks, direction);
  } else {
    swiper.setTransition(speed);
    swiper.setTranslate(translate);
    swiper.updateActiveIndex(slideIndex);
    swiper.updateSlidesClasses();
    swiper.emit('beforeTransitionStart', speed, internal);
    swiper.transitionStart(runCallbacks, direction);
    if (!swiper.animating) {
      swiper.animating = true;
      if (!swiper.onSlideToWrapperTransitionEnd) {
        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
          if (!swiper || swiper.destroyed) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
          swiper.onSlideToWrapperTransitionEnd = null;
          delete swiper.onSlideToWrapperTransitionEnd;
          swiper.transitionEnd(runCallbacks, direction);
        };
      }
      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
    }
  }

  return true;
}

function slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
  const swiper = this;
  let newIndex = index;
  if (swiper.params.loop) {
    newIndex += swiper.loopedSlides;
  }

  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
}

/* eslint no-unused-vars: "off" */
function slideNext (speed = this.params.speed, runCallbacks = true, internal) {
  const swiper = this;
  const { params, animating } = swiper;
  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
  if (params.loop) {
    if (animating) return false;
    swiper.loopFix();
    // eslint-disable-next-line
    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
  }
  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
}

/* eslint no-unused-vars: "off" */
function slidePrev (speed = this.params.speed, runCallbacks = true, internal) {
  const swiper = this;
  const {
    params, animating, snapGrid, slidesGrid, rtlTranslate,
  } = swiper;

  if (params.loop) {
    if (animating) return false;
    swiper.loopFix();
    // eslint-disable-next-line
    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
  }
  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
  function normalize(val) {
    if (val < 0) return -Math.floor(Math.abs(val));
    return Math.floor(val);
  }
  const normalizedTranslate = normalize(translate);
  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));

  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
  if (typeof prevSnap === 'undefined' && params.cssMode) {
    snapGrid.forEach((snap) => {
      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
    });
  }
  let prevIndex;
  if (typeof prevSnap !== 'undefined') {
    prevIndex = slidesGrid.indexOf(prevSnap);
    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
  }
  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
}

/* eslint no-unused-vars: "off" */
function slideReset (speed = this.params.speed, runCallbacks = true, internal) {
  const swiper = this;
  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
}

/* eslint no-unused-vars: "off" */
function slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {
  const swiper = this;
  let index = swiper.activeIndex;
  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);

  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;

  if (translate >= swiper.snapGrid[snapIndex]) {
    // The current translate is on or after the current snap index, so the choice
    // is between the current index and the one after it.
    const currentSnap = swiper.snapGrid[snapIndex];
    const nextSnap = swiper.snapGrid[snapIndex + 1];
    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {
      index += swiper.params.slidesPerGroup;
    }
  } else {
    // The current translate is before the current snap index, so the choice
    // is between the current index and the one before it.
    const prevSnap = swiper.snapGrid[snapIndex - 1];
    const currentSnap = swiper.snapGrid[snapIndex];
    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {
      index -= swiper.params.slidesPerGroup;
    }
  }
  index = Math.max(index, 0);
  index = Math.min(index, swiper.slidesGrid.length - 1);

  return swiper.slideTo(index, speed, runCallbacks, internal);
}

function slideToClickedSlide () {
  const swiper = this;
  const { params, $wrapperEl } = swiper;

  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
  let slideToIndex = swiper.clickedIndex;
  let realIndex;
  if (params.loop) {
    if (swiper.animating) return;
    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
    if (params.centeredSlides) {
      if (
        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
      ) {
        swiper.loopFix();
        slideToIndex = $wrapperEl
          .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
          .eq(0)
          .index();

        Utils.nextTick(() => {
          swiper.slideTo(slideToIndex);
        });
      } else {
        swiper.slideTo(slideToIndex);
      }
    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
      swiper.loopFix();
      slideToIndex = $wrapperEl
        .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
        .eq(0)
        .index();

      Utils.nextTick(() => {
        swiper.slideTo(slideToIndex);
      });
    } else {
      swiper.slideTo(slideToIndex);
    }
  } else {
    swiper.slideTo(slideToIndex);
  }
}

var slide = {
  slideTo,
  slideToLoop,
  slideNext,
  slidePrev,
  slideReset,
  slideToClosest,
  slideToClickedSlide,
};

function loopCreate () {
  const swiper = this;
  const { params, $wrapperEl } = swiper;
  // Remove duplicated slides
  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();

  let slides = $wrapperEl.children(`.${params.slideClass}`);

  if (params.loopFillGroupWithBlank) {
    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
    if (blankSlidesNum !== params.slidesPerGroup) {
      for (let i = 0; i < blankSlidesNum; i += 1) {
        const blankNode = $(doc.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);
        $wrapperEl.append(blankNode);
      }
      slides = $wrapperEl.children(`.${params.slideClass}`);
    }
  }

  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;

  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
  swiper.loopedSlides += params.loopAdditionalSlides;
  if (swiper.loopedSlides > slides.length) {
    swiper.loopedSlides = slides.length;
  }

  const prependSlides = [];
  const appendSlides = [];
  slides.each((index, el) => {
    const slide = $(el);
    if (index < swiper.loopedSlides) appendSlides.push(el);
    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
    slide.attr('data-swiper-slide-index', index);
  });
  for (let i = 0; i < appendSlides.length; i += 1) {
    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
  }
  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {
    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
  }
}

function loopFix () {
  const swiper = this;

  swiper.emit('beforeLoopFix');

  const {
    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,
  } = swiper;
  let newIndex;
  swiper.allowSlidePrev = true;
  swiper.allowSlideNext = true;

  const snapTranslate = -snapGrid[activeIndex];
  const diff = snapTranslate - swiper.getTranslate();

  // Fix For Negative Oversliding
  if (activeIndex < loopedSlides) {
    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
    newIndex += loopedSlides;
    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
    if (slideChanged && diff !== 0) {
      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
    }
  } else if (activeIndex >= slides.length - loopedSlides) {
    // Fix For Positive Oversliding
    newIndex = -slides.length + activeIndex + loopedSlides;
    newIndex += loopedSlides;
    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
    if (slideChanged && diff !== 0) {
      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
    }
  }
  swiper.allowSlidePrev = allowSlidePrev;
  swiper.allowSlideNext = allowSlideNext;

  swiper.emit('loopFix');
}

function loopDestroy () {
  const swiper = this;
  const { $wrapperEl, params, slides } = swiper;
  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();
  slides.removeAttr('data-swiper-slide-index');
}

var loop = {
  loopCreate,
  loopFix,
  loopDestroy,
};

function setGrabCursor (moving) {
  const swiper = this;
  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
  const el = swiper.el;
  el.style.cursor = 'move';
  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
  el.style.cursor = moving ? 'grabbing' : 'grab';
}

function unsetGrabCursor () {
  const swiper = this;
  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
  swiper.el.style.cursor = '';
}

var grabCursor = {
  setGrabCursor,
  unsetGrabCursor,
};

function appendSlide (slides) {
  const swiper = this;
  const { $wrapperEl, params } = swiper;
  if (params.loop) {
    swiper.loopDestroy();
  }
  if (typeof slides === 'object' && 'length' in slides) {
    for (let i = 0; i < slides.length; i += 1) {
      if (slides[i]) $wrapperEl.append(slides[i]);
    }
  } else {
    $wrapperEl.append(slides);
  }
  if (params.loop) {
    swiper.loopCreate();
  }
  if (!(params.observer && Support.observer)) {
    swiper.update();
  }
}

function prependSlide (slides) {
  const swiper = this;
  const { params, $wrapperEl, activeIndex } = swiper;

  if (params.loop) {
    swiper.loopDestroy();
  }
  let newActiveIndex = activeIndex + 1;
  if (typeof slides === 'object' && 'length' in slides) {
    for (let i = 0; i < slides.length; i += 1) {
      if (slides[i]) $wrapperEl.prepend(slides[i]);
    }
    newActiveIndex = activeIndex + slides.length;
  } else {
    $wrapperEl.prepend(slides);
  }
  if (params.loop) {
    swiper.loopCreate();
  }
  if (!(params.observer && Support.observer)) {
    swiper.update();
  }
  swiper.slideTo(newActiveIndex, 0, false);
}

function addSlide (index, slides) {
  const swiper = this;
  const { $wrapperEl, params, activeIndex } = swiper;
  let activeIndexBuffer = activeIndex;
  if (params.loop) {
    activeIndexBuffer -= swiper.loopedSlides;
    swiper.loopDestroy();
    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
  }
  const baseLength = swiper.slides.length;
  if (index <= 0) {
    swiper.prependSlide(slides);
    return;
  }
  if (index >= baseLength) {
    swiper.appendSlide(slides);
    return;
  }
  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;

  const slidesBuffer = [];
  for (let i = baseLength - 1; i >= index; i -= 1) {
    const currentSlide = swiper.slides.eq(i);
    currentSlide.remove();
    slidesBuffer.unshift(currentSlide);
  }

  if (typeof slides === 'object' && 'length' in slides) {
    for (let i = 0; i < slides.length; i += 1) {
      if (slides[i]) $wrapperEl.append(slides[i]);
    }
    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
  } else {
    $wrapperEl.append(slides);
  }

  for (let i = 0; i < slidesBuffer.length; i += 1) {
    $wrapperEl.append(slidesBuffer[i]);
  }

  if (params.loop) {
    swiper.loopCreate();
  }
  if (!(params.observer && Support.observer)) {
    swiper.update();
  }
  if (params.loop) {
    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  } else {
    swiper.slideTo(newActiveIndex, 0, false);
  }
}

function removeSlide (slidesIndexes) {
  const swiper = this;
  const { params, $wrapperEl, activeIndex } = swiper;

  let activeIndexBuffer = activeIndex;
  if (params.loop) {
    activeIndexBuffer -= swiper.loopedSlides;
    swiper.loopDestroy();
    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
  }
  let newActiveIndex = activeIndexBuffer;
  let indexToRemove;

  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
    for (let i = 0; i < slidesIndexes.length; i += 1) {
      indexToRemove = slidesIndexes[i];
      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
    }
    newActiveIndex = Math.max(newActiveIndex, 0);
  } else {
    indexToRemove = slidesIndexes;
    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
    newActiveIndex = Math.max(newActiveIndex, 0);
  }

  if (params.loop) {
    swiper.loopCreate();
  }

  if (!(params.observer && Support.observer)) {
    swiper.update();
  }
  if (params.loop) {
    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  } else {
    swiper.slideTo(newActiveIndex, 0, false);
  }
}

function removeAllSlides () {
  const swiper = this;

  const slidesIndexes = [];
  for (let i = 0; i < swiper.slides.length; i += 1) {
    slidesIndexes.push(i);
  }
  swiper.removeSlide(slidesIndexes);
}

var manipulation = {
  appendSlide,
  prependSlide,
  addSlide,
  removeSlide,
  removeAllSlides,
};

const Device = (function Device() {
  const platform = win.navigator.platform;
  const ua = win.navigator.userAgent;

  const device = {
    ios: false,
    android: false,
    androidChrome: false,
    desktop: false,
    iphone: false,
    ipod: false,
    ipad: false,
    edge: false,
    ie: false,
    firefox: false,
    macos: false,
    windows: false,
    cordova: !!(win.cordova || win.phonegap),
    phonegap: !!(win.cordova || win.phonegap),
    electron: false,
  };

  const screenWidth = win.screen.width;
  const screenHeight = win.screen.height;

  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
  const edge = ua.indexOf('Edge/') >= 0;
  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
  const windows = platform === 'Win32';
  const electron = ua.toLowerCase().indexOf('electron') >= 0;
  let macos = platform === 'MacIntel';

  // iPadOs 13 fix
  if (!ipad
    && macos
    && Support.touch
    && (
      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9
      || (screenWidth === 834 && screenHeight === 1194) // Pro 11
      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5
      || (screenWidth === 768 && screenHeight === 1024) // other
    )
  ) {
    ipad = ua.match(/(Version)\/([\d.]+)/);
    macos = false;
  }

  device.ie = ie;
  device.edge = edge;
  device.firefox = firefox;

  // Android
  if (android && !windows) {
    device.os = 'android';
    device.osVersion = android[2];
    device.android = true;
    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
  }
  if (ipad || iphone || ipod) {
    device.os = 'ios';
    device.ios = true;
  }
  // iOS
  if (iphone && !ipod) {
    device.osVersion = iphone[2].replace(/_/g, '.');
    device.iphone = true;
  }
  if (ipad) {
    device.osVersion = ipad[2].replace(/_/g, '.');
    device.ipad = true;
  }
  if (ipod) {
    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
    device.ipod = true;
  }
  // iOS 8+ changed UA
  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
    if (device.osVersion.split('.')[0] === '10') {
      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
    }
  }

  // Webview
  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))
    || (win.matchMedia && win.matchMedia('(display-mode: standalone)').matches);
  device.webview = device.webView;
  device.standalone = device.webView;

  // Desktop
  device.desktop = !(device.ios || device.android) || electron;
  if (device.desktop) {
    device.electron = electron;
    device.macos = macos;
    device.windows = windows;
    if (device.macos) {
      device.os = 'macos';
    }
    if (device.windows) {
      device.os = 'windows';
    }
  }

  // Pixel Ratio
  device.pixelRatio = win.devicePixelRatio || 1;

  // Export object
  return device;
}());

function onTouchStart (event) {
  const swiper = this;
  const data = swiper.touchEventsData;
  const { params, touches } = swiper;

  if (swiper.animating && params.preventInteractionOnTransition) {
    return;
  }
  let e = event;
  if (e.originalEvent) e = e.originalEvent;
  const $targetEl = $(e.target);

  if (params.touchEventsTarget === 'wrapper') {
    if (!$targetEl.closest(swiper.wrapperEl).length) return;
  }
  data.isTouchEvent = e.type === 'touchstart';
  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
  if (data.isTouched && data.isMoved) return;
  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {
    swiper.allowClick = true;
    return;
  }
  if (params.swipeHandler) {
    if (!$targetEl.closest(params.swipeHandler)[0]) return;
  }

  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
  const startX = touches.currentX;
  const startY = touches.currentY;

  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore

  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
  if (
    edgeSwipeDetection
    && ((startX <= edgeSwipeThreshold)
    || (startX >= win.screen.width - edgeSwipeThreshold))
  ) {
    return;
  }

  Utils.extend(data, {
    isTouched: true,
    isMoved: false,
    allowTouchCallbacks: true,
    isScrolling: undefined,
    startMoving: undefined,
  });

  touches.startX = startX;
  touches.startY = startY;
  data.touchStartTime = Utils.now();
  swiper.allowClick = true;
  swiper.updateSize();
  swiper.swipeDirection = undefined;
  if (params.threshold > 0) data.allowThresholdMove = false;
  if (e.type !== 'touchstart') {
    let preventDefault = true;
    if ($targetEl.is(data.formElements)) preventDefault = false;
    if (
      doc.activeElement
      && $(doc.activeElement).is(data.formElements)
      && doc.activeElement !== $targetEl[0]
    ) {
      doc.activeElement.blur();
    }

    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
    if (params.touchStartForcePreventDefault || shouldPreventDefault) {
      e.preventDefault();
    }
  }
  swiper.emit('touchStart', e);
}

function onTouchMove (event) {
  const swiper = this;
  const data = swiper.touchEventsData;
  const { params, touches, rtlTranslate: rtl } = swiper;
  let e = event;
  if (e.originalEvent) e = e.originalEvent;
  if (!data.isTouched) {
    if (data.startMoving && data.isScrolling) {
      swiper.emit('touchMoveOpposite', e);
    }
    return;
  }
  if (data.isTouchEvent && e.type !== 'touchmove') return;
  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
  if (e.preventedByNestedSwiper) {
    touches.startX = pageX;
    touches.startY = pageY;
    return;
  }
  if (!swiper.allowTouchMove) {
    // isMoved = true;
    swiper.allowClick = false;
    if (data.isTouched) {
      Utils.extend(touches, {
        startX: pageX,
        startY: pageY,
        currentX: pageX,
        currentY: pageY,
      });
      data.touchStartTime = Utils.now();
    }
    return;
  }
  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
    if (swiper.isVertical()) {
      // Vertical
      if (
        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
      ) {
        data.isTouched = false;
        data.isMoved = false;
        return;
      }
    } else if (
      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
    ) {
      return;
    }
  }
  if (data.isTouchEvent && doc.activeElement) {
    if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
      data.isMoved = true;
      swiper.allowClick = false;
      return;
    }
  }
  if (data.allowTouchCallbacks) {
    swiper.emit('touchMove', e);
  }
  if (e.targetTouches && e.targetTouches.length > 1) return;

  touches.currentX = pageX;
  touches.currentY = pageY;

  const diffX = touches.currentX - touches.startX;
  const diffY = touches.currentY - touches.startY;
  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;

  if (typeof data.isScrolling === 'undefined') {
    let touchAngle;
    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
      data.isScrolling = false;
    } else {
      // eslint-disable-next-line
      if ((diffX * diffX) + (diffY * diffY) >= 25) {
        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
      }
    }
  }
  if (data.isScrolling) {
    swiper.emit('touchMoveOpposite', e);
  }
  if (typeof data.startMoving === 'undefined') {
    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
      data.startMoving = true;
    }
  }
  if (data.isScrolling) {
    data.isTouched = false;
    return;
  }
  if (!data.startMoving) {
    return;
  }
  swiper.allowClick = false;
  if (!params.cssMode && e.cancelable) {
    e.preventDefault();
  }
  if (params.touchMoveStopPropagation && !params.nested) {
    e.stopPropagation();
  }

  if (!data.isMoved) {
    if (params.loop) {
      swiper.loopFix();
    }
    data.startTranslate = swiper.getTranslate();
    swiper.setTransition(0);
    if (swiper.animating) {
      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
    }
    data.allowMomentumBounce = false;
    // Grab Cursor
    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
      swiper.setGrabCursor(true);
    }
    swiper.emit('sliderFirstMove', e);
  }
  swiper.emit('sliderMove', e);
  data.isMoved = true;

  let diff = swiper.isHorizontal() ? diffX : diffY;
  touches.diff = diff;

  diff *= params.touchRatio;
  if (rtl) diff = -diff;

  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
  data.currentTranslate = diff + data.startTranslate;

  let disableParentSwiper = true;
  let resistanceRatio = params.resistanceRatio;
  if (params.touchReleaseOnEdges) {
    resistanceRatio = 0;
  }
  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
    disableParentSwiper = false;
    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);
  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
    disableParentSwiper = false;
    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);
  }

  if (disableParentSwiper) {
    e.preventedByNestedSwiper = true;
  }

  // Directions locks
  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
    data.currentTranslate = data.startTranslate;
  }
  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
    data.currentTranslate = data.startTranslate;
  }


  // Threshold
  if (params.threshold > 0) {
    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
      if (!data.allowThresholdMove) {
        data.allowThresholdMove = true;
        touches.startX = touches.currentX;
        touches.startY = touches.currentY;
        data.currentTranslate = data.startTranslate;
        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
        return;
      }
    } else {
      data.currentTranslate = data.startTranslate;
      return;
    }
  }

  if (!params.followFinger || params.cssMode) return;

  // Update active index in free mode
  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  }
  if (params.freeMode) {
    // Velocity
    if (data.velocities.length === 0) {
      data.velocities.push({
        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
        time: data.touchStartTime,
      });
    }
    data.velocities.push({
      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
      time: Utils.now(),
    });
  }
  // Update progress
  swiper.updateProgress(data.currentTranslate);
  // Update translate
  swiper.setTranslate(data.currentTranslate);
}

function onTouchEnd (event) {
  const swiper = this;
  const data = swiper.touchEventsData;

  const {
    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,
  } = swiper;
  let e = event;
  if (e.originalEvent) e = e.originalEvent;
  if (data.allowTouchCallbacks) {
    swiper.emit('touchEnd', e);
  }
  data.allowTouchCallbacks = false;
  if (!data.isTouched) {
    if (data.isMoved && params.grabCursor) {
      swiper.setGrabCursor(false);
    }
    data.isMoved = false;
    data.startMoving = false;
    return;
  }
  // Return Grab Cursor
  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
    swiper.setGrabCursor(false);
  }

  // Time diff
  const touchEndTime = Utils.now();
  const timeDiff = touchEndTime - data.touchStartTime;

  // Tap, doubleTap, Click
  if (swiper.allowClick) {
    swiper.updateClickedSlide(e);
    swiper.emit('tap click', e);
    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
      swiper.emit('doubleTap doubleClick', e);
    }
  }

  data.lastClickTime = Utils.now();
  Utils.nextTick(() => {
    if (!swiper.destroyed) swiper.allowClick = true;
  });

  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
    data.isTouched = false;
    data.isMoved = false;
    data.startMoving = false;
    return;
  }
  data.isTouched = false;
  data.isMoved = false;
  data.startMoving = false;

  let currentPos;
  if (params.followFinger) {
    currentPos = rtl ? swiper.translate : -swiper.translate;
  } else {
    currentPos = -data.currentTranslate;
  }

  if (params.cssMode) {
    return;
  }

  if (params.freeMode) {
    if (currentPos < -swiper.minTranslate()) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }
    if (currentPos > -swiper.maxTranslate()) {
      if (swiper.slides.length < snapGrid.length) {
        swiper.slideTo(snapGrid.length - 1);
      } else {
        swiper.slideTo(swiper.slides.length - 1);
      }
      return;
    }

    if (params.freeModeMomentum) {
      if (data.velocities.length > 1) {
        const lastMoveEvent = data.velocities.pop();
        const velocityEvent = data.velocities.pop();

        const distance = lastMoveEvent.position - velocityEvent.position;
        const time = lastMoveEvent.time - velocityEvent.time;
        swiper.velocity = distance / time;
        swiper.velocity /= 2;
        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
          swiper.velocity = 0;
        }
        // this implies that the user stopped moving a finger then released.
        // There would be no events with distance zero, so the last event is stale.
        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
          swiper.velocity = 0;
        }
      } else {
        swiper.velocity = 0;
      }
      swiper.velocity *= params.freeModeMomentumVelocityRatio;

      data.velocities.length = 0;
      let momentumDuration = 1000 * params.freeModeMomentumRatio;
      const momentumDistance = swiper.velocity * momentumDuration;

      let newPosition = swiper.translate + momentumDistance;
      if (rtl) newPosition = -newPosition;

      let doBounce = false;
      let afterBouncePosition;
      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
      let needsLoopFix;
      if (newPosition < swiper.maxTranslate()) {
        if (params.freeModeMomentumBounce) {
          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
            newPosition = swiper.maxTranslate() - bounceAmount;
          }
          afterBouncePosition = swiper.maxTranslate();
          doBounce = true;
          data.allowMomentumBounce = true;
        } else {
          newPosition = swiper.maxTranslate();
        }
        if (params.loop && params.centeredSlides) needsLoopFix = true;
      } else if (newPosition > swiper.minTranslate()) {
        if (params.freeModeMomentumBounce) {
          if (newPosition - swiper.minTranslate() > bounceAmount) {
            newPosition = swiper.minTranslate() + bounceAmount;
          }
          afterBouncePosition = swiper.minTranslate();
          doBounce = true;
          data.allowMomentumBounce = true;
        } else {
          newPosition = swiper.minTranslate();
        }
        if (params.loop && params.centeredSlides) needsLoopFix = true;
      } else if (params.freeModeSticky) {
        let nextSlide;
        for (let j = 0; j < snapGrid.length; j += 1) {
          if (snapGrid[j] > -newPosition) {
            nextSlide = j;
            break;
          }
        }

        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
          newPosition = snapGrid[nextSlide];
        } else {
          newPosition = snapGrid[nextSlide - 1];
        }
        newPosition = -newPosition;
      }
      if (needsLoopFix) {
        swiper.once('transitionEnd', () => {
          swiper.loopFix();
        });
      }
      // Fix duration
      if (swiper.velocity !== 0) {
        if (rtl) {
          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
        } else {
          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
        }
        if (params.freeModeSticky) {
          // If freeModeSticky is active and the user ends a swipe with a slow-velocity
          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
          // It's easy to see this when simulating touch with mouse events. To fix this,
          // limit single-slide swipes to the default slide duration. This also has the
          // nice side effect of matching slide speed if the user stopped moving before
          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
          // For faster swipes, also apply limits (albeit higher ones).
          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
          if (moveDistance < currentSlideSize) {
            momentumDuration = params.speed;
          } else if (moveDistance < 2 * currentSlideSize) {
            momentumDuration = params.speed * 1.5;
          } else {
            momentumDuration = params.speed * 2.5;
          }
        }
      } else if (params.freeModeSticky) {
        swiper.slideToClosest();
        return;
      }

      if (params.freeModeMomentumBounce && doBounce) {
        swiper.updateProgress(afterBouncePosition);
        swiper.setTransition(momentumDuration);
        swiper.setTranslate(newPosition);
        swiper.transitionStart(true, swiper.swipeDirection);
        swiper.animating = true;
        $wrapperEl.transitionEnd(() => {
          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
          swiper.emit('momentumBounce');
          swiper.setTransition(params.speed);
          setTimeout(() => {
            swiper.setTranslate(afterBouncePosition);
            $wrapperEl.transitionEnd(() => {
              if (!swiper || swiper.destroyed) return;
              swiper.transitionEnd();
            });
          }, 0);
        });
      } else if (swiper.velocity) {
        swiper.updateProgress(newPosition);
        swiper.setTransition(momentumDuration);
        swiper.setTranslate(newPosition);
        swiper.transitionStart(true, swiper.swipeDirection);
        if (!swiper.animating) {
          swiper.animating = true;
          $wrapperEl.transitionEnd(() => {
            if (!swiper || swiper.destroyed) return;
            swiper.transitionEnd();
          });
        }
      } else {
        swiper.updateProgress(newPosition);
      }

      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    } else if (params.freeModeSticky) {
      swiper.slideToClosest();
      return;
    }

    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
      swiper.updateProgress();
      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    }
    return;
  }

  // Find current slide
  let stopIndex = 0;
  let groupSize = swiper.slidesSizesGrid[0];
  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {
    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
    if (typeof slidesGrid[i + increment] !== 'undefined') {
      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
        stopIndex = i;
        groupSize = slidesGrid[i + increment] - slidesGrid[i];
      }
    } else if (currentPos >= slidesGrid[i]) {
      stopIndex = i;
      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
    }
  }

  // Find current slide size
  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);

  if (timeDiff > params.longSwipesMs) {
    // Long touches
    if (!params.longSwipes) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }
    if (swiper.swipeDirection === 'next') {
      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);
      else swiper.slideTo(stopIndex);
    }
    if (swiper.swipeDirection === 'prev') {
      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);
      else swiper.slideTo(stopIndex);
    }
  } else {
    // Short swipes
    if (!params.shortSwipes) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }
    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
    if (!isNavButtonTarget) {
      if (swiper.swipeDirection === 'next') {
        swiper.slideTo(stopIndex + increment);
      }
      if (swiper.swipeDirection === 'prev') {
        swiper.slideTo(stopIndex);
      }
    } else if (e.target === swiper.navigation.nextEl) {
      swiper.slideTo(stopIndex + increment);
    } else {
      swiper.slideTo(stopIndex);
    }
  }
}

function onResize () {
  const swiper = this;

  const { params, el } = swiper;

  if (el && el.offsetWidth === 0) return;

  // Breakpoints
  if (params.breakpoints) {
    swiper.setBreakpoint();
  }

  // Save locks
  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;

  // Disable locks on resize
  swiper.allowSlideNext = true;
  swiper.allowSlidePrev = true;

  swiper.updateSize();
  swiper.updateSlides();

  swiper.updateSlidesClasses();
  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {
    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
  } else {
    swiper.slideTo(swiper.activeIndex, 0, false, true);
  }

  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
    swiper.autoplay.run();
  }
  // Return locks after resize
  swiper.allowSlidePrev = allowSlidePrev;
  swiper.allowSlideNext = allowSlideNext;

  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
    swiper.checkOverflow();
  }
}

function onClick (e) {
  const swiper = this;
  if (!swiper.allowClick) {
    if (swiper.params.preventClicks) e.preventDefault();
    if (swiper.params.preventClicksPropagation && swiper.animating) {
      e.stopPropagation();
      e.stopImmediatePropagation();
    }
  }
}

function onScroll () {
  const swiper = this;
  const { wrapperEl, rtlTranslate } = swiper;
  swiper.previousTranslate = swiper.translate;
  if (swiper.isHorizontal()) {
    if (rtlTranslate) {
      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);
    } else {
      swiper.translate = -wrapperEl.scrollLeft;
    }
  } else {
    swiper.translate = -wrapperEl.scrollTop;
  }
  // eslint-disable-next-line
  if (swiper.translate === -0) swiper.translate = 0;

  swiper.updateActiveIndex();
  swiper.updateSlidesClasses();

  let newProgress;
  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  if (translatesDiff === 0) {
    newProgress = 0;
  } else {
    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);
  }
  if (newProgress !== swiper.progress) {
    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
  }

  swiper.emit('setTranslate', swiper.translate, false);
}

let dummyEventAttached = false;
function dummyEventListener() {}

function attachEvents() {
  const swiper = this;
  const {
    params, touchEvents, el, wrapperEl,
  } = swiper;

  swiper.onTouchStart = onTouchStart.bind(swiper);
  swiper.onTouchMove = onTouchMove.bind(swiper);
  swiper.onTouchEnd = onTouchEnd.bind(swiper);
  if (params.cssMode) {
    swiper.onScroll = onScroll.bind(swiper);
  }

  swiper.onClick = onClick.bind(swiper);

  const capture = !!params.nested;

  // Touch Events
  if (!Support.touch && Support.pointerEvents) {
    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
    doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
    doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
  } else {
    if (Support.touch) {
      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);
      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
      if (touchEvents.cancel) {
        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
      }
      if (!dummyEventAttached) {
        doc.addEventListener('touchstart', dummyEventListener);
        dummyEventAttached = true;
      }
    }
    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
      el.addEventListener('mousedown', swiper.onTouchStart, false);
      doc.addEventListener('mousemove', swiper.onTouchMove, capture);
      doc.addEventListener('mouseup', swiper.onTouchEnd, false);
    }
  }
  // Prevent Links Clicks
  if (params.preventClicks || params.preventClicksPropagation) {
    el.addEventListener('click', swiper.onClick, true);
  }
  if (params.cssMode) {
    wrapperEl.addEventListener('scroll', swiper.onScroll);
  }

  // Resize handler
  if (params.updateOnWindowResize) {
    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
  } else {
    swiper.on('observerUpdate', onResize, true);
  }
}

function detachEvents() {
  const swiper = this;

  const {
    params, touchEvents, el, wrapperEl,
  } = swiper;

  const capture = !!params.nested;

  // Touch Events
  if (!Support.touch && Support.pointerEvents) {
    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
    doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
    doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
  } else {
    if (Support.touch) {
      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
      if (touchEvents.cancel) {
        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
      }
    }
    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
      el.removeEventListener('mousedown', swiper.onTouchStart, false);
      doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
      doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
    }
  }
  // Prevent Links Clicks
  if (params.preventClicks || params.preventClicksPropagation) {
    el.removeEventListener('click', swiper.onClick, true);
  }

  if (params.cssMode) {
    wrapperEl.removeEventListener('scroll', swiper.onScroll);
  }

  // Resize handler
  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
}

var events = {
  attachEvents,
  detachEvents,
};

function setBreakpoint () {
  const swiper = this;
  const {
    activeIndex, initialized, loopedSlides = 0, params, $el,
  } = swiper;
  const breakpoints = params.breakpoints;
  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;

  // Get breakpoint for window width and update parameters
  const breakpoint = swiper.getBreakpoint(breakpoints);

  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
    if (breakpointOnlyParams) {
      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {
        const paramValue = breakpointOnlyParams[param];
        if (typeof paramValue === 'undefined') return;
        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
          breakpointOnlyParams[param] = 'auto';
        } else if (param === 'slidesPerView') {
          breakpointOnlyParams[param] = parseFloat(paramValue);
        } else {
          breakpointOnlyParams[param] = parseInt(paramValue, 10);
        }
      });
    }

    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
    const wasMultiRow = params.slidesPerColumn > 1;
    const isMultiRow = breakpointParams.slidesPerColumn > 1;
    if (wasMultiRow && !isMultiRow) {
      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);
    } else if (!wasMultiRow && isMultiRow) {
      $el.addClass(`${params.containerModifierClass}multirow`);
      if (breakpointParams.slidesPerColumnFill === 'column') {
        $el.addClass(`${params.containerModifierClass}multirow-column`);
      }
    }

    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);

    if (directionChanged && initialized) {
      swiper.changeDirection();
    }

    Utils.extend(swiper.params, breakpointParams);

    Utils.extend(swiper, {
      allowTouchMove: swiper.params.allowTouchMove,
      allowSlideNext: swiper.params.allowSlideNext,
      allowSlidePrev: swiper.params.allowSlidePrev,
    });

    swiper.currentBreakpoint = breakpoint;

    if (needsReLoop && initialized) {
      swiper.loopDestroy();
      swiper.loopCreate();
      swiper.updateSlides();
      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
    }

    swiper.emit('breakpoint', breakpointParams);
  }
}

function getBreakpoint (breakpoints) {
  // Get breakpoint for window width
  if (!breakpoints) return undefined;
  let breakpoint = false;

  const points = Object.keys(breakpoints).map((point) => {
    if (typeof point === 'string' && point.indexOf('@') === 0) {
      const minRatio = parseFloat(point.substr(1));
      const value = win.innerHeight * minRatio;
      return { value, point };
    }
    return { value: point, point };
  });

  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
  for (let i = 0; i < points.length; i += 1) {
    const { point, value } = points[i];
    if (value <= win.innerWidth) {
      breakpoint = point;
    }
  }
  return breakpoint || 'max';
}

var breakpoints = { setBreakpoint, getBreakpoint };

function addClasses () {
  const swiper = this;
  const {
    classNames, params, rtl, $el,
  } = swiper;
  const suffixes = [];

  suffixes.push('initialized');
  suffixes.push(params.direction);

  if (params.freeMode) {
    suffixes.push('free-mode');
  }
  if (params.autoHeight) {
    suffixes.push('autoheight');
  }
  if (rtl) {
    suffixes.push('rtl');
  }
  if (params.slidesPerColumn > 1) {
    suffixes.push('multirow');
    if (params.slidesPerColumnFill === 'column') {
      suffixes.push('multirow-column');
    }
  }
  if (Device.android) {
    suffixes.push('android');
  }
  if (Device.ios) {
    suffixes.push('ios');
  }

  if (params.cssMode) {
    suffixes.push('css-mode');
  }

  suffixes.forEach((suffix) => {
    classNames.push(params.containerModifierClass + suffix);
  });

  $el.addClass(classNames.join(' '));
}

function removeClasses () {
  const swiper = this;
  const { $el, classNames } = swiper;

  $el.removeClass(classNames.join(' '));
}

var classes = { addClasses, removeClasses };

function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
  let image;
  function onReady() {
    if (callback) callback();
  }
  const isPicture = $(imageEl).parent('picture')[0];

  if (!isPicture && (!imageEl.complete || !checkForComplete)) {
    if (src) {
      image = new win.Image();
      image.onload = onReady;
      image.onerror = onReady;
      if (sizes) {
        image.sizes = sizes;
      }
      if (srcset) {
        image.srcset = srcset;
      }
      if (src) {
        image.src = src;
      }
    } else {
      onReady();
    }
  } else {
    // image already loaded...
    onReady();
  }
}

function preloadImages () {
  const swiper = this;
  swiper.imagesToLoad = swiper.$el.find('img');
  function onReady() {
    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
      if (swiper.params.updateOnImagesReady) swiper.update();
      swiper.emit('imagesReady');
    }
  }
  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {
    const imageEl = swiper.imagesToLoad[i];
    swiper.loadImage(
      imageEl,
      imageEl.currentSrc || imageEl.getAttribute('src'),
      imageEl.srcset || imageEl.getAttribute('srcset'),
      imageEl.sizes || imageEl.getAttribute('sizes'),
      true,
      onReady
    );
  }
}

var swiper_esm_bundle_images = {
  loadImage,
  preloadImages,
};

function checkOverflow() {
  const swiper = this;
  const params = swiper.params;
  const wasLocked = swiper.isLocked;
  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);

  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
    swiper.isLocked = lastSlidePosition <= swiper.size;
  } else {
    swiper.isLocked = swiper.snapGrid.length === 1;
  }

  swiper.allowSlideNext = !swiper.isLocked;
  swiper.allowSlidePrev = !swiper.isLocked;

  // events
  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');

  if (wasLocked && wasLocked !== swiper.isLocked) {
    swiper.isEnd = false;
    if (swiper.navigation) swiper.navigation.update();
  }
}

var checkOverflow$1 = { checkOverflow };

var defaults = {
  init: true,
  direction: 'horizontal',
  touchEventsTarget: 'container',
  initialSlide: 0,
  speed: 300,
  cssMode: false,
  updateOnWindowResize: true,
  //
  preventInteractionOnTransition: false,

  // To support iOS's swipe-to-go-back gesture (when being used in-app).
  edgeSwipeDetection: false,
  edgeSwipeThreshold: 20,

  // Free mode
  freeMode: false,
  freeModeMomentum: true,
  freeModeMomentumRatio: 1,
  freeModeMomentumBounce: true,
  freeModeMomentumBounceRatio: 1,
  freeModeMomentumVelocityRatio: 1,
  freeModeSticky: false,
  freeModeMinimumVelocity: 0.02,

  // Autoheight
  autoHeight: false,

  // Set wrapper width
  setWrapperSize: false,

  // Virtual Translate
  virtualTranslate: false,

  // Effects
  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'

  // Breakpoints
  breakpoints: undefined,

  // Slides grid
  spaceBetween: 0,
  slidesPerView: 1,
  slidesPerColumn: 1,
  slidesPerColumnFill: 'column',
  slidesPerGroup: 1,
  slidesPerGroupSkip: 0,
  centeredSlides: false,
  centeredSlidesBounds: false,
  slidesOffsetBefore: 0, // in px
  slidesOffsetAfter: 0, // in px
  normalizeSlideIndex: true,
  centerInsufficientSlides: false,

  // Disable swiper and hide navigation when container not overflow
  watchOverflow: false,

  // Round length
  roundLengths: false,

  // Touches
  touchRatio: 1,
  touchAngle: 45,
  simulateTouch: true,
  shortSwipes: true,
  longSwipes: true,
  longSwipesRatio: 0.5,
  longSwipesMs: 300,
  followFinger: true,
  allowTouchMove: true,
  threshold: 0,
  touchMoveStopPropagation: false,
  touchStartPreventDefault: true,
  touchStartForcePreventDefault: false,
  touchReleaseOnEdges: false,

  // Unique Navigation Elements
  uniqueNavElements: true,

  // Resistance
  resistance: true,
  resistanceRatio: 0.85,

  // Progress
  watchSlidesProgress: false,
  watchSlidesVisibility: false,

  // Cursor
  grabCursor: false,

  // Clicks
  preventClicks: true,
  preventClicksPropagation: true,
  slideToClickedSlide: false,

  // Images
  preloadImages: true,
  updateOnImagesReady: true,

  // loop
  loop: false,
  loopAdditionalSlides: 0,
  loopedSlides: null,
  loopFillGroupWithBlank: false,

  // Swiping/no swiping
  allowSlidePrev: true,
  allowSlideNext: true,
  swipeHandler: null, // '.swipe-handler',
  noSwiping: true,
  noSwipingClass: 'swiper-no-swiping',
  noSwipingSelector: null,

  // Passive Listeners
  passiveListeners: true,

  // NS
  containerModifierClass: 'swiper-container-', // NEW
  slideClass: 'swiper-slide',
  slideBlankClass: 'swiper-slide-invisible-blank',
  slideActiveClass: 'swiper-slide-active',
  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
  slideVisibleClass: 'swiper-slide-visible',
  slideDuplicateClass: 'swiper-slide-duplicate',
  slideNextClass: 'swiper-slide-next',
  slideDuplicateNextClass: 'swiper-slide-duplicate-next',
  slidePrevClass: 'swiper-slide-prev',
  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
  wrapperClass: 'swiper-wrapper',

  // Callbacks
  runCallbacksOnInit: true,
};

/* eslint no-param-reassign: "off" */

const prototypes = {
  update,
  translate,
  transition: swiper_esm_bundle_transition,
  slide,
  loop,
  grabCursor,
  manipulation,
  events,
  breakpoints,
  checkOverflow: checkOverflow$1,
  classes,
  images: swiper_esm_bundle_images,
};

const extendedDefaults = {};

class Swiper extends SwiperClass {
  constructor(...args) {
    let el;
    let params;
    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
      params = args[0];
    } else {
      [el, params] = args;
    }
    if (!params) params = {};

    params = Utils.extend({}, params);
    if (el && !params.el) params.el = el;

    super(params);

    Object.keys(prototypes).forEach((prototypeGroup) => {
      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
        if (!Swiper.prototype[protoMethod]) {
          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
        }
      });
    });

    // Swiper Instance
    const swiper = this;
    if (typeof swiper.modules === 'undefined') {
      swiper.modules = {};
    }
    Object.keys(swiper.modules).forEach((moduleName) => {
      const module = swiper.modules[moduleName];
      if (module.params) {
        const moduleParamName = Object.keys(module.params)[0];
        const moduleParams = module.params[moduleParamName];
        if (typeof moduleParams !== 'object' || moduleParams === null) return;
        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
        if (params[moduleParamName] === true) {
          params[moduleParamName] = { enabled: true };
        }
        if (
          typeof params[moduleParamName] === 'object'
          && !('enabled' in params[moduleParamName])
        ) {
          params[moduleParamName].enabled = true;
        }
        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };
      }
    });

    // Extend defaults with modules params
    const swiperParams = Utils.extend({}, defaults);
    swiper.useModulesParams(swiperParams);

    // Extend defaults with passed params
    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
    swiper.originalParams = Utils.extend({}, swiper.params);
    swiper.passedParams = Utils.extend({}, params);

    // Save Dom lib
    swiper.$ = $;

    // Find el
    const $el = $(swiper.params.el);
    el = $el[0];

    if (!el) {
      return undefined;
    }

    if ($el.length > 1) {
      const swipers = [];
      $el.each((index, containerEl) => {
        const newParams = Utils.extend({}, params, { el: containerEl });
        swipers.push(new Swiper(newParams));
      });
      return swipers;
    }

    el.swiper = swiper;
    $el.data('swiper', swiper);

    // Find Wrapper
    let $wrapperEl;
    if (el && el.shadowRoot && el.shadowRoot.querySelector) {
      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));
      // Children needs to return slot items
      $wrapperEl.children = (options) => $el.children(options);
    } else {
      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);
    }
    // Extend Swiper
    Utils.extend(swiper, {
      $el,
      el,
      $wrapperEl,
      wrapperEl: $wrapperEl[0],

      // Classes
      classNames: [],

      // Slides
      slides: $(),
      slidesGrid: [],
      snapGrid: [],
      slidesSizesGrid: [],

      // isDirection
      isHorizontal() {
        return swiper.params.direction === 'horizontal';
      },
      isVertical() {
        return swiper.params.direction === 'vertical';
      },
      // RTL
      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
      wrongRTL: $wrapperEl.css('display') === '-webkit-box',

      // Indexes
      activeIndex: 0,
      realIndex: 0,

      //
      isBeginning: true,
      isEnd: false,

      // Props
      translate: 0,
      previousTranslate: 0,
      progress: 0,
      velocity: 0,
      animating: false,

      // Locks
      allowSlideNext: swiper.params.allowSlideNext,
      allowSlidePrev: swiper.params.allowSlidePrev,

      // Touch Events
      touchEvents: (function touchEvents() {
        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
        let desktop = ['mousedown', 'mousemove', 'mouseup'];
        if (Support.pointerEvents) {
          desktop = ['pointerdown', 'pointermove', 'pointerup'];
        }
        swiper.touchEventsTouch = {
          start: touch[0],
          move: touch[1],
          end: touch[2],
          cancel: touch[3],
        };
        swiper.touchEventsDesktop = {
          start: desktop[0],
          move: desktop[1],
          end: desktop[2],
        };
        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
      }()),
      touchEventsData: {
        isTouched: undefined,
        isMoved: undefined,
        allowTouchCallbacks: undefined,
        touchStartTime: undefined,
        isScrolling: undefined,
        currentTranslate: undefined,
        startTranslate: undefined,
        allowThresholdMove: undefined,
        // Form elements to match
        formElements: 'input, select, option, textarea, button, video, label',
        // Last click time
        lastClickTime: Utils.now(),
        clickTimeout: undefined,
        // Velocities
        velocities: [],
        allowMomentumBounce: undefined,
        isTouchEvent: undefined,
        startMoving: undefined,
      },

      // Clicks
      allowClick: true,

      // Touches
      allowTouchMove: swiper.params.allowTouchMove,

      touches: {
        startX: 0,
        startY: 0,
        currentX: 0,
        currentY: 0,
        diff: 0,
      },

      // Images
      imagesToLoad: [],
      imagesLoaded: 0,

    });

    // Install Modules
    swiper.useModules();

    // Init
    if (swiper.params.init) {
      swiper.init();
    }

    // Return app instance
    return swiper;
  }

  slidesPerViewDynamic() {
    const swiper = this;
    const {
      params, slides, slidesGrid, size: swiperSize, activeIndex,
    } = swiper;
    let spv = 1;
    if (params.centeredSlides) {
      let slideSize = slides[activeIndex].swiperSlideSize;
      let breakLoop;
      for (let i = activeIndex + 1; i < slides.length; i += 1) {
        if (slides[i] && !breakLoop) {
          slideSize += slides[i].swiperSlideSize;
          spv += 1;
          if (slideSize > swiperSize) breakLoop = true;
        }
      }
      for (let i = activeIndex - 1; i >= 0; i -= 1) {
        if (slides[i] && !breakLoop) {
          slideSize += slides[i].swiperSlideSize;
          spv += 1;
          if (slideSize > swiperSize) breakLoop = true;
        }
      }
    } else {
      for (let i = activeIndex + 1; i < slides.length; i += 1) {
        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {
          spv += 1;
        }
      }
    }
    return spv;
  }

  update() {
    const swiper = this;
    if (!swiper || swiper.destroyed) return;
    const { snapGrid, params } = swiper;
    // Breakpoints
    if (params.breakpoints) {
      swiper.setBreakpoint();
    }
    swiper.updateSize();
    swiper.updateSlides();
    swiper.updateProgress();
    swiper.updateSlidesClasses();

    function setTranslate() {
      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
      swiper.setTranslate(newTranslate);
      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    }
    let translated;
    if (swiper.params.freeMode) {
      setTranslate();
      if (swiper.params.autoHeight) {
        swiper.updateAutoHeight();
      }
    } else {
      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
      } else {
        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
      }
      if (!translated) {
        setTranslate();
      }
    }
    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
      swiper.checkOverflow();
    }
    swiper.emit('update');
  }

  changeDirection(newDirection, needUpdate = true) {
    const swiper = this;
    const currentDirection = swiper.params.direction;
    if (!newDirection) {
      // eslint-disable-next-line
      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
    }
    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {
      return swiper;
    }

    swiper.$el
      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)
      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);

    swiper.params.direction = newDirection;

    swiper.slides.each((slideIndex, slideEl) => {
      if (newDirection === 'vertical') {
        slideEl.style.width = '';
      } else {
        slideEl.style.height = '';
      }
    });

    swiper.emit('changeDirection');
    if (needUpdate) swiper.update();

    return swiper;
  }

  init() {
    const swiper = this;
    if (swiper.initialized) return;

    swiper.emit('beforeInit');

    // Set breakpoint
    if (swiper.params.breakpoints) {
      swiper.setBreakpoint();
    }

    // Add Classes
    swiper.addClasses();

    // Create loop
    if (swiper.params.loop) {
      swiper.loopCreate();
    }

    // Update size
    swiper.updateSize();

    // Update slides
    swiper.updateSlides();

    if (swiper.params.watchOverflow) {
      swiper.checkOverflow();
    }

    // Set Grab Cursor
    if (swiper.params.grabCursor) {
      swiper.setGrabCursor();
    }

    if (swiper.params.preloadImages) {
      swiper.preloadImages();
    }

    // Slide To Initial Slide
    if (swiper.params.loop) {
      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
    } else {
      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
    }

    // Attach events
    swiper.attachEvents();

    // Init Flag
    swiper.initialized = true;

    // Emit
    swiper.emit('init');
  }

  destroy(deleteInstance = true, cleanStyles = true) {
    const swiper = this;
    const {
      params, $el, $wrapperEl, slides,
    } = swiper;

    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
      return null;
    }

    swiper.emit('beforeDestroy');

    // Init Flag
    swiper.initialized = false;

    // Detach events
    swiper.detachEvents();

    // Destroy loop
    if (params.loop) {
      swiper.loopDestroy();
    }

    // Cleanup styles
    if (cleanStyles) {
      swiper.removeClasses();
      $el.removeAttr('style');
      $wrapperEl.removeAttr('style');
      if (slides && slides.length) {
        slides
          .removeClass([
            params.slideVisibleClass,
            params.slideActiveClass,
            params.slideNextClass,
            params.slidePrevClass,
          ].join(' '))
          .removeAttr('style')
          .removeAttr('data-swiper-slide-index');
      }
    }

    swiper.emit('destroy');

    // Detach emitter events
    Object.keys(swiper.eventsListeners).forEach((eventName) => {
      swiper.off(eventName);
    });

    if (deleteInstance !== false) {
      swiper.$el[0].swiper = null;
      swiper.$el.data('swiper', null);
      Utils.deleteProps(swiper);
    }
    swiper.destroyed = true;

    return null;
  }

  static extendDefaults(newDefaults) {
    Utils.extend(extendedDefaults, newDefaults);
  }

  static get extendedDefaults() {
    return extendedDefaults;
  }

  static get defaults() {
    return defaults;
  }

  static get Class() {
    return SwiperClass;
  }

  static get $() {
    return $;
  }
}

var Device$1 = {
  name: 'device',
  proto: {
    device: Device,
  },
  static: {
    device: Device,
  },
};

var Support$1 = {
  name: 'support',
  proto: {
    support: Support,
  },
  static: {
    support: Support,
  },
};

const Browser = (function Browser() {
  function isSafari() {
    const ua = win.navigator.userAgent.toLowerCase();
    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
  }
  return {
    isEdge: !!win.navigator.userAgent.match(/Edge/g),
    isSafari: isSafari(),
    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),
  };
}());

var Browser$1 = {
  name: 'browser',
  proto: {
    browser: Browser,
  },
  static: {
    browser: Browser,
  },
};

var Resize = {
  name: 'resize',
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      resize: {
        resizeHandler() {
          if (!swiper || swiper.destroyed || !swiper.initialized) return;
          swiper.emit('beforeResize');
          swiper.emit('resize');
        },
        orientationChangeHandler() {
          if (!swiper || swiper.destroyed || !swiper.initialized) return;
          swiper.emit('orientationchange');
        },
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      // Emit resize
      win.addEventListener('resize', swiper.resize.resizeHandler);

      // Emit orientationchange
      win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
    },
    destroy() {
      const swiper = this;
      win.removeEventListener('resize', swiper.resize.resizeHandler);
      win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
    },
  },
};

const Observer = {
  func: win.MutationObserver || win.WebkitMutationObserver,
  attach(target, options = {}) {
    const swiper = this;

    const ObserverFunc = Observer.func;
    const observer = new ObserverFunc((mutations) => {
      // The observerUpdate event should only be triggered
      // once despite the number of mutations.  Additional
      // triggers are redundant and are very costly
      if (mutations.length === 1) {
        swiper.emit('observerUpdate', mutations[0]);
        return;
      }
      const observerUpdate = function observerUpdate() {
        swiper.emit('observerUpdate', mutations[0]);
      };

      if (win.requestAnimationFrame) {
        win.requestAnimationFrame(observerUpdate);
      } else {
        win.setTimeout(observerUpdate, 0);
      }
    });

    observer.observe(target, {
      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
      childList: typeof options.childList === 'undefined' ? true : options.childList,
      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
    });

    swiper.observer.observers.push(observer);
  },
  init() {
    const swiper = this;
    if (!Support.observer || !swiper.params.observer) return;
    if (swiper.params.observeParents) {
      const containerParents = swiper.$el.parents();
      for (let i = 0; i < containerParents.length; i += 1) {
        swiper.observer.attach(containerParents[i]);
      }
    }
    // Observe container
    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });

    // Observe wrapper
    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
  },
  destroy() {
    const swiper = this;
    swiper.observer.observers.forEach((observer) => {
      observer.disconnect();
    });
    swiper.observer.observers = [];
  },
};

var Observer$1 = {
  name: 'observer',
  params: {
    observer: false,
    observeParents: false,
    observeSlideChildren: false,
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      observer: {
        init: Observer.init.bind(swiper),
        attach: Observer.attach.bind(swiper),
        destroy: Observer.destroy.bind(swiper),
        observers: [],
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      swiper.observer.init();
    },
    destroy() {
      const swiper = this;
      swiper.observer.destroy();
    },
  },
};

const Virtual = {
  update(force) {
    const swiper = this;
    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;
    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;
    const {
      from: previousFrom,
      to: previousTo,
      slides,
      slidesGrid: previousSlidesGrid,
      renderSlide,
      offset: previousOffset,
    } = swiper.virtual;
    swiper.updateActiveIndex();
    const activeIndex = swiper.activeIndex || 0;

    let offsetProp;
    if (swiper.rtlTranslate) offsetProp = 'right';
    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';

    let slidesAfter;
    let slidesBefore;
    if (centeredSlides) {
      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
    } else {
      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
      slidesBefore = slidesPerGroup + addSlidesAfter;
    }
    const from = Math.max((activeIndex || 0) - slidesBefore, 0);
    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);

    Utils.extend(swiper.virtual, {
      from,
      to,
      offset,
      slidesGrid: swiper.slidesGrid,
    });

    function onRendered() {
      swiper.updateSlides();
      swiper.updateProgress();
      swiper.updateSlidesClasses();
      if (swiper.lazy && swiper.params.lazy.enabled) {
        swiper.lazy.load();
      }
    }

    if (previousFrom === from && previousTo === to && !force) {
      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
        swiper.slides.css(offsetProp, `${offset}px`);
      }
      swiper.updateProgress();
      return;
    }
    if (swiper.params.virtual.renderExternal) {
      swiper.params.virtual.renderExternal.call(swiper, {
        offset,
        from,
        to,
        slides: (function getSlides() {
          const slidesToRender = [];
          for (let i = from; i <= to; i += 1) {
            slidesToRender.push(slides[i]);
          }
          return slidesToRender;
        }()),
      });
      onRendered();
      return;
    }
    const prependIndexes = [];
    const appendIndexes = [];
    if (force) {
      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();
    } else {
      for (let i = previousFrom; i <= previousTo; i += 1) {
        if (i < from || i > to) {
          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove();
        }
      }
    }
    for (let i = 0; i < slides.length; i += 1) {
      if (i >= from && i <= to) {
        if (typeof previousTo === 'undefined' || force) {
          appendIndexes.push(i);
        } else {
          if (i > previousTo) appendIndexes.push(i);
          if (i < previousFrom) prependIndexes.push(i);
        }
      }
    }
    appendIndexes.forEach((index) => {
      swiper.$wrapperEl.append(renderSlide(slides[index], index));
    });
    prependIndexes.sort((a, b) => b - a).forEach((index) => {
      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
    });
    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);
    onRendered();
  },
  renderSlide(slide, index) {
    const swiper = this;
    const params = swiper.params.virtual;
    if (params.cache && swiper.virtual.cache[index]) {
      return swiper.virtual.cache[index];
    }
    const $slideEl = params.renderSlide
      ? $(params.renderSlide.call(swiper, slide, index))
      : $(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`);
    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
    if (params.cache) swiper.virtual.cache[index] = $slideEl;
    return $slideEl;
  },
  appendSlide(slides) {
    const swiper = this;
    if (typeof slides === 'object' && 'length' in slides) {
      for (let i = 0; i < slides.length; i += 1) {
        if (slides[i]) swiper.virtual.slides.push(slides[i]);
      }
    } else {
      swiper.virtual.slides.push(slides);
    }
    swiper.virtual.update(true);
  },
  prependSlide(slides) {
    const swiper = this;
    const activeIndex = swiper.activeIndex;
    let newActiveIndex = activeIndex + 1;
    let numberOfNewSlides = 1;

    if (Array.isArray(slides)) {
      for (let i = 0; i < slides.length; i += 1) {
        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
      }
      newActiveIndex = activeIndex + slides.length;
      numberOfNewSlides = slides.length;
    } else {
      swiper.virtual.slides.unshift(slides);
    }
    if (swiper.params.virtual.cache) {
      const cache = swiper.virtual.cache;
      const newCache = {};
      Object.keys(cache).forEach((cachedIndex) => {
        const $cachedEl = cache[cachedIndex];
        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
        if (cachedElIndex) {
          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
        }
        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
      });
      swiper.virtual.cache = newCache;
    }
    swiper.virtual.update(true);
    swiper.slideTo(newActiveIndex, 0);
  },
  removeSlide(slidesIndexes) {
    const swiper = this;
    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
    let activeIndex = swiper.activeIndex;
    if (Array.isArray(slidesIndexes)) {
      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
        swiper.virtual.slides.splice(slidesIndexes[i], 1);
        if (swiper.params.virtual.cache) {
          delete swiper.virtual.cache[slidesIndexes[i]];
        }
        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
        activeIndex = Math.max(activeIndex, 0);
      }
    } else {
      swiper.virtual.slides.splice(slidesIndexes, 1);
      if (swiper.params.virtual.cache) {
        delete swiper.virtual.cache[slidesIndexes];
      }
      if (slidesIndexes < activeIndex) activeIndex -= 1;
      activeIndex = Math.max(activeIndex, 0);
    }
    swiper.virtual.update(true);
    swiper.slideTo(activeIndex, 0);
  },
  removeAllSlides() {
    const swiper = this;
    swiper.virtual.slides = [];
    if (swiper.params.virtual.cache) {
      swiper.virtual.cache = {};
    }
    swiper.virtual.update(true);
    swiper.slideTo(0, 0);
  },
};

var Virtual$1 = {
  name: 'virtual',
  params: {
    virtual: {
      enabled: false,
      slides: [],
      cache: true,
      renderSlide: null,
      renderExternal: null,
      addSlidesBefore: 0,
      addSlidesAfter: 0,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      virtual: {
        update: Virtual.update.bind(swiper),
        appendSlide: Virtual.appendSlide.bind(swiper),
        prependSlide: Virtual.prependSlide.bind(swiper),
        removeSlide: Virtual.removeSlide.bind(swiper),
        removeAllSlides: Virtual.removeAllSlides.bind(swiper),
        renderSlide: Virtual.renderSlide.bind(swiper),
        slides: swiper.params.virtual.slides,
        cache: {},
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (!swiper.params.virtual.enabled) return;
      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
      const overwriteParams = {
        watchSlidesProgress: true,
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);

      if (!swiper.params.initialSlide) {
        swiper.virtual.update();
      }
    },
    setTranslate() {
      const swiper = this;
      if (!swiper.params.virtual.enabled) return;
      swiper.virtual.update();
    },
  },
};

const Keyboard = {
  handle(event) {
    const swiper = this;
    const { rtlTranslate: rtl } = swiper;
    let e = event;
    if (e.originalEvent) e = e.originalEvent; // jquery fix
    const kc = e.keyCode || e.charCode;
    const pageUpDown = swiper.params.keyboard.pageUpDown;
    const isPageUp = pageUpDown && kc === 33;
    const isPageDown = pageUpDown && kc === 34;
    const isArrowLeft = kc === 37;
    const isArrowRight = kc === 39;
    const isArrowUp = kc === 38;
    const isArrowDown = kc === 40;
    // Directions locks
    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && isArrowRight) || (swiper.isVertical() && isArrowDown) || isPageDown)) {
      return false;
    }
    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)) {
      return false;
    }
    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
      return undefined;
    }
    if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
      return undefined;
    }
    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
      let inView = false;
      // Check that swiper should be inside of visible area of window
      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {
        return undefined;
      }
      const windowWidth = win.innerWidth;
      const windowHeight = win.innerHeight;
      const swiperOffset = swiper.$el.offset();
      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
      const swiperCoord = [
        [swiperOffset.left, swiperOffset.top],
        [swiperOffset.left + swiper.width, swiperOffset.top],
        [swiperOffset.left, swiperOffset.top + swiper.height],
        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],
      ];
      for (let i = 0; i < swiperCoord.length; i += 1) {
        const point = swiperCoord[i];
        if (
          point[0] >= 0 && point[0] <= windowWidth
          && point[1] >= 0 && point[1] <= windowHeight
        ) {
          inView = true;
        }
      }
      if (!inView) return undefined;
    }
    if (swiper.isHorizontal()) {
      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
        if (e.preventDefault) e.preventDefault();
        else e.returnValue = false;
      }
      if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl)) swiper.slideNext();
      if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl)) swiper.slidePrev();
    } else {
      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
        if (e.preventDefault) e.preventDefault();
        else e.returnValue = false;
      }
      if (isPageDown || isArrowDown) swiper.slideNext();
      if (isPageUp || isArrowUp) swiper.slidePrev();
    }
    swiper.emit('keyPress', kc);
    return undefined;
  },
  enable() {
    const swiper = this;
    if (swiper.keyboard.enabled) return;
    $(doc).on('keydown', swiper.keyboard.handle);
    swiper.keyboard.enabled = true;
  },
  disable() {
    const swiper = this;
    if (!swiper.keyboard.enabled) return;
    $(doc).off('keydown', swiper.keyboard.handle);
    swiper.keyboard.enabled = false;
  },
};

var Keyboard$1 = {
  name: 'keyboard',
  params: {
    keyboard: {
      enabled: false,
      onlyInViewport: true,
      pageUpDown: true,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      keyboard: {
        enabled: false,
        enable: Keyboard.enable.bind(swiper),
        disable: Keyboard.disable.bind(swiper),
        handle: Keyboard.handle.bind(swiper),
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      if (swiper.params.keyboard.enabled) {
        swiper.keyboard.enable();
      }
    },
    destroy() {
      const swiper = this;
      if (swiper.keyboard.enabled) {
        swiper.keyboard.disable();
      }
    },
  },
};

function isEventSupported() {
  const eventName = 'onwheel';
  let isSupported = eventName in doc;

  if (!isSupported) {
    const element = doc.createElement('div');
    element.setAttribute(eventName, 'return;');
    isSupported = typeof element[eventName] === 'function';
  }

  if (!isSupported
    && doc.implementation
    && doc.implementation.hasFeature
    // always returns true in newer browsers as per the standard.
    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
    && doc.implementation.hasFeature('', '') !== true
  ) {
    // This is the only way to test support for the `wheel` event in IE9+.
    isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
  }

  return isSupported;
}
const Mousewheel = {
  lastScrollTime: Utils.now(),
  lastEventBeforeSnap: undefined,
  recentWheelEvents: [],
  event() {
    if (win.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
    return isEventSupported() ? 'wheel' : 'mousewheel';
  },
  normalize(e) {
    // Reasonable defaults
    const PIXEL_STEP = 10;
    const LINE_HEIGHT = 40;
    const PAGE_HEIGHT = 800;

    let sX = 0;
    let sY = 0; // spinX, spinY
    let pX = 0;
    let pY = 0; // pixelX, pixelY

    // Legacy
    if ('detail' in e) {
      sY = e.detail;
    }
    if ('wheelDelta' in e) {
      sY = -e.wheelDelta / 120;
    }
    if ('wheelDeltaY' in e) {
      sY = -e.wheelDeltaY / 120;
    }
    if ('wheelDeltaX' in e) {
      sX = -e.wheelDeltaX / 120;
    }

    // side scrolling on FF with DOMMouseScroll
    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
      sX = sY;
      sY = 0;
    }

    pX = sX * PIXEL_STEP;
    pY = sY * PIXEL_STEP;

    if ('deltaY' in e) {
      pY = e.deltaY;
    }
    if ('deltaX' in e) {
      pX = e.deltaX;
    }

    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll
      pX = pY;
      pY = 0;
    }

    if ((pX || pY) && e.deltaMode) {
      if (e.deltaMode === 1) { // delta in LINE units
        pX *= LINE_HEIGHT;
        pY *= LINE_HEIGHT;
      } else { // delta in PAGE units
        pX *= PAGE_HEIGHT;
        pY *= PAGE_HEIGHT;
      }
    }

    // Fall-back if spin cannot be determined
    if (pX && !sX) {
      sX = (pX < 1) ? -1 : 1;
    }
    if (pY && !sY) {
      sY = (pY < 1) ? -1 : 1;
    }

    return {
      spinX: sX,
      spinY: sY,
      pixelX: pX,
      pixelY: pY,
    };
  },
  handleMouseEnter() {
    const swiper = this;
    swiper.mouseEntered = true;
  },
  handleMouseLeave() {
    const swiper = this;
    swiper.mouseEntered = false;
  },
  handle(event) {
    let e = event;
    const swiper = this;
    const params = swiper.params.mousewheel;

    if (swiper.params.cssMode) {
      e.preventDefault();
    }

    let target = swiper.$el;
    if (swiper.params.mousewheel.eventsTarged !== 'container') {
      target = $(swiper.params.mousewheel.eventsTarged);
    }
    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;

    if (e.originalEvent) e = e.originalEvent; // jquery fix
    let delta = 0;
    const rtlFactor = swiper.rtlTranslate ? -1 : 1;

    const data = Mousewheel.normalize(e);

    if (params.forceToAxis) {
      if (swiper.isHorizontal()) {
        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;
        else return true;
      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;
      else return true;
    } else {
      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
    }

    if (delta === 0) return true;

    if (params.invert) delta = -delta;

    if (!swiper.params.freeMode) {
      // Register the new event in a variable which stores the relevant data
      const newEvent = {
        time: Utils.now(),
        delta: Math.abs(delta),
        direction: Math.sign(delta),
        raw: event,
      };

      // Keep the most recent events
      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
      if (recentWheelEvents.length >= 2) {
        recentWheelEvents.shift(); // only store the last N events
      }
      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
      recentWheelEvents.push(newEvent);

      // If there is at least one previous recorded event:
      //   If direction has changed or
      //   if the scroll is quicker than the previous one:
      //     Animate the slider.
      // Else (this is the first time the wheel is moved):
      //     Animate the slider.
      if (prevEvent) {
        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
          swiper.mousewheel.animateSlider(newEvent);
        }
      } else {
        swiper.mousewheel.animateSlider(newEvent);
      }

      // If it's time to release the scroll:
      //   Return now so you don't hit the preventDefault.
      if (swiper.mousewheel.releaseScroll(newEvent)) {
        return true;
      }
    } else {
      // Freemode or scrollContainer:

      // If we recently snapped after a momentum scroll, then ignore wheel events
      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
      // or if it's a new scroll (larger delta or inverse sign as last event before
      // an end-of-momentum snap).
      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };
      const { lastEventBeforeSnap } = swiper.mousewheel;
      const ignoreWheelEvents = lastEventBeforeSnap
        && newEvent.time < lastEventBeforeSnap.time + 500
        && newEvent.delta <= lastEventBeforeSnap.delta
        && newEvent.direction === lastEventBeforeSnap.direction;
      if (!ignoreWheelEvents) {
        swiper.mousewheel.lastEventBeforeSnap = undefined;

        if (swiper.params.loop) {
          swiper.loopFix();
        }
        let position = swiper.getTranslate() + (delta * params.sensitivity);
        const wasBeginning = swiper.isBeginning;
        const wasEnd = swiper.isEnd;

        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();

        swiper.setTransition(0);
        swiper.setTranslate(position);
        swiper.updateProgress();
        swiper.updateActiveIndex();
        swiper.updateSlidesClasses();

        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
          swiper.updateSlidesClasses();
        }

        if (swiper.params.freeModeSticky) {
          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
          // the end of a momentum scroll by storing recent (N=15?) wheel events.
          // 1. do all N events have decreasing or same (absolute value) delta?
          // 2. did all N events arrive in the last M (M=500?) msecs?
          // 3. does the earliest event have an (absolute value) delta that's
          //    at least P (P=1?) larger than the most recent event's delta?
          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
          // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
          // Snap immediately and ignore remaining wheel events in this scroll.
          // See comment above for "remaining wheel events in this scroll" determination.
          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
          clearTimeout(swiper.mousewheel.timeout);
          swiper.mousewheel.timeout = undefined;
          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
          if (recentWheelEvents.length >= 15) {
            recentWheelEvents.shift(); // only store the last N events
          }
          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
          const firstEvent = recentWheelEvents[0];
          recentWheelEvents.push(newEvent);
          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
            recentWheelEvents.splice(0);
          } else if (recentWheelEvents.length >= 15
              && newEvent.time - firstEvent.time < 500
              && firstEvent.delta - newEvent.delta >= 1
              && newEvent.delta <= 6
          ) {
            // We're at the end of the deceleration of a momentum scroll, so there's no need
            // to wait for more events. Snap ASAP on the next tick.
            // Also, because there's some remaining momentum we'll bias the snap in the
            // direction of the ongoing scroll because it's better UX for the scroll to snap
            // in the same direction as the scroll instead of reversing to snap.  Therefore,
            // if it's already scrolled more than 20% in the current direction, keep going.
            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
            swiper.mousewheel.lastEventBeforeSnap = newEvent;
            recentWheelEvents.splice(0);
            swiper.mousewheel.timeout = Utils.nextTick(() => {
              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
            }, 0); // no delay; move on next tick
          }
          if (!swiper.mousewheel.timeout) {
            // if we get here, then we haven't detected the end of a momentum scroll, so
            // we'll consider a scroll "complete" when there haven't been any wheel events
            // for 500ms.
            swiper.mousewheel.timeout = Utils.nextTick(() => {
              const snapToThreshold = 0.5;
              swiper.mousewheel.lastEventBeforeSnap = newEvent;
              recentWheelEvents.splice(0);
              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
            }, 500);
          }
        }

        // Emit event
        if (!ignoreWheelEvents) swiper.emit('scroll', e);

        // Stop autoplay
        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
        // Return page scroll on edge positions
        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
      }
    }

    if (e.preventDefault) e.preventDefault();
    else e.returnValue = false;
    return false;
  },
  animateSlider(newEvent) {
    const swiper = this;
    // If the movement is NOT big enough and
    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
    //   Don't go any further (avoid insignificant scroll movement).
    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
      // Return false as a default
      return true;
    }
    // If user is scrolling towards the end:
    //   If the slider hasn't hit the latest slide or
    //   if the slider is a loop and
    //   if the slider isn't moving right now:
    //     Go to next slide and
    //     emit a scroll event.
    // Else (the user is scrolling towards the beginning) and
    // if the slider hasn't hit the first slide or
    // if the slider is a loop and
    // if the slider isn't moving right now:
    //   Go to prev slide and
    //   emit a scroll event.
    if (newEvent.direction < 0) {
      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
        swiper.slideNext();
        swiper.emit('scroll', newEvent.raw);
      }
    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
      swiper.slidePrev();
      swiper.emit('scroll', newEvent.raw);
    }
    // If you got here is because an animation has been triggered so store the current time
    swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();
    // Return false as a default
    return false;
  },
  releaseScroll(newEvent) {
    const swiper = this;
    const params = swiper.params.mousewheel;
    if (newEvent.direction < 0) {
      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
        // Return true to animate scroll on edges
        return true;
      }
    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
      // Return true to animate scroll on edges
      return true;
    }
    return false;
  },
  enable() {
    const swiper = this;
    const event = Mousewheel.event();
    if (swiper.params.cssMode) {
      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
      return true;
    }
    if (!event) return false;
    if (swiper.mousewheel.enabled) return false;
    let target = swiper.$el;
    if (swiper.params.mousewheel.eventsTarged !== 'container') {
      target = $(swiper.params.mousewheel.eventsTarged);
    }
    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
    target.on(event, swiper.mousewheel.handle);
    swiper.mousewheel.enabled = true;
    return true;
  },
  disable() {
    const swiper = this;
    const event = Mousewheel.event();
    if (swiper.params.cssMode) {
      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
      return true;
    }
    if (!event) return false;
    if (!swiper.mousewheel.enabled) return false;
    let target = swiper.$el;
    if (swiper.params.mousewheel.eventsTarged !== 'container') {
      target = $(swiper.params.mousewheel.eventsTarged);
    }
    target.off(event, swiper.mousewheel.handle);
    swiper.mousewheel.enabled = false;
    return true;
  },
};

var Mousewheel$1 = {
  name: 'mousewheel',
  params: {
    mousewheel: {
      enabled: false,
      releaseOnEdges: false,
      invert: false,
      forceToAxis: false,
      sensitivity: 1,
      eventsTarged: 'container',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      mousewheel: {
        enabled: false,
        enable: Mousewheel.enable.bind(swiper),
        disable: Mousewheel.disable.bind(swiper),
        handle: Mousewheel.handle.bind(swiper),
        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
        animateSlider: Mousewheel.animateSlider.bind(swiper),
        releaseScroll: Mousewheel.releaseScroll.bind(swiper),
        lastScrollTime: Utils.now(),
        lastEventBeforeSnap: undefined,
        recentWheelEvents: [],
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
        swiper.mousewheel.disable();
      }
      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
    },
    destroy() {
      const swiper = this;
      if (swiper.params.cssMode) {
        swiper.mousewheel.enable();
      }
      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
    },
  },
};

const Navigation = {
  update() {
    // Update Navigation Buttons
    const swiper = this;
    const params = swiper.params.navigation;

    if (swiper.params.loop) return;
    const { $nextEl, $prevEl } = swiper.navigation;

    if ($prevEl && $prevEl.length > 0) {
      if (swiper.isBeginning) {
        $prevEl.addClass(params.disabledClass);
      } else {
        $prevEl.removeClass(params.disabledClass);
      }
      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
    }
    if ($nextEl && $nextEl.length > 0) {
      if (swiper.isEnd) {
        $nextEl.addClass(params.disabledClass);
      } else {
        $nextEl.removeClass(params.disabledClass);
      }
      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
    }
  },
  onPrevClick(e) {
    const swiper = this;
    e.preventDefault();
    if (swiper.isBeginning && !swiper.params.loop) return;
    swiper.slidePrev();
  },
  onNextClick(e) {
    const swiper = this;
    e.preventDefault();
    if (swiper.isEnd && !swiper.params.loop) return;
    swiper.slideNext();
  },
  init() {
    const swiper = this;
    const params = swiper.params.navigation;
    if (!(params.nextEl || params.prevEl)) return;

    let $nextEl;
    let $prevEl;
    if (params.nextEl) {
      $nextEl = $(params.nextEl);
      if (
        swiper.params.uniqueNavElements
        && typeof params.nextEl === 'string'
        && $nextEl.length > 1
        && swiper.$el.find(params.nextEl).length === 1
      ) {
        $nextEl = swiper.$el.find(params.nextEl);
      }
    }
    if (params.prevEl) {
      $prevEl = $(params.prevEl);
      if (
        swiper.params.uniqueNavElements
        && typeof params.prevEl === 'string'
        && $prevEl.length > 1
        && swiper.$el.find(params.prevEl).length === 1
      ) {
        $prevEl = swiper.$el.find(params.prevEl);
      }
    }

    if ($nextEl && $nextEl.length > 0) {
      $nextEl.on('click', swiper.navigation.onNextClick);
    }
    if ($prevEl && $prevEl.length > 0) {
      $prevEl.on('click', swiper.navigation.onPrevClick);
    }

    Utils.extend(swiper.navigation, {
      $nextEl,
      nextEl: $nextEl && $nextEl[0],
      $prevEl,
      prevEl: $prevEl && $prevEl[0],
    });
  },
  destroy() {
    const swiper = this;
    const { $nextEl, $prevEl } = swiper.navigation;
    if ($nextEl && $nextEl.length) {
      $nextEl.off('click', swiper.navigation.onNextClick);
      $nextEl.removeClass(swiper.params.navigation.disabledClass);
    }
    if ($prevEl && $prevEl.length) {
      $prevEl.off('click', swiper.navigation.onPrevClick);
      $prevEl.removeClass(swiper.params.navigation.disabledClass);
    }
  },
};

var Navigation$1 = {
  name: 'navigation',
  params: {
    navigation: {
      nextEl: null,
      prevEl: null,

      hideOnClick: false,
      disabledClass: 'swiper-button-disabled',
      hiddenClass: 'swiper-button-hidden',
      lockClass: 'swiper-button-lock',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      navigation: {
        init: Navigation.init.bind(swiper),
        update: Navigation.update.bind(swiper),
        destroy: Navigation.destroy.bind(swiper),
        onNextClick: Navigation.onNextClick.bind(swiper),
        onPrevClick: Navigation.onPrevClick.bind(swiper),
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      swiper.navigation.init();
      swiper.navigation.update();
    },
    toEdge() {
      const swiper = this;
      swiper.navigation.update();
    },
    fromEdge() {
      const swiper = this;
      swiper.navigation.update();
    },
    destroy() {
      const swiper = this;
      swiper.navigation.destroy();
    },
    click(e) {
      const swiper = this;
      const { $nextEl, $prevEl } = swiper.navigation;
      if (
        swiper.params.navigation.hideOnClick
        && !$(e.target).is($prevEl)
        && !$(e.target).is($nextEl)
      ) {
        let isHidden;
        if ($nextEl) {
          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
        } else if ($prevEl) {
          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
        }
        if (isHidden === true) {
          swiper.emit('navigationShow', swiper);
        } else {
          swiper.emit('navigationHide', swiper);
        }
        if ($nextEl) {
          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
        }
        if ($prevEl) {
          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
        }
      }
    },
  },
};

const Pagination = {
  update() {
    // Render || Update Pagination bullets/items
    const swiper = this;
    const rtl = swiper.rtl;
    const params = swiper.params.pagination;
    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
    const $el = swiper.pagination.$el;
    // Current/Total
    let current;
    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
    if (swiper.params.loop) {
      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
        current -= (slidesLength - (swiper.loopedSlides * 2));
      }
      if (current > total - 1) current -= total;
      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
    } else if (typeof swiper.snapIndex !== 'undefined') {
      current = swiper.snapIndex;
    } else {
      current = swiper.activeIndex || 0;
    }
    // Types
    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
      const bullets = swiper.pagination.bullets;
      let firstIndex;
      let lastIndex;
      let midIndex;
      if (params.dynamicBullets) {
        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);
        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
          } else if (swiper.pagination.dynamicBulletIndex < 0) {
            swiper.pagination.dynamicBulletIndex = 0;
          }
        }
        firstIndex = current - swiper.pagination.dynamicBulletIndex;
        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
        midIndex = (lastIndex + firstIndex) / 2;
      }
      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);
      if ($el.length > 1) {
        bullets.each((index, bullet) => {
          const $bullet = $(bullet);
          const bulletIndex = $bullet.index();
          if (bulletIndex === current) {
            $bullet.addClass(params.bulletActiveClass);
          }
          if (params.dynamicBullets) {
            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
              $bullet.addClass(`${params.bulletActiveClass}-main`);
            }
            if (bulletIndex === firstIndex) {
              $bullet
                .prev()
                .addClass(`${params.bulletActiveClass}-prev`)
                .prev()
                .addClass(`${params.bulletActiveClass}-prev-prev`);
            }
            if (bulletIndex === lastIndex) {
              $bullet
                .next()
                .addClass(`${params.bulletActiveClass}-next`)
                .next()
                .addClass(`${params.bulletActiveClass}-next-next`);
            }
          }
        });
      } else {
        const $bullet = bullets.eq(current);
        const bulletIndex = $bullet.index();
        $bullet.addClass(params.bulletActiveClass);
        if (params.dynamicBullets) {
          const $firstDisplayedBullet = bullets.eq(firstIndex);
          const $lastDisplayedBullet = bullets.eq(lastIndex);
          for (let i = firstIndex; i <= lastIndex; i += 1) {
            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);
          }
          if (swiper.params.loop) {
            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {
                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);
              }
              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);
            } else {
              $firstDisplayedBullet
                .prev()
                .addClass(`${params.bulletActiveClass}-prev`)
                .prev()
                .addClass(`${params.bulletActiveClass}-prev-prev`);
              $lastDisplayedBullet
                .next()
                .addClass(`${params.bulletActiveClass}-next`)
                .next()
                .addClass(`${params.bulletActiveClass}-next-next`);
            }
          } else {
            $firstDisplayedBullet
              .prev()
              .addClass(`${params.bulletActiveClass}-prev`)
              .prev()
              .addClass(`${params.bulletActiveClass}-prev-prev`);
            $lastDisplayedBullet
              .next()
              .addClass(`${params.bulletActiveClass}-next`)
              .next()
              .addClass(`${params.bulletActiveClass}-next-next`);
          }
        }
      }
      if (params.dynamicBullets) {
        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
        const offsetProp = rtl ? 'right' : 'left';
        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);
      }
    }
    if (params.type === 'fraction') {
      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));
      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));
    }
    if (params.type === 'progressbar') {
      let progressbarDirection;
      if (params.progressbarOpposite) {
        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
      } else {
        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
      }
      const scale = (current + 1) / total;
      let scaleX = 1;
      let scaleY = 1;
      if (progressbarDirection === 'horizontal') {
        scaleX = scale;
      } else {
        scaleY = scale;
      }
      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);
    }
    if (params.type === 'custom' && params.renderCustom) {
      $el.html(params.renderCustom(swiper, current + 1, total));
      swiper.emit('paginationRender', swiper, $el[0]);
    } else {
      swiper.emit('paginationUpdate', swiper, $el[0]);
    }
    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
  },
  render() {
    // Render Container
    const swiper = this;
    const params = swiper.params.pagination;
    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;

    const $el = swiper.pagination.$el;
    let paginationHTML = '';
    if (params.type === 'bullets') {
      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
      for (let i = 0; i < numberOfBullets; i += 1) {
        if (params.renderBullet) {
          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
        } else {
          paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`;
        }
      }
      $el.html(paginationHTML);
      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);
    }
    if (params.type === 'fraction') {
      if (params.renderFraction) {
        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
      } else {
        paginationHTML = `<span class="${params.currentClass}"></span>`
        + ' / '
        + `<span class="${params.totalClass}"></span>`;
      }
      $el.html(paginationHTML);
    }
    if (params.type === 'progressbar') {
      if (params.renderProgressbar) {
        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
      } else {
        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
      }
      $el.html(paginationHTML);
    }
    if (params.type !== 'custom') {
      swiper.emit('paginationRender', swiper.pagination.$el[0]);
    }
  },
  init() {
    const swiper = this;
    const params = swiper.params.pagination;
    if (!params.el) return;

    let $el = $(params.el);
    if ($el.length === 0) return;

    if (
      swiper.params.uniqueNavElements
      && typeof params.el === 'string'
      && $el.length > 1
    ) {
      $el = swiper.$el.find(params.el);
    }

    if (params.type === 'bullets' && params.clickable) {
      $el.addClass(params.clickableClass);
    }

    $el.addClass(params.modifierClass + params.type);

    if (params.type === 'bullets' && params.dynamicBullets) {
      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);
      swiper.pagination.dynamicBulletIndex = 0;
      if (params.dynamicMainBullets < 1) {
        params.dynamicMainBullets = 1;
      }
    }
    if (params.type === 'progressbar' && params.progressbarOpposite) {
      $el.addClass(params.progressbarOppositeClass);
    }

    if (params.clickable) {
      $el.on('click', `.${params.bulletClass}`, function onClick(e) {
        e.preventDefault();
        let index = $(this).index() * swiper.params.slidesPerGroup;
        if (swiper.params.loop) index += swiper.loopedSlides;
        swiper.slideTo(index);
      });
    }

    Utils.extend(swiper.pagination, {
      $el,
      el: $el[0],
    });
  },
  destroy() {
    const swiper = this;
    const params = swiper.params.pagination;
    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
    const $el = swiper.pagination.$el;

    $el.removeClass(params.hiddenClass);
    $el.removeClass(params.modifierClass + params.type);
    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
    if (params.clickable) {
      $el.off('click', `.${params.bulletClass}`);
    }
  },
};

var Pagination$1 = {
  name: 'pagination',
  params: {
    pagination: {
      el: null,
      bulletElement: 'span',
      clickable: false,
      hideOnClick: false,
      renderBullet: null,
      renderProgressbar: null,
      renderFraction: null,
      renderCustom: null,
      progressbarOpposite: false,
      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
      dynamicBullets: false,
      dynamicMainBullets: 1,
      formatFractionCurrent: (number) => number,
      formatFractionTotal: (number) => number,
      bulletClass: 'swiper-pagination-bullet',
      bulletActiveClass: 'swiper-pagination-bullet-active',
      modifierClass: 'swiper-pagination-', // NEW
      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', // NEW
      lockClass: 'swiper-pagination-lock',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      pagination: {
        init: Pagination.init.bind(swiper),
        render: Pagination.render.bind(swiper),
        update: Pagination.update.bind(swiper),
        destroy: Pagination.destroy.bind(swiper),
        dynamicBulletIndex: 0,
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      swiper.pagination.init();
      swiper.pagination.render();
      swiper.pagination.update();
    },
    activeIndexChange() {
      const swiper = this;
      if (swiper.params.loop) {
        swiper.pagination.update();
      } else if (typeof swiper.snapIndex === 'undefined') {
        swiper.pagination.update();
      }
    },
    snapIndexChange() {
      const swiper = this;
      if (!swiper.params.loop) {
        swiper.pagination.update();
      }
    },
    slidesLengthChange() {
      const swiper = this;
      if (swiper.params.loop) {
        swiper.pagination.render();
        swiper.pagination.update();
      }
    },
    snapGridLengthChange() {
      const swiper = this;
      if (!swiper.params.loop) {
        swiper.pagination.render();
        swiper.pagination.update();
      }
    },
    destroy() {
      const swiper = this;
      swiper.pagination.destroy();
    },
    click(e) {
      const swiper = this;
      if (
        swiper.params.pagination.el
        && swiper.params.pagination.hideOnClick
        && swiper.pagination.$el.length > 0
        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
      ) {
        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
        if (isHidden === true) {
          swiper.emit('paginationShow', swiper);
        } else {
          swiper.emit('paginationHide', swiper);
        }
        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
      }
    },
  },
};

const Scrollbar = {
  setTranslate() {
    const swiper = this;
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    const { scrollbar, rtlTranslate: rtl, progress } = swiper;
    const {
      dragSize, trackSize, $dragEl, $el,
    } = scrollbar;
    const params = swiper.params.scrollbar;

    let newSize = dragSize;
    let newPos = (trackSize - dragSize) * progress;
    if (rtl) {
      newPos = -newPos;
      if (newPos > 0) {
        newSize = dragSize - newPos;
        newPos = 0;
      } else if (-newPos + dragSize > trackSize) {
        newSize = trackSize + newPos;
      }
    } else if (newPos < 0) {
      newSize = dragSize + newPos;
      newPos = 0;
    } else if (newPos + dragSize > trackSize) {
      newSize = trackSize - newPos;
    }
    if (swiper.isHorizontal()) {
      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);
      $dragEl[0].style.width = `${newSize}px`;
    } else {
      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);
      $dragEl[0].style.height = `${newSize}px`;
    }
    if (params.hide) {
      clearTimeout(swiper.scrollbar.timeout);
      $el[0].style.opacity = 1;
      swiper.scrollbar.timeout = setTimeout(() => {
        $el[0].style.opacity = 0;
        $el.transition(400);
      }, 1000);
    }
  },
  setTransition(duration) {
    const swiper = this;
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    swiper.scrollbar.$dragEl.transition(duration);
  },
  updateSize() {
    const swiper = this;
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;

    const { scrollbar } = swiper;
    const { $dragEl, $el } = scrollbar;

    $dragEl[0].style.width = '';
    $dragEl[0].style.height = '';
    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;

    const divider = swiper.size / swiper.virtualSize;
    const moveDivider = divider * (trackSize / swiper.size);
    let dragSize;
    if (swiper.params.scrollbar.dragSize === 'auto') {
      dragSize = trackSize * divider;
    } else {
      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
    }

    if (swiper.isHorizontal()) {
      $dragEl[0].style.width = `${dragSize}px`;
    } else {
      $dragEl[0].style.height = `${dragSize}px`;
    }

    if (divider >= 1) {
      $el[0].style.display = 'none';
    } else {
      $el[0].style.display = '';
    }
    if (swiper.params.scrollbar.hide) {
      $el[0].style.opacity = 0;
    }
    Utils.extend(scrollbar, {
      trackSize,
      divider,
      moveDivider,
      dragSize,
    });
    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
  },
  getPointerPosition(e) {
    const swiper = this;
    if (swiper.isHorizontal()) {
      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);
    }
    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);
  },
  setDragPosition(e) {
    const swiper = this;
    const { scrollbar, rtlTranslate: rtl } = swiper;
    const {
      $el,
      dragSize,
      trackSize,
      dragStartPos,
    } = scrollbar;

    let positionRatio;
    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']
      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
    if (rtl) {
      positionRatio = 1 - positionRatio;
    }

    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);

    swiper.updateProgress(position);
    swiper.setTranslate(position);
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  },
  onDragStart(e) {
    const swiper = this;
    const params = swiper.params.scrollbar;
    const { scrollbar, $wrapperEl } = swiper;
    const { $el, $dragEl } = scrollbar;
    swiper.scrollbar.isTouched = true;
    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)
      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
    e.preventDefault();
    e.stopPropagation();

    $wrapperEl.transition(100);
    $dragEl.transition(100);
    scrollbar.setDragPosition(e);

    clearTimeout(swiper.scrollbar.dragTimeout);

    $el.transition(0);
    if (params.hide) {
      $el.css('opacity', 1);
    }
    if (swiper.params.cssMode) {
      swiper.$wrapperEl.css('scroll-snap-type', 'none');
    }
    swiper.emit('scrollbarDragStart', e);
  },
  onDragMove(e) {
    const swiper = this;
    const { scrollbar, $wrapperEl } = swiper;
    const { $el, $dragEl } = scrollbar;

    if (!swiper.scrollbar.isTouched) return;
    if (e.preventDefault) e.preventDefault();
    else e.returnValue = false;
    scrollbar.setDragPosition(e);
    $wrapperEl.transition(0);
    $el.transition(0);
    $dragEl.transition(0);
    swiper.emit('scrollbarDragMove', e);
  },
  onDragEnd(e) {
    const swiper = this;

    const params = swiper.params.scrollbar;
    const { scrollbar, $wrapperEl } = swiper;
    const { $el } = scrollbar;

    if (!swiper.scrollbar.isTouched) return;
    swiper.scrollbar.isTouched = false;
    if (swiper.params.cssMode) {
      swiper.$wrapperEl.css('scroll-snap-type', '');
      $wrapperEl.transition('');
    }
    if (params.hide) {
      clearTimeout(swiper.scrollbar.dragTimeout);
      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {
        $el.css('opacity', 0);
        $el.transition(400);
      }, 1000);
    }
    swiper.emit('scrollbarDragEnd', e);
    if (params.snapOnRelease) {
      swiper.slideToClosest();
    }
  },
  enableDraggable() {
    const swiper = this;
    if (!swiper.params.scrollbar.el) return;
    const {
      scrollbar, touchEventsTouch, touchEventsDesktop, params,
    } = swiper;
    const $el = scrollbar.$el;
    const target = $el[0];
    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
    if (!Support.touch) {
      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
      doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
      doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
    } else {
      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
    }
  },
  disableDraggable() {
    const swiper = this;
    if (!swiper.params.scrollbar.el) return;
    const {
      scrollbar, touchEventsTouch, touchEventsDesktop, params,
    } = swiper;
    const $el = scrollbar.$el;
    const target = $el[0];
    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
    if (!Support.touch) {
      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
      doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
      doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
    } else {
      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
    }
  },
  init() {
    const swiper = this;
    if (!swiper.params.scrollbar.el) return;
    const { scrollbar, $el: $swiperEl } = swiper;
    const params = swiper.params.scrollbar;

    let $el = $(params.el);
    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
      $el = $swiperEl.find(params.el);
    }

    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);
    if ($dragEl.length === 0) {
      $dragEl = $(`<div class="${swiper.params.scrollbar.dragClass}"></div>`);
      $el.append($dragEl);
    }

    Utils.extend(scrollbar, {
      $el,
      el: $el[0],
      $dragEl,
      dragEl: $dragEl[0],
    });

    if (params.draggable) {
      scrollbar.enableDraggable();
    }
  },
  destroy() {
    const swiper = this;
    swiper.scrollbar.disableDraggable();
  },
};

var Scrollbar$1 = {
  name: 'scrollbar',
  params: {
    scrollbar: {
      el: null,
      dragSize: 'auto',
      hide: false,
      draggable: false,
      snapOnRelease: true,
      lockClass: 'swiper-scrollbar-lock',
      dragClass: 'swiper-scrollbar-drag',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      scrollbar: {
        init: Scrollbar.init.bind(swiper),
        destroy: Scrollbar.destroy.bind(swiper),
        updateSize: Scrollbar.updateSize.bind(swiper),
        setTranslate: Scrollbar.setTranslate.bind(swiper),
        setTransition: Scrollbar.setTransition.bind(swiper),
        enableDraggable: Scrollbar.enableDraggable.bind(swiper),
        disableDraggable: Scrollbar.disableDraggable.bind(swiper),
        setDragPosition: Scrollbar.setDragPosition.bind(swiper),
        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
        onDragStart: Scrollbar.onDragStart.bind(swiper),
        onDragMove: Scrollbar.onDragMove.bind(swiper),
        onDragEnd: Scrollbar.onDragEnd.bind(swiper),
        isTouched: false,
        timeout: null,
        dragTimeout: null,
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      swiper.scrollbar.init();
      swiper.scrollbar.updateSize();
      swiper.scrollbar.setTranslate();
    },
    update() {
      const swiper = this;
      swiper.scrollbar.updateSize();
    },
    resize() {
      const swiper = this;
      swiper.scrollbar.updateSize();
    },
    observerUpdate() {
      const swiper = this;
      swiper.scrollbar.updateSize();
    },
    setTranslate() {
      const swiper = this;
      swiper.scrollbar.setTranslate();
    },
    setTransition(duration) {
      const swiper = this;
      swiper.scrollbar.setTransition(duration);
    },
    destroy() {
      const swiper = this;
      swiper.scrollbar.destroy();
    },
  },
};

const Parallax = {
  setTransform(el, progress) {
    const swiper = this;
    const { rtl } = swiper;

    const $el = $(el);
    const rtlFactor = rtl ? -1 : 1;

    const p = $el.attr('data-swiper-parallax') || '0';
    let x = $el.attr('data-swiper-parallax-x');
    let y = $el.attr('data-swiper-parallax-y');
    const scale = $el.attr('data-swiper-parallax-scale');
    const opacity = $el.attr('data-swiper-parallax-opacity');

    if (x || y) {
      x = x || '0';
      y = y || '0';
    } else if (swiper.isHorizontal()) {
      x = p;
      y = '0';
    } else {
      y = p;
      x = '0';
    }

    if ((x).indexOf('%') >= 0) {
      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
    } else {
      x = `${x * progress * rtlFactor}px`;
    }
    if ((y).indexOf('%') >= 0) {
      y = `${parseInt(y, 10) * progress}%`;
    } else {
      y = `${y * progress}px`;
    }

    if (typeof opacity !== 'undefined' && opacity !== null) {
      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
      $el[0].style.opacity = currentOpacity;
    }
    if (typeof scale === 'undefined' || scale === null) {
      $el.transform(`translate3d(${x}, ${y}, 0px)`);
    } else {
      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);
    }
  },
  setTranslate() {
    const swiper = this;
    const {
      $el, slides, progress, snapGrid,
    } = swiper;
    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
      .each((index, el) => {
        swiper.parallax.setTransform(el, progress);
      });
    slides.each((slideIndex, slideEl) => {
      let slideProgress = slideEl.progress;
      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
      }
      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
        .each((index, el) => {
          swiper.parallax.setTransform(el, slideProgress);
        });
    });
  },
  setTransition(duration = this.params.speed) {
    const swiper = this;
    const { $el } = swiper;
    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
      .each((index, parallaxEl) => {
        const $parallaxEl = $(parallaxEl);
        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
        if (duration === 0) parallaxDuration = 0;
        $parallaxEl.transition(parallaxDuration);
      });
  },
};

var Parallax$1 = {
  name: 'parallax',
  params: {
    parallax: {
      enabled: false,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      parallax: {
        setTransform: Parallax.setTransform.bind(swiper),
        setTranslate: Parallax.setTranslate.bind(swiper),
        setTransition: Parallax.setTransition.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.params.watchSlidesProgress = true;
      swiper.originalParams.watchSlidesProgress = true;
    },
    init() {
      const swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.parallax.setTranslate();
    },
    setTranslate() {
      const swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.parallax.setTranslate();
    },
    setTransition(duration) {
      const swiper = this;
      if (!swiper.params.parallax.enabled) return;
      swiper.parallax.setTransition(duration);
    },
  },
};

const Zoom = {
  // Calc Scale From Multi-touches
  getDistanceBetweenTouches(e) {
    if (e.targetTouches.length < 2) return 1;
    const x1 = e.targetTouches[0].pageX;
    const y1 = e.targetTouches[0].pageY;
    const x2 = e.targetTouches[1].pageX;
    const y2 = e.targetTouches[1].pageY;
    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));
    return distance;
  },
  // Events
  onGestureStart(e) {
    const swiper = this;
    const params = swiper.params.zoom;
    const zoom = swiper.zoom;
    const { gesture } = zoom;
    zoom.fakeGestureTouched = false;
    zoom.fakeGestureMoved = false;
    if (!Support.gestures) {
      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
        return;
      }
      zoom.fakeGestureTouched = true;
      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
    }
    if (!gesture.$slideEl || !gesture.$slideEl.length) {
      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);
      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
      if (gesture.$imageWrapEl.length === 0) {
        gesture.$imageEl = undefined;
        return;
      }
    }
    if (gesture.$imageEl) {
      gesture.$imageEl.transition(0);
    }
    swiper.zoom.isScaling = true;
  },
  onGestureChange(e) {
    const swiper = this;
    const params = swiper.params.zoom;
    const zoom = swiper.zoom;
    const { gesture } = zoom;
    if (!Support.gestures) {
      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
        return;
      }
      zoom.fakeGestureMoved = true;
      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
    }
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    if (Support.gestures) {
      zoom.scale = e.scale * zoom.currentScale;
    } else {
      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
    }
    if (zoom.scale > gesture.maxRatio) {
      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);
    }
    if (zoom.scale < params.minRatio) {
      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);
    }
    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);
  },
  onGestureEnd(e) {
    const swiper = this;
    const params = swiper.params.zoom;
    const zoom = swiper.zoom;
    const { gesture } = zoom;
    if (!Support.gestures) {
      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
        return;
      }
      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
        return;
      }
      zoom.fakeGestureTouched = false;
      zoom.fakeGestureMoved = false;
    }
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
    zoom.currentScale = zoom.scale;
    zoom.isScaling = false;
    if (zoom.scale === 1) gesture.$slideEl = undefined;
  },
  onTouchStart(e) {
    const swiper = this;
    const zoom = swiper.zoom;
    const { gesture, image } = zoom;
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    if (image.isTouched) return;
    if (Device.android && e.cancelable) e.preventDefault();
    image.isTouched = true;
    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
  },
  onTouchMove(e) {
    const swiper = this;
    const zoom = swiper.zoom;
    const { gesture, image, velocity } = zoom;
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    swiper.allowClick = false;
    if (!image.isTouched || !gesture.$slideEl) return;

    if (!image.isMoved) {
      image.width = gesture.$imageEl[0].offsetWidth;
      image.height = gesture.$imageEl[0].offsetHeight;
      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
      gesture.$imageWrapEl.transition(0);
      if (swiper.rtl) {
        image.startX = -image.startX;
        image.startY = -image.startY;
      }
    }
    // Define if we need image drag
    const scaledWidth = image.width * zoom.scale;
    const scaledHeight = image.height * zoom.scale;

    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;

    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
    image.maxX = -image.minX;
    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
    image.maxY = -image.minY;

    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;

    if (!image.isMoved && !zoom.isScaling) {
      if (
        swiper.isHorizontal()
        && (
          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
        )
      ) {
        image.isTouched = false;
        return;
      } if (
        !swiper.isHorizontal()
        && (
          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
        )
      ) {
        image.isTouched = false;
        return;
      }
    }
    if (e.cancelable) {
      e.preventDefault();
    }
    e.stopPropagation();

    image.isMoved = true;
    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;

    if (image.currentX < image.minX) {
      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);
    }
    if (image.currentX > image.maxX) {
      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);
    }

    if (image.currentY < image.minY) {
      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);
    }
    if (image.currentY > image.maxY) {
      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);
    }

    // Velocity
    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
    if (!velocity.prevTime) velocity.prevTime = Date.now();
    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
    velocity.prevPositionX = image.touchesCurrent.x;
    velocity.prevPositionY = image.touchesCurrent.y;
    velocity.prevTime = Date.now();

    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
  },
  onTouchEnd() {
    const swiper = this;
    const zoom = swiper.zoom;
    const { gesture, image, velocity } = zoom;
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
    if (!image.isTouched || !image.isMoved) {
      image.isTouched = false;
      image.isMoved = false;
      return;
    }
    image.isTouched = false;
    image.isMoved = false;
    let momentumDurationX = 300;
    let momentumDurationY = 300;
    const momentumDistanceX = velocity.x * momentumDurationX;
    const newPositionX = image.currentX + momentumDistanceX;
    const momentumDistanceY = velocity.y * momentumDurationY;
    const newPositionY = image.currentY + momentumDistanceY;

    // Fix duration
    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);

    image.currentX = newPositionX;
    image.currentY = newPositionY;

    // Define if we need image drag
    const scaledWidth = image.width * zoom.scale;
    const scaledHeight = image.height * zoom.scale;
    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
    image.maxX = -image.minX;
    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
    image.maxY = -image.minY;
    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);

    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
  },
  onTransitionEnd() {
    const swiper = this;
    const zoom = swiper.zoom;
    const { gesture } = zoom;
    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
      if (gesture.$imageEl) {
        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
      }
      if (gesture.$imageWrapEl) {
        gesture.$imageWrapEl.transform('translate3d(0,0,0)');
      }

      zoom.scale = 1;
      zoom.currentScale = 1;

      gesture.$slideEl = undefined;
      gesture.$imageEl = undefined;
      gesture.$imageWrapEl = undefined;
    }
  },
  // Toggle Zoom
  toggle(e) {
    const swiper = this;
    const zoom = swiper.zoom;

    if (zoom.scale && zoom.scale !== 1) {
      // Zoom Out
      zoom.out();
    } else {
      // Zoom In
      zoom.in(e);
    }
  },
  in(e) {
    const swiper = this;

    const zoom = swiper.zoom;
    const params = swiper.params.zoom;
    const { gesture, image } = zoom;

    if (!gesture.$slideEl) {
      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
      } else {
        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
      }
      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
    }
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;

    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);

    let touchX;
    let touchY;
    let offsetX;
    let offsetY;
    let diffX;
    let diffY;
    let translateX;
    let translateY;
    let imageWidth;
    let imageHeight;
    let scaledWidth;
    let scaledHeight;
    let translateMinX;
    let translateMinY;
    let translateMaxX;
    let translateMaxY;
    let slideWidth;
    let slideHeight;

    if (typeof image.touchesStart.x === 'undefined' && e) {
      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
    } else {
      touchX = image.touchesStart.x;
      touchY = image.touchesStart.y;
    }

    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
    if (e) {
      slideWidth = gesture.$slideEl[0].offsetWidth;
      slideHeight = gesture.$slideEl[0].offsetHeight;
      offsetX = gesture.$slideEl.offset().left;
      offsetY = gesture.$slideEl.offset().top;
      diffX = (offsetX + (slideWidth / 2)) - touchX;
      diffY = (offsetY + (slideHeight / 2)) - touchY;

      imageWidth = gesture.$imageEl[0].offsetWidth;
      imageHeight = gesture.$imageEl[0].offsetHeight;
      scaledWidth = imageWidth * zoom.scale;
      scaledHeight = imageHeight * zoom.scale;

      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
      translateMaxX = -translateMinX;
      translateMaxY = -translateMinY;

      translateX = diffX * zoom.scale;
      translateY = diffY * zoom.scale;

      if (translateX < translateMinX) {
        translateX = translateMinX;
      }
      if (translateX > translateMaxX) {
        translateX = translateMaxX;
      }

      if (translateY < translateMinY) {
        translateY = translateMinY;
      }
      if (translateY > translateMaxY) {
        translateY = translateMaxY;
      }
    } else {
      translateX = 0;
      translateY = 0;
    }
    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);
    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
  },
  out() {
    const swiper = this;

    const zoom = swiper.zoom;
    const params = swiper.params.zoom;
    const { gesture } = zoom;

    if (!gesture.$slideEl) {
      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
      } else {
        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
      }
      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
    }
    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;

    zoom.scale = 1;
    zoom.currentScale = 1;
    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);
    gesture.$slideEl = undefined;
  },
  // Attach/Detach Events
  enable() {
    const swiper = this;
    const zoom = swiper.zoom;
    if (zoom.enabled) return;
    zoom.enabled = true;

    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;

    const slideSelector = `.${swiper.params.slideClass}`;

    // Scale image
    if (Support.gestures) {
      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
    } else if (swiper.touchEvents.start === 'touchstart') {
      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
      if (swiper.touchEvents.cancel) {
        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
      }
    }

    // Move image
    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
  },
  disable() {
    const swiper = this;
    const zoom = swiper.zoom;
    if (!zoom.enabled) return;

    swiper.zoom.enabled = false;

    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;

    const slideSelector = `.${swiper.params.slideClass}`;

    // Scale image
    if (Support.gestures) {
      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
    } else if (swiper.touchEvents.start === 'touchstart') {
      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
      if (swiper.touchEvents.cancel) {
        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
      }
    }

    // Move image
    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
  },
};

var Zoom$1 = {
  name: 'zoom',
  params: {
    zoom: {
      enabled: false,
      maxRatio: 3,
      minRatio: 1,
      toggle: true,
      containerClass: 'swiper-zoom-container',
      zoomedSlideClass: 'swiper-slide-zoomed',
    },
  },
  create() {
    const swiper = this;
    const zoom = {
      enabled: false,
      scale: 1,
      currentScale: 1,
      isScaling: false,
      gesture: {
        $slideEl: undefined,
        slideWidth: undefined,
        slideHeight: undefined,
        $imageEl: undefined,
        $imageWrapEl: undefined,
        maxRatio: 3,
      },
      image: {
        isTouched: undefined,
        isMoved: undefined,
        currentX: undefined,
        currentY: undefined,
        minX: undefined,
        minY: undefined,
        maxX: undefined,
        maxY: undefined,
        width: undefined,
        height: undefined,
        startX: undefined,
        startY: undefined,
        touchesStart: {},
        touchesCurrent: {},
      },
      velocity: {
        x: undefined,
        y: undefined,
        prevPositionX: undefined,
        prevPositionY: undefined,
        prevTime: undefined,
      },
    };

    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {
      zoom[methodName] = Zoom[methodName].bind(swiper);
    });
    Utils.extend(swiper, {
      zoom,
    });

    let scale = 1;
    Object.defineProperty(swiper.zoom, 'scale', {
      get() {
        return scale;
      },
      set(value) {
        if (scale !== value) {
          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
          swiper.emit('zoomChange', value, imageEl, slideEl);
        }
        scale = value;
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      if (swiper.params.zoom.enabled) {
        swiper.zoom.enable();
      }
    },
    destroy() {
      const swiper = this;
      swiper.zoom.disable();
    },
    touchStart(e) {
      const swiper = this;
      if (!swiper.zoom.enabled) return;
      swiper.zoom.onTouchStart(e);
    },
    touchEnd(e) {
      const swiper = this;
      if (!swiper.zoom.enabled) return;
      swiper.zoom.onTouchEnd(e);
    },
    doubleTap(e) {
      const swiper = this;
      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
        swiper.zoom.toggle(e);
      }
    },
    transitionEnd() {
      const swiper = this;
      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
        swiper.zoom.onTransitionEnd();
      }
    },
    slideChange() {
      const swiper = this;
      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
        swiper.zoom.onTransitionEnd();
      }
    },
  },
};

const Lazy = {
  loadInSlide(index, loadInDuplicate = true) {
    const swiper = this;
    const params = swiper.params.lazy;
    if (typeof index === 'undefined') return;
    if (swiper.slides.length === 0) return;
    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;

    const $slideEl = isVirtual
      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`)
      : swiper.slides.eq(index);

    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);
    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
      $images = $images.add($slideEl[0]);
    }
    if ($images.length === 0) return;

    $images.each((imageIndex, imageEl) => {
      const $imageEl = $(imageEl);
      $imageEl.addClass(params.loadingClass);

      const background = $imageEl.attr('data-background');
      const src = $imageEl.attr('data-src');
      const srcset = $imageEl.attr('data-srcset');
      const sizes = $imageEl.attr('data-sizes');
      const $pictureEl = $imageEl.parent('picture');

      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {
        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;
        if (background) {
          $imageEl.css('background-image', `url("${background}")`);
          $imageEl.removeAttr('data-background');
        } else {
          if (srcset) {
            $imageEl.attr('srcset', srcset);
            $imageEl.removeAttr('data-srcset');
          }
          if (sizes) {
            $imageEl.attr('sizes', sizes);
            $imageEl.removeAttr('data-sizes');
          }
          if ($pictureEl.length) {
            $pictureEl.children('source').each((sourceIndex, sourceEl) => {
              const $source = $(sourceEl);

              if ($source.attr('data-srcset')) {
                $source.attr('srcset', $source.attr('data-srcset'));
                $source.removeAttr('data-srcset');
              }
            });
          }
          if (src) {
            $imageEl.attr('src', src);
            $imageEl.removeAttr('data-src');
          }
        }

        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
        $slideEl.find(`.${params.preloaderClass}`).remove();
        if (swiper.params.loop && loadInDuplicate) {
          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`);
            swiper.lazy.loadInSlide(originalSlide.index(), false);
          } else {
            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`);
            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
          }
        }
        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
        if (swiper.params.autoHeight) {
          swiper.updateAutoHeight();
        }
      });

      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
    });
  },
  load() {
    const swiper = this;
    const {
      $wrapperEl, params: swiperParams, slides, activeIndex,
    } = swiper;
    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;
    const params = swiperParams.lazy;

    let slidesPerView = swiperParams.slidesPerView;
    if (slidesPerView === 'auto') {
      slidesPerView = 0;
    }

    function slideExist(index) {
      if (isVirtual) {
        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) {
          return true;
        }
      } else if (slides[index]) return true;
      return false;
    }

    function slideIndex(slideEl) {
      if (isVirtual) {
        return $(slideEl).attr('data-swiper-slide-index');
      }
      return $(slideEl).index();
    }

    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
    if (swiper.params.watchSlidesVisibility) {
      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {
        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
        swiper.lazy.loadInSlide(index);
      });
    } else if (slidesPerView > 1) {
      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
        if (slideExist(i)) swiper.lazy.loadInSlide(i);
      }
    } else {
      swiper.lazy.loadInSlide(activeIndex);
    }
    if (params.loadPrevNext) {
      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
        const amount = params.loadPrevNextAmount;
        const spv = slidesPerView;
        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
        // Next Slides
        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {
          if (slideExist(i)) swiper.lazy.loadInSlide(i);
        }
        // Prev Slides
        for (let i = minIndex; i < activeIndex; i += 1) {
          if (slideExist(i)) swiper.lazy.loadInSlide(i);
        }
      } else {
        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);
        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));

        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);
        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
      }
    }
  },
};

var Lazy$1 = {
  name: 'lazy',
  params: {
    lazy: {
      enabled: false,
      loadPrevNext: false,
      loadPrevNextAmount: 1,
      loadOnTransitionStart: false,

      elementClass: 'swiper-lazy',
      loadingClass: 'swiper-lazy-loading',
      loadedClass: 'swiper-lazy-loaded',
      preloaderClass: 'swiper-lazy-preloader',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      lazy: {
        initialImageLoaded: false,
        load: Lazy.load.bind(swiper),
        loadInSlide: Lazy.loadInSlide.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
        swiper.params.preloadImages = false;
      }
    },
    init() {
      const swiper = this;
      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
        swiper.lazy.load();
      }
    },
    scroll() {
      const swiper = this;
      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
        swiper.lazy.load();
      }
    },
    resize() {
      const swiper = this;
      if (swiper.params.lazy.enabled) {
        swiper.lazy.load();
      }
    },
    scrollbarDragMove() {
      const swiper = this;
      if (swiper.params.lazy.enabled) {
        swiper.lazy.load();
      }
    },
    transitionStart() {
      const swiper = this;
      if (swiper.params.lazy.enabled) {
        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
          swiper.lazy.load();
        }
      }
    },
    transitionEnd() {
      const swiper = this;
      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
        swiper.lazy.load();
      }
    },
    slideChange() {
      const swiper = this;
      if (swiper.params.lazy.enabled && swiper.params.cssMode) {
        swiper.lazy.load();
      }
    },
  },
};

/* eslint no-bitwise: ["error", { "allow": [">>"] }] */

const Controller = {
  LinearSpline: function LinearSpline(x, y) {
    const binarySearch = (function search() {
      let maxIndex;
      let minIndex;
      let guess;
      return (array, val) => {
        minIndex = -1;
        maxIndex = array.length;
        while (maxIndex - minIndex > 1) {
          guess = maxIndex + minIndex >> 1;
          if (array[guess] <= val) {
            minIndex = guess;
          } else {
            maxIndex = guess;
          }
        }
        return maxIndex;
      };
    }());
    this.x = x;
    this.y = y;
    this.lastIndex = x.length - 1;
    // Given an x value (x2), return the expected y2 value:
    // (x1,y1) is the known point before given value,
    // (x3,y3) is the known point after given value.
    let i1;
    let i3;

    this.interpolate = function interpolate(x2) {
      if (!x2) return 0;

      // Get the indexes of x1 and x3 (the array indexes before and after given x2):
      i3 = binarySearch(this.x, x2);
      i1 = i3 - 1;

      // We have our indexes i1 & i3, so we can calculate already:
      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
    };
    return this;
  },
  // xxx: for now i will just save one spline function to to
  getInterpolateFunction(c) {
    const swiper = this;
    if (!swiper.controller.spline) {
      swiper.controller.spline = swiper.params.loop
        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
    }
  },
  setTranslate(setTranslate, byController) {
    const swiper = this;
    const controlled = swiper.controller.control;
    let multiplier;
    let controlledTranslate;
    function setControlledTranslate(c) {
      // this will create an Interpolate function based on the snapGrids
      // x is the Grid of the scrolled scroller and y will be the controlled scroller
      // it makes sense to create this only once and recall it for the interpolation
      // the function does a lot of value caching for performance
      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
      if (swiper.params.controller.by === 'slide') {
        swiper.controller.getInterpolateFunction(c);
        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
        // but it did not work out
        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
      }

      if (!controlledTranslate || swiper.params.controller.by === 'container') {
        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
      }

      if (swiper.params.controller.inverse) {
        controlledTranslate = c.maxTranslate() - controlledTranslate;
      }
      c.updateProgress(controlledTranslate);
      c.setTranslate(controlledTranslate, swiper);
      c.updateActiveIndex();
      c.updateSlidesClasses();
    }
    if (Array.isArray(controlled)) {
      for (let i = 0; i < controlled.length; i += 1) {
        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
          setControlledTranslate(controlled[i]);
        }
      }
    } else if (controlled instanceof Swiper && byController !== controlled) {
      setControlledTranslate(controlled);
    }
  },
  setTransition(duration, byController) {
    const swiper = this;
    const controlled = swiper.controller.control;
    let i;
    function setControlledTransition(c) {
      c.setTransition(duration, swiper);
      if (duration !== 0) {
        c.transitionStart();
        if (c.params.autoHeight) {
          Utils.nextTick(() => {
            c.updateAutoHeight();
          });
        }
        c.$wrapperEl.transitionEnd(() => {
          if (!controlled) return;
          if (c.params.loop && swiper.params.controller.by === 'slide') {
            c.loopFix();
          }
          c.transitionEnd();
        });
      }
    }
    if (Array.isArray(controlled)) {
      for (i = 0; i < controlled.length; i += 1) {
        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
          setControlledTransition(controlled[i]);
        }
      }
    } else if (controlled instanceof Swiper && byController !== controlled) {
      setControlledTransition(controlled);
    }
  },
};
var Controller$1 = {
  name: 'controller',
  params: {
    controller: {
      control: undefined,
      inverse: false,
      by: 'slide', // or 'container'
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      controller: {
        control: swiper.params.controller.control,
        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
        setTranslate: Controller.setTranslate.bind(swiper),
        setTransition: Controller.setTransition.bind(swiper),
      },
    });
  },
  on: {
    update() {
      const swiper = this;
      if (!swiper.controller.control) return;
      if (swiper.controller.spline) {
        swiper.controller.spline = undefined;
        delete swiper.controller.spline;
      }
    },
    resize() {
      const swiper = this;
      if (!swiper.controller.control) return;
      if (swiper.controller.spline) {
        swiper.controller.spline = undefined;
        delete swiper.controller.spline;
      }
    },
    observerUpdate() {
      const swiper = this;
      if (!swiper.controller.control) return;
      if (swiper.controller.spline) {
        swiper.controller.spline = undefined;
        delete swiper.controller.spline;
      }
    },
    setTranslate(translate, byController) {
      const swiper = this;
      if (!swiper.controller.control) return;
      swiper.controller.setTranslate(translate, byController);
    },
    setTransition(duration, byController) {
      const swiper = this;
      if (!swiper.controller.control) return;
      swiper.controller.setTransition(duration, byController);
    },
  },
};

const a11y = {
  makeElFocusable($el) {
    $el.attr('tabIndex', '0');
    return $el;
  },
  makeElNotFocusable($el) {
    $el.attr('tabIndex', '-1');
    return $el;
  },
  addElRole($el, role) {
    $el.attr('role', role);
    return $el;
  },
  addElLabel($el, label) {
    $el.attr('aria-label', label);
    return $el;
  },
  disableEl($el) {
    $el.attr('aria-disabled', true);
    return $el;
  },
  enableEl($el) {
    $el.attr('aria-disabled', false);
    return $el;
  },
  onEnterKey(e) {
    const swiper = this;
    const params = swiper.params.a11y;
    if (e.keyCode !== 13) return;
    const $targetEl = $(e.target);
    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
      if (!(swiper.isEnd && !swiper.params.loop)) {
        swiper.slideNext();
      }
      if (swiper.isEnd) {
        swiper.a11y.notify(params.lastSlideMessage);
      } else {
        swiper.a11y.notify(params.nextSlideMessage);
      }
    }
    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
      if (!(swiper.isBeginning && !swiper.params.loop)) {
        swiper.slidePrev();
      }
      if (swiper.isBeginning) {
        swiper.a11y.notify(params.firstSlideMessage);
      } else {
        swiper.a11y.notify(params.prevSlideMessage);
      }
    }
    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {
      $targetEl[0].click();
    }
  },
  notify(message) {
    const swiper = this;
    const notification = swiper.a11y.liveRegion;
    if (notification.length === 0) return;
    notification.html('');
    notification.html(message);
  },
  updateNavigation() {
    const swiper = this;

    if (swiper.params.loop || !swiper.navigation) return;
    const { $nextEl, $prevEl } = swiper.navigation;

    if ($prevEl && $prevEl.length > 0) {
      if (swiper.isBeginning) {
        swiper.a11y.disableEl($prevEl);
        swiper.a11y.makeElNotFocusable($prevEl);
      } else {
        swiper.a11y.enableEl($prevEl);
        swiper.a11y.makeElFocusable($prevEl);
      }
    }
    if ($nextEl && $nextEl.length > 0) {
      if (swiper.isEnd) {
        swiper.a11y.disableEl($nextEl);
        swiper.a11y.makeElNotFocusable($nextEl);
      } else {
        swiper.a11y.enableEl($nextEl);
        swiper.a11y.makeElFocusable($nextEl);
      }
    }
  },
  updatePagination() {
    const swiper = this;
    const params = swiper.params.a11y;
    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {
        const $bulletEl = $(bulletEl);
        swiper.a11y.makeElFocusable($bulletEl);
        swiper.a11y.addElRole($bulletEl, 'button');
        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
      });
    }
  },
  init() {
    const swiper = this;

    swiper.$el.append(swiper.a11y.liveRegion);

    // Navigation
    const params = swiper.params.a11y;
    let $nextEl;
    let $prevEl;
    if (swiper.navigation && swiper.navigation.$nextEl) {
      $nextEl = swiper.navigation.$nextEl;
    }
    if (swiper.navigation && swiper.navigation.$prevEl) {
      $prevEl = swiper.navigation.$prevEl;
    }
    if ($nextEl) {
      swiper.a11y.makeElFocusable($nextEl);
      swiper.a11y.addElRole($nextEl, 'button');
      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
      $nextEl.on('keydown', swiper.a11y.onEnterKey);
    }
    if ($prevEl) {
      swiper.a11y.makeElFocusable($prevEl);
      swiper.a11y.addElRole($prevEl, 'button');
      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
      $prevEl.on('keydown', swiper.a11y.onEnterKey);
    }

    // Pagination
    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
    }
  },
  destroy() {
    const swiper = this;
    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();

    let $nextEl;
    let $prevEl;
    if (swiper.navigation && swiper.navigation.$nextEl) {
      $nextEl = swiper.navigation.$nextEl;
    }
    if (swiper.navigation && swiper.navigation.$prevEl) {
      $prevEl = swiper.navigation.$prevEl;
    }
    if ($nextEl) {
      $nextEl.off('keydown', swiper.a11y.onEnterKey);
    }
    if ($prevEl) {
      $prevEl.off('keydown', swiper.a11y.onEnterKey);
    }

    // Pagination
    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
    }
  },
};
var A11y = {
  name: 'a11y',
  params: {
    a11y: {
      enabled: true,
      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() {
    const swiper = this;
    Utils.extend(swiper, {
      a11y: {
        liveRegion: $(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`),
      },
    });
    Object.keys(a11y).forEach((methodName) => {
      swiper.a11y[methodName] = a11y[methodName].bind(swiper);
    });
  },
  on: {
    init() {
      const swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.init();
      swiper.a11y.updateNavigation();
    },
    toEdge() {
      const swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.updateNavigation();
    },
    fromEdge() {
      const swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.updateNavigation();
    },
    paginationUpdate() {
      const swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.updatePagination();
    },
    destroy() {
      const swiper = this;
      if (!swiper.params.a11y.enabled) return;
      swiper.a11y.destroy();
    },
  },
};

const History = {
  init() {
    const swiper = this;
    if (!swiper.params.history) return;
    if (!win.history || !win.history.pushState) {
      swiper.params.history.enabled = false;
      swiper.params.hashNavigation.enabled = true;
      return;
    }
    const history = swiper.history;
    history.initialized = true;
    history.paths = History.getPathValues();
    if (!history.paths.key && !history.paths.value) return;
    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
    if (!swiper.params.history.replaceState) {
      win.addEventListener('popstate', swiper.history.setHistoryPopState);
    }
  },
  destroy() {
    const swiper = this;
    if (!swiper.params.history.replaceState) {
      win.removeEventListener('popstate', swiper.history.setHistoryPopState);
    }
  },
  setHistoryPopState() {
    const swiper = this;
    swiper.history.paths = History.getPathValues();
    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
  },
  getPathValues() {
    const pathArray = win.location.pathname.slice(1).split('/').filter((part) => part !== '');
    const total = pathArray.length;
    const key = pathArray[total - 2];
    const value = pathArray[total - 1];
    return { key, value };
  },
  setHistory(key, index) {
    const swiper = this;
    if (!swiper.history.initialized || !swiper.params.history.enabled) return;
    const slide = swiper.slides.eq(index);
    let value = History.slugify(slide.attr('data-history'));
    if (!win.location.pathname.includes(key)) {
      value = `${key}/${value}`;
    }
    const currentState = win.history.state;
    if (currentState && currentState.value === value) {
      return;
    }
    if (swiper.params.history.replaceState) {
      win.history.replaceState({ value }, null, value);
    } else {
      win.history.pushState({ value }, null, value);
    }
  },
  slugify(text) {
    return text.toString()
      .replace(/\s+/g, '-')
      .replace(/[^\w-]+/g, '')
      .replace(/--+/g, '-')
      .replace(/^-+/, '')
      .replace(/-+$/, '');
  },
  scrollToSlide(speed, value, runCallbacks) {
    const swiper = this;
    if (value) {
      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
        const slide = swiper.slides.eq(i);
        const slideHistory = History.slugify(slide.attr('data-history'));
        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
          const index = slide.index();
          swiper.slideTo(index, speed, runCallbacks);
        }
      }
    } else {
      swiper.slideTo(0, speed, runCallbacks);
    }
  },
};

var History$1 = {
  name: 'history',
  params: {
    history: {
      enabled: false,
      replaceState: false,
      key: 'slides',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      history: {
        init: History.init.bind(swiper),
        setHistory: History.setHistory.bind(swiper),
        setHistoryPopState: History.setHistoryPopState.bind(swiper),
        scrollToSlide: History.scrollToSlide.bind(swiper),
        destroy: History.destroy.bind(swiper),
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      if (swiper.params.history.enabled) {
        swiper.history.init();
      }
    },
    destroy() {
      const swiper = this;
      if (swiper.params.history.enabled) {
        swiper.history.destroy();
      }
    },
    transitionEnd() {
      const swiper = this;
      if (swiper.history.initialized) {
        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
      }
    },
    slideChange() {
      const swiper = this;
      if (swiper.history.initialized && swiper.params.cssMode) {
        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
      }
    },
  },
};

const HashNavigation = {
  onHashCange() {
    const swiper = this;
    swiper.emit('hashChange');
    const newHash = doc.location.hash.replace('#', '');
    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
    if (newHash !== activeSlideHash) {
      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index();
      if (typeof newIndex === 'undefined') return;
      swiper.slideTo(newIndex);
    }
  },
  setHash() {
    const swiper = this;
    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
    if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
      win.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));
      swiper.emit('hashSet');
    } else {
      const slide = swiper.slides.eq(swiper.activeIndex);
      const hash = slide.attr('data-hash') || slide.attr('data-history');
      doc.location.hash = hash || '';
      swiper.emit('hashSet');
    }
  },
  init() {
    const swiper = this;
    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;
    swiper.hashNavigation.initialized = true;
    const hash = doc.location.hash.replace('#', '');
    if (hash) {
      const speed = 0;
      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
        const slide = swiper.slides.eq(i);
        const slideHash = slide.attr('data-hash') || slide.attr('data-history');
        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
          const index = slide.index();
          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
        }
      }
    }
    if (swiper.params.hashNavigation.watchState) {
      $(win).on('hashchange', swiper.hashNavigation.onHashCange);
    }
  },
  destroy() {
    const swiper = this;
    if (swiper.params.hashNavigation.watchState) {
      $(win).off('hashchange', swiper.hashNavigation.onHashCange);
    }
  },
};
var HashNavigation$1 = {
  name: 'hash-navigation',
  params: {
    hashNavigation: {
      enabled: false,
      replaceState: false,
      watchState: false,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      hashNavigation: {
        initialized: false,
        init: HashNavigation.init.bind(swiper),
        destroy: HashNavigation.destroy.bind(swiper),
        setHash: HashNavigation.setHash.bind(swiper),
        onHashCange: HashNavigation.onHashCange.bind(swiper),
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      if (swiper.params.hashNavigation.enabled) {
        swiper.hashNavigation.init();
      }
    },
    destroy() {
      const swiper = this;
      if (swiper.params.hashNavigation.enabled) {
        swiper.hashNavigation.destroy();
      }
    },
    transitionEnd() {
      const swiper = this;
      if (swiper.hashNavigation.initialized) {
        swiper.hashNavigation.setHash();
      }
    },
    slideChange() {
      const swiper = this;
      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
        swiper.hashNavigation.setHash();
      }
    },
  },
};

/* eslint no-underscore-dangle: "off" */

const Autoplay = {
  run() {
    const swiper = this;
    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
    let delay = swiper.params.autoplay.delay;
    if ($activeSlideEl.attr('data-swiper-autoplay')) {
      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
    }
    clearTimeout(swiper.autoplay.timeout);
    swiper.autoplay.timeout = Utils.nextTick(() => {
      if (swiper.params.autoplay.reverseDirection) {
        if (swiper.params.loop) {
          swiper.loopFix();
          swiper.slidePrev(swiper.params.speed, true, true);
          swiper.emit('autoplay');
        } else if (!swiper.isBeginning) {
          swiper.slidePrev(swiper.params.speed, true, true);
          swiper.emit('autoplay');
        } else if (!swiper.params.autoplay.stopOnLastSlide) {
          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
          swiper.emit('autoplay');
        } else {
          swiper.autoplay.stop();
        }
      } else if (swiper.params.loop) {
        swiper.loopFix();
        swiper.slideNext(swiper.params.speed, true, true);
        swiper.emit('autoplay');
      } else if (!swiper.isEnd) {
        swiper.slideNext(swiper.params.speed, true, true);
        swiper.emit('autoplay');
      } else if (!swiper.params.autoplay.stopOnLastSlide) {
        swiper.slideTo(0, swiper.params.speed, true, true);
        swiper.emit('autoplay');
      } else {
        swiper.autoplay.stop();
      }
      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();
    }, delay);
  },
  start() {
    const swiper = this;
    if (typeof swiper.autoplay.timeout !== 'undefined') return false;
    if (swiper.autoplay.running) return false;
    swiper.autoplay.running = true;
    swiper.emit('autoplayStart');
    swiper.autoplay.run();
    return true;
  },
  stop() {
    const swiper = this;
    if (!swiper.autoplay.running) return false;
    if (typeof swiper.autoplay.timeout === 'undefined') return false;

    if (swiper.autoplay.timeout) {
      clearTimeout(swiper.autoplay.timeout);
      swiper.autoplay.timeout = undefined;
    }
    swiper.autoplay.running = false;
    swiper.emit('autoplayStop');
    return true;
  },
  pause(speed) {
    const swiper = this;
    if (!swiper.autoplay.running) return;
    if (swiper.autoplay.paused) return;
    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
    swiper.autoplay.paused = true;
    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
      swiper.autoplay.paused = false;
      swiper.autoplay.run();
    } else {
      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
    }
  },
};

var Autoplay$1 = {
  name: 'autoplay',
  params: {
    autoplay: {
      enabled: false,
      delay: 3000,
      waitForTransition: true,
      disableOnInteraction: true,
      stopOnLastSlide: false,
      reverseDirection: false,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      autoplay: {
        running: false,
        paused: false,
        run: Autoplay.run.bind(swiper),
        start: Autoplay.start.bind(swiper),
        stop: Autoplay.stop.bind(swiper),
        pause: Autoplay.pause.bind(swiper),
        onVisibilityChange() {
          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
            swiper.autoplay.pause();
          }
          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
            swiper.autoplay.run();
            swiper.autoplay.paused = false;
          }
        },
        onTransitionEnd(e) {
          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
          if (e.target !== this) return;
          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
          swiper.autoplay.paused = false;
          if (!swiper.autoplay.running) {
            swiper.autoplay.stop();
          } else {
            swiper.autoplay.run();
          }
        },
      },
    });
  },
  on: {
    init() {
      const swiper = this;
      if (swiper.params.autoplay.enabled) {
        swiper.autoplay.start();
        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
      }
    },
    beforeTransitionStart(speed, internal) {
      const swiper = this;
      if (swiper.autoplay.running) {
        if (internal || !swiper.params.autoplay.disableOnInteraction) {
          swiper.autoplay.pause(speed);
        } else {
          swiper.autoplay.stop();
        }
      }
    },
    sliderFirstMove() {
      const swiper = this;
      if (swiper.autoplay.running) {
        if (swiper.params.autoplay.disableOnInteraction) {
          swiper.autoplay.stop();
        } else {
          swiper.autoplay.pause();
        }
      }
    },
    touchEnd() {
      const swiper = this;
      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
        swiper.autoplay.run();
      }
    },
    destroy() {
      const swiper = this;
      if (swiper.autoplay.running) {
        swiper.autoplay.stop();
      }
      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
    },
  },
};

const Fade = {
  setTranslate() {
    const swiper = this;
    const { slides } = swiper;
    for (let i = 0; i < slides.length; i += 1) {
      const $slideEl = swiper.slides.eq(i);
      const offset = $slideEl[0].swiperSlideOffset;
      let tx = -offset;
      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
      let ty = 0;
      if (!swiper.isHorizontal()) {
        ty = tx;
        tx = 0;
      }
      const slideOpacity = swiper.params.fadeEffect.crossFade
        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
      $slideEl
        .css({
          opacity: slideOpacity,
        })
        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);
    }
  },
  setTransition(duration) {
    const swiper = this;
    const { slides, $wrapperEl } = swiper;
    slides.transition(duration);
    if (swiper.params.virtualTranslate && duration !== 0) {
      let eventTriggered = false;
      slides.transitionEnd(() => {
        if (eventTriggered) return;
        if (!swiper || swiper.destroyed) return;
        eventTriggered = true;
        swiper.animating = false;
        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
        for (let i = 0; i < triggerEvents.length; i += 1) {
          $wrapperEl.trigger(triggerEvents[i]);
        }
      });
    }
  },
};

var EffectFade = {
  name: 'effect-fade',
  params: {
    fadeEffect: {
      crossFade: false,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      fadeEffect: {
        setTranslate: Fade.setTranslate.bind(swiper),
        setTransition: Fade.setTransition.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (swiper.params.effect !== 'fade') return;
      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);
      const overwriteParams = {
        slidesPerView: 1,
        slidesPerColumn: 1,
        slidesPerGroup: 1,
        watchSlidesProgress: true,
        spaceBetween: 0,
        virtualTranslate: true,
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);
    },
    setTranslate() {
      const swiper = this;
      if (swiper.params.effect !== 'fade') return;
      swiper.fadeEffect.setTranslate();
    },
    setTransition(duration) {
      const swiper = this;
      if (swiper.params.effect !== 'fade') return;
      swiper.fadeEffect.setTransition(duration);
    },
  },
};

const Cube = {
  setTranslate() {
    const swiper = this;
    const {
      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,
    } = swiper;
    const params = swiper.params.cubeEffect;
    const isHorizontal = swiper.isHorizontal();
    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
    let wrapperRotate = 0;
    let $cubeShadowEl;
    if (params.shadow) {
      if (isHorizontal) {
        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
        if ($cubeShadowEl.length === 0) {
          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
          $wrapperEl.append($cubeShadowEl);
        }
        $cubeShadowEl.css({ height: `${swiperWidth}px` });
      } else {
        $cubeShadowEl = $el.find('.swiper-cube-shadow');
        if ($cubeShadowEl.length === 0) {
          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
          $el.append($cubeShadowEl);
        }
      }
    }
    for (let i = 0; i < slides.length; i += 1) {
      const $slideEl = slides.eq(i);
      let slideIndex = i;
      if (isVirtual) {
        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
      }
      let slideAngle = slideIndex * 90;
      let round = Math.floor(slideAngle / 360);
      if (rtl) {
        slideAngle = -slideAngle;
        round = Math.floor(-slideAngle / 360);
      }
      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
      let tx = 0;
      let ty = 0;
      let tz = 0;
      if (slideIndex % 4 === 0) {
        tx = -round * 4 * swiperSize;
        tz = 0;
      } else if ((slideIndex - 1) % 4 === 0) {
        tx = 0;
        tz = -round * 4 * swiperSize;
      } else if ((slideIndex - 2) % 4 === 0) {
        tx = swiperSize + (round * 4 * swiperSize);
        tz = swiperSize;
      } else if ((slideIndex - 3) % 4 === 0) {
        tx = -swiperSize;
        tz = (3 * swiperSize) + (swiperSize * 4 * round);
      }
      if (rtl) {
        tx = -tx;
      }

      if (!isHorizontal) {
        ty = tx;
        tx = 0;
      }

      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
      if (progress <= 1 && progress > -1) {
        wrapperRotate = (slideIndex * 90) + (progress * 90);
        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);
      }
      $slideEl.transform(transform);
      if (params.slideShadows) {
        // Set shadows
        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
        if (shadowBefore.length === 0) {
          shadowBefore = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
          $slideEl.append(shadowBefore);
        }
        if (shadowAfter.length === 0) {
          shadowAfter = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
          $slideEl.append(shadowAfter);
        }
        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
      }
    }
    $wrapperEl.css({
      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,
      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,
      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,
      'transform-origin': `50% 50% -${swiperSize / 2}px`,
    });

    if (params.shadow) {
      if (isHorizontal) {
        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);
      } else {
        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
        const multiplier = 1.5 - (
          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
        );
        const scale1 = params.shadowScale;
        const scale2 = params.shadowScale / multiplier;
        const offset = params.shadowOffset;
        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);
      }
    }
    const zFactor = (Browser.isSafari || Browser.isWebView) ? (-swiperSize / 2) : 0;
    $wrapperEl
      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);
  },
  setTransition(duration) {
    const swiper = this;
    const { $el, slides } = swiper;
    slides
      .transition(duration)
      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
      .transition(duration);
    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
      $el.find('.swiper-cube-shadow').transition(duration);
    }
  },
};

var EffectCube = {
  name: 'effect-cube',
  params: {
    cubeEffect: {
      slideShadows: true,
      shadow: true,
      shadowOffset: 20,
      shadowScale: 0.94,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      cubeEffect: {
        setTranslate: Cube.setTranslate.bind(swiper),
        setTransition: Cube.setTransition.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (swiper.params.effect !== 'cube') return;
      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);
      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
      const overwriteParams = {
        slidesPerView: 1,
        slidesPerColumn: 1,
        slidesPerGroup: 1,
        watchSlidesProgress: true,
        resistanceRatio: 0,
        spaceBetween: 0,
        centeredSlides: false,
        virtualTranslate: true,
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);
    },
    setTranslate() {
      const swiper = this;
      if (swiper.params.effect !== 'cube') return;
      swiper.cubeEffect.setTranslate();
    },
    setTransition(duration) {
      const swiper = this;
      if (swiper.params.effect !== 'cube') return;
      swiper.cubeEffect.setTransition(duration);
    },
  },
};

const Flip = {
  setTranslate() {
    const swiper = this;
    const { slides, rtlTranslate: rtl } = swiper;
    for (let i = 0; i < slides.length; i += 1) {
      const $slideEl = slides.eq(i);
      let progress = $slideEl[0].progress;
      if (swiper.params.flipEffect.limitRotation) {
        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
      }
      const offset = $slideEl[0].swiperSlideOffset;
      const rotate = -180 * progress;
      let rotateY = rotate;
      let rotateX = 0;
      let tx = -offset;
      let ty = 0;
      if (!swiper.isHorizontal()) {
        ty = tx;
        tx = 0;
        rotateX = -rotateY;
        rotateY = 0;
      } else if (rtl) {
        rotateY = -rotateY;
      }

      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;

      if (swiper.params.flipEffect.slideShadows) {
        // Set shadows
        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
        if (shadowBefore.length === 0) {
          shadowBefore = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}"></div>`);
          $slideEl.append(shadowBefore);
        }
        if (shadowAfter.length === 0) {
          shadowAfter = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}"></div>`);
          $slideEl.append(shadowAfter);
        }
        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
      }
      $slideEl
        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);
    }
  },
  setTransition(duration) {
    const swiper = this;
    const { slides, activeIndex, $wrapperEl } = swiper;
    slides
      .transition(duration)
      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
      .transition(duration);
    if (swiper.params.virtualTranslate && duration !== 0) {
      let eventTriggered = false;
      // eslint-disable-next-line
      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
        if (eventTriggered) return;
        if (!swiper || swiper.destroyed) return;
        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
        eventTriggered = true;
        swiper.animating = false;
        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
        for (let i = 0; i < triggerEvents.length; i += 1) {
          $wrapperEl.trigger(triggerEvents[i]);
        }
      });
    }
  },
};

var EffectFlip = {
  name: 'effect-flip',
  params: {
    flipEffect: {
      slideShadows: true,
      limitRotation: true,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      flipEffect: {
        setTranslate: Flip.setTranslate.bind(swiper),
        setTransition: Flip.setTransition.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (swiper.params.effect !== 'flip') return;
      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);
      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
      const overwriteParams = {
        slidesPerView: 1,
        slidesPerColumn: 1,
        slidesPerGroup: 1,
        watchSlidesProgress: true,
        spaceBetween: 0,
        virtualTranslate: true,
      };
      Utils.extend(swiper.params, overwriteParams);
      Utils.extend(swiper.originalParams, overwriteParams);
    },
    setTranslate() {
      const swiper = this;
      if (swiper.params.effect !== 'flip') return;
      swiper.flipEffect.setTranslate();
    },
    setTransition(duration) {
      const swiper = this;
      if (swiper.params.effect !== 'flip') return;
      swiper.flipEffect.setTransition(duration);
    },
  },
};

const Coverflow = {
  setTranslate() {
    const swiper = this;
    const {
      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,
    } = swiper;
    const params = swiper.params.coverflowEffect;
    const isHorizontal = swiper.isHorizontal();
    const transform = swiper.translate;
    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
    const rotate = isHorizontal ? params.rotate : -params.rotate;
    const translate = params.depth;
    // Each slide offset from center
    for (let i = 0, length = slides.length; i < length; i += 1) {
      const $slideEl = slides.eq(i);
      const slideSize = slidesSizesGrid[i];
      const slideOffset = $slideEl[0].swiperSlideOffset;
      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;

      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
      // var rotateZ = 0
      let translateZ = -translate * Math.abs(offsetMultiplier);

      let stretch = params.stretch;
      // Allow percentage to make a relative stretch for responsive sliders
      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
        stretch = ((parseFloat(params.stretch) / 100) * slideSize);
      }
      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);
      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;

      let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);

      // Fix for ultra small values
      if (Math.abs(translateX) < 0.001) translateX = 0;
      if (Math.abs(translateY) < 0.001) translateY = 0;
      if (Math.abs(translateZ) < 0.001) translateZ = 0;
      if (Math.abs(rotateY) < 0.001) rotateY = 0;
      if (Math.abs(rotateX) < 0.001) rotateX = 0;
      if (Math.abs(scale) < 0.001) scale = 0;

      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;

      $slideEl.transform(slideTransform);
      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
      if (params.slideShadows) {
        // Set shadows
        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
        if ($shadowBeforeEl.length === 0) {
          $shadowBeforeEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
          $slideEl.append($shadowBeforeEl);
        }
        if ($shadowAfterEl.length === 0) {
          $shadowAfterEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
          $slideEl.append($shadowAfterEl);
        }
        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
      }
    }

    // Set correct perspective for IE10
    if (Support.pointerEvents || Support.prefixedPointerEvents) {
      const ws = $wrapperEl[0].style;
      ws.perspectiveOrigin = `${center}px 50%`;
    }
  },
  setTransition(duration) {
    const swiper = this;
    swiper.slides
      .transition(duration)
      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
      .transition(duration);
  },
};

var EffectCoverflow = {
  name: 'effect-coverflow',
  params: {
    coverflowEffect: {
      rotate: 50,
      stretch: 0,
      depth: 100,
      scale: 1,
      modifier: 1,
      slideShadows: true,
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      coverflowEffect: {
        setTranslate: Coverflow.setTranslate.bind(swiper),
        setTransition: Coverflow.setTransition.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      if (swiper.params.effect !== 'coverflow') return;

      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);
      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);

      swiper.params.watchSlidesProgress = true;
      swiper.originalParams.watchSlidesProgress = true;
    },
    setTranslate() {
      const swiper = this;
      if (swiper.params.effect !== 'coverflow') return;
      swiper.coverflowEffect.setTranslate();
    },
    setTransition(duration) {
      const swiper = this;
      if (swiper.params.effect !== 'coverflow') return;
      swiper.coverflowEffect.setTransition(duration);
    },
  },
};

const Thumbs = {
  init() {
    const swiper = this;
    const { thumbs: thumbsParams } = swiper.params;
    const SwiperClass = swiper.constructor;
    if (thumbsParams.swiper instanceof SwiperClass) {
      swiper.thumbs.swiper = thumbsParams.swiper;
      Utils.extend(swiper.thumbs.swiper.originalParams, {
        watchSlidesProgress: true,
        slideToClickedSlide: false,
      });
      Utils.extend(swiper.thumbs.swiper.params, {
        watchSlidesProgress: true,
        slideToClickedSlide: false,
      });
    } else if (Utils.isObject(thumbsParams.swiper)) {
      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
        watchSlidesVisibility: true,
        watchSlidesProgress: true,
        slideToClickedSlide: false,
      }));
      swiper.thumbs.swiperCreated = true;
    }
    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
  },
  onThumbClick() {
    const swiper = this;
    const thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper) return;
    const clickedIndex = thumbsSwiper.clickedIndex;
    const clickedSlide = thumbsSwiper.clickedSlide;
    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
    let slideToIndex;
    if (thumbsSwiper.params.loop) {
      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
    } else {
      slideToIndex = clickedIndex;
    }
    if (swiper.params.loop) {
      let currentIndex = swiper.activeIndex;
      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
        swiper.loopFix();
        // eslint-disable-next-line
        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
        currentIndex = swiper.activeIndex;
      }
      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;
      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;
      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;
      else slideToIndex = prevIndex;
    }
    swiper.slideTo(slideToIndex);
  },
  update(initial) {
    const swiper = this;
    const thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper) return;

    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
      ? thumbsSwiper.slidesPerViewDynamic()
      : thumbsSwiper.params.slidesPerView;

    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
      let currentThumbsIndex = thumbsSwiper.activeIndex;
      let newThumbsIndex;
      let direction;
      if (thumbsSwiper.params.loop) {
        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
          thumbsSwiper.loopFix();
          // eslint-disable-next-line
          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
          currentThumbsIndex = thumbsSwiper.activeIndex;
        }
        // Find actual thumbs index to slide to
        const prevThumbsIndex = thumbsSwiper.slides
          .eq(currentThumbsIndex)
          .prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
          .index();
        const nextThumbsIndex = thumbsSwiper.slides
          .eq(currentThumbsIndex)
          .nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
          .index();
        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;
        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;
        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;
        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;
        else newThumbsIndex = prevThumbsIndex;
        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
      } else {
        newThumbsIndex = swiper.realIndex;
        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
      }
      if (useOffset) {
        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
      }

      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
        if (thumbsSwiper.params.centeredSlides) {
          if (newThumbsIndex > currentThumbsIndex) {
            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
          } else {
            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
          }
        } else if (newThumbsIndex > currentThumbsIndex) {
          newThumbsIndex = newThumbsIndex - slidesPerView + 1;
        }
        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
      }
    }

    // Activate thumbs
    let thumbsToActivate = 1;
    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;

    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
      thumbsToActivate = swiper.params.slidesPerView;
    }

    if (!swiper.params.thumbs.multipleActiveThumbs) {
      thumbsToActivate = 1;
    }

    thumbsToActivate = Math.floor(thumbsToActivate);

    thumbsSwiper.slides.removeClass(thumbActiveClass);
    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {
      for (let i = 0; i < thumbsToActivate; i += 1) {
        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass);
      }
    } else {
      for (let i = 0; i < thumbsToActivate; i += 1) {
        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);
      }
    }
  },
};
var Thumbs$1 = {
  name: 'thumbs',
  params: {
    thumbs: {
      swiper: null,
      multipleActiveThumbs: true,
      autoScrollOffset: 0,
      slideThumbActiveClass: 'swiper-slide-thumb-active',
      thumbsContainerClass: 'swiper-container-thumbs',
    },
  },
  create() {
    const swiper = this;
    Utils.extend(swiper, {
      thumbs: {
        swiper: null,
        init: Thumbs.init.bind(swiper),
        update: Thumbs.update.bind(swiper),
        onThumbClick: Thumbs.onThumbClick.bind(swiper),
      },
    });
  },
  on: {
    beforeInit() {
      const swiper = this;
      const { thumbs } = swiper.params;
      if (!thumbs || !thumbs.swiper) return;
      swiper.thumbs.init();
      swiper.thumbs.update(true);
    },
    slideChange() {
      const swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    update() {
      const swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    resize() {
      const swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    observerUpdate() {
      const swiper = this;
      if (!swiper.thumbs.swiper) return;
      swiper.thumbs.update();
    },
    setTransition(duration) {
      const swiper = this;
      const thumbsSwiper = swiper.thumbs.swiper;
      if (!thumbsSwiper) return;
      thumbsSwiper.setTransition(duration);
    },
    beforeDestroy() {
      const swiper = this;
      const thumbsSwiper = swiper.thumbs.swiper;
      if (!thumbsSwiper) return;
      if (swiper.thumbs.swiperCreated && thumbsSwiper) {
        thumbsSwiper.destroy();
      }
    },
  },
};

// Swiper Class

const components = [
  Device$1,
  Support$1,
  Browser$1,
  Resize,
  Observer$1,
  Virtual$1,
  Keyboard$1,
  Mousewheel$1,
  Navigation$1,
  Pagination$1,
  Scrollbar$1,
  Parallax$1,
  Zoom$1,
  Lazy$1,
  Controller$1,
  A11y,
  History$1,
  HashNavigation$1,
  Autoplay$1,
  EffectFade,
  EffectCube,
  EffectFlip,
  EffectCoverflow,
  Thumbs$1
];

if (typeof Swiper.use === 'undefined') {
  Swiper.use = Swiper.Class.use;
  Swiper.installModule = Swiper.Class.installModule;
}

Swiper.use(components);

/* harmony default export */ const swiper_esm_bundle = (Swiper);
//# sourceMappingURL=swiper.esm.bundle.js.map


/***/ }),

/***/ 90697:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {


/*!
 * vue-awesome-swiper v4.1.1
 * Copyright (c) Surmon. All rights reserved.
 * Released under the MIT License.
 * Surmon <https://github.com/surmon-china>
 */

(function(g,f){ true?f(exports,__webpack_require__(37003),__webpack_require__(72100)):0;}(this,(function(exports, SwiperClass, Vue){'use strict';SwiperClass=SwiperClass&&Object.prototype.hasOwnProperty.call(SwiperClass,'default')?SwiperClass['default']:SwiperClass;Vue=Vue&&Object.prototype.hasOwnProperty.call(Vue,'default')?Vue['default']:Vue;/**
 * @file vue-awesome-swiper
 * @module constants
 * @author Surmon <https://github.com/surmon-china>
 */
var CoreNames;
(function (CoreNames) {
    CoreNames["SwiperComponent"] = "Swiper";
    CoreNames["SwiperSlideComponent"] = "SwiperSlide";
    CoreNames["SwiperDirective"] = "swiper";
    CoreNames["SwiperInstance"] = "$swiper";
})(CoreNames || (CoreNames = {}));
var DEFAULT_CLASSES = Object.freeze({
    containerClass: 'swiper-container',
    wrapperClass: 'swiper-wrapper',
    slideClass: 'swiper-slide'
});
var ComponentEvents;
(function (ComponentEvents) {
    ComponentEvents["Ready"] = "ready";
    ComponentEvents["ClickSlide"] = "clickSlide";
})(ComponentEvents || (ComponentEvents = {}));
var ComponentPropNames;
(function (ComponentPropNames) {
    ComponentPropNames["AutoUpdate"] = "autoUpdate";
    ComponentPropNames["AutoDestroy"] = "autoDestroy";
    ComponentPropNames["DeleteInstanceOnDestroy"] = "deleteInstanceOnDestroy";
    ComponentPropNames["CleanupStylesOnDestroy"] = "cleanupStylesOnDestroy";
})(ComponentPropNames || (ComponentPropNames = {}));
// https://swiperjs.com/api/#events
var SWIPER_EVENTS = [
    'init',
    'beforeDestroy',
    'slideChange',
    'slideChangeTransitionStart',
    'slideChangeTransitionEnd',
    'slideNextTransitionStart',
    'slideNextTransitionEnd',
    'slidePrevTransitionStart',
    'slidePrevTransitionEnd',
    'transitionStart',
    'transitionEnd',
    'touchStart',
    'touchMove',
    'touchMoveOpposite',
    'sliderMove',
    'touchEnd',
    'click',
    'tap',
    'doubleTap',
    'imagesReady',
    'progress',
    'reachBeginning',
    'reachEnd',
    'fromEdge',
    'setTranslate',
    'setTransition',
    'resize',
    'observerUpdate',
    'beforeLoopFix',
    'loopFix'
];/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0

THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.

See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */

function __spreadArrays() {
    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
    for (var r = Array(s), k = 0, i = 0; i < il; i++)
        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
            r[k] = a[j];
    return r;
}/**
 * @file vue-awesome-swiper
 * @module utils
 * @author Surmon <https://github.com/surmon-china>
 */
var kebabcase = function (string) {
    return string
        .replace(/([a-z])([A-Z])/g, '$1-$2')
        .replace(/\s+/g, '-')
        .toLowerCase();
};/**
 * @file vue-awesome-swiper
 * @module event
 * @author Surmon <https://github.com/surmon-china>
 */
var handleClickSlideEvent = function (swiper, event, emit) {
    var _a, _b, _c;
    if (swiper && !(swiper.destroyed)) {
        var eventPath = ((_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)) || event.path;
        if ((event === null || event === void 0 ? void 0 : event.target) && eventPath) {
            var slides_1 = Array.from(swiper.slides);
            var paths = Array.from(eventPath);
            // Click slide || slide[children]
            if (slides_1.includes(event.target) || paths.some(function (item) { return slides_1.includes(item); })) {
                var clickedIndex = swiper.clickedIndex;
                var reallyIndex = Number((_c = (_b = swiper.clickedSlide) === null || _b === void 0 ? void 0 : _b.dataset) === null || _c === void 0 ? void 0 : _c.swiperSlideIndex);
                var reallyIndexValue = Number.isInteger(reallyIndex) ? reallyIndex : null;
                emit(ComponentEvents.ClickSlide, clickedIndex, reallyIndexValue);
                emit(kebabcase(ComponentEvents.ClickSlide), clickedIndex, reallyIndexValue);
            }
        }
    }
};
var bindSwiperEvents = function (swiper, emit) {
    SWIPER_EVENTS.forEach(function (eventName) {
        swiper.on(eventName, function () {
            var arguments$1 = arguments;

            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments$1[_i];
            }
            emit.apply(void 0, __spreadArrays([eventName], args));
            var kebabcaseName = kebabcase(eventName);
            if (kebabcaseName !== eventName) {
                emit.apply(void 0, __spreadArrays([kebabcaseName], args));
            }
        });
    });
};/**
 * @file vue-awesome-swiper
 * @module directive
 * @author Surmon <https://github.com/surmon-china>
 */
var INSTANCE_NAME_KEY = 'instanceName';
function getDirective(SwiperClass, globalOptions) {
    var getStandardisedOptionByAttrs = function (vnode, key) {
        var _a, _b, _c, _d;
        var value = (_b = (_a = vnode.data) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b[key];
        return value !== undefined
            ? value
            : (_d = (_c = vnode.data) === null || _c === void 0 ? void 0 : _c.attrs) === null || _d === void 0 ? void 0 : _d[kebabcase(key)];
    };
    // Get swiper instace name in directive
    var getSwiperInstanceName = function (element, binding, vnode) {
        return (binding.arg ||
            getStandardisedOptionByAttrs(vnode, INSTANCE_NAME_KEY) ||
            element.id ||
            CoreNames.SwiperInstance);
    };
    var getSwiperInstance = function (element, binding, vnode) {
        var instanceName = getSwiperInstanceName(element, binding, vnode);
        return vnode.context[instanceName] || null;
    };
    var getSwipeOptions = function (binding) {
        return binding.value || globalOptions;
    };
    var getBooleanValueByInput = function (input) {
        return [true, undefined, null, ''].includes(input);
    };
    // Emit event in Vue directive
    var getEventEmiter = function (vnode) {
        var _a, _b;
        var handlers = ((_a = vnode.data) === null || _a === void 0 ? void 0 : _a.on) || ((_b = vnode.componentOptions) === null || _b === void 0 ? void 0 : _b.listeners);
        return function (name) {
            var arguments$1 = arguments;

            var args = [];
            for (var _i = 1; _i < arguments.length; _i++) {
                args[_i - 1] = arguments$1[_i];
            }
            var _a;
            var handle = (_a = handlers) === null || _a === void 0 ? void 0 : _a[name];
            if (handle) {
                handle.fns.apply(handle, args);
            }
        };
    };
    return {
        // Init
        bind: function (element, binding, vnode) {
            // auto class name
            if (element.className.indexOf(DEFAULT_CLASSES.containerClass) === -1) {
                element.className += ((element.className ? ' ' : '') + DEFAULT_CLASSES.containerClass);
            }
            // bind click event
            element.addEventListener('click', function (event) {
                var emitEvent = getEventEmiter(vnode);
                var swiper = getSwiperInstance(element, binding, vnode);
                handleClickSlideEvent(swiper, event, emitEvent);
            });
        },
        // DOM inserted
        inserted: function (element, binding, vnode) {
            var context = vnode.context;
            var swiperOptions = getSwipeOptions(binding);
            var instanceName = getSwiperInstanceName(element, binding, vnode);
            var emitEvent = getEventEmiter(vnode);
            var vueContext = context;
            var swiper = vueContext === null || vueContext === void 0 ? void 0 : vueContext[instanceName];
            // Swiper will destroy but not delete instance, when used <keep-alive>
            if (!swiper || swiper.destroyed) {
                swiper = new SwiperClass(element, swiperOptions);
                vueContext[instanceName] = swiper;
                bindSwiperEvents(swiper, emitEvent);
                emitEvent(ComponentEvents.Ready, swiper);
                // MARK: Reinstance when the nexttick with <keep-alive>
                // Vue.nextTick(instancing) | setTimeout(instancing)
            }
        },
        // On options changed or DOM updated
        componentUpdated: function (element, binding, vnode) {
            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
            var autoUpdate = getStandardisedOptionByAttrs(vnode, ComponentPropNames.AutoUpdate);
            if (getBooleanValueByInput(autoUpdate)) {
                var swiper = getSwiperInstance(element, binding, vnode);
                if (swiper) {
                    var swiperOptions = getSwipeOptions(binding);
                    var isLoop = swiperOptions.loop;
                    if (isLoop) {
                        (_b = (_a = swiper) === null || _a === void 0 ? void 0 : _a.loopDestroy) === null || _b === void 0 ? void 0 : _b.call(_a);
                    }
                    (_c = swiper === null || swiper === void 0 ? void 0 : swiper.update) === null || _c === void 0 ? void 0 : _c.call(swiper);
                    (_e = (_d = swiper.navigation) === null || _d === void 0 ? void 0 : _d.update) === null || _e === void 0 ? void 0 : _e.call(_d);
                    (_g = (_f = swiper.pagination) === null || _f === void 0 ? void 0 : _f.render) === null || _g === void 0 ? void 0 : _g.call(_f);
                    (_j = (_h = swiper.pagination) === null || _h === void 0 ? void 0 : _h.update) === null || _j === void 0 ? void 0 : _j.call(_h);
                    if (isLoop) {
                        (_l = (_k = swiper) === null || _k === void 0 ? void 0 : _k.loopCreate) === null || _l === void 0 ? void 0 : _l.call(_k);
                        (_m = swiper === null || swiper === void 0 ? void 0 : swiper.update) === null || _m === void 0 ? void 0 : _m.call(swiper);
                    }
                }
            }
        },
        // Destroy this directive
        unbind: function (element, binding, vnode) {
            var _a;
            var autoDestroy = getStandardisedOptionByAttrs(vnode, ComponentPropNames.AutoDestroy);
            if (getBooleanValueByInput(autoDestroy)) {
                var swiper = getSwiperInstance(element, binding, vnode);
                if (swiper && swiper.initialized) {
                    (_a = swiper === null || swiper === void 0 ? void 0 : swiper.destroy) === null || _a === void 0 ? void 0 : _a.call(swiper, getBooleanValueByInput(getStandardisedOptionByAttrs(vnode, ComponentPropNames.DeleteInstanceOnDestroy)), getBooleanValueByInput(getStandardisedOptionByAttrs(vnode, ComponentPropNames.CleanupStylesOnDestroy)));
                }
            }
        }
    };
}/**
 * @file vue-awesome-swiper
 * @module SwiperComponent
 * @author Surmon <https://github.com/surmon-china>
 */
var SlotNames;
(function (SlotNames) {
    SlotNames["ParallaxBg"] = "parallax-bg";
    SlotNames["Pagination"] = "pagination";
    SlotNames["Scrollbar"] = "scrollbar";
    SlotNames["PrevButton"] = "button-prev";
    SlotNames["NextButton"] = "button-next";
})(SlotNames || (SlotNames = {}));
function getSwiperComponent(SwiperClass) {
    var _a;
    return Vue.extend({
        name: CoreNames.SwiperComponent,
        props: (_a = {
                defaultOptions: {
                    type: Object,
                    required: false,
                    default: function () { return ({}); }
                },
                // eslint-disable-next-line vue/require-default-prop
                options: {
                    type: Object,
                    required: false
                }
            },
            _a[ComponentPropNames.AutoUpdate] = {
                type: Boolean,
                default: true
            },
            // https://github.com/surmon-china/vue-awesome-swiper/pull/550/files
            _a[ComponentPropNames.AutoDestroy] = {
                type: Boolean,
                default: true
            },
            // https://github.com/surmon-china/vue-awesome-swiper/pull/388
            _a[ComponentPropNames.DeleteInstanceOnDestroy] = {
                type: Boolean,
                required: false,
                default: true
            },
            _a[ComponentPropNames.CleanupStylesOnDestroy] = {
                type: Boolean,
                required: false,
                default: true
            },
            _a),
        data: function () {
            var _a;
            return _a = {},
                _a[CoreNames.SwiperInstance] = null,
                _a;
        },
        computed: {
            swiperInstance: {
                cache: false,
                set: function (swiper) {
                    this[CoreNames.SwiperInstance] = swiper;
                },
                get: function () {
                    return this[CoreNames.SwiperInstance];
                }
            },
            swiperOptions: function () {
                return this.options || this.defaultOptions;
            },
            wrapperClass: function () {
                return this.swiperOptions.wrapperClass || DEFAULT_CLASSES.wrapperClass;
            }
        },
        methods: {
            // Feature: click event
            handleSwiperClick: function (event) {
                handleClickSlideEvent(this.swiperInstance, event, this.$emit.bind(this));
            },
            autoReLoopSwiper: function () {
                var _a, _b;
                if (this.swiperInstance && this.swiperOptions.loop) {
                    // https://github.com/surmon-china/vue-awesome-swiper/issues/593
                    // https://github.com/surmon-china/vue-awesome-swiper/issues/544
                    // https://github.com/surmon-china/vue-awesome-swiper/pull/545/files
                    var swiper = this.swiperInstance;
                    (_a = swiper === null || swiper === void 0 ? void 0 : swiper.loopDestroy) === null || _a === void 0 ? void 0 : _a.call(swiper);
                    (_b = swiper === null || swiper === void 0 ? void 0 : swiper.loopCreate) === null || _b === void 0 ? void 0 : _b.call(swiper);
                }
            },
            updateSwiper: function () {
                var _a, _b, _c, _d, _e, _f, _g, _h;
                if (this[ComponentPropNames.AutoUpdate] && this.swiperInstance) {
                    this.autoReLoopSwiper();
                    (_b = (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.update) === null || _b === void 0 ? void 0 : _b.call(_a);
                    (_d = (_c = this.swiperInstance.navigation) === null || _c === void 0 ? void 0 : _c.update) === null || _d === void 0 ? void 0 : _d.call(_c);
                    (_f = (_e = this.swiperInstance.pagination) === null || _e === void 0 ? void 0 : _e.render) === null || _f === void 0 ? void 0 : _f.call(_e);
                    (_h = (_g = this.swiperInstance.pagination) === null || _g === void 0 ? void 0 : _g.update) === null || _h === void 0 ? void 0 : _h.call(_g);
                }
            },
            destroySwiper: function () {
                var _a, _b;
                if (this[ComponentPropNames.AutoDestroy] && this.swiperInstance) {
                    // https://github.com/surmon-china/vue-awesome-swiper/pull/341
                    // https://github.com/surmon-china/vue-awesome-swiper/issues/340
                    if (this.swiperInstance.initialized) {
                        (_b = (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a, this[ComponentPropNames.DeleteInstanceOnDestroy], this[ComponentPropNames.CleanupStylesOnDestroy]);
                    }
                }
            },
            initSwiper: function () {
                this.swiperInstance = new SwiperClass(this.$el, this.swiperOptions);
                bindSwiperEvents(this.swiperInstance, this.$emit.bind(this));
                this.$emit(ComponentEvents.Ready, this.swiperInstance);
            }
        },
        mounted: function () {
            if (!this.swiperInstance) {
                this.initSwiper();
            }
        },
        // Update swiper when the parent component activated with `keep-alive`.
        activated: function () {
            this.updateSwiper();
        },
        updated: function () {
            this.updateSwiper();
        },
        beforeDestroy: function () {
            // https://github.com/surmon-china/vue-awesome-swiper/commit/2924a9d4d3d1cf51c0d46076410b1f804b2b8a43#diff-7f4e0261ac562c0f354cb91a1ca8864f
            this.$nextTick(this.destroySwiper);
        },
        render: function (createElement) {
            return createElement('div', {
                staticClass: DEFAULT_CLASSES.containerClass,
                on: {
                    click: this.handleSwiperClick
                }
            }, [
                this.$slots[SlotNames.ParallaxBg],
                createElement('div', {
                    class: this.wrapperClass
                }, this.$slots.default),
                this.$slots[SlotNames.Pagination],
                this.$slots[SlotNames.PrevButton],
                this.$slots[SlotNames.NextButton],
                this.$slots[SlotNames.Scrollbar]
            ]);
        }
    });
}/**
 * @file vue-awesome-swiper
 * @module SwiperSlideComponent
 * @author Surmon <https://github.com/surmon-china>
 */
var SwiperSlideComponent = Vue.extend({
    name: CoreNames.SwiperSlideComponent,
    computed: {
        slideClass: function () {
            var _a, _b;
            return ((_b = (_a = this.$parent) === null || _a === void 0 ? void 0 : _a.swiperOptions) === null || _b === void 0 ? void 0 : _b.slideClass) || DEFAULT_CLASSES.slideClass;
        }
    },
    methods: {
        update: function () {
            var _a;
            var parent = this.$parent;
            // https://github.com/surmon-china/vue-awesome-swiper/issues/632
            if (parent[ComponentPropNames.AutoUpdate]) {
                (_a = parent === null || parent === void 0 ? void 0 : parent.swiperInstance) === null || _a === void 0 ? void 0 : _a.update();
            }
        }
    },
    mounted: function () {
        this.update();
    },
    updated: function () {
        this.update();
    },
    render: function (createElement) {
        return createElement('div', {
            class: this.slideClass
        }, this.$slots.default);
    }
});/**
 * @file vue-awesome-swiper
 * @module exporter
 * @author Surmon <https://github.com/surmon-china>
 */
var getInstaller = function (SwiperClass) {
    var install = function (Vue, globalOptions) {
        if (install.installed)
            { return; }
        var SwiperComponent = getSwiperComponent(SwiperClass);
        if (globalOptions) {
            SwiperComponent.options.props.defaultOptions.default = function () { return globalOptions; };
        }
        Vue.component(CoreNames.SwiperComponent, SwiperComponent);
        Vue.component(CoreNames.SwiperSlideComponent, SwiperSlideComponent);
        Vue.directive(CoreNames.SwiperDirective, getDirective(SwiperClass, globalOptions));
        install.installed = true;
    };
    return install;
};
function exporter(SwiperClass) {
    var _a;
    return _a = {
            version: '4.1.1',
            install: getInstaller(SwiperClass),
            directive: getDirective(SwiperClass)
        },
        _a[CoreNames.SwiperComponent] = getSwiperComponent(SwiperClass),
        _a[CoreNames.SwiperSlideComponent] = SwiperSlideComponent,
        _a;
}/**
 * @file vue-awesome-swiper
 * @module default-export
 * @author Surmon <https://github.com/surmon-china>
 */
var VueAwesomeSwiper = exporter(SwiperClass);
var version = VueAwesomeSwiper.version;
var install = VueAwesomeSwiper.install;
var directive = VueAwesomeSwiper.directive;
var Swiper = VueAwesomeSwiper.Swiper;
var SwiperSlide = VueAwesomeSwiper.SwiperSlide;exports.Swiper=Swiper;exports.SwiperSlide=SwiperSlide;exports.default=VueAwesomeSwiper;exports.directive=directive;exports.install=install;exports.version=version;Object.defineProperty(exports,'__esModule',{value:true});})));

/***/ }),

/***/ 8957:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ AccessiableSelect)
});

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/index-of.js
var index_of = __webpack_require__(51791);
var index_of_default = /*#__PURE__*/__webpack_require__.n(index_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/AccessiableSelect/index.vue?vue&type=template&id=616f6ac1




var render = function render() {
  var _context7;
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    directives: [{
      name: "clickoutside",
      rawName: "v-clickoutside",
      value: _vm.handleClose,
      expression: "handleClose"
    }],
    staticClass: "el-select",
    "class": [_vm.selectSize ? "el-select--" + _vm.selectSize : "", {
      "is-multiple": _vm.multiple
    }],
    on: {
      click: function click($event) {
        $event.stopPropagation();
        return _vm.toggleMenu.apply(null, arguments);
      }
    }
  }, [_vm.multiple ? _c("div", {
    ref: "tags",
    staticClass: "el-select__tags",
    style: {
      "max-width": _vm.inputWidth - 32 + "px",
      width: "100%"
    }
  }, [_vm.collapseTags && _vm.selected.length ? _c("span", [_c("el-tag", {
    attrs: {
      closable: !_vm.selectDisabled,
      size: _vm.collapseTagSize,
      hit: _vm.selected[0].hitState,
      type: "info",
      "disable-transitions": ""
    },
    on: {
      close: function close($event) {
        return _vm.deleteTag($event, _vm.selected[0]);
      }
    }
  }, [_c("span", {
    staticClass: "el-select__tags-text"
  }, [_vm._v(_vm._s(_vm.selected[0].currentLabel))])]), _vm._v(" "), _vm.selected.length > 1 ? _c("el-tag", {
    attrs: {
      closable: false,
      size: _vm.collapseTagSize,
      type: "info",
      "disable-transitions": ""
    }
  }, [_c("span", {
    staticClass: "el-select__tags-text"
  }, [_vm._v("+ " + _vm._s(_vm.selected.length - 1))])]) : _vm._e()], 1) : _vm._e(), _vm._v(" "), !_vm.collapseTags ? _c("transition-group", {
    on: {
      "after-leave": _vm.resetInputHeight
    }
  }, _vm._l(_vm.selected, function (item) {
    return _c("el-tag", {
      key: _vm.getValueKey(item),
      attrs: {
        closable: !_vm.selectDisabled,
        size: _vm.collapseTagSize,
        hit: item.hitState,
        type: "info",
        "disable-transitions": ""
      },
      on: {
        close: function close($event) {
          return _vm.deleteTag($event, item);
        }
      }
    }, [_c("span", {
      staticClass: "el-select__tags-text"
    }, [_vm._v(_vm._s(item.currentLabel))])]);
  }), 1) : _vm._e(), _vm._v(" "), _vm.filterable ? _c("input", {
    directives: [{
      name: "model",
      rawName: "v-model",
      value: _vm.query,
      expression: "query"
    }],
    ref: "input",
    staticClass: "el-select__input",
    "class": [_vm.selectSize ? "is-".concat(_vm.selectSize) : ""],
    style: {
      "flex-grow": "1",
      width: _vm.inputLength / (_vm.inputWidth - 32) + "%",
      "max-width": _vm.inputWidth - 42 + "px"
    },
    attrs: {
      type: "text",
      disabled: _vm.selectDisabled,
      autocomplete: _vm.autoComplete || _vm.autocomplete
    },
    domProps: {
      value: _vm.query
    },
    on: {
      focus: _vm.handleFocus,
      blur: function blur($event) {
        _vm.softFocus = false;
      },
      keyup: _vm.managePlaceholder,
      keydown: [_vm.resetInputState, function ($event) {
        var _context;
        if (!index_of_default()(_context = $event.type).call(_context, "key") && _vm._k($event.keyCode, "down", 40, $event.key, ["Down", "ArrowDown"])) return null;
        $event.preventDefault();
        return _vm.handleNavigate("next");
      }, function ($event) {
        var _context2;
        if (!index_of_default()(_context2 = $event.type).call(_context2, "key") && _vm._k($event.keyCode, "up", 38, $event.key, ["Up", "ArrowUp"])) return null;
        $event.preventDefault();
        return _vm.handleNavigate("prev");
      }, function ($event) {
        var _context3;
        if (!index_of_default()(_context3 = $event.type).call(_context3, "key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
        $event.preventDefault();
        return _vm.selectOption.apply(null, arguments);
      }, function ($event) {
        var _context4;
        if (!index_of_default()(_context4 = $event.type).call(_context4, "key") && _vm._k($event.keyCode, "esc", 27, $event.key, ["Esc", "Escape"])) return null;
        $event.stopPropagation();
        $event.preventDefault();
        _vm.visible = false;
      }, function ($event) {
        var _context5;
        if (!index_of_default()(_context5 = $event.type).call(_context5, "key") && _vm._k($event.keyCode, "delete", [8, 46], $event.key, ["Backspace", "Delete", "Del"])) return null;
        return _vm.deletePrevTag.apply(null, arguments);
      }, function ($event) {
        var _context6;
        if (!index_of_default()(_context6 = $event.type).call(_context6, "key") && _vm._k($event.keyCode, "tab", 9, $event.key, "Tab")) return null;
        _vm.visible = false;
      }],
      compositionstart: _vm.handleComposition,
      compositionupdate: _vm.handleComposition,
      compositionend: _vm.handleComposition,
      input: [function ($event) {
        if ($event.target.composing) return;
        _vm.query = $event.target.value;
      }, _vm.debouncedQueryChange]
    }
  }) : _vm._e()], 1) : _vm._e(), _vm._v(" "), _c("el-input", _vm._b({
    ref: "reference",
    "class": {
      "is-focus": _vm.visible
    },
    attrs: {
      value: _vm.multiple ? map_default()(_context7 = _vm.selected).call(_context7, function (item) {
        return item.currentLabel;
      }).join("; ") : _vm.selectedLabel,
      type: "text",
      placeholder: _vm.currentPlaceholder,
      name: _vm.name,
      id: _vm.id,
      autocomplete: _vm.autoComplete || _vm.autocomplete,
      size: _vm.selectSize,
      disabled: _vm.selectDisabled,
      readonly: _vm.readonly,
      "validate-event": false,
      tabindex: _vm.multiple && _vm.filterable ? "-1" : null,
      role: "combobox",
      "aria-expanded": "".concat(_vm.visible),
      "aria-haspopup": "listbox",
      "aria-owns": _vm.listboxId,
      "aria-autocomplete": "list",
      "aria-controls": _vm.listboxId,
      "aria-activedescendant": _vm.activedescendant,
      "aria-labelledby": _vm.labelledby || false
    },
    on: {
      focus: _vm.handleFocus,
      blur: _vm.handleBlur,
      input: _vm.handleReferenceInput,
      compositionstart: _vm.handleComposition,
      compositionupdate: _vm.handleComposition,
      compositionend: _vm.handleComposition
    },
    nativeOn: {
      keydown: [function ($event) {
        var _context8;
        if (!index_of_default()(_context8 = $event.type).call(_context8, "key") && _vm._k($event.keyCode, "down", 40, $event.key, ["Down", "ArrowDown"])) return null;
        $event.stopPropagation();
        $event.preventDefault();
        return _vm.handleNavigate("next");
      }, function ($event) {
        var _context9;
        if (!index_of_default()(_context9 = $event.type).call(_context9, "key") && _vm._k($event.keyCode, "up", 38, $event.key, ["Up", "ArrowUp"])) return null;
        $event.stopPropagation();
        $event.preventDefault();
        return _vm.handleNavigate("prev");
      }, function ($event) {
        var _context10;
        if (!index_of_default()(_context10 = $event.type).call(_context10, "key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
        $event.preventDefault();
        return _vm.selectOption.apply(null, arguments);
      }, function ($event) {
        var _context11;
        if (!index_of_default()(_context11 = $event.type).call(_context11, "key") && _vm._k($event.keyCode, "esc", 27, $event.key, ["Esc", "Escape"])) return null;
        $event.stopPropagation();
        $event.preventDefault();
        _vm.visible = false;
      }, function ($event) {
        var _context12;
        if (!index_of_default()(_context12 = $event.type).call(_context12, "key") && _vm._k($event.keyCode, "tab", 9, $event.key, "Tab")) return null;
        _vm.visible = false;
      }],
      mouseenter: function mouseenter($event) {
        _vm.inputHovering = true;
      },
      mouseleave: function mouseleave($event) {
        _vm.inputHovering = false;
      }
    }
  }, "el-input", _vm.inputAttrs, false), [_vm.$slots.prefix ? _c("template", {
    slot: "prefix"
  }, [_vm._t("prefix")], 2) : _vm._e(), _vm._v(" "), _c("template", {
    slot: "suffix"
  }, [_c("span", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: !_vm.showClose,
      expression: "!showClose"
    }],
    staticClass: "inline-block el-select__caret el-input__icon",
    "class": _vm.visible ? "" : "is-reverse",
    staticStyle: {
      "user-select": "none",
      "-webkit-user-select": "none"
    },
    attrs: {
      unselectable: "on",
      "aria-hidden": "true"
    }
  }, [_c("span", {
    staticClass: "inline-block leading-[0] align-middle",
    attrs: {
      role: "img",
      "aria-label": "down"
    }
  }, [_c("svg", {
    attrs: {
      viewBox: "0 0 100 100",
      focusable: "false",
      "data-icon": "down",
      width: "1em",
      height: "1em",
      fill: "currentColor",
      "aria-hidden": "true"
    }
  }, [_c("path", {
    attrs: {
      d: "M81.3 33.3L81.3 33.3L50 63.8L18.8 33.3Q17.9 32.4 16.7 32.4Q15.5 32.4 14.6 33.3Q13.8 34.2 13.8 35.4Q13.8 36.5 14.6 37.3L14.6 37.3L47.9 69.7Q48.7 70.6 50 70.6Q51.3 70.6 52.1 69.7L52.1 69.7L85.4 37.4Q86.2 36.5 86.2 35.3Q86.2 34.1 85.4 33.3Q84.5 32.4 83.3 32.4Q82.1 32.4 81.3 33.3Z"
    }
  })])])]), _vm._v(" "), _vm.showClose ? _c("i", {
    staticClass: "el-select__caret el-input__icon el-icon-circle-close",
    on: {
      click: _vm.handleClearClick
    }
  }) : _vm._e()])], 2), _vm._v(" "), _c("transition", {
    attrs: {
      name: "el-zoom-in-top"
    },
    on: {
      "before-enter": _vm.handleMenuEnter,
      "after-leave": _vm.doDestroy
    }
  }, [_c("el-select-menu", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.visible && _vm.emptyText !== false,
      expression: "visible && emptyText !== false"
    }],
    ref: "popper",
    attrs: {
      "append-to-body": _vm.popperAppendToBody
    }
  }, [_vm._t("listbox"), _vm._v(" "), _c("el-scrollbar", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.options.length > 0 && !_vm.loading,
      expression: "options.length > 0 && !loading"
    }],
    ref: "scrollbar",
    "class": {
      "is-empty": !_vm.allowCreate && _vm.query && _vm.filteredOptionsCount === 0
    },
    attrs: {
      tag: "ul",
      "wrap-class": "el-select-dropdown__wrap",
      "view-class": "el-select-dropdown__list"
    }
  }, [_vm.showNewOption ? _c("el-option", {
    attrs: {
      value: _vm.query,
      created: ""
    }
  }) : _vm._e(), _vm._v(" "), _vm._t("default")], 2), _vm._v(" "), _vm.emptyText && (!_vm.allowCreate || _vm.loading || _vm.allowCreate && _vm.options.length === 0) ? [_vm.$slots.empty ? _vm._t("empty") : _c("p", {
    staticClass: "el-select-dropdown__empty"
  }, [_vm._v("\n          " + _vm._s(_vm.emptyText) + "\n        ")])] : _vm._e()], 2)], 1)], 1);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/component/layout/index/components/AccessiableSelect/index.vue?vue&type=template&id=616f6ac1

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/AccessiableSelect/index.vue?vue&type=script&lang=js


/* harmony default export */ const AccessiableSelectvue_type_script_lang_js = ({
  "extends": element_ui_common.Select,
  props: {
    listboxId: {
      type: String,
      "default": 'locale-listbox'
    },
    ariaOptionIdPrefix: {
      type: String,
      required: true
    },
    labelledby: {
      type: String
    },
    inputAttrs: {
      type: Object,
      "default": function _default() {
        return {};
      }
    }
  },
  computed: {
    activedescendant: function activedescendant() {
      var _context;
      return this.visible ? concat_default()(_context = "".concat(this.ariaOptionIdPrefix)).call(_context, this.hoverIndex) : null;
    }
  },
  methods: {
    handleReferenceInput: function handleReferenceInput(val) {
      if (!this.multiple) {
        this.selectedLabel = val;
      }
      this.debouncedOnInputChange(val);
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/AccessiableSelect/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_AccessiableSelectvue_type_script_lang_js = (AccessiableSelectvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/AccessiableSelect/index.vue





/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_AccessiableSelectvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const AccessiableSelect = (component.exports);

/***/ }),

/***/ 43984:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ pixelImage)
});

;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/pixelImage/index.vue?vue&type=template&id=7817c0b1
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("picture", {
    ref: "picture-" + _vm.id,
    attrs: {
      id: "picture-" + _vm.id
    }
  }, [_c("source", {
    ref: "source-" + _vm.id,
    attrs: {
      "data-origin": _vm.webpSrc
    }
  }), _vm._v(" "), _c("img", {
    ref: "img-" + _vm.id,
    "class": _vm.classNames4img,
    attrs: {
      "data-origin": _vm.src,
      alt: _vm.alt
    }
  })]);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/component/layout/index/components/pixelImage/index.vue?vue&type=template&id=7817c0b1

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/parse-int.js
var parse_int = __webpack_require__(34300);
var parse_int_default = /*#__PURE__*/__webpack_require__.n(parse_int);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.date.to-string.js
var es_date_to_string = __webpack_require__(30024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/component/layout/index/components/pixelImage/index.vue?vue&type=script&lang=js




/* harmony default export */ const pixelImagevue_type_script_lang_js = ({
  name: 'PixelImage',
  components: {},
  props: {
    notCopyCls2Img: {
      type: Boolean,
      "default": false
    },
    src: {
      type: String,
      required: true
    },
    webpSrc: {
      type: String
    },
    srcset: {
      type: String
    },
    lazyload: {
      type: Boolean,
      "default": true
    },
    width: {
      //在基准下的图片宽
      type: Number,
      "default": 0
    },
    height: {
      //在基准下的图片宽
      type: Number,
      "default": 0
    },
    quality: {
      type: Number,
      "default": 80
    },
    alt: {
      type: String,
      "default": ''
    },
    name: {
      type: String,
      "default": ''
    }
  },
  data: function data() {
    return {
      id: 0,
      EASY_ENV_IS_BROWSER: true
    };
  },
  computed: {
    classNames4img: function classNames4img() {
      var _class = this.lazyload ? ['lazyload'] : [];
      var pictureClass = '';
      if (!this.notCopyCls2Img && true) {
        pictureClass = this.$el ? this.$el.className : '';
      }
      _class.push(this.$attrs, pictureClass, this.name);
      return _class;
    }
  },
  created: function created() {
    var _this = this;
    if (true) {
      var id = new Date().getTime() + this.$getRandomNumber(10000, 99999);
      this.id = id;
      this.$nextTick(function () {
        var width = _this.width,
          height = _this.height;
        var imgEl = _this.$refs['img-' + id];
        var sourceEl = _this.$refs['source-' + id];
        var pictureEl = _this.$refs['picture-' + id];
        var dataSrc = imgEl.dataset.origin;
        var dpr = window.devicePixelRatio || 1;

        // let baseWidth = this.$root.platform === 'mobile' ? 750 : 1920;
        if (!width) {
          var boxWidth = pictureEl.parentNode.clientWidth;
          width = boxWidth * dpr;
        }
        // 在基准下的图片大小
        var isSupportWebp = false;
        width = parse_int_default()(width);
        height = parse_int_default()(height * dpr);
        var formate_str = _this.$helper.getOssImageHandleUrl(dataSrc, width, height, isSupportWebp, 80);
        imgEl.dataset.src = formate_str;
        sourceEl.dataset.srcset = formate_str;
        if (!_this.lazyload) {
          imgEl.src = formate_str;
          sourceEl.srcset = formate_str;
        }
        imgEl.onload = function () {
          _this.$emit('onload', _this.name);
        };
      });
    }
  }
});
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/pixelImage/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_pixelImagevue_type_script_lang_js = (pixelImagevue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/component/layout/index/components/pixelImage/index.vue





/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_pixelImagevue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const pixelImage = (component.exports);

/***/ }),

/***/ 32615:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ CompareLink)
});

// EXTERNAL MODULE: ./node_modules/@vue/babel-helper-vue-jsx-merge-props/dist/helper.js
var helper = __webpack_require__(36568);
var helper_default = /*#__PURE__*/__webpack_require__.n(helper);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/comparewatch/CompareLink/index.vue?vue&type=script&lang=js


/* harmony default export */ const CompareLinkvue_type_script_lang_js = ({
  name: 'CompareLink',
  functional: true,
  props: {
    href: {
      type: String,
      "default": 'comparison'
    }
  },
  render: function render(h, _ref) {
    var props = _ref.props,
      children = _ref.children,
      data = _ref.data;
    return h("a", helper_default()([{
      "class": "compare-link",
      "attrs": {
        "href": props.href
      }
    }, data]), [h("span", {
      "class": "compare-link__inner"
    }, [children])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/comparewatch/CompareLink/index.vue?vue&type=script&lang=js
 /* harmony default export */ const comparewatch_CompareLinkvue_type_script_lang_js = (CompareLinkvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/comparewatch/CompareLink/index.vue?vue&type=style&index=0&id=790461ff&prod&lang=scss
var CompareLinkvue_type_style_index_0_id_790461ff_prod_lang_scss = __webpack_require__(68182);
;// CONCATENATED MODULE: ./app/web/projects/www/comparewatch/CompareLink/index.vue?vue&type=style&index=0&id=790461ff&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/comparewatch/CompareLink/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  comparewatch_CompareLinkvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const CompareLink = (component.exports);

/***/ }),

/***/ 754:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "ZP": () => (/* binding */ AutoPlayOrPauseVideoInView)
});

// UNUSED EXPORTS: ENDED, PAUSED, PLAYING

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-timeout.js
var set_timeout = __webpack_require__(9938);
var set_timeout_default = /*#__PURE__*/__webpack_require__.n(set_timeout);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-interval.js
var set_interval = __webpack_require__(34652);
var set_interval_default = /*#__PURE__*/__webpack_require__.n(set_interval);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
// EXTERNAL MODULE: ./node_modules/gsap/index.js + 2 modules
var gsap = __webpack_require__(66358);
// EXTERNAL MODULE: ./node_modules/gsap/ScrollTrigger.js + 1 modules
var ScrollTrigger = __webpack_require__(49092);
// EXTERNAL MODULE: ./node_modules/portal-vue/dist/portal-vue.common.js
var portal_vue_common = __webpack_require__(72433);
// EXTERNAL MODULE: ./app/web/projects/www/components/VideoWithScrollControll/index.vue + 5 modules
var VideoWithScrollControll = __webpack_require__(49394);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/AutoPlayOrPauseVideoInView/index.vue?vue&type=script&lang=js






var PLAYING = 'playing';
var PAUSED = 'paused';
var ENDED = 'ended';


/* harmony default export */ const AutoPlayOrPauseVideoInViewvue_type_script_lang_js = ({
  components: {
    Portal: portal_vue_common/* Portal */.h_
  },
  props: {
    /**
     * The element to which the scroll trigger is applied.
     */
    scroller: {
      type: String,
      "default": 'body'
    },
    /**
     * start position
     */
    start: {
      type: String,
      "default": 'top center-=100'
    },
    /**
     * end position
     */
    end: {
      type: String,
      "default": 'bottom center'
    },
    /**
     * Wrapper class for manual button
     */
    buttonWrapperClass: {
      type: String,
      "default": 'text-center mt-15 md:mt-md-15 md:text-md-35'
    },
    /**
     * Hide manual button
     */
    hideManualBtn: {
      type: Boolean,
      "default": false
    },
    /**
     * Compose with play, pause, replay
     */
    manualBtnAriaLabelSuffix: {
      type: String,
      "default": ''
    },
    /**
     * Portal to specific target(especially for outside)
     */
    portalTo: {
      type: String,
      "default": ''
    },
    debug: {
      type: Boolean,
      "default": false
    },
    /**
     * Trigger once for scroll trigger(change would not affect after scrollTrigger is inited)
     */
    triggerOnce: {
      type: Boolean,
      "default": false
    }
  },
  data: function data() {
    return {
      previewVideoStatus: ''
    };
  },
  computed: {
    videoBtnText: function videoBtnText() {
      if (this.isPreviewVideoEnded) {
        return this.$t('common.video.replay');
      }
      return this.isPreviewVideoPlaying ? this.$t('common.video.pause') : this.$t('common.video.play');
    },
    videoBtnAriaLabel: function videoBtnAriaLabel() {
      if (this.manualBtnAriaLabelSuffix) {
        var _context;
        return concat_default()(_context = "".concat(this.videoBtnText, " ")).call(_context, this.manualBtnAriaLabelSuffix);
      }
      return this.videoBtnText;
    },
    isPreviewVideoPlaying: function isPreviewVideoPlaying() {
      return this.previewVideoStatus === PLAYING;
    },
    isPreviewVideoPaused: function isPreviewVideoPaused() {
      return this.previewVideoStatus === PAUSED;
    },
    isPreviewVideoEnded: function isPreviewVideoEnded() {
      return this.previewVideoStatus === ENDED;
    }
  },
  mounted: function mounted() {
    this.initScrollTrigger();
  },
  methods: {
    initScrollTrigger: function initScrollTrigger() {
      var _this = this;
      gsap/* default.registerPlugin */.ZP.registerPlugin(ScrollTrigger/* default */.Z);
      this.videoEl = this.$slots["default"][0].elm;
      if (this.videoEl) {
        if (this.$dataBus.isMobile) {
          var _hack4mobile = function hack4mobile() {
            _this.videoEl.play();
            set_timeout_default()(function () {
              _this.videoEl.pause();
            });
            window.removeEventListener('scroll', _hack4mobile);
          };
          window.addEventListener('scroll', _hack4mobile);
        }
        var trigger = ScrollTrigger/* default.create */.Z.create({
          trigger: this.videoEl,
          scroller: this.scroller,
          start: this.start,
          end: this.end,
          markers: this.debug,
          once: this.triggerOnce,
          onEnter: function onEnter() {
            if (_this.isVisible()) {
              _this.videoEl.play();
              if (_this.debug) {
                console.log('onEnter', _this.videoEl);
              }
            }
          },
          onEnterBack: function onEnterBack() {
            if (_this.isVisible()) {
              _this.videoEl.play();
              if (_this.debug) {
                console.log('onEnterBack', _this.videoEl);
              }
            }
          },
          onLeave: function onLeave() {
            if (_this.triggerOnce) {
              return;
            }
            if (_this.isVisible()) {
              _this.videoEl.pause();
              if (_this.debug) {
                console.log('onLeave', _this.videoEl);
              }
            }
          },
          onLeaveBack: function onLeaveBack() {
            if (_this.triggerOnce) {
              return;
            }
            if (_this.isVisible()) {
              _this.videoEl.pause();
              if (_this.debug) {
                console.log('onLeaveBack', _this.videoEl);
              }
            }
          }
        });
        var scrollerEl = document.querySelector(this.scroller);
        var missMatchTimes = 0;
        var scrollHeight4scroller = scrollerEl.scrollHeight;
        var timer = set_interval_default()(function () {
          if (scrollHeight4scroller !== scrollerEl.scrollHeight) {
            scrollHeight4scroller = scrollerEl.scrollHeight;
            trigger.refresh(true);
            missMatchTimes++;
          }
          if (missMatchTimes > 10) {
            clearInterval(timer);
          }
        }, 300);
        this.videoEl.addEventListener('play', this.handleVideoPlay);
        this.videoEl.addEventListener('pause', this.handleVideoPaused);
        this.videoEl.addEventListener('ended', this.handleVideoEnded);
        this.$once('hook:beforeDestroy', function () {
          _this.videoEl.removeEventListener('play', _this.handleVideoPlay);
          _this.videoEl.removeEventListener('pause', _this.handleVideoPaused);
          _this.videoEl.removeEventListener('ended', _this.handleVideoEnded);
          trigger.kill();
          _this.videoEl = null;
        });
        if (this.$dataBus.isMobile) {
          (0,VideoWithScrollControll/* once */.I)(document.documentElement, 'touchstart', function (e) {
            _this.videoEl.play();
            _this.videoEl.pause();
          });
        }
      }
    },
    isVisible: function isVisible() {
      if (this.$el.offsetParent === null) {
        return false;
      }
      if (getComputedStyle(this.$el.parentElement).opacity === '0') {
        return false;
      }
      return true;
    },
    handleVideoPlay: function handleVideoPlay() {
      this.previewVideoStatus = PLAYING;
      this.$emit('video-status-change', PLAYING);
    },
    handleVideoPaused: function handleVideoPaused() {
      this.previewVideoStatus = PAUSED;
      this.$emit('video-status-change', PAUSED);
    },
    handleVideoEnded: function handleVideoEnded() {
      this.previewVideoStatus = ENDED;
      this.$emit('video-status-change', ENDED);
    },
    togglePreviewVideo: function togglePreviewVideo() {
      if (this.previewVideoStatus === PLAYING) {
        this.videoEl.pause();
        this.previewVideoStatus = PAUSED;
      } else {
        this.videoEl.play();
        this.previewVideoStatus = PLAYING;
      }
    }
  },
  render: function render() {
    return (0,vue_common_prod.h)("div", [this.$slots["default"][0], this.$dataBus.isUs && !this.hideManualBtn ? (0,vue_common_prod.h)(portal_vue_common/* Portal */.h_, {
      "key": "video-op",
      "attrs": {
        "to": this.portalTo,
        "disabled": !this.portalTo
      },
      "class": this.buttonWrapperClass
    }, [(0,vue_common_prod.h)("button", {
      "class": {
        'text-inherit control bg-transparent border-0 leading-none': true,
        'is-playing': this.isPreviewVideoPlaying,
        'is-paused': this.isPreviewVideoPaused,
        invisible: this.videopreisshow
      },
      "attrs": {
        "aria-label": this.videoBtnAriaLabel
      },
      "on": {
        "click": this.togglePreviewVideo
      }
    }, [this.videoBtnText, (0,vue_common_prod.h)("i", {
      "class": {
        'el-icon-refresh-right': this.isPreviewVideoEnded,
        'el-icon-video-pause': this.isPreviewVideoPlaying,
        'el-icon-video-play': this.isPreviewVideoPaused
      }
    })])]) : null]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/AutoPlayOrPauseVideoInView/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_AutoPlayOrPauseVideoInViewvue_type_script_lang_js = (AutoPlayOrPauseVideoInViewvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/AutoPlayOrPauseVideoInView/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_AutoPlayOrPauseVideoInViewvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const AutoPlayOrPauseVideoInView = (component.exports);

/***/ }),

/***/ 51962:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ BatteryTips)
});

;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue?vue&type=template&id=9fe7a92a&scoped=true
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    staticClass: "battery-tips",
    attrs: {
      id: "js-battery-tips".concat(_vm.num)
    },
    domProps: {
      innerHTML: _vm._s(_vm.content || _vm.contentHtml)
    }
  });
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue?vue&type=template&id=9fe7a92a&scoped=true

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/starts-with.js
var starts_with = __webpack_require__(45181);
var starts_with_default = /*#__PURE__*/__webpack_require__.n(starts_with);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue?vue&type=script&lang=js





// import { i18nData } from './i18n.js';

/* harmony default export */ const BatteryTipsvue_type_script_lang_js = ({
  props: {
    num: {
      type: Number,
      "default": 1
    },
    content: {
      type: String,
      "default": ''
    }
  },
  computed: {
    contentHtml: function contentHtml() {
      var locale = this.$i18n.locale;
      if (starts_with_default()(locale).call(locale, 'en-')) {
        locale = 'en';
      }
      // const data = i18nData[locale];
      // let { text, linkText, link } = data;

      var link = this.$t('product.battery_tip_link');
      var linkText = this.$t('product.battery_tip_link_text');
      var text = this.$t('product.battery_tip');
      if (linkText) {
        var _context;
        return text.replace(linkText, concat_default()(_context = "<a href=\"".concat(link, "\" class=\"underline hover:underline\" target=\"_blank\">")).call(_context, linkText, "</a>"));
      } else return text;
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue?vue&type=script&lang=js
 /* harmony default export */ const components_BatteryTipsvue_type_script_lang_js = (BatteryTipsvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue?vue&type=style&index=0&id=9fe7a92a&prod&lang=scss&scoped=true
var BatteryTipsvue_type_style_index_0_id_9fe7a92a_prod_lang_scss_scoped_true = __webpack_require__(82331);
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue?vue&type=style&index=0&id=9fe7a92a&prod&lang=scss&scoped=true

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue



;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_BatteryTipsvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  "9fe7a92a",
  null
  
)

/* harmony default export */ const BatteryTips = (component.exports);

/***/ }),

/***/ 25840:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ DynamicComparePanel)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js + 3 modules
var toConsumableArray = __webpack_require__(71649);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js + 3 modules
var slicedToArray = __webpack_require__(95266);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.split.js
var es_string_split = __webpack_require__(9873);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js
var reduce = __webpack_require__(53706);
var reduce_default = /*#__PURE__*/__webpack_require__.n(reduce);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/create.js
var create = __webpack_require__(3841);
var create_default = /*#__PURE__*/__webpack_require__.n(create);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/splice.js
var splice = __webpack_require__(90143);
var splice_default = /*#__PURE__*/__webpack_require__.n(splice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/index-of.js
var index_of = __webpack_require__(51791);
var index_of_default = /*#__PURE__*/__webpack_require__.n(index_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/values.js
var values = __webpack_require__(89221);
var values_default = /*#__PURE__*/__webpack_require__.n(values);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/fill.js
var fill = __webpack_require__(18033);
var fill_default = /*#__PURE__*/__webpack_require__.n(fill);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js
var is_array = __webpack_require__(98235);
var is_array_default = /*#__PURE__*/__webpack_require__.n(is_array);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/some.js
var some = __webpack_require__(27525);
var some_default = /*#__PURE__*/__webpack_require__.n(some);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/flat.js
var flat = __webpack_require__(49804);
var flat_default = /*#__PURE__*/__webpack_require__.n(flat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/every.js
var every = __webpack_require__(8244);
var every_default = /*#__PURE__*/__webpack_require__.n(every);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/assign.js
var object_assign = __webpack_require__(67552);
var assign_default = /*#__PURE__*/__webpack_require__.n(object_assign);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find.js
var find = __webpack_require__(86981);
var find_default = /*#__PURE__*/__webpack_require__.n(find);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
// EXTERNAL MODULE: ./node_modules/lodash/camelCase.js
var camelCase = __webpack_require__(68929);
var camelCase_default = /*#__PURE__*/__webpack_require__.n(camelCase);
// EXTERNAL MODULE: ./node_modules/lodash/memoize.js
var memoize = __webpack_require__(88306);
var memoize_default = /*#__PURE__*/__webpack_require__.n(memoize);
// EXTERNAL MODULE: ./app/web/projects/www/components/WebpImg/index.vue + 2 modules
var WebpImg = __webpack_require__(76517);
// EXTERNAL MODULE: ./app/web/component/layout/index/config/index.js + 1 modules
var config = __webpack_require__(32064);
// EXTERNAL MODULE: ./app/web/projects/www/components/DynamicComparePanel/constants.js
var constants = __webpack_require__(97675);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.constructor.js
var es_regexp_constructor = __webpack_require__(52003);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.dot-all.js
var es_regexp_dot_all = __webpack_require__(68518);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.sticky.js
var es_regexp_sticky = __webpack_require__(13440);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js
var es_regexp_to_string = __webpack_require__(12826);
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/utils.js











var normalFilterKeys = [{
  key: 'dailyFeaturesVal',
  range: [6]
}, {
  key: 'trainingFeaturesVal',
  range: [7]
}, {
  key: 'runVal',
  range: [100]
}, {
  key: 'climbVal',
  range: [100]
}, {
  key: 'bikeVal',
  range: [100]
}, {
  key: 'waterVal',
  range: [100]
}, {
  key: 'winterVal',
  range: [100]
}, {
  key: 'cardioVal',
  range: [100]
}, {
  key: 'specialVal',
  range: [100]
}];
var filterKeys4cn = [{
  key: 'dailyFeaturesVal',
  range: [6]
}, {
  key: 'trainingFeaturesVal',
  range: [[1, 2], [3, 6]]
}, {
  key: 'runVal',
  range: [100]
}, {
  key: 'climbVal',
  range: [100]
}, {
  key: 'bikeVal',
  range: [100]
}, {
  key: 'waterVal',
  range: [100]
}, {
  key: 'winterVal',
  range: [100]
}, {
  key: 'cardioVal',
  range: [100]
}, {
  key: 'specialVal',
  range: [100]
}];
function filterSpecs4productPage(keys, val, country) {
  var filterKeys = country === 'cn' ? filterKeys4cn : normalFilterKeys;
  for (var index = 0; index < filterKeys.length; index++) {
    var item = filterKeys[index];
    if (new RegExp("".concat(item.key, "$")).test(keys)) {
      if (is_array_default()(item.range[0])) {
        var _context, _context2;
        return flat_default()(_context = map_default()(_context2 = item.range).call(_context2, function (range) {
          return slice_default()(val).apply(val, (0,toConsumableArray/* default */.Z)(range));
        })).call(_context);
      }
      return slice_default()(val).apply(val, (0,toConsumableArray/* default */.Z)(item.range));
    }
  }
  return val;
}
// EXTERNAL MODULE: ./app/web/projects/www/products/constant.js
var constant = __webpack_require__(76633);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
var vue_common_prod_default = /*#__PURE__*/__webpack_require__.n(vue_common_prod);
// EXTERNAL MODULE: ./app/web/projects/www/components/DynamicComparePanel/components/BatteryTips.vue + 5 modules
var BatteryTips = __webpack_require__(51962);
// EXTERNAL MODULE: ./app/web/component/layout/index/components/AccessiableSelect/index.vue + 4 modules
var AccessiableSelect = __webpack_require__(8957);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/DynamicComparePanel/index.vue?vue&type=script&lang=js









function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context41, _context42; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context41 = ownKeys(Object(t), !0)).call(_context41, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context42 = ownKeys(Object(t))).call(_context42, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }




































var watchInfos = memoize_default()(function (country) {
  return reduce_default()(constant/* products */.RB).call(constant/* products */.RB, function (info, watch) {
    var availableColors = (0,constant/* getAvailableColors */._H)(watch.colors, country);
    info[watch.name.replace(/_([a-z])?/i, function (match, p1) {
      return p1 ? p1.toUpperCase() : '';
    })] = {
      colors: availableColors,
      img: availableColors[0].img || (0,assetsRequire/* assetsRequire */.y)("@assets/images/products/".concat(availableColors[0].name, ".png")),
      prices: watch.prices,
      link: watch.pathForCompare || (typeof watch.path === 'function' ? watch.path(country) : watch.path),
      region: watch.region
    };
    return info;
  }, create_default()(null));
});
var WatchesRow = {
  functional: true,
  render: function render(h, _ref) {
    var _context;
    var parent = _ref.parent,
      watches = _ref.props.watches;
    var currentCountry = parent.$root.country;
    var isSuffixUnit = includes_default()(_context = ['de', 'fr', 'es', 'eu']).call(_context, currentCountry);
    return h("tr", [h("td", {
      "class": "compare-label no-border md:hidden"
    }), map_default()(watches).call(watches, function (selectedWatch, index) {
      var info = selectedWatch && watchInfos(currentCountry)[selectedWatch];
      if (info) {
        var isOutOfStock = info.region === undefined ? false : info.region === false || info.region[currentCountry] === false;
        var priceRange = info.prices[currentCountry];
        var BuyButton = {
          functional: true,
          render: function render(h) {
            var _context2;
            return h(isOutOfStock ? 'span' : 'a', {
              "class": {
                'item-entrance': true,
                uppercase: true,
                'is-disabled cursor-not-allowed': isOutOfStock,
                'mt-25 md:mt-md-25': !priceRange
              },
              attrs: {
                href: isOutOfStock ? '' : info.link,
                'aria-label': concat_default()(_context2 = "".concat(parent.$t(isOutOfStock ? 'home.outOfStock' : 'common.shopnow'), " - ")).call(_context2, selectedWatch)
              }
            }, [h("span", {
              "class": "item-entrance__inner uppercase lang-fr:normal-case"
            }, [parent.$t(isOutOfStock ? 'home.outOfStock' : 'common.shopnow')])]);
          }
        };
        var img = info.img;
        return h("td", {
          "class": "compare-value md:pb-md-80",
          "key": index
        }, [info ? h("div", {
          "class": "text-center mt-55 md:text-[0]"
        }, [h(WebpImg/* default */.Z, {
          "attrs": {
            "src": img,
            "height": 236
          },
          "class": "inline-block align-middle watch-model-img"
        }), priceRange ? h("p", {
          "class": "text-40 md:text-md-35 mt-50 mb-20 md:mt-md-55 md:mb-md-20"
        }, [map_default()(priceRange).call(priceRange, function (priceItem) {
          return isSuffixUnit ? priceItem + config/* currencyUnit */.CA[currentCountry] : config/* currencyUnit */.CA[currentCountry] + priceItem;
        }).join(' - ')]) : h("div"), h(BuyButton)]) : null]);
      }
      return h("td", {
        "class": "compare-value md:pb-md-80",
        "key": index
      });
    })]);
  }
};
var SpecCell = {
  functional: true,
  render: function render(h, _ref2) {
    var _ref2$props = _ref2.props,
      specName = _ref2$props.specName,
      str = _ref2$props.str,
      country = _ref2$props.country,
      product = _ref2$props.product;
    if (str) {
      if (str === '-') str = '—';
      if (str === '—') {
        return h("span", {
          "class": "compare-value__inner",
          "attrs": {
            "aria-label": "not included"
          }
        }, [str]);
      }
      var thirdAppListLine = specName === 'Compatible Apps';
      var isAccessoryTypesLine = specName === 'Dura Accessory Types';
      var replaceLink = function replaceLink(_ref3) {
        var text = _ref3.text,
          ariaLabel = _ref3.ariaLabel,
          link = _ref3.link;
        text = text.split(/here/);
        splice_default()(text).call(text, 1, 0, h("a", {
          "attrs": {
            "aria-label": ariaLabel,
            "target": "_blank",
            "href": link
          },
          "class": "underline hover:underline underline-offset-2"
        }, ["here"]));
        return text;
      };
      var splitedLines = str.split('\n');
      var lastLine = splitedLines.length > 1 ? splitedLines.pop() : null;
      var output = [];
      // ||| 作为换行符
      output.push(h("span", {
        "class": "compare-value__inner"
      }, [splitedLines.join('\n').replace(/\|\|\|/gi, '\n')]));
      if (lastLine !== null) {
        var _context3;
        output.push('\n');
        // 法语 西语整段都是链接
        if (includes_default()(_context3 = ['fr', 'es', 'jp', 'de']).call(_context3, country)) {
          if (thirdAppListLine) {
            output.push(h("span", {
              "class": "compare-value__sub-desc"
            }, [h("a", {
              "attrs": {
                "target": "_blank",
                "href": "https://support.coros.com/hc/en-us/articles/360040256531-Supported-3rd-party-app-list"
              }
            }, [lastLine])]));
          } else if (isAccessoryTypesLine) {
            output.push(h("span", {
              "class": "compare-value__sub-desc"
            }, [h("a", {
              "attrs": {
                "target": "_blank",
                "href": "https://support.coros.com/hc/en-us/articles/27159435071508-How-do-I-pair-DURA-with-external-sensors"
              }
            }, [lastLine])]));
          } else {
            output.push(h("span", {
              "class": "compare-value__sub-desc"
            }, [lastLine]));
          }
        } else {
          var _thisResult = lastLine;
          if (index_of_default()(lastLine).call(lastLine, 'here') > -1) {
            if (thirdAppListLine) {
              _thisResult = replaceLink({
                text: lastLine,
                ariaLabel: "Click here for a complete list of compatible apps.",
                link: 'https://support.coros.com/hc/en-us/articles/360040256531-Supported-3rd-party-app-list'
              });
            } else if (isAccessoryTypesLine) {
              _thisResult = replaceLink({
                text: lastLine,
                ariaLabel: '',
                link: 'https://support.coros.com/hc/en-us/articles/27159435071508-How-do-I-pair-DURA-with-external-sensors'
              });
            }
          }
          output.push(h("span", {
            "class": "compare-value__sub-desc"
          }, [_thisResult]));
        }
      }
      return output;
    }
    return '';
  }
};
var GroupSpecs = {
  functional: true,
  render: function render(h, _ref4) {
    var _context4;
    var parent = _ref4.parent,
      _ref4$props = _ref4.props,
      group = _ref4$props.group,
      groupIndex = _ref4$props.groupIndex,
      isMobile = _ref4$props.isMobile,
      maxCols = _ref4$props.maxCols,
      products = _ref4$props.products;
    var rowspan4groupTitle = 1;
    var _group$specs = (0,slicedToArray/* default */.Z)(group.specs, 1),
      firstSpec = _group$specs[0];
    if (firstSpec.label === group.title && !isMobile) {
      rowspan4groupTitle += group.specs.length;
    }
    var rows = [h("tr", {
      "class": ['specs-group md:pb-md-80', {
        'no-border': groupIndex === 0
      }],
      "key": group.title
    }, [h("th", {
      "attrs": {
        "scope": "row",
        "data-sub-title": group.subTitle,
        "colspan": isMobile && maxCols,
        "rowspan": rowspan4groupTitle > 1 ? rowspan4groupTitle + 1 : null
      },
      "class": "specs-group__title pt-60 md:pt-md-80 align-baseline"
    }, [group.title]), isMobile ? null : h("td"), isMobile ? null : h("td"), isMobile ? null : h("td")])];
    if (rowspan4groupTitle > 1) {
      rows.push(h("tr", {
        "key": "safari-hack ".concat(group.title)
      }));
    }
    for_each_default()(_context4 = group.specs).call(_context4, function (spec, index) {
      var hasTopBorder = index > 0 && spec.label && !isMobile;
      var header = group.title === spec.label ? '' : spec.label;
      if (isMobile) {
        var _context6;
        var hasBottomBorder = group.specs.length - 1 === index;
        if (spec.label && header) {
          var _context5;
          rows.push(h("tr", {
            "attrs": {
              "data-spec-name": spec.specName
            },
            "class": ['md:flex-wrap align-top', {
              'has-border-top': hasTopBorder,
              'has-border-bottom': hasBottomBorder && !isMobile
            }],
            "key": concat_default()(_context5 = "".concat(group.title, "_row_")).call(_context5, index)
          }, [h("th", {
            "class": ['pt-20 compare-label whitespace-pre-line md:pt-md-80', {
              'md:hidden': !spec.label,
              'pb-20': hasBottomBorder
            }],
            "attrs": {
              "colspan": isMobile && maxCols
            }
          }, [header])]));
        }
        rows.push(h("tr", {
          "attrs": {
            "data-spec-name": spec.specName
          }
        }, [map_default()(_context6 = values_default()(spec)).call(_context6, function (val, valIndex) {
          var _context7, _context8;
          return h("td", {
            "class": ['pt-20 compare-value w-1/4 md:pt-md-40 whitespace-pre-line', {
              'pb-20 md:pb-md-80': hasBottomBorder
            }],
            "key": concat_default()(_context7 = concat_default()(_context8 = "".concat(group.title, "_row_")).call(_context8, index, "_cell_")).call(_context7, valIndex)
          }, [h(SpecCell, {
            "attrs": {
              "str": val,
              "country": parent.$root.country,
              "product": products[valIndex],
              "specName": spec.specName
            }
          })]);
        })]));
      } else {
        var _context9, _context10;
        var _hasBottomBorder = group.specs[index + 1] ? !!group.specs[index + 1].label : true;
        rows.push(h("tr", {
          "attrs": {
            "data-spec-name": spec.specName
          },
          "class": ['md:flex-wrap align-top', {
            'md:pt-md-80': spec.label,
            'md:pt-0': !spec.label,
            'has-border-top': hasTopBorder,
            'has-border-bottom': _hasBottomBorder
          }],
          "key": concat_default()(_context9 = "".concat(group.title, "_row_")).call(_context9, index)
        }, [header ? h("th", {
          "attrs": {
            "scope": "row",
            "rowspan": spec.rowSpan
          },
          "class": ['pt-20 compare-label whitespace-pre-line w-1/4 md:w-full', {
            'md:hidden': !spec.label,
            'pb-20': _hasBottomBorder
          }]
        }, [group.title === spec.label ? '' : spec.label]) : null, map_default()(_context10 = values_default()(spec)).call(_context10, function (val, valIndex) {
          var _context11, _context12;
          return h("td", {
            "class": ['pt-20 compare-value w-1/4 md:pt-md-40 whitespace-pre-line', {
              'pb-20': _hasBottomBorder
            }],
            "key": concat_default()(_context11 = concat_default()(_context12 = "".concat(group.title, "_row_")).call(_context12, index, "_cell_")).call(_context11, valIndex)
          }, [h(SpecCell, {
            "attrs": {
              "str": val,
              "country": parent.$root.country,
              "product": products[valIndex],
              "specName": spec.specName
            }
          })]);
        })]));
      }
    });
    return rows;
  }
};
/* harmony default export */ const DynamicComparePanelvue_type_script_lang_js = ({
  name: 'DynamicComparePanel',
  components: {
    BatteryTips: BatteryTips/* default */.Z
  },
  props: {
    /**
     * 默认的第一个产品（必须是productsToCompare 之一）
     */
    defaultProduct: {
      type: [String, Array]
    },
    /**
     * 对比表头吸顶
     */
    affixToTop: {
      type: Boolean,
      "default": false
    },
    specialOnly: {
      type: Boolean,
      "default": true
    },
    /**
     * 自动比较：开启后按组件内部默认设置的初始化比较产品
     */
    autoCompare: {
      type: Boolean,
      "default": false
    },
    /**
     * 需要对比的特性
     */
    specsToCompare: {
      type: Array
    },
    /**
     * 吸顶表头的额外样式配置
     */
    extendedStyleForFixedHeader: {
      type: Object,
      "default": function _default() {
        return {};
      }
    },
    /**
     * 最大可对比数（大于0）
     */
    maxComparisons: {
      type: Number,
      "default": 3
    },
    /**
     * 隐藏对比表头（隐藏后无法选择对比的产品，需与defaultProduct 一起使用）
     */
    hideHeader: {
      type: Boolean,
      "default": false
    },
    from: {
      type: String,
      "default": ''
    },
    footnoteContent: {
      type: String,
      "default": ''
    }
  },
  data: function data() {
    var _context13;
    return {
      hideDuplicates: false,
      hasFixHeader: false,
      selectedComparsion: fill_default()(_context13 = new Array(this.maxComparisons)).call(_context13, ''),
      minTop: 0
    };
  },
  computed: {
    /**
     * 需要对比的产品（需结合对比特性）
     */
    productsToCompare: function productsToCompare() {
      var _context14,
        _this = this;
      var output = constants/* allWatches */.wH;
      if (includes_default()(_context14 = ['jp', 'de']).call(_context14, this.$i18n.locale)) {
        output = filter_default()(constants/* allWatches */.wH).call(constants/* allWatches */.wH, function (i) {
          var _context15;
          return !i.notShowInCountry || !includes_default()(_context15 = i.notShowInCountry).call(_context15, _this.$i18n.locale);
        });
      }
      return output;
    },
    defaultSpecsToCompare: function defaultSpecsToCompare() {
      return this.$dataBus.isCn ? constants/* groupedSpecs4cn */.uT : constants/* groupedSpecs */.ys;
    },
    normalizedDefaultProduct: function normalizedDefaultProduct() {
      return is_array_default()(this.defaultProduct) ? this.defaultProduct : [this.defaultProduct];
    },
    canHideDuplicates: function canHideDuplicates() {
      var _context16;
      return reduce_default()(_context16 = this.selectedComparsion).call(_context16, function (acc, cur) {
        return acc + (cur ? 1 : 0);
      }, 0) > 1;
    },
    hasSelection: function hasSelection() {
      var _context17;
      return some_default()(_context17 = this.selectedComparsion).call(_context17, function (val) {
        return !!val;
      });
    },
    computedSpecs: function computedSpecs() {
      var _context18,
        _this2 = this;
      var result = [];
      for_each_default()(_context18 = this.specsToCompare || this.defaultSpecsToCompare).call(_context18, function (group) {
        var _context19, _context20;
        var specsRows = flat_default()(_context19 = map_default()(_context20 = group.specs).call(_context20, function (spec) {
          var _context21, _context23, _context24, _context25, _context26;
          var specsVals = map_default()(_context21 = _this2.selectedComparsion).call(_context21, function (watchAlias) {
            if (watchAlias) {
              var _context22;
              var i18nKey = concat_default()(_context22 = "specs.comparsion.".concat(watchAlias, ".")).call(_context22, camelCase_default()(spec), "Val");
              var i18nVal = _this2.$t(i18nKey);
              var normalizedVals = is_array_default()(i18nVal) ? i18nVal : [i18nVal];
              return _this2.specialOnly ? filterSpecs4productPage(i18nKey, normalizedVals, _this2.$root.country) : normalizedVals;
            }
            return [];
          });
          var rowCounts = Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(map_default()(specsVals).call(specsVals, function (item) {
            return item.length;
          })));
          var visibleSpecs = map_default()(_context23 = fill_default()(_context24 = new Array(_this2.selectedComparsion.length)).call(_context24, null)).call(_context23, function () {
            return [];
          });
          var _loop = function _loop(i) {
            var isDuplicated = every_default()(specsVals).call(specsVals, function (item, index) {
              if (_this2.hideDuplicates && _this2.canHideDuplicates) {
                return item[i] === specsVals[0][i] || _this2.selectedComparsion[index] === '';
              }
              if (_this2.specialOnly) {
                return item[i] === undefined;
              }
            });
            if (isDuplicated) {
              return 1; // continue
            }
            for_each_default()(visibleSpecs).call(visibleSpecs, function (item, index) {
              item.push(specsVals[index][i]);
            });
          };
          for (var i = 0; i < rowCounts; i++) {
            if (_loop(i)) continue;
          }
          rowCounts = Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(map_default()(visibleSpecs).call(visibleSpecs, function (item) {
            return item.length;
          })));
          return map_default()(_context25 = fill_default()(_context26 = new Array(rowCounts)).call(_context26, 0)).call(_context25, function (row, index, arr) {
            var rowVals = map_default()(visibleSpecs).call(visibleSpecs, function (item) {
              return item[index] || '';
            });
            return {
              label: index === 0 ? _this2.$t("specs.compareLabel.".concat(spec)) : '',
              specName: spec,
              values: rowVals,
              rowSpan: index === 0 ? arr.length : null
            };
          });
        })).call(_context19);
        if (specsRows.length > 0) {
          var subTitleI18nKey = "specs.compareLabel.".concat(group.subTitle);
          result.push({
            title: _this2.$t("specs.compareLabel.".concat(group.title)),
            subTitle: group.subTitle ? _this2.$t(subTitleI18nKey) : '',
            specs: flat_default()(specsRows).call(specsRows)
          });
        }
      });
      return result;
    }
  },
  watch: {
    maxComparisons: {
      handler: function handler(newVal, oldVal) {
        if (newVal > oldVal) {
          var _context27, _context28;
          this.selectedComparsion = concat_default()(_context27 = this.selectedComparsion).call(_context27, fill_default()(_context28 = new Array(newVal - oldVal)).call(_context28, ''));
        } else {
          var _context29;
          this.selectedComparsion = slice_default()(_context29 = this.selectedComparsion).call(_context29, 0, newVal);
        }
      }
    },
    '$dataBus.isMobile': {
      handler: function handler() {
        var _this3 = this;
        this.$nextTick(function () {
          _this3.initWidth = _this3.$refs.header.offsetWidth;
        });
      }
    },
    '$dataBus.mainHeaderIsCollapsed': {
      handler: function handler(val) {
        if (this.hideHeader) {
          return;
        }
        this.reUpdateAffix(val);
      },
      immediate: false
    },
    '$dataBus.localeSwitchChange': {
      handler: function handler(val) {
        if (this.hideHeader) {
          return;
        }
        this.reUpdateAffix(val);
      },
      immediate: false
    }
  },
  created: function created() {
    var _this4 = this;
    if (this.defaultProduct) {
      var _context30;
      for_each_default()(_context30 = this.normalizedDefaultProduct).call(_context30, function (product, index) {
        if (product) {
          _this4.$set(_this4.selectedComparsion, index, product);
        }
      });
    } else if (this.autoCompare) {
      var defaultSelectedComparsion;
      if (this.$dataBus.isMobile) {
        defaultSelectedComparsion = ['pace3', 'apex2'];
      } else {
        defaultSelectedComparsion = ['pace3', 'apex2', 'vertix2s'];
      }
      if (defaultSelectedComparsion.length >= this.maxComparisons) {
        defaultSelectedComparsion = slice_default()(defaultSelectedComparsion).call(defaultSelectedComparsion, 0, this.maxComparisons);
      } else {
        var _context31;
        defaultSelectedComparsion = concat_default()(defaultSelectedComparsion).call(defaultSelectedComparsion, fill_default()(_context31 = new Array(this.maxComparisons - defaultSelectedComparsion.length)).call(_context31, ''));
      }
      this.selectedComparsion = defaultSelectedComparsion;
    }
  },
  mounted: function mounted() {
    var _this5 = this;
    if (true) {
      vue_common_prod_default().nextTick(function () {
        if (_this5.affixToTop && !_this5.hideHeader) {
          _this5.minTop = document.querySelector('.coros-header').offsetHeight - 1;
          _this5.initWidth = _this5.$refs.header.offsetWidth;
          document.addEventListener('scroll', function () {
            _this5.handleAffix();
          });
        }
      });
    }
  },
  methods: {
    reUpdateAffix: function reUpdateAffix(val) {
      var _this6 = this;
      // 手动触发更新
      if (true) {
        this.$nextTick(function () {
          var newTop = (val ? 0 : _this6.$dataBus.initHeight4mainHeader) + (_this6.$dataBus.isMobile ? 2 * window.innerWidth / 10 - 20 : 85) - 1;
          // const newTop = document.querySelector('.coros-header').offsetHeight - 1;
          var forceUpdate = newTop !== _this6.minTop;
          // 主导航栏动画先触发，为了避免动画过程中两者留有缝隙，动画时长根据位置的变化调整。
          var duration = newTop > _this6.minTop ? '0.3s' : '0.25s';
          _this6.minTop = newTop;
          _this6.handleAffix(forceUpdate, duration);
        });
      }
    },
    renderCell: function renderCell(str) {
      if (str) {
        if (str === '-') str = '—';
        if (str === '—') {
          return (0,vue_common_prod.h)("span", {
            "class": "compare-value__inner"
          }, [str]);
        }
        var THIRD_APP_LIST_LINE = 'Komoot, TrainingPeaks, Strava, Relive, adidas Running, Apple Health, Stryd, Final Surge, Runalyze, Running Quotient, Decathlon';
        var replaceLink = function replaceLink(text) {
          text = text.split(/here/);
          splice_default()(text).call(text, 1, 0, (0,vue_common_prod.h)("a", {
            "attrs": {
              "target": "_blank",
              "href": "https://support.coros.com/hc/en-us/articles/360040256531-Supported-3rd-party-app-list"
            }
          }, ["here"]));
          return text;
        };
        var splitedLines = str.split('\n');
        var lastLine = splitedLines.length > 1 ? splitedLines.pop() : null;
        var output = [];
        output.push((0,vue_common_prod.h)("span", {
          "class": "compare-value__inner"
        }, [splitedLines.join('\n')]));
        if (lastLine !== null) {
          output.push('\n');
          // 法语 西语整段都是链接
          if (splitedLines[0] === THIRD_APP_LIST_LINE && (this.$root.country === 'fr' || this.$root.country === 'es')) {
            output.push((0,vue_common_prod.h)("span", {
              "class": "compare-value__sub-desc"
            }, [(0,vue_common_prod.h)("a", {
              "attrs": {
                "target": "_blank",
                "href": "https://support.coros.com/hc/en-us/articles/360040256531-Supported-3rd-party-app-list"
              }
            }, [lastLine])]));
          } else {
            output.push((0,vue_common_prod.h)("span", {
              "class": "compare-value__sub-desc"
            }, [splitedLines[0] === THIRD_APP_LIST_LINE ? replaceLink(lastLine) : lastLine]));
          }
        }
        return output;
      }
      return '';
    },
    isWatchDisabled: function isWatchDisabled(watch, index) {
      var _context32;
      return some_default()(_context32 = this.selectedComparsion).call(_context32, function (val, checkIndex) {
        if (checkIndex === index) return false;
        return val === watch;
      });
    },
    handleAffix: function handleAffix() {
      var _this7 = this;
      var forceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
      var duration = arguments.length > 1 ? arguments[1] : undefined;
      requestAnimationFrame(function () {
        var _this7$$refs$header$g = _this7.$refs.header.getBoundingClientRect(),
          top = _this7$$refs$header$g.top;
        var _this7$$el$getBoundin = _this7.$el.getBoundingClientRect(),
          componentTop = _this7$$el$getBoundin.top,
          componentBottom = _this7$$el$getBoundin.bottom;
        if (componentTop >= _this7.minTop || componentBottom < 70) {
          _this7.hasFixHeader = false;
          assign_default()(_this7.$refs.header.style, {
            position: null,
            top: null,
            left: null,
            width: null,
            background: null,
            zIndex: null,
            padding: null,
            boxSizing: null,
            display: null
          });
        } else {
          if (top <= _this7.minTop || forceUpdate) {
            _this7.hasFixHeader = true;
            var styleToUpdate = _objectSpread({
              position: "fixed",
              top: "".concat(_this7.minTop, "px"),
              left: "0",
              width: "100%",
              padding: "15px ".concat((window.innerWidth - _this7.initWidth) / 2, "px 15px"),
              background: '#fff',
              zIndex: 10,
              boxSizing: 'border-box',
              display: 'flex'
            }, _this7.extendedStyleForFixedHeader);
            if (forceUpdate && duration) {
              styleToUpdate.transition = "top ".concat(duration, " linear");
            }
            assign_default()(_this7.$refs.header.style, styleToUpdate);
          }
        }
      });
    }
  },
  render: function render(h) {
    var _this8 = this,
      _context33,
      _context40;
    return h("div", [h("table", {
      "class": "dynamic-compare-panel table-fixed w-full",
      "style": {
        paddingTop: this.hasFixHeader ? '70px' : '0'
      },
      "attrs": {
        "data-country": this.$root.country
      }
    }, [h("colgroup", [h("col", {
      "class": "w-1/4 md:w-1/2"
    }), this.$dataBus.isMobile && this.maxComparisons < 2 ? null : h("col", {
      "class": "w-1/4 md:w-1/2"
    }), this.$dataBus.isMobile ? null : h("col", {
      "class": "w-1/4"
    }), this.$dataBus.isMobile ? null : h("col", {
      "class": "w-1/4"
    })]), this.hideHeader ? null : h("thead", [h("tr", {
      "class": "md:flex-wrap compare-header",
      "ref": "header"
    }, [this.$dataBus.isMobile ? null : h("td", {
      "class": "compare-label no-border w-1/4 md:order-3 md:w-full"
    }, [this.canHideDuplicates ? h("el-checkbox", {
      "model": {
        value: _this8.hideDuplicates,
        callback: function callback($$v) {
          _this8.hideDuplicates = $$v;
        }
      }
    }, [this.$t('specs.Hide Duplicated Details')]) : null]), map_default()(_context33 = this.selectedComparsion).call(_context33, function (selectedWatch, index) {
      var _context34, _context37, _context38;
      var isDisabled = _this8.productsToCompare.length < index + 1;
      var changeable = function changeable() {
        return _this8.autoCompare || index >= _this8.normalizedDefaultProduct.length;
      };
      var ariaOptionIdPrefix = "ariaWatchOptionIdPrefix-".concat(index + 1, "-");
      var listboxId = "watch-list-".concat(index + 1);
      return h("th", {
        "class": "compare-value w-1/4",
        "key": index,
        "attrs": {
          "scope": "col"
        }
      }, [isDisabled || !changeable() ? h("div", {
        "class": "el-input__inner"
      }, [find_default()(_context34 = _this8.productsToCompare).call(_context34, function (item) {
        return item.val === selectedWatch;
      }).label]) : h(AccessiableSelect/* default */.Z, {
        "attrs": {
          "value": selectedWatch,
          "popper-class": "watch-model",
          "aria-option-id-prefix": ariaOptionIdPrefix,
          "listbox-id": listboxId,
          "placeholder": isDisabled ? '' : _this8.$t('specs.comparePlaceholder'),
          "disabled": isDisabled || !changeable()
        },
        "on": {
          "input": function input(val) {
            var _context35;
            if (includes_default()(_context35 = _this8.selectedComparsion).call(_context35, val)) {
              var _context36;
              _this8.$set(_this8.selectedComparsion, index_of_default()(_context36 = _this8.selectedComparsion).call(_context36, val), selectedWatch);
            }
            _this8.$set(_this8.selectedComparsion, index, val);
          }
        },
        "class": changeable() ? '' : 'is-fixed'
      }, [map_default()(_context37 = _this8.productsToCompare).call(_context37, function (item) {
        return h("el-option", {
          "class": "text-center",
          "key": item.val,
          "attrs": {
            "label": item.label,
            "value": item.val
          }
        });
      }), h("template", {
        "slot": "listbox"
      }, [h("div", {
        "class": "w-0 h-0 overflow-hidden",
        "attrs": {
          "role": "listbox",
          "id": listboxId
        }
      }, [map_default()(_context38 = _this8.productsToCompare).call(_context38, function (item, index) {
        var _context39;
        return h("div", {
          "attrs": {
            "id": concat_default()(_context39 = "".concat(ariaOptionIdPrefix)).call(_context39, index),
            "role": "option",
            "aria-selected": "".concat(item.val === selectedWatch)
          },
          "key": item.val
        }, [item.label]);
      })])])])]);
    })])]), h("tbody", [this.hasSelection ? h(WatchesRow, {
      "attrs": {
        "watches": this.selectedComparsion
      }
    }) : null, this.$dataBus.isMobile && this.hasSelection && this.canHideDuplicates ? h("tr", [h("th", {
      "class": "compare-label md:mt-md-80",
      "attrs": {
        "colspan": "2"
      }
    }, [h("el-checkbox", {
      "model": {
        value: _this8.hideDuplicates,
        callback: function callback($$v) {
          _this8.hideDuplicates = $$v;
        }
      }
    }, [this.$t('specs.Hide Duplicated Details')])])]) : null, this.hasSelection ? map_default()(_context40 = this.computedSpecs).call(_context40, function (group, groupIndex) {
      return h(GroupSpecs, {
        "attrs": {
          "group": group,
          "groupIndex": groupIndex,
          "isMobile": _this8.$dataBus.isMobile,
          "maxCols": _this8.maxComparisons,
          "products": _this8.selectedComparsion
        }
      });
    }) : null])]), this.$slots['footnote-content'] ? this.$slots['footnote-content'] : [h(BatteryTips/* default */.Z), this.footnoteContent ? h(BatteryTips/* default */.Z, {
      "attrs": {
        "num": 2,
        "content": this.footnoteContent
      }
    }) : null]]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_DynamicComparePanelvue_type_script_lang_js = (DynamicComparePanelvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/DynamicComparePanel/index.vue?vue&type=style&index=0&id=768bb0c3&prod&lang=scss
var DynamicComparePanelvue_type_style_index_0_id_768bb0c3_prod_lang_scss = __webpack_require__(42607);
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/index.vue?vue&type=style&index=0&id=768bb0c3&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/DynamicComparePanel/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_DynamicComparePanelvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const DynamicComparePanel = (component.exports);

/***/ }),

/***/ 31256:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ SocialMedia)
});

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewFooter/SocialMedia/constant.js
var constant = __webpack_require__(50840);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/SocialMedia/index.vue?vue&type=script&lang=js







/* harmony default export */ const SocialMediavue_type_script_lang_js = ({
  name: 'SocialMedia',
  functional: true,
  props: {
    tag: {
      type: String,
      "default": 'ul'
    },
    // 是否是 footer 组件过来的
    footer: {
      type: Boolean,
      "default": false
    }
  },
  render: function render(h, context) {
    var _context;
    var _context$props = context.props,
      tag = _context$props.tag,
      footer = _context$props.footer;
    var _context$parent$$root = context.parent.$root.country,
      country = _context$parent$$root === void 0 ? 'us' : _context$parent$$root;
    var sns2render = constant/* default */.Z[country] || constant/* default.us */.Z.us;
    return h(tag, {
      "class": concat_default()(_context = []).call(_context, context.data.staticClass || [], context.data["class"] || []),
      style: context.data.style
    }, map_default()(sns2render).call(sns2render, function (item) {
      if (!footer && country === 'jp' && item.qrcode) {
        return h(element_ui_common.Popover, {
          "class": "sns-item leading-none md:block text-[0]",
          "attrs": {
            "placement": "top",
            "title": "",
            "width": "200",
            "trigger": "hover"
          }
        }, [h("img", {
          "attrs": {
            "width": 176,
            "height": 176,
            "src": (0,assetsRequire/* assetsRequire */.y)("@assets/images/home/line-qrcode.png"),
            "alt": ""
          }
        }), h("div", {
          "class": " sns-item__inner",
          "slot": "reference",
          "attrs": {
            "aria-label": item.ariaLabel
          }
        }, [h("i", {
          "class": ['iconfont align-middle', item.icon]
        })])]);
      } else if (!footer && country === 'cn' && item.qrcode) {
        return h(element_ui_common.Popover, {
          "attrs": {
            "popperClass": "!p-0",
            "placement": "top",
            "title": "",
            "width": "178",
            "trigger": "hover"
          },
          "class": "sns-item leading-none md:block text-[0]"
        }, [h("img", {
          "attrs": {
            "width": 176,
            "height": 176,
            "src": (0,assetsRequire/* assetsRequire */.y)('@assets/images/47f8c5fd51de6ff6e98dbe217c1c7b6a.jpeg'),
            "alt": ""
          }
        }), h("div", {
          "class": " sns-item__inner",
          "slot": "reference",
          "attrs": {
            "aria-label": item.ariaLabel
          }
        }, [h("i", {
          "class": ['iconfont align-middle', item.icon]
        })])]);
      }
      return h("li", {
        "class": "sns-item"
      }, [h("a", {
        "class": "sns-item__inner leading-none md:block text-[0]",
        "key": item.icon,
        "attrs": {
          "target": "_blank",
          "aria-describedby": "open-link-hint",
          "href": item.link,
          "aria-label": item.ariaLabel
        }
      }, [h("i", {
        "class": ['iconfont align-middle', item.icon]
      }), h("span", {
        "class": "hidden"
      }, [item.ariaLabel])])]);
    }));
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/SocialMedia/index.vue?vue&type=script&lang=js
 /* harmony default export */ const NewFooter_SocialMediavue_type_script_lang_js = (SocialMediavue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/SocialMedia/index.vue?vue&type=style&index=0&id=684e31d2&prod&lang=scss&scoped=true
var SocialMediavue_type_style_index_0_id_684e31d2_prod_lang_scss_scoped_true = __webpack_require__(21220);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/SocialMedia/index.vue?vue&type=style&index=0&id=684e31d2&prod&lang=scss&scoped=true

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/SocialMedia/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  NewFooter_SocialMediavue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  "684e31d2",
  null
  
)

/* harmony default export */ const SocialMedia = (component.exports);

/***/ }),

/***/ 50380:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ NewFooter)
});

// EXTERNAL MODULE: ./node_modules/@vue/babel-helper-vue-jsx-merge-props/dist/helper.js
var helper = __webpack_require__(36568);
var helper_default = /*#__PURE__*/__webpack_require__.n(helper);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find-index.js
var find_index = __webpack_require__(13464);
var find_index_default = /*#__PURE__*/__webpack_require__.n(find_index);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/splice.js
var splice = __webpack_require__(90143);
var splice_default = /*#__PURE__*/__webpack_require__.n(splice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/some.js
var some = __webpack_require__(27525);
var some_default = /*#__PURE__*/__webpack_require__.n(some);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/index-of.js
var index_of = __webpack_require__(51791);
var index_of_default = /*#__PURE__*/__webpack_require__.n(index_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.date.to-string.js
var es_date_to_string = __webpack_require__(30024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js
var es_object_to_string = __webpack_require__(60228);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.js
var es_promise = __webpack_require__(73964);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.finally.js
var es_promise_finally = __webpack_require__(36409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewFooter/constant.js
var constant = __webpack_require__(47003);
// EXTERNAL MODULE: ./app/web/projects/www/components/WebpImg/index.vue + 2 modules
var WebpImg = __webpack_require__(76517);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewFooter/SocialMedia/index.vue + 3 modules
var SocialMedia = __webpack_require__(31256);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
// EXTERNAL MODULE: ./app/web/component/layout/index/config/index.js + 1 modules
var config = __webpack_require__(32064);
// EXTERNAL MODULE: ./node_modules/lodash/lodash.js
var lodash = __webpack_require__(96486);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/promise.js
var promise = __webpack_require__(35820);
var promise_default = /*#__PURE__*/__webpack_require__.n(promise);
// EXTERNAL MODULE: ./node_modules/axios/index.js
var axios = __webpack_require__(9669);
var axios_default = /*#__PURE__*/__webpack_require__.n(axios);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/hooks/useKlaviyoClientSubscription.js


var SUCCESS_STATUS = 202;
var API_REVISION = '2024-06-15';
var api = '/client/subscriptions/';
var axiosInstance = axios_default().create({
  baseURL: 'https://a.klaviyo.com',
  headers: {
    revision: API_REVISION
  }
});
var parseClientSubscriptionData = function parseClientSubscriptionData(email) {
  var listId = window.__INITIAL_STATE__.commonSubscriptionList;
  if (email && listId) {
    var _window$__INITIAL_STA;
    var timezone;
    try {
      timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
    } catch (e) {}
    return {
      data: {
        type: 'subscription',
        attributes: {
          custom_source: 'Homepage footer signup form',
          profile: {
            data: {
              type: 'profile',
              attributes: {
                email: email,
                location: {
                  country: (_window$__INITIAL_STA = window.__INITIAL_STATE__) === null || _window$__INITIAL_STA === void 0 ? void 0 : _window$__INITIAL_STA.country,
                  timezone: timezone
                }
              }
            }
          }
        },
        relationships: {
          list: {
            data: {
              type: 'list',
              id: listId
            }
          }
        }
      }
    };
  }
};
var useKlaviyoClientSubscription = function useKlaviyoClientSubscription() {
  var subscribe = function subscribe(email) {
    var data = parseClientSubscriptionData(email);
    if (!data) {
      return promise_default().resolve(false);
    }
    return new (promise_default())(function (resolve) {
      axiosInstance.post(api, parseClientSubscriptionData(email), {
        params: {
          company_id: window.__INITIAL_STATE__.klaviyoCompanyId
        }
      }).then(function (res) {
        if (res.status === SUCCESS_STATUS) {
          return resolve(true);
        }
        return resolve(false);
      })["catch"](function () {
        return resolve(false);
      });
    });
  };
  return {
    subscribe: subscribe
  };
};
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/index.vue?vue&type=script&lang=js



























var _useKlaviyoClientSubs = useKlaviyoClientSubscription(),
  subscribe = _useKlaviyoClientSubs.subscribe;
var MenuTitle = {
  functional: true,
  render: function render(h, _ref) {
    var _ref$props = _ref.props,
      isMobile = _ref$props.isMobile,
      i18nKey = _ref$props.i18nKey,
      activeMenu = _ref$props.activeMenu,
      parent = _ref.parent;
    if (isMobile) {
      var isActive = activeMenu === i18nKey;
      return h("h2", {
        "attrs": {
          "id": "footer-menus-label-".concat(i18nKey)
        },
        "class": "menus-group__title-inner md:w-full uppercase inline-block align-middle"
      }, [h("button", {
        "attrs": {
          "type": "button",
          "aria-controls": "footer-menus-".concat(i18nKey),
          "aria-expanded": "".concat(isActive),
          "aria-label": parent.$t(i18nKey)
        },
        "class": "bg-transparent border-transparent leading-none md:w-full md:h-full items-center md:flex justify-between",
        "on": {
          "click": function click() {
            return parent.toggleMenu(i18nKey);
          }
        }
      }, [h("span", [parent.$t(i18nKey)]), h("i", {
        "class": ['el-icon-arrow-right transition-transform duration-200', {
          'rotate-90': isActive
        }]
      })])]);
    }
    return h("h2", {
      "attrs": {
        "id": "footer-menus-label-".concat(i18nKey)
      },
      "class": "menus-group__title-inner uppercase inline-block align-middle"
    }, [parent.$t(i18nKey)]);
  }
};
/* harmony default export */ const NewFootervue_type_script_lang_js = ({
  name: 'NewFooter',
  components: {
    WebpImg: WebpImg/* default */.Z
  },
  data: function data() {
    return {
      copyrightYear: new Date().getFullYear(),
      email: '',
      activeMenu: '',
      visible4countries: false,
      currentPath: '',
      subscribing: false
    };
  },
  computed: {
    isCn: function isCn() {
      return this.$root.country === 'cn';
    },
    menus2render: function menus2render() {
      var _this = this;
      var country = this.$root.country;
      var data = (0,lodash.cloneDeep)(constant/* menus */.IJ[country] || constant/* menus.default */.IJ["default"]);
      var parseA11yStatementIfNeed = function parseA11yStatementIfNeed() {
        var locationI18nkey = 'common.footer.countries';
        if (_this.$dataBus.isUs) {
          for_each_default()(data).call(data, function (item) {
            var _context;
            var matchedIndex = find_index_default()(_context = item.children).call(_context, function (child) {
              return child.i18n === locationI18nkey;
            });
            if (matchedIndex >= 0) {
              var _context2;
              var index2Insert = matchedIndex + (_this.$dataBus.isMobile ? 1 : 0);
              var removeItem = _this.$dataBus.isMobile ? 0 : 1;
              splice_default()(_context2 = item.children).call(_context2, index2Insert, removeItem, {
                comp: constant/* A11yStatement */.QO
              });
            }
          });
        }
      };
      var insertPrivacyRightsIfNeed = function insertPrivacyRightsIfNeed() {
        if (_this.$dataBus.isUs) {
          var privacyRightsItem = {
            i18n: 'Privacy Rights Center',
            link: 'privacy-rights-center'
          };
          data[3].children.push(privacyRightsItem);
        }
      };
      some_default()(data).call(data, function (item) {
        var _context3;
        return some_default()(_context3 = item.children).call(_context3, function (child) {
          if (child.i18n === 'common.footer.ReleaseNotes' && constant/* releaseNotes */.Aq[_this.$root.country]) {
            child.link = constant/* releaseNotes */.Aq[_this.$root.country];
            return true;
          }
          return false;
        });
      });
      var insertShipping = function insertShipping() {
        var _context4;
        var addItem = {
          i18n: 'Shipping & Return',
          link: constant/* shippingLinks */.Tf[country]
        };
        splice_default()(_context4 = data[2].children).call(_context4, 3, 0, addItem);
      };
      var insertOpenBox = function insertOpenBox() {
        var item = {
          i18n: 'common.footer.openBox',
          link: 'open-box'
        };
        data[0].children.push(item);
      };
      var insertRetailerApplication = function insertRetailerApplication() {
        var _context5, _context6;
        var item = {
          i18n: 'common.footer.retailerApplication',
          link: '/retailer-form'
        };
        var insertIndex = find_index_default()(_context5 = data[data.length - 1].children).call(_context5, function (item) {
          return item.link === 'https://ify.coros.com/account/login';
        }) + 1;
        splice_default()(_context6 = data[data.length - 1].children).call(_context6, insertIndex, 0, item);
      };
      var insertTradeIn = function insertTradeIn() {
        var item = {
          i18n: 'Trade-In Program',
          link: 'trade-in'
        };
        data[0].children.push(item);
      };
      var insertVulnerabilityReporting = function insertVulnerabilityReporting() {
        var item = {
          i18n: 'Vulnerability Reporting',
          link: 'report-vulnerability'
        };
        data[2].children.push(item);
      };
      if (this.isCn) {
        return data;
      } else {
        var _context10, _context11;
        for (var index = 0; index < data[2].children.length; index++) {
          var item = data[2].children[index];
          if (item.link === 'warranty') {
            item.link = 'https://support.coros.com/hc/en-us/articles/360039803532';
            break;
          }
        }
        //  西语不要
        if (country === 'es') {
          var _context7;
          data[3].children = filter_default()(_context7 = data[3].children).call(_context7, function (item) {
            return item.link !== 'careers';
          });
        }
        if (country === 'us') {
          insertOpenBox();
          insertRetailerApplication();
          insertTradeIn();
        }
        if (country !== 'us') {
          var _context8;
          // 登录入口仅保留美国站
          var deleteIndex = find_index_default()(_context8 = data[data.length - 1].children).call(_context8, function (item) {
            return item.link === 'https://ify.coros.com/account/login';
          });
          if (deleteIndex >= 0) {
            var _context9;
            splice_default()(_context9 = data[data.length - 1].children).call(_context9, deleteIndex, 1);
          }
        }
        if (includes_default()(_context10 = keys_default()(constant/* shippingLinks */.Tf)).call(_context10, country)) {
          insertShipping();
        }
        if (index_of_default()(_context11 = this.$i18n.locale).call(_context11, 'en') === 0) {
          insertVulnerabilityReporting();
        }
        parseA11yStatementIfNeed();
        insertPrivacyRightsIfNeed();
        return data;
      }
    },
    apiHost: function apiHost() {
      var reg = /^.*\.prod$/;
      var env = this.$root.env;
      var _env = 'prod';
      if (!reg.test(env)) {
        _env = 'test';
      }
      if (env == 'local') {
        _env = 'local';
      }
      return config/* faqHost */.ZH[_env];
    }
  },
  mounted: function mounted() {
    this.currentPath = location.pathname.replace(/^\//, '');
  },
  methods: {
    toggleMenu: function toggleMenu(menu) {
      if (this.activeMenu === menu) {
        this.activeMenu = '';
      } else {
        this.activeMenu = menu;
      }
    },
    validate: function validate() {
      var regex = /^(([a-zA-Z0-9_\-.]+)@([a-zA-Z0-9_\-.]+)\.([a-zA-Z]{2,5}){1,65})$/;
      return regex.test(this.email);
    },
    handleClick: function handleClick(item) {
      var i18n = item.i18n;
      switch (i18n) {
        case 'common.footer.CookieSettings':
          this.openCookieSetting();
          break;
      }
    },
    openCookieSetting: function openCookieSetting() {
      window.cc.showSettings();
    },
    handleSubscribe: function handleSubscribe() {
      var _this2 = this;
      var messageClass = 'md:!w-[80vw] md:top';
      if (this.validate()) {
        if (this.subscribing) return;
        this.subscribing = true;
        subscribe(this.email).then(function (isSubscribedSuccessfully) {
          if (isSubscribedSuccessfully) {
            _this2.$alert(_this2.$t('common.footer.subscribe.success.desc'), {
              title: _this2.$t('common.footer.subscribe.success.title'),
              confirmButtonText: 'Confirm',
              customClass: messageClass
            });
          } else {
            _this2.$alert(_this2.$t('common.footer.subscribe.error.desc'), {
              title: _this2.$t('common.footer.subscribe.error.title'),
              confirmButtonText: 'Confirm',
              customClass: messageClass
            });
          }
        })["finally"](function () {
          _this2.subscribing = false;
        });
      } else {
        this.$alert(this.$t('common.footer.subscribeEmailError'), {
          title: 'Message',
          confirmButtonText: 'Confirm',
          customClass: messageClass
        });
      }
    }
  },
  render: function render(h) {
    var _this3 = this,
      _context12;
    var isMobile = this.$dataBus.isMobile;
    return h("footer", {
      "attrs": {
        "id": "un-footer",
        "data-country": this.$root.country
      },
      "class": "coros-footer"
    }, [h("div", {
      "class": ['flex md:block md:pt-0 md:overflow-hidden coros-footer__inner', this.isCn ? 'pt-80 pb-70 justify-between' : 'pt-[0.64rem] pb-[1rem]']
    }, [h("div", {
      "class": ['subscription md:flex md:flex-col md:text-center']
    }, [this.isCn ? null : h(SocialMedia/* default */.Z, {
      "attrs": {
        "footer": true
      },
      "class": "sns-wrapper md:order-2 md:flex md:justify-between"
    }), this.isCn ? h("div", {
      "class": "mb-70 md:mb-md-100"
    }, [h(WebpImg/* default */.Z, {
      "attrs": {
        "src": (0,assetsRequire/* assetsRequire */.y)('@assets/images/47f8c5fd51de6ff6e98dbe217c1c7b6a.jpeg'),
        "height": this.$dataBus.isMobile ? 220 : 160
      },
      "class": "wechat-qr align-middle md:order-1"
    }), h("p", {
      "class": "mt-20 md:mt-md-20 text-[14px] md:text-[0.32rem] md:w-3/6 mx-auto"
    }, ["\u5173\u6CE8 COROS \u9AD8\u9A70\u5FAE\u4FE1\u516C\u4F17\u53F7\u83B7\u53D6 \u66F4\u591A\u54C1\u724C\u4EA7\u54C1\u4FE1\u606F\u3001\u7528\u6237\u6545\u4E8B\u3001\u8FD0\u52A8\u79D1\u5B66\u77E5\u8BC6\u3001\u8BAD\u7EC3\u65B9\u6848"])]) : h("div", {
      "class": "font-ltp-hi form-for-subscription md:order-3"
    }, [h("label", {
      "class": "mb-20 block lang-de:whitespace-pre-line md:lang-de:whitespace-normal",
      "attrs": {
        "for": "subscripe"
      }
    }, [this.$t('common.footer.subscribe.title')]), h("div", {
      "class": "subscription-input-wrapper relative whitespace-nowrap"
    }, [h("div", {
      "class": "relative inline-block align-middle w-[1.5625rem] md:w-[6.08rem]"
    }, [h("svg", {
      "attrs": {
        "viewBox": "0 0 250 50",
        "role": "img",
        "alt": ""
      },
      "class": "w-full inline-block align-middle"
    }, [h("polygon", {
      "attrs": {
        "points": "1,1 249,1 229,49 1,49 ",
        "fill": "transparent",
        "stroke-width": "2",
        "stroke": "#0b0b21"
      }
    })]), h("input", helper_default()([{
      "on": {
        "input": function input($event) {
          if ($event.target.composing) return;
          _this3.email = $event.target.value;
        }
      },
      "class": "subscription-input absolute top-1/2 left-0 right-0 -translate-y-1/2",
      "style": {
        'margin-top': this.$i18n.locale === 'en' ? '0.1em' : null,
        'margin-left': '0.5em',
        'margin-right': '1.4em'
      },
      "attrs": {
        "id": "subscripe",
        "type": "email",
        "autocomplete": "email",
        "placeholder": this.$t('common.footer.subscripPlaceholder')
      },
      "domProps": {
        "value": _this3.email
      }
    }, {
      directives: [{
        name: "model",
        value: _this3.email,
        modifiers: {}
      }]
    }]))]), h("button", {
      "class": "bg-transparent border-transparent relative inline-block align-middle border-0 w-[0.875rem] md:w-[3.423rem] text-white subscribe-btn",
      "style": {
        'margin-left': this.$dataBus.isMobile ? '-4.1%' : '-3.1%'
      },
      "on": {
        "click": this.handleSubscribe
      }
    }, [h("svg", {
      "attrs": {
        "viewBox": "0 0 140 50",
        "role": "img",
        "alt": ""
      },
      "class": "w-full inline-block align-middle"
    }, [h("polygon", {
      "attrs": {
        "points": "20,0 140,0 140,50 0,50"
      },
      "class": "subscribe-btn__bg transition-[fill] duration-200"
    })]), h("span", {
      "class": "absolute w-full left-0 top-1/2 -translate-y-1/2"
    }, [this.$t('common.footer.joinUs')])])])]), h(WebpImg/* default */.Z, {
      "attrs": {
        "src": this.$dataBus.isMobile ? (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/footer_logo_m.png') : (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/footer_logo.png'),
        "height": this.$dataBus.isMobile ? 140 : 60,
        "alt": "COROS logo"
      },
      "class": ['md:order-1 footer-logo', {
        'md:hidden': this.isCn
      }]
    })]), h("nav", {
      "class": ['menus md:block flex justify-between', {
        grow: this.$root.country !== 'cn'
      }],
      "attrs": {
        "aria-label": "footer links"
      }
    }, [map_default()(_context12 = this.menus2render).call(_context12, function (group) {
      var _context13, _context14;
      return h("div", {
        "class": "menus-group",
        "key": group.i18n
      }, [h("div", {
        "class": "menus-group__title"
      }, [h(MenuTitle, {
        "attrs": {
          "isMobile": isMobile,
          "i18nKey": group.i18n,
          "activeMenu": _this3.activeMenu
        }
      })]), h("el-collapse-transition", [h("div", {
        "attrs": {
          "id": "footer-menus-".concat(group.i18n),
          "role": isMobile ? 'region' : false,
          "aria-labelledby": isMobile ? "footer-menus-label-".concat(group.i18n) : false
        },
        "directives": [{
          name: "show",
          value: !isMobile || _this3.activeMenu === group.i18n
        }]
      }, [h("ul", {
        "class": "menus-group__sub-menus"
      }, [map_default()(_context13 = filter_default()(_context14 = group.children).call(_context14, function (item) {
        var _context15;
        return !item.avaliableCountries || includes_default()(_context15 = item.avaliableCountries).call(_context15, _this3.$root.country);
      })).call(_context13, function (item) {
        var _context16;
        return h("li", {
          "class": "menu-item",
          "key": concat_default()(_context16 = "".concat(group.i18n, "_")).call(_context16, item.i18n)
        }, [item.comp && h(item.comp) || h("a", {
          "class": "menu-item__link",
          "attrs": {
            "aria-current": "".concat(_this3.currentPath === item.link),
            "href": item.link
          },
          "on": {
            "click": function click() {
              return _this3.handleClick(item);
            }
          }
        }, [_this3.$t(item.i18n)])]);
      })])])])]);
    })])]), h("div", {
      "class": "text-center copy-right"
    }, [h("span", {
      "class": "copy-right__inner"
    }, ["\xA9 ", this.copyrightYear, " | COROS Wearables, Inc."]), this.isCn ? h("span", {
      "class": "copy-right__inner ml-20 md:ml-0"
    }, [h("a", {
      "class": "text-inherit hover:text-inherit",
      "attrs": {
        "href": "https://beian.miit.gov.cn/",
        "target": "_blank"
      }
    }, ["\u7CA4ICP\u590714054014\u53F7-3"])]) : null]), h("span", {
      "attrs": {
        "id": "open-link-hint"
      },
      "class": "sr-only"
    }, ["(opens in new tab)"])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_NewFootervue_type_script_lang_js = (NewFootervue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewFooter/index.vue?vue&type=style&index=0&id=585a6bea&prod&lang=scss
var NewFootervue_type_style_index_0_id_585a6bea_prod_lang_scss = __webpack_require__(47725);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/index.vue?vue&type=style&index=0&id=585a6bea&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewFooter/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_NewFootervue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const NewFooter = (component.exports);

/***/ }),

/***/ 28912:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ NewHeader)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js + 3 modules
var slicedToArray = __webpack_require__(95266);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-timeout.js
var set_timeout = __webpack_require__(9938);
var set_timeout_default = /*#__PURE__*/__webpack_require__.n(set_timeout);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/assign.js
var object_assign = __webpack_require__(67552);
var assign_default = /*#__PURE__*/__webpack_require__.n(object_assign);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/some.js
var some = __webpack_require__(27525);
var some_default = /*#__PURE__*/__webpack_require__.n(some);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/Promotion/usePromotion.js

var customStorageEventName = 'customStorageEvent';
var usePromotion = function usePromotion(storeKey) {
  // 和locale switch 初始保持一致
  var isClosed = (0,vue_common_prod.ref)(true);
  var checkIfIsClosed = function checkIfIsClosed(_ref) {
    var detail = _ref.detail;
    if (detail.key === storeKey && detail.newValue === '1') {
      return isClosed.value = true;
    }
    isClosed.value = false;
  };
  (0,vue_common_prod.onMounted)(function () {
    window.addEventListener(customStorageEventName, checkIfIsClosed);
    checkIfIsClosed({
      detail: {
        key: storeKey,
        newValue: window.sessionStorage.getItem(storeKey)
      }
    });
  });
  (0,vue_common_prod.onBeforeUnmount)(function () {
    window.removeEventListener(customStorageEventName, checkIfIsClosed);
  });
  var close = function close() {
    window.sessionStorage.setItem(storeKey, '1');
    window.dispatchEvent(new CustomEvent(customStorageEventName, {
      detail: {
        key: storeKey,
        newValue: '1'
      }
    }));
  };
  return {
    isClosed: isClosed,
    close: close
  };
};
/* harmony default export */ const Promotion_usePromotion = (usePromotion);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
// EXTERNAL MODULE: ./app/web/projects/www/components/ResizeWatcher/index.vue + 2 modules
var ResizeWatcher = __webpack_require__(90800);
// EXTERNAL MODULE: ./app/web/projects/www/components/WebpImg/index.vue + 2 modules
var WebpImg = __webpack_require__(76517);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/parse-int.js
var parse_int = __webpack_require__(34300);
var parse_int_default = /*#__PURE__*/__webpack_require__.n(parse_int);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js
var reduce = __webpack_require__(53706);
var reduce_default = /*#__PURE__*/__webpack_require__.n(reduce);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.to-fixed.js
var es_number_to_fixed = __webpack_require__(97389);
// EXTERNAL MODULE: ./node_modules/axios/index.js
var axios = __webpack_require__(9669);
var axios_default = /*#__PURE__*/__webpack_require__.n(axios);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopifyBuy/shopifyBuy.js + 1 modules
var shopifyBuy = __webpack_require__(86567);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/BagIcon/ExtendedTooltip.vue?vue&type=script&lang=js

/* harmony default export */ const ExtendedTooltipvue_type_script_lang_js = ({
  name: 'ExtendedTooltip',
  "extends": element_ui_common.Tooltip,
  props: {
    canBlurable: {
      type: Function,
      required: false
    }
  },
  methods: {
    handleBlur: function handleBlur() {
      if (this.canBlurable && this.canBlurable()) {
        this.focusing = false;
        this.hide();
      }
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/BagIcon/ExtendedTooltip.vue?vue&type=script&lang=js
 /* harmony default export */ const BagIcon_ExtendedTooltipvue_type_script_lang_js = (ExtendedTooltipvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/BagIcon/ExtendedTooltip.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  BagIcon_ExtendedTooltipvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ExtendedTooltip = (component.exports);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/BagIcon/index.vue?vue&type=script&lang=js









function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context7, _context8; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context7 = ownKeys(Object(t), !0)).call(_context7, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context8 = ownKeys(Object(t))).call(_context8, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }













/* harmony default export */ const BagIconvue_type_script_lang_js = ({
  components: {
    ExtendedTooltip: ExtendedTooltip
  },
  props: {
    currentPath: {
      type: String,
      required: false,
      "default": ''
    }
  },
  data: function data() {
    return {
      canAutoCloseTooltip: true,
      visible4bagInfos: false
    };
  },
  computed: {
    totalPrice: function totalPrice() {
      var _this$$dataBus$cart;
      return parse_int_default()(((_this$$dataBus$cart = this.$dataBus.cart) === null || _this$$dataBus$cart === void 0 ? void 0 : _this$$dataBus$cart.estimatedCost.subtotalAmount.amount) || 0).toFixed(2);
    },
    pickedItems: function pickedItems() {
      var _context;
      return this.$dataBus.cart && this.$dataBus.cart.lines ? map_default()(_context = this.$dataBus.cart.lines).call(_context, function (node) {
        return _objectSpread({}, node);
      }) : [];
    },
    visibleItems: function visibleItems() {
      var _context2;
      return slice_default()(_context2 = this.pickedItems).call(_context2, 0, 3);
    },
    amount: function amount() {
      var _context3;
      return reduce_default()(_context3 = this.pickedItems).call(_context3, function (sum, curr) {
        return sum + curr.quantity;
      }, 0);
    },
    unVisibleItemsQuantity: function unVisibleItemsQuantity() {
      var _context4;
      return reduce_default()(_context4 = this.pickedItems).call(_context4, function (sum, curr, index) {
        return sum + (index > 2 ? curr.quantity : 0);
      }, 0);
    }
  },
  mounted: function mounted() {
    this.handleTab();
    if (location.pathname !== '/shop/bag') {
      this.getQuantityInCheckout();
    }
  },
  methods: {
    toggleTooltip: function toggleTooltip() {
      var _this = this;
      this.visible4bagInfos = !this.visible4bagInfos;
      this.$nextTick(function () {
        if (_this.visible4bagInfos) {
          var _this$$refs$triggerEl;
          (_this$$refs$triggerEl = _this.$refs.triggerEl) === null || _this$$refs$triggerEl === void 0 || _this$$refs$triggerEl.focus();
        }
      });
    },
    cropShopifyImg: function cropShopifyImg(url) {
      var _context5;
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;
      return url ? url.replace(/\.(jpg|jpeg|png|webp)/, concat_default()(_context5 = "_".concat(width, "x")).call(_context5, height === 0 ? '' : height, ".$1")) : '';
    },
    getQuantityInCheckout: function getQuantityInCheckout() {
      var _this2 = this;
      this.$dataBus.loadingCart = true;
      return shopifyBuy/* default.getCart */.Z.getCart().then(function (cart) {
        _this2.$dataBus.$set(_this2.$dataBus, 'cart', cart);
        _this2.$dataBus.loadingCart = false;
      });
    },
    removeFromCart: function removeFromCart(items) {
      var _this3 = this;
      axios_default()["delete"]('/shopify/cart/items', {
        data: {
          items: items
        }
      }).then(function (_ref) {
        var data = _ref.data;
        _this3.$dataBus.$set(_this3.$dataBus, 'cart', data.data.checkoutLineItemsRemove.checkout);
      });
    },
    updateItemInCart: function updateItemInCart(item) {
      var _this4 = this;
      return axios_default().put('/shopify/cart/items', {
        id: item.id,
        quantity: item.quantity
      }).then(function (_ref2) {
        var data = _ref2.data;
        _this4.$dataBus.$set(_this4.$dataBus, 'cart', data.data.checkoutLineItemsUpdate.checkout);
      });
    },
    handleCheckChange: function handleCheckChange(lineItem, newVal, oldVal) {
      lineItem.updating = true;
      if (newVal === 0) {
        this.removeFromCart(lineItem.id);
      } else {
        this.updateItemInCart(lineItem);
      }
    },
    handleTab: function handleTab() {
      var _this5 = this;
      // 导航栏有折叠动画，购物图标内容只能插入到body，导致正常tab 切换无法触发，需手动判断tab 进行手动触发focus。
      var keydownHandler = function keydownHandler(e) {
        var lastActiveElement = document.activeElement;
        if (e.code === 'Tab') {
          _this5.canAutoCloseTooltip = lastActiveElement === _this5.$el && _this5.$refs.link ? false : true;
          if (lastActiveElement === _this5.$el && _this5.$refs.link && _this5.visible4bagInfos) {
            if (e.shiftKey) {
              _this5.visible4bagInfos = false;
            } else {
              e.preventDefault();
              _this5.$refs.link.focus();
            }
          } else if (lastActiveElement === _this5.$refs.link) {
            _this5.visible4bagInfos = false;
            _this5.$el.nextElementSibling.focus();
            e.preventDefault();
          }
        } else if (e.code === 'Escape') {
          if (lastActiveElement === _this5.$refs.link) {
            _this5.$el.focus();
          }
          _this5.visible4bagInfos = false;
          e.preventDefault();
          e.stopPropagation();
        }
      };
      document.addEventListener('keydown', keydownHandler);
      this.$once('hook:beforeDestroy', function () {
        document.removeEventListener('keydown', keydownHandler);
      });
    },
    checkIfTooltipBlurable: function checkIfTooltipBlurable() {
      return this.canAutoCloseTooltip;
    }
  },
  render: function render(h) {
    var _this6 = this,
      _context6;
    var isMobile = this.$dataBus.isMobile;
    var triggerEl = function triggerEl() {
      var isCurrent = isMobile ? _this6.currentPath === 'shop/bag' : false;
      var visibleTotal = _this6.amount <= 99 ? _this6.amount : '99+';
      return h(isMobile ? 'a' : 'button', {
        "class": ['shop-bag-icon border-transparent bg-transparent text-inherit', {
          'show-amount': _this6.amount > 0
        }],
        attrs: _objectSpread(_objectSpread({
          'data-count': visibleTotal,
          'aria-label': isMobile ? 'Go to shopping bag' : "Your shopping bag has ".concat(visibleTotal, " items.")
        }, isMobile ? {
          href: 'shop/bag'
        } : {}), {}, {
          'aria-current': isCurrent
        }),
        ref: 'triggerEl',
        on: isMobile ? {} : {
          click: _this6.toggleTooltip
        }
      }, [h("i", {
        "class": "iconfont icon-gouwu"
      })]);
    };
    return isMobile ? triggerEl() : h(ExtendedTooltip, {
      "attrs": {
        "aria-expanded": "".concat(this.visible4bagInfos),
        "placement": "bottom",
        "effect": "light",
        "manual": true,
        "disabled": isMobile,
        "canBlurable": this.checkIfTooltipBlurable
      },
      "ref": "tooltip",
      "model": {
        value: _this6.visible4bagInfos,
        callback: function callback($$v) {
          _this6.visible4bagInfos = $$v;
        }
      }
    }, [triggerEl(), h("div", {
      "slot": "content",
      "class": "shop-bag-tooltip"
    }, [this.amount > 0 ? h("div", [h("ul", [map_default()(_context6 = this.visibleItems).call(_context6, function (item) {
      return h("li", {
        "key": item.id,
        "class": "flex mb-15",
        "directives": [{
          name: "loading",
          value: item.updating
        }]
      }, [h("div", {
        "class": "shop-bag__item-img"
      }, [h("img", {
        "attrs": {
          "src": _this6.cropShopifyImg(item.merchandise.image.src, 160, 0),
          "alt": "",
          "width": "60"
        },
        "class": "inline-block"
      })]), h("div", {
        "class": "flex-grow"
      }, [h("p", {
        "class": "shop-bag__item-title"
      }, [item.merchandise.product.title]), h("p", {
        "class": "shop-bag__item-sub-title mb-25"
      }, [item.merchandise.title === 'Default Title' ? '' : item.merchandise.title]), h("div", ["X ", item.quantity]), h("span", {
        "class": "sr-only"
      }, [","])])]);
    })]), h("div", {
      "class": "mt-50 leading-relaxed shop-bag__footer"
    }, [h("div", {
      "class": "shop-bag__total",
      "directives": [{
        name: "show",
        value: this.unVisibleItemsQuantity
      }]
    }, [h("span", {
      "class": "shop-bag__total-inner"
    }, [this.unVisibleItemsQuantity, " more item", this.unVisibleItemsQuantity.length > 1 ? 's' : '', " in your Bag"])]), h("a", {
      "class": "uppercase checkout-btn",
      "attrs": {
        "href": "shop/bag",
        "target": "_new",
        "aria-describedby": "open-link-hint"
      },
      "ref": "link"
    }, [this.$t('shop.checkOut')])])]) : h("div", {
      "class": "text-center"
    }, [h("p", [this.$t('shop.bagEmpty')])])])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/BagIcon/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_BagIconvue_type_script_lang_js = (BagIconvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/BagIcon/index.vue?vue&type=style&index=0&id=464aed3e&prod&lang=scss
var BagIconvue_type_style_index_0_id_464aed3e_prod_lang_scss = __webpack_require__(5664);
;// CONCATENATED MODULE: ./app/web/projects/www/components/BagIcon/index.vue?vue&type=style&index=0&id=464aed3e&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/BagIcon/index.vue
var BagIcon_render, BagIcon_staticRenderFns
;

;


/* normalize component */

var BagIcon_component = (0,componentNormalizer/* default */.Z)(
  components_BagIconvue_type_script_lang_js,
  BagIcon_render,
  BagIcon_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const BagIcon = (BagIcon_component.exports);
// EXTERNAL MODULE: ./node_modules/vue-no-ssr/dist/vue-no-ssr.common.js
var vue_no_ssr_common = __webpack_require__(22261);
var vue_no_ssr_common_default = /*#__PURE__*/__webpack_require__.n(vue_no_ssr_common);
// EXTERNAL MODULE: ./app/web/projects/www/components/NewFooter/CountriesDialog/main.js + 6 modules
var main = __webpack_require__(40193);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/trapFocus.js
var trapFocus = __webpack_require__(26386);
// EXTERNAL MODULE: ./app/web/projects/www/components/ScrollWatcher/index.vue + 2 modules
var ScrollWatcher = __webpack_require__(96503);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewHeader/Promotion/index.vue?vue&type=template&id=4f1d9286

var Promotionvue_type_template_id_4f1d9286_render = function render() {
  var _vm = this,
    _c = _vm._self._c,
    _setup = _vm._self._setupProxy;
  return _c("div", {
    staticClass: "flex justify-center h-[50px] md:h-auto md:justify-start md:flex-wrap locale-switch thanksgiving-prompt items-center md:relative"
  }, [_c("div", {
    staticClass: "md:w-[8rem] md:order-1"
  }, [_vm._v(_vm._s(_vm.desc))]), _vm._v(" "), _c("div", {
    staticClass: "md:w-[8rem] md:mt-md-30 md:order-3"
  }, [_vm.link ? _c("a", {
    staticClass: "inline-block md:w-full md:ml-0 md:inline-flex md:justify-between md:items-center align-middle md:h-md-42 md:leading-md-42 ml-15 border-b border-solid border-white bg-transparent border-0 text-inherit hover:text-inherit",
    attrs: {
      href: _vm.link,
      "aria-label": _vm.linkLabel
    }
  }, [_c("span", {
    staticClass: "inline-block align-middle mr-[0.5em] capitalize link-text"
  }, [_vm._v(_vm._s(_vm.linkText))]), _vm._v(" "), _c("i", {
    staticClass: "inline-block align-middle iconfont icon-forward !text-[0.75em] md:!text-[1em] md:pr-md-10"
  })]) : _vm._e()]), _vm._v(" "), _c("div", {
    staticClass: "md:w-1/5 md:order-2"
  }, [_vm.closable ? _c("button", {
    staticClass: "inline-block ml-40 md:ml-0 align-middle iconfont icon-close pointer border-0 bg-transparent",
    attrs: {
      "aria-label": _vm.closeLabel
    },
    on: {
      click: _setup.close
    }
  }) : _vm._e()])]);
};
var Promotionvue_type_template_id_4f1d9286_staticRenderFns = [];
Promotionvue_type_template_id_4f1d9286_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/Promotion/index.vue?vue&type=template&id=4f1d9286

;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewHeader/Promotion/index.vue?vue&type=script&setup=true&lang=js


var __default__ = {
  name: 'PromotionComp'
};
/* harmony default export */ const Promotionvue_type_script_setup_true_lang_js = (/*#__PURE__*/assign_default()(__default__, {
  props: {
    link: {
      type: String,
      "default": ''
    },
    linkText: {
      type: String,
      "default": ''
    },
    desc: {
      type: String,
      "default": ''
    },
    closable: {
      type: Boolean,
      "default": true
    },
    /**
     * @description: 用于链接的无障碍文案
     */
    linkLabel: {
      type: String,
      "default": ''
    },
    /**
     * @description: 用于关闭按钮的无障碍文案
     */
    closeLabel: {
      type: String,
      "default": ''
    },
    /**
     * @description: 用于关闭按钮的session storage 显示控制key
     */
    storageKey: {
      type: String,
      required: true
    }
  },
  setup: function setup(__props) {
    var props = __props;
    var _usePromotion = Promotion_usePromotion(props.storageKey),
      close = _usePromotion.close;
    return {
      __sfc: true,
      props: props,
      close: close
    };
  }
}));
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/Promotion/index.vue?vue&type=script&setup=true&lang=js
 /* harmony default export */ const NewHeader_Promotionvue_type_script_setup_true_lang_js = (Promotionvue_type_script_setup_true_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewHeader/Promotion/index.vue?vue&type=style&index=0&id=4f1d9286&prod&lang=scss
var Promotionvue_type_style_index_0_id_4f1d9286_prod_lang_scss = __webpack_require__(99770);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/Promotion/index.vue?vue&type=style&index=0&id=4f1d9286&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/Promotion/index.vue



;


/* normalize component */

var Promotion_component = (0,componentNormalizer/* default */.Z)(
  NewHeader_Promotionvue_type_script_setup_true_lang_js,
  Promotionvue_type_template_id_4f1d9286_render,
  Promotionvue_type_template_id_4f1d9286_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const Promotion = (Promotion_component.exports);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewHeader/index.vue?vue&type=script&setup=true&lang=js

























var helpCenterLinks = {
  en: 'https://support.coros.com/hc/en-us',
  fr: 'https://support.coros.com/hc/fr',
  es: 'https://support.coros.com/hc/es',
  jp: 'https://faq.coros.com/help?locale=ja-JP'
};
var SkipLinks = {
  functional: true,
  render: function render(h, _ref) {
    var _ref$props = _ref.props,
      currentPath = _ref$props.currentPath,
      _ref$props$hasSkipToF = _ref$props.hasSkipToFooter,
      hasSkipToFooter = _ref$props$hasSkipToF === void 0 ? true : _ref$props$hasSkipToF;
    return h("ul", [h("li", [h("a", {
      "attrs": {
        "href": "".concat(currentPath, "#un-main")
      },
      "class": "skip-focus-btn"
    }, ["Skip to main content"])]), hasSkipToFooter ? h("li", [h("a", {
      "attrs": {
        "href": "".concat(currentPath, "#un-footer")
      },
      "class": "skip-focus-btn"
    }, ["Skip to footer"])]) : null]);
  }
};
var NewHeadervue_type_script_setup_true_lang_js_default_ = {
  name: 'NewHeader',
  components: {
    // ProductsDialog
    ResizeWatcher: ResizeWatcher/* default */.Z,
    WebpImg: WebpImg/* default */.Z
  },
  props: {
    /**
     * 是否显示跳转到页脚的按钮
     */
    hasSkipToFooter: {
      type: Boolean,
      "default": true
    },
    transparent: {
      type: Boolean,
      "default": false
    },
    // 禁止收起
    disableScrollWatch: {
      type: Boolean,
      "default": false
    }
  },
  data: function data() {
    return {
      height4mainHeader: null,
      subMenuIsActived: false,
      activeSubSideMenu: '',
      visible4countries: false,
      lastScrollY: 0,
      togglePosition: {
        top: 0,
        left: 0
      },
      activeMenu: '',
      products: [],
      isLoaded: false,
      currentPath: ''
    };
  },
  computed: {
    hasPromotion: function hasPromotion() {
      var _context;
      return includes_default()(_context = ['au']).call(_context, this.$root.country);
    },
    hasShopifyNewDesign: function hasShopifyNewDesign() {
      var _context2;
      return includes_default()(_context2 = ['us', 'ca', 'uk', 'jp', 'fr', 'es', 'de', 'eu', 'au']).call(_context2, this.$root.country);
    },
    isJapan: function isJapan() {
      return this.$root.country === 'jp';
    },
    isCn: function isCn() {
      return this.$root.country === 'cn';
    },
    menus: function menus() {
      var _context4, _context5, _context6;
      // faq开关-新训练菜单
      var enabledNewTraining = this.$checkEnabledForCurrentRegion('new_training', {
        fallbackData: {
          value: true,
          available_region: ['en-US', 'en-GB', 'en-CA', 'en-EU', 'en-UK']
        }
      });
      // faq开关-攀岩菜单
      var enabledClimb = this.$checkEnabledForCurrentRegion('climb_menu', {
        fallbackData: {
          value: true,
          available_region: ['en-US', 'en-GB', 'en-CA', 'en-EU', 'en-UK']
        }
      });
      if (this.isCn) {
        var _context3;
        return [{
          nameI18n: 'common.header.products',
          children: [{
            nameI18n: 'menu.allProducts',
            link: 'products',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/vertix2s/new-menu-all.png')
          }, {
            link: 'vertix2s',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/vertix2s/new-menu-vertix2s.png'),
            nameI18n: 'menu.vertix2s',
            thumbAlt: 'Shop COROS VERTIX 2 GPS Adventure Watch'
          },
          // { link: 'vertix2', thumb: assetsRequire('@assets/images/common/nav/vertix2.png'), nameI18n: 'CommonHeaderMenu1nav1' },
          {
            link: 'apex2',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/nav/apex2.png'),
            nameI18n: 'CommonHeaderMenu1nav17'
          }, {
            link: 'pace3',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/131f6e7fe263d5eea6cac97c0de7f07f.png'),
            nameI18n: 'pace3.productNameShort'
          }, {
            link: 'dura',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/46e9b5fe397898e486eb9cd1b4be3137.png'),
            nameI18n: 'menu.dura'
          }, {
            link: 'heart-rate-monitor',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/hrm-20230002/bar_hrm_img@2x.png'),
            nameI18n: 'hrm.menu'
          },
          // {
          //   link: 'coros-pod2',
          //   thumb: assetsRequire('@assets/images/common/nav/pod2.png'),
          //   nameI18n: 'common.header.pod2',
          // },
          {
            link: 'carabiner',
            thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/d728172c9dfeaa8eabfb3ba81267b0d7.png'),
            name: 'VERTIX 2 快挂扣',
            thumbAlt: 'VERTIX 2 快挂扣'
          }
          // {
          //   link: 'accessories',
          //   thumb: assetsRequire('@assets/images/common/nav/vertix2accsssories.png'),
          //   nameI18n: 'CommonHeaderMenu1nav8',
          // },
          ]
        }, {
          nameI18n: 'common.header.training_science',
          children: filter_default()(_context3 = [{
            link: 'evolab',
            nameI18n: 'common.footer.evolab'
          }, {
            nameI18n: 'common.header.trainingHub',
            link: 'traininghub'
          }, {
            link: 'training',
            nameI18n: 'menu.new_training'
          }, {
            link: 'roadrun',
            nameI18n: 'menu.roadrun'
          }, enabledClimb && {
            link: 'climb',
            nameI18n: 'menu.climb'
          }]).call(_context3, Boolean)
        }, {
          nameI18n: 'common.header.stories',
          children: [{
            nameI18n: 'coros_about',
            link: 'about'
          }, {
            link: 'athlete',
            nameI18n: 'Pro Athletes'
          }]
        }, {
          nameI18n: 'common.header.support',
          children: [{
            nameI18n: 'common.footer.helpCenter',
            link: 'https://faq.coros.com/help'
          }, {
            nameI18n: 'common.footer.warranty',
            link: 'warranty'
          }, {
            nameI18n: 'common.header.buyOnline',
            link: 'https://coros.tmall.com/'
          }, {
            nameI18n: 'common.header.storeLocation',
            link: 'storeLocation'
          }, {
            nameI18n: 'common.header.historyData',
            link: 'login'
          }]
        }];
      }
      var country = this.$root.country;
      var menu = [{
        nameI18n: 'common.header.products',
        children: filter_default()(_context4 = [{
          nameI18n: 'menu.allProducts',
          link: 'products',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/vertix2s/new-menu-all.png'),
          thumbAlt: 'Shop all COROS GPS watches'
        }, {
          link: 'vertix2s',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/vertix2s/new-menu-vertix2s.png'),
          nameI18n: 'menu.vertix2s',
          thumbAlt: 'Shop COROS VERTIX 2 GPS Adventure Watch'
        }, {
          link: 'apex2',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/nav/apex2.png'),
          nameI18n: 'CommonHeaderMenu1nav17',
          thumbAlt: 'Shop COROS APEX Premium Multisport GPS Watch'
        }, {
          link: 'pace3',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/131f6e7fe263d5eea6cac97c0de7f07f.png'),
          nameI18n: 'pace3.productNameShort'
        }, !this.isJapan && {
          link: 'pace3valencia',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/abad8a2bdeaf4008df95e480193785e0.png'),
          nameI18n: 'pace3.valencia_productNameShort'
        }, {
          link: 'dura',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/46e9b5fe397898e486eb9cd1b4be3137.png'),
          nameI18n: 'menu.dura'
        }, {
          link: 'heart-rate-monitor',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/hrm-20230002/bar_hrm_img@2x.png'),
          nameI18n: 'hrm.menu'
        }, this.isJapan && {
          link: 'coros-pod2',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/nav/pod2.png'),
          nameI18n: 'common.header.pod2',
          thumbAlt: 'Shop COROS POD 2 or Performance Optimization Device'
        }, {
          link: 'accessories',
          thumb: (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/nav/vertix2accsssories.png'),
          nameI18n: 'CommonHeaderMenu1nav8',
          thumbAlt: 'Shop COROS Watch and Lifestyle accessories'
        }]).call(_context4, Boolean)
      }, {
        nameI18n: 'common.header.training_science',
        children: filter_default()(_context5 = [{
          nameI18n: 'common.header.trainingHub',
          link: 'traininghub'
        }, {
          link: 'coaches',
          nameI18n: 'common.footer.coach'
        }, !enabledNewTraining && {
          link: 'plans',
          nameI18n: 'common.header.plans'
        }, !enabledNewTraining && {
          link: 'workouts',
          nameI18n: 'common.header.workouts'
        }, enabledNewTraining && {
          link: 'training',
          nameI18n: 'menu.new_training'
        }, {
          link: 'roadrun',
          nameI18n: 'menu.roadrun'
        }, enabledClimb && {
          link: 'climb',
          nameI18n: 'menu.climb'
        }]).call(_context5, Boolean)
      }, {
        nameI18n: 'common.header.stories',
        children: this.isJapan ? [{
          link: 'about',
          nameI18n: 'common.footer.about'
        },
        // 日本站新闻
        {
          link: 'stories/',
          nameI18n: 'common.footer.news'
        }, {
          link: 'athlete',
          nameI18n: 'エリートアスリート'
        }, {
          link: 'retail',
          nameI18n: '取扱店舗'
        }] : filter_default()(_context6 = [{
          link: 'stories/',
          nameI18n: 'stories.homeTitle'
        }, {
          nameI18n: 'coros_convos',
          link: 'convos'
        }]).call(_context6, Boolean)
      }, {
        nameI18n: 'common.header.support',
        children: [{
          nameI18n: 'common.footer.helpCenter',
          link: helpCenterLinks[this.$root.country] || helpCenterLinks.en
        }, {
          nameI18n: 'common.footer.WatchComparison',
          link: 'comparison'
        }, {
          nameI18n: 'common.header.checkWarranty',
          link: 'checkwarranty'
        }]
      }];
      for_each_default()(menu).call(menu, function (menuItem) {
        var _menuItem$children;
        menuItem.children = (_menuItem$children = menuItem.children) === null || _menuItem$children === void 0 ? void 0 : filter_default()(_menuItem$children).call(_menuItem$children, Boolean);
      });
      return menu;
    },
    style4sideMenu: function style4sideMenu() {
      var styleObj = {
        overflow: this.activeSubSideMenu ? 'hidden' : ''
      };
      if (this.$dataBus.isMobile && this.subMenuIsActived) {
        styleObj.paddingBottom = document.body.offsetHeight - (window.visualViewport ? window.visualViewport.height : window.innerHeight) + 'px';
      }
      return styleObj;
    },
    sideMenus: function sideMenus() {
      var _this = this,
        _context9,
        _context10,
        _context11;
      if (this.isJapan) {
        return this.menus;
      }
      if (this.$dataBus.isMobile) {
        return this.menus;
      }
      var countryMenu = {
        renderFn: function renderFn() {
          var _context7;
          return (0,vue_common_prod.h)("button", {
            "attrs": {
              "type": "button",
              "aria-haspopup": "dialog",
              "aria-controls": "countries-dialog",
              "aria-labelledby": "countries-dialog-header"
            },
            "class": concat_default()(_context7 = "cursor-pointer border-0 bg-transparent leading-none hover:text-inherit text-inherit ".concat(_this.$root.country !== 'fr' && 'capitalize', " ")).call(_context7, _this.activeSubSideMenu ? 'invisible' : ''),
            "on": {
              "click": function click() {
                return main/* default.open */.Z.open();
              }
            }
          }, [_this.$t('common.footer.countries')]);
        }
      };
      if (this.isCn) {
        var _context8;
        return concat_default()(_context8 = this.menus).call(_context8, [{
          link: 'https://t.coros.com/',
          nameI18n: 'common.header.login2trainingHub'
        }, {
          renderFn: function renderFn() {
            return (0,vue_common_prod.h)("span", {
              "class": "cursor-pointer capitalize",
              "on": {
                "click": function click() {
                  return main/* default.open */.Z.open();
                }
              }
            }, ["\u7B80\u4F53\u4E2D\u6587"]);
          }
        }]);
      }
      var basisMenus = concat_default()(_context9 = [{
        link: 'retail',
        nameI18n: 'common.header.retail'
      }]).call(_context9, [{
        link: 'about',
        nameI18n: 'common.footer.about'
      }, {
        link: 'contact',
        nameI18n: 'common.footer.contact'
      }, countryMenu]);
      if (includes_default()(_context10 = ['fr', 'es']).call(_context10, this.$root.country)) {
        basisMenus = filter_default()(basisMenus).call(basisMenus, function (item) {
          return item.link !== 'stories?newsroom';
        });
      }
      return this.$dataBus.isPad ? concat_default()(_context11 = this.menus).call(_context11, basisMenus) : basisMenus;
    },
    toggleStyle: function toggleStyle() {
      if (this.subMenuIsActived) {
        return {
          position: 'fixed',
          top: this.togglePosition.top + 'px',
          left: this.togglePosition.left + 'px',
          zIndex: 21
        };
      } else {
        return {};
      }
    }
  },
  watch: {
    subMenuIsActived: function subMenuIsActived(val) {
      var _this2 = this;
      if (!val) {
        set_timeout_default()(function () {
          _this2.visible4countries = false;
        }, 300);
      }
    }
  },
  mounted: function mounted() {
    var _this3 = this;
    var stickyJs = __webpack_require__(78419);
    stickyJs.addOne(this.$el);
    window.addEventListener('load', function () {
      set_timeout_default()(function () {
        _this3.isLoaded = true;
      }, 500);
    });
    this.currentPath = location.pathname.replace(/^\//, '');
    this.setId2mainContent();
    this.handleTab();
    set_timeout_default()(function () {
      if (_this3.$slots["default"]) {
        _this3.$dataBus.initHeight4mainHeader = _this3.$el.children[_this3.$dataBus.isUs ? 1 : 0].offsetHeight;
      }
    });
  },
  methods: {
    openMobileSubMenu: function openMobileSubMenu(el, menuName) {
      var _context12;
      this.activeSubSideMenu = menuName;
      this.$refs.toggle.focus();
      this.focusableElsInTrap = concat_default()(_context12 = [this.$refs.toggle]).call(_context12, (0,trapFocus/* getFocusableElements */.GO)(el.nextElementSibling));
    },
    setId2mainContent: function setId2mainContent() {
      if (this.$slots["default"]) {
        var _this$$slots$default = (0,slicedToArray/* default */.Z)(this.$slots["default"], 1),
          defaultSlotInstance = _this$$slots$default[0].componentInstance;
        if (defaultSlotInstance && defaultSlotInstance.$el) {
          var _context13;
          if (defaultSlotInstance.$el.id && includes_default()(_context13 = this.$root.env).call(_context13, 'prod') === -1) {
            console.error('The default slot element in header will have id "un-main" set by header component, but it already has id: ' + defaultSlotInstance.$el.id + '.');
          }
          defaultSlotInstance.$el.setAttribute('id', 'un-main');
        }
      } else {
        var _context14;
        if (this.$el.nextElementSibling.id && includes_default()(_context14 = this.$root.env).call(_context14, 'prod') === -1) {
          console.error('The element next to header will have id "un-main" set by header component, but it already has id: ' + this.$el.nextElementSibling.id + '.');
        }
        this.$el.nextElementSibling.setAttribute('id', 'un-main');
      }
    },
    handleTab: function handleTab() {
      var _this4 = this;
      document.addEventListener('keydown', function (e) {
        if (e.code === 'Tab') {
          if (_this4.$dataBus.isMobile) {
            if (_this4.subMenuIsActived) {
              (0,trapFocus/* hijackTab */.hS)(e, _this4.focusableElsInTrap, document.activeElement);
            }
          } else {
            set_timeout_default()(function () {
              if (_this4.$el.contains(document.activeElement)) {
                if (document.activeElement.dataset.menuI18n) {
                  // } else {
                  //   this.activeMenu = document.activeElement.dataset.menuI18n;
                  // }
                }
              } else {
                _this4.activeMenu = '';
                if (_this4.subMenuIsActived) {
                  _this4.toggleSubMenu();
                }
              }
            });
          }
        } else if (e.code === 'Escape') {
          if (_this4.activeMenu && _this4.$refs.mainMenu.contains(e.target)) {
            var _this4$$refs$_this4$a;
            var el2focus = (_this4$$refs$_this4$a = _this4.$refs[_this4.activeMenu]) === null || _this4$$refs$_this4$a === void 0 ? void 0 : _this4$$refs$_this4$a.querySelector('.menu__item-inner');
            set_timeout_default()(function () {
              el2focus === null || el2focus === void 0 || el2focus.focus();
            }, 50);
            return _this4.activeMenu = '';
          }
          if (_this4.subMenuIsActived || _this4.activeSubSideMenu) {
            if (_this4.activeSubSideMenu) {
              var _el2focus = _this4.$refs[_this4.activeSubSideMenu];
              set_timeout_default()(function () {
                _el2focus === null || _el2focus === void 0 || _el2focus.focus();
              }, 100);
            }
            _this4.toggleSubMenu();
          }
        }
      });
    },
    collapseMainHeader: function collapseMainHeader() {
      var _this5 = this;
      if (!this.$dataBus.initHeight4mainHeader) {
        this.$dataBus.initHeight4mainHeader = this.$refs.mainHeader.offsetHeight;
      }
      if (this.height4mainHeader === 0) {
        return;
      }
      this.$dataBus.mainHeaderAnimating = true;
      this.height4mainHeader = this.$dataBus.initHeight4mainHeader;
      set_timeout_default()(function () {
        _this5.$dataBus.mainHeaderIsCollapsed = true;
        _this5.height4mainHeader = 0;
        set_timeout_default()(function () {
          _this5.$dataBus.mainHeaderAnimating = false;
        }, 660);
      });
    },
    handleScroll: function handleScroll() {
      var _this6 = this;
      if (this.disableScrollWatch) return;
      if (!this.isLoaded) return;
      var hasLocaleSwitcher = this.$root.ip.country && this.$root.ip.country != this.$root.country && (sessionStorage.localeSwitch ? sessionStorage.localeSwitch !== '1' : !!this.$root.ip.locale && this.$root.ip.locale != this.$root.locale);
      var minTop = hasLocaleSwitcher ? document.querySelector('.locale-switch').offsetHeight : 0;
      var expandMainHeader = function expandMainHeader() {
        if (_this6.height4mainHeader) {
          return;
        }
        _this6.$dataBus.mainHeaderAnimating = true;
        set_timeout_default()(function () {
          _this6.$dataBus.mainHeaderIsCollapsed = false;
          _this6.height4mainHeader = _this6.$dataBus.initHeight4mainHeader;
          set_timeout_default()(function () {
            _this6.$dataBus.mainHeaderAnimating = false;
          }, 660);
        });
      };
      if (this.$dataBus.mainHeaderAnimating || scrollY < minTop + this.height4mainHeader) {
        this.lastScrollY = scrollY;
        if (scrollY < minTop + this.height4mainHeader) {
          expandMainHeader();
        }
        return;
      }
      if (scrollY > this.lastScrollY) {
        this.collapseMainHeader();
      } else {
        expandMainHeader();
      }
      this.lastScrollY = scrollY;
    },
    togglePageScroll: function togglePageScroll() {
      assign_default()(this.$root.$el.style, this.subMenuIsActived ? {
        position: 'fixed',
        top: "-".concat(window.scrollY, "px"),
        width: '100%'
      } : {
        position: '',
        top: '',
        width: ''
      });
      if (!this.subMenuIsActived) {
        window.scrollTo(0, this.lastScrollY);
      }
    },
    handleMenuHover: function handleMenuHover(event) {
      var _context15,
        _this7 = this;
      var isClickEvent = event.type === 'click';
      var triggerFromKeyboard = event.detail === 0;
      some_default()(_context15 = this.menus).call(_context15, function (item) {
        if (_this7.$refs[item.nameI18n].contains(event.target)) {
          if (_this7.activeMenu === item.nameI18n && isClickEvent && triggerFromKeyboard) {
            _this7.activeMenu = '';
          } else {
            _this7.activeMenu = item.nameI18n;
          }
          return true;
        }
        return false;
      });
    },
    toggleSubMenu: function toggleSubMenu() {
      var _this8 = this;
      this.activeMenu = '';
      var findFocusableEls = function findFocusableEls() {
        _this8.$nextTick(function () {
          if (_this8.subMenuIsActived) {
            var _context16, _context17;
            _this8.focusableElsInTrap = concat_default()(_context16 = [_this8.$refs.toggle]).call(_context16, filter_default()(_context17 = (0,trapFocus/* getFocusableElements */.GO)(document.getElementById('side-menus'))).call(_context17, function (el) {
              var tabindex = el.getAttribute('tabindex');
              if (tabindex === null) {
                return true;
              }
              return tabindex !== '-1';
            }));
          }
        });
      };
      if (this.activeSubSideMenu) {
        this.activeSubSideMenu = '';
        findFocusableEls();
        return;
      }
      this.subMenuIsActived = !this.subMenuIsActived;
      findFocusableEls();
      if (this.$dataBus.isMobile) {
        if (this.subMenuIsActived) {
          this.lastScrollY = window.scrollY;
        }
        this.togglePageScroll();
      }
    },
    handleResize: function handleResize() {
      if (!this.$refs.toggle || !this.$refs.headerContent) return;
      var marginLeft = Number(getComputedStyle(this.$refs.toggle).marginLeft.replace('px', ''));
      this.togglePosition = {
        top: this.$refs.toggle.offsetTop - this.$refs.headerContent.offsetTop + this.$refs.toggle.firstChild.offsetTop,
        left: this.$refs.toggle.offsetLeft - marginLeft
      };
    },
    renderSideMenuItem: function renderSideMenuItem(item, index) {
      var _this9 = this;
      if (item.renderFn) {
        return item.renderFn();
      } else if (item.link) {
        return (0,vue_common_prod.h)("a", {
          "attrs": {
            "href": item.link,
            "aria-current": item.link === this.currentPath
          },
          "class": ['text-inherit', 'hover:text-inherit', this.$root.country !== 'fr' ? 'capitalize' : '', this.activeSubSideMenu ? 'invisible' : '']
        }, [this.$t(item.nameI18n)]);
      } else {
        var _context18;
        var isExpanded = this.activeSubSideMenu === item.nameI18n;
        return [(0,vue_common_prod.h)("button", {
          "ref": item.nameI18n,
          "class": ['menu__item-inner text-inherit bg-transparent border-0 hover\:color-lg-red relative top-[0.15em] capitalize', this.activeSubSideMenu ? 'invisible' : ''],
          "on": {
            "click": function click(e) {
              return _this9.openMobileSubMenu(e.target, item.nameI18n);
            }
          }
        }, [this.$t(item.nameI18n)]), (0,vue_common_prod.h)("div", {
          "class": "side-menu-item__children-wrapper",
          "style": isExpanded ? 'left: 0;' : 'visibility: hidden;'
        }, [(0,vue_common_prod.h)("ul", {
          "class": {
            'side-menu-item__children flex-wrap w-full': true,
            flex: !!item.children[0].thumb,
            block: !item.children[0].thumb,
            'has-thumb': !!item.children[0].thumb
          }
        }, [map_default()(_context18 = item.children).call(_context18, function (menu) {
          return (0,vue_common_prod.h)("li", {
            "key": menu.nameI18n,
            "class": {
              'side-menu-item__child leading-none': true,
              'w-6/12': !!menu.thumb,
              'pad:mt-md-100': !!menu.thumb,
              'pad:mt-md-50': !menu.thumb,
              'w-full': !menu.thumb
            }
          }, [(0,vue_common_prod.h)("a", {
            "attrs": {
              "href": menu.link,
              "aria-current": menu.link === _this9.currentPath,
              "tabindex": isExpanded ? 0 : -1
            }
          }, [menu.thumb ? [(0,vue_common_prod.h)(WebpImg/* default */.Z, {
            "attrs": {
              "height": 134,
              "src": menu.thumb,
              "alt": menu.thumbAlt || ''
            },
            "class": "hover:scale-125 transition-transform duration-150 ease-in side-menu-item__child__thumb"
          }), (0,vue_common_prod.h)("br")] : null, (0,vue_common_prod.h)("span", {
            "class": "mt-20 mb-20 whitespace-pre-line inline-block transition-color duration-150 ease-linear"
          }, [menu.name || _this9.$t(menu.nameI18n)])])]);
        })])])];
      }
    }
  },
  render: function render() {
    var _this10 = this,
      _context19,
      _context21;
    var _this$$dataBus = this.$dataBus,
      isMobile = _this$$dataBus.isMobile,
      isPad = _this$$dataBus.isPad,
      isUs = _this$$dataBus.isUs,
      isJp = _this$$dataBus.isJp;
    var _setup = this._self._setupProxy;
    return (0,vue_common_prod.h)("header", {
      "on": {
        "mouseleave": function mouseleave() {
          _this10.activeMenu = '';
        }
      },
      "attrs": {
        "data-country": this.$root.locale
      },
      "class": ['coros-header', {
        'shadow-bottom': !this.$slots["default"]
      }]
    }, [this.$dataBus.isUs ? (0,vue_common_prod.h)(SkipLinks, {
      "attrs": {
        "currentPath": this.currentPath,
        "hasSkipToFooter": this.hasSkipToFooter
      }
    }) : null, this.$slots["default"] ? (0,vue_common_prod.h)(ScrollWatcher/* default */.Z, {
      "attrs": {
        "cb": this.handleScroll
      }
    }) : null, (0,vue_common_prod.h)("div", {
      "ref": "mainHeader",
      "style": this.height4mainHeader !== null ? {
        height: "".concat(this.height4mainHeader, "px")
      } : '',
      "class": " overflow-hidden transition-[height] duration-300"
    }, [this.hasPromotion ? (0,vue_common_prod.h)(Promotion, {
      "directives": [{
        name: "show",
        value: !_setup.isPromotionClosed
      }],
      "attrs": {
        "desc": this.$t('common.promotionTips'),
        "link": isJp ? 'https://jp.coros.com/stories/others/c/810camp' : 'watches',
        "link-text": this.$te('common.promotionEntrance') ? this.$t('common.promotionEntrance') : this.$t('common.shopnow'),
        "close-label": "Close promotion",
        "storage-key": this._setupState.storageKey4promotion
      }
    }) : null, (0,vue_common_prod.h)("localeSwitch", {
      "class": "border-1px-b"
    }), (0,vue_common_prod.h)("div", {
      "ref": "headerContent",
      "class": "flex items-center w-full md:justify-between coros-header-content"
    }, [(0,vue_common_prod.h)("div", {
      "class": "logo-wrapper"
    }, [(0,vue_common_prod.h)("a", {
      "attrs": {
        "href": "./",
        "aria-label": "Home Page"
      }
    }, [this.$slots.logo ? this.$slots.logo : (0,vue_common_prod.h)(WebpImg/* default */.Z, {
      "attrs": {
        "height": 45,
        "src": (0,assetsRequire/* assetsRequire */.y)('@assets/images/common/logo_black.png'),
        "alt": "COROS logo"
      },
      "class": "logo h-auto w-full block"
    })])]), (0,vue_common_prod.h)("div", {
      "class": "flex-item span-item"
    }), (0,vue_common_prod.h)("nav", {
      "ref": "mainMenu",
      "class": "menu",
      "attrs": {
        "aria-label": "main menu"
      }
    }, [(0,vue_common_prod.h)("ul", {
      "on": {
        "mouseover": this.handleMenuHover,
        "click": this.handleMenuHover
      }
    }, [map_default()(_context19 = this.menus).call(_context19, function (menu) {
      var _context20;
      var menuI18nName = _this10.$t(menu.nameI18n);
      return (0,vue_common_prod.h)("li", {
        "attrs": {
          "data-menu": "products"
        },
        "ref": menu.nameI18n,
        "key": menu.nameI18n,
        "class": {
          menu__item: true,
          'cursor-pointer': menu.children
        }
      }, [menu.link ? (0,vue_common_prod.h)("a", {
        "class": "menu__item-link relative top-[0.15em] uppercase",
        "attrs": {
          "href": menu.link
        }
      }, [menuI18nName]) : [(0,vue_common_prod.h)("button", {
        "attrs": {
          "type": "button",
          "aria-expanded": "".concat(_this10.activeMenu === menu.nameI18n),
          "data-menu-i18n": menu.nameI18n,
          "aria-controls": "".concat(menuI18nName, "-menus")
        },
        "class": "menu__item-inner relative top-[0.15em] uppercase bg-transparent border-0"
      }, [menuI18nName]), (0,vue_common_prod.h)("transition", {
        "attrs": {
          "name": "el-fade-in-linear"
        }
      }, [(0,vue_common_prod.h)("ul", {
        "attrs": {
          "id": "".concat(menuI18nName, "-menus")
        },
        "class": "sub-menus flex justify-center leading-none bg-white",
        "directives": [{
          name: "show",
          value: _this10.activeMenu === menu.nameI18n
        }],
        "style": {
          top: "".concat(_this10.$slots["default"] ? "".concat(_this10.$dataBus.initHeight4mainHeader - 1, "px") : null),
          boxShadow: '0 10px 17px 1px rgba(128, 128, 128, 0.1)'
        }
      }, [map_default()(_context20 = menu.children).call(_context20, function (subMenu) {
        return (0,vue_common_prod.h)("li", {
          "key": subMenu.nameI18n,
          "class": "sub-menus__item whitespace-pre-line leading-none ml-25 pl-25"
        }, [(0,vue_common_prod.h)("a", {
          "attrs": {
            "href": subMenu.link,
            "aria-current": "".concat(_this10.currentPath === subMenu.link)
          },
          "class": "text-inherit hover:text-inherit"
        }, [subMenu.thumb ? [(0,vue_common_prod.h)(WebpImg/* default */.Z, {
          "attrs": {
            "height": 80,
            "src": subMenu.thumb,
            "aria-hidden": "true",
            "lazyload": false
          },
          "class": "hover:scale-125 transition-transform duration-150 ease-in meun-item__thumb"
        }), (0,vue_common_prod.h)("div", {
          "class": "invisible"
        })] : null, (0,vue_common_prod.h)("span", {
          "class": "mt-20 mb-20 inline-block text-inherit transition-color duration-150 ease-linear"
        }, [subMenu.name || _this10.$t(subMenu.nameI18n)])])]);
      })])])]]);
    })])]), (0,vue_common_prod.h)("div", {
      "class": 'sub-menu md:!justify-end ' + (this.activeSubSideMenu ? 'go-back' : this.subMenuIsActived ? 'actived' : '')
    }, [this.hasShopifyNewDesign ? (0,vue_common_prod.h)(BagIcon, {
      "attrs": {
        "currentPath": this.currentPath
      },
      "class": "cursor-pointer mr-20"
    }) : null, isMobile ? null : (0,vue_common_prod.h)("a", {
      "attrs": {
        "href": "https://t.coros.com/",
        "aria-label": isMobile ? 'login to traininghub' : null
      },
      "class": ['sub-menu__item align-top mr-auto', {
        'portrait:hidden': isPad
      }]
    }, [this.isCn || this.hasShopifyNewDesign ? (0,vue_common_prod.h)("i", {
      "class": "iconfont icon-geren1"
    }) : null, isMobile ? null : this.$t('common.header.login2trainingHub')]), !(this.isJapan && !isMobile) && (this.isCn && !isMobile ? (0,vue_common_prod.h)("span", {
      "class": "sub-menu__item",
      "on": {
        "click": function click() {
          return main/* default.open */.Z.open();
        }
      }
    }, [(0,vue_common_prod.h)("i", {
      "class": "iconfont icon-yuyan1"
    }), "\u7B80\u4F53\u4E2D\u6587"]) : [(0,vue_common_prod.h)("button", {
      "attrs": {
        "type": "button",
        "aria-expanded": "".concat(this.subMenuIsActived),
        "aria-controls": "side-menus",
        "aria-label": "More links"
      },
      "class": "side-menu__toggle md:ml-md-30",
      "ref": "toggle",
      "on": {
        "click": this.toggleSubMenu
      },
      "style": this.toggleStyle
    }, [(0,vue_common_prod.h)("span", {
      "class": "side-menu__toggle-item"
    }), (0,vue_common_prod.h)("span", {
      "class": "side-menu__toggle-item"
    }), (0,vue_common_prod.h)("span", {
      "class": "side-menu__toggle-item"
    })]), (0,vue_common_prod.h)("transition", {
      "attrs": {
        "name": "in"
      }
    }, [(0,vue_common_prod.h)((vue_no_ssr_common_default()), [(0,vue_common_prod.h)("ul", {
      "attrs": {
        "id": "side-menus"
      },
      "class": "side-menu-panel",
      "directives": [{
        name: "show",
        value: this.subMenuIsActived
      }],
      "style": this.style4sideMenu
    }, [map_default()(_context21 = this.sideMenus).call(_context21, function (sideMenu, index) {
      return (0,vue_common_prod.h)("li", {
        "class": "side-menu-item leading-[3]",
        "key": sideMenu.nameI18n
      }, [_this10.renderSideMenuItem(sideMenu, index)]);
    })])])])])])])]), this.isCn && !this.$dataBus.isMobile ? null : (0,vue_common_prod.h)(ResizeWatcher/* default */.Z, {
      "attrs": {
        "cb": this.handleResize,
        "immediate": true
      }
    }), this.$slots["default"]]);
  }
};
/* harmony default export */ const NewHeadervue_type_script_setup_true_lang_js = (/*#__PURE__*/assign_default()(NewHeadervue_type_script_setup_true_lang_js_default_, {
  setup: function setup(__props) {
    var storageKey4promotion = 'summer-promotion';
    var _usePromotion = Promotion_usePromotion(storageKey4promotion),
      isPromotionClosed = _usePromotion.isClosed;
    return {
      __sfc: true,
      helpCenterLinks: helpCenterLinks,
      SkipLinks: SkipLinks,
      storageKey4promotion: storageKey4promotion,
      isPromotionClosed: isPromotionClosed,
      assetsRequire: assetsRequire/* assetsRequire */.y,
      ResizeWatcher: ResizeWatcher/* default */.Z,
      WebpImg: WebpImg/* default */.Z,
      BagIcon: BagIcon,
      NoSSR: (vue_no_ssr_common_default()),
      CountriesDialog: main/* default */.Z,
      hijackTab: trapFocus/* hijackTab */.hS,
      getFocusableElements: trapFocus/* getFocusableElements */.GO,
      ScrollWatcher: ScrollWatcher/* default */.Z,
      Promotion: Promotion,
      usePromotion: Promotion_usePromotion
    };
  }
}));
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/index.vue?vue&type=script&setup=true&lang=js
 /* harmony default export */ const components_NewHeadervue_type_script_setup_true_lang_js = (NewHeadervue_type_script_setup_true_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewHeader/index.vue?vue&type=style&index=0&id=2127abd3&prod&lang=scss
var NewHeadervue_type_style_index_0_id_2127abd3_prod_lang_scss = __webpack_require__(39250);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/index.vue?vue&type=style&index=0&id=2127abd3&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/NewHeader/index.vue
var NewHeader_render, NewHeader_staticRenderFns
;

;


/* normalize component */

var NewHeader_component = (0,componentNormalizer/* default */.Z)(
  components_NewHeadervue_type_script_setup_true_lang_js,
  NewHeader_render,
  NewHeader_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const NewHeader = (NewHeader_component.exports);

/***/ }),

/***/ 1718:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ProductMenu)
});

// EXTERNAL MODULE: ./node_modules/@vue/babel-helper-vue-jsx-merge-props/dist/helper.js
var helper = __webpack_require__(36568);
var helper_default = /*#__PURE__*/__webpack_require__.n(helper);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-timeout.js
var set_timeout = __webpack_require__(9938);
var set_timeout_default = /*#__PURE__*/__webpack_require__.n(set_timeout);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/CompareTableDialog/index.vue?vue&type=template&id=ed65e5f6
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("transition", {
    attrs: {
      name: "dialog-fade"
    },
    on: {
      "after-enter": _vm.afterEnter,
      "after-leave": _vm.afterLeave
    }
  }, [_c("div", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.visible,
      expression: "visible"
    }],
    staticClass: "el-dialog__wrapper",
    on: {
      click: function click($event) {
        if ($event.target !== $event.currentTarget) return null;
        return _vm.handleWrapperClick.apply(null, arguments);
      }
    }
  }, [_c("div", {
    ref: "dialog",
    staticClass: "compare-dialog-content"
  }, [_vm.showClose ? _c("button", {
    staticClass: "compare-table-wrapper__close-btn",
    attrs: {
      type: "button",
      "aria-label": "Close"
    },
    on: {
      click: _vm.handleClose
    }
  }, [_c("i", {
    staticClass: "el-icon el-icon-close"
  })]) : _vm._e(), _vm._v(" "), _c("div", {
    staticClass: "compare-table-wrapper"
  }, [_vm.hasOpened ? _c("NewCompareTable") : _vm._e()], 1)])])]);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/CompareTableDialog/index.vue?vue&type=template&id=ed65e5f6

// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js
var esm_typeof = __webpack_require__(19623);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/reflect/construct.js
var construct = __webpack_require__(24835);
var construct_default = /*#__PURE__*/__webpack_require__.n(construct);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn.js + 1 modules
var possibleConstructorReturn = __webpack_require__(22310);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/getPrototypeOf.js
var getPrototypeOf = __webpack_require__(3362);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/inherits.js + 1 modules
var inherits = __webpack_require__(84441);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js
var classCallCheck = __webpack_require__(68420);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js
var createClass = __webpack_require__(27344);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js
var is_array = __webpack_require__(98235);
var is_array_default = /*#__PURE__*/__webpack_require__.n(is_array);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/fill.js
var fill = __webpack_require__(18033);
var fill_default = /*#__PURE__*/__webpack_require__.n(fill);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/flat.js
var flat = __webpack_require__(49804);
var flat_default = /*#__PURE__*/__webpack_require__.n(flat);
// EXTERNAL MODULE: ./app/web/assets/js/assetsRequire.js
var assetsRequire = __webpack_require__(67872);
// EXTERNAL MODULE: ./app/web/projects/www/home/components/WatchSlider/constant.js
var constant = __webpack_require__(96284);
// EXTERNAL MODULE: ./app/web/projects/www/vertix/constants.js
var constants = __webpack_require__(92867);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewCompareTable/constant.js






var _context, _context2;
function _callSuper(t, o, e) { return o = (0,getPrototypeOf/* default */.Z)(o), (0,possibleConstructorReturn/* default */.Z)(t, _isNativeReflectConstruct() ? construct_default()(o, e || [], (0,getPrototypeOf/* default */.Z)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(construct_default()(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
















var APEX_46 = 'apex46';
var APEX_42 = 'apex42';
var supportedBasisSportsCn = ['跑步', '跑步机', '运动场跑步', '骑行', '室内骑行', '泳池游泳', '公开水域', '健身', '组合运动', '户外有氧', '室内有氧', '铁人三项', '划船机', '赛艇', '静水运动'];
var basisSpecs = [
// 'Product',
// '',
'price', 'Commonshopnow', 'compdispsize', 'compdisptype', 'compscreenmaterial', 'compbezelmaterial', 'compcovermaterial', 'compstrapmaterial', 'compquickreleasefitband', 'compphysicalsize', 'compweightwithsiliconeband', 'compweightwithnylonband', 'compphoneconnection', 'compaccessoryconnection', 'compwaterresistance', 'compworkingtemperature', 'compstoragetemperature', 'compchargingtime', 'compultramaxGPSmode', 'compstandardfull', 'compallsystemson', 'compallsystemsdualfrequencyon', 'compdailyuse'];
var compareFeats = ['compsupportedgnss', 'comphrmonitoring', 'compopticalheartratemonitor', 'compbarometricaltimeter', 'compaccelerometer', 'compgyroscope', 'compcompass', 'compcorosevoLab', 'comprecoverytime', 'compinterval', 'compswimmingheartrate', 'compsleepmonitoring', 'compphonenotifications', 'comp3rdpartyintegration', 'compthickglovescompatible', 'compstructuredworkouts', 'comprunningpowerfromthewrist', 'compstrydcompatible', 'compphonenotificationsduringworkouts', 'compbodytemperaturemonitorsupport', 'compbacklightalwaysnnnode', 'compinsta360cameracontrol', 'compvirtualrun', 'comppowermetercalibration', 'compsapphireglass', 'compbreadcrumbnavigation', 'compbacktostartnavigation', 'comp247blood', 'compopticalpulseoxmonitor', 'compdedicatedbacklightbutton', 'comptouchscreenmode', 'compaltitudemode', 'compextremedurability', 'compgloballandscapemaplayer', 'compregionaltopomaplayer', 'comphybridmaplayer', 'compbacklightbuttonshortcut', 'compallsatellitedualfrequency', 'compelectrocardiogramsensor', 'comphrvindex', 'compWiFi', 'compmusic'];
var compareWorkouts = ['comprun', 'compindoorrun', 'comptrackrun', 'compbike', 'compindoorbike', 'compopenwater', 'comppoolswim', 'compflatwater', 'comprowing', 'compGPScardio', 'compgymcardio', 'comptriathlon', 'compindoorrower', 'compstrength', 'comptraining', 'comptrainingplan', 'compmultisport', 'compwalk', 'comptrailrun', 'comphike', 'compmountainclimb', 'compski', 'compsnowboard', 'compxcski', 'compskitouring', 'compspeedsurfing', 'compwindsurfing', 'compwhitewater', 'compmultipitchclimb'];
var filterWorkouts = function filterWorkouts() {
  var blacklist = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  if (blacklist.length === 0) return slice_default()(compareWorkouts).call(compareWorkouts);
  return filter_default()(compareWorkouts).call(compareWorkouts, function (workout) {
    if (includes_default()(blacklist).call(blacklist, workout)) {
      return false;
    }
    return true;
  });
};
var watchesDetails = {
  vertix2: {
    thumbnail: {
      img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/compareChart/vertix2.png'),
      imgAlt: 'VERTIX2',
      link: 'vertix2'
    },
    feats: compareFeats,
    workouts: compareWorkouts
  },
  vertix: {
    thumbnail: {
      img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/compareChart/vertixblk.png'),
      imgAlt: 'VERTIX',
      link: 'vertix'
    },
    feats: slice_default()(compareFeats).call(compareFeats, 0, -5),
    workouts: filterWorkouts(['compmultipitchclimb'])
  },
  apexPro: {
    thumbnail: {
      img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/compareChart/apex-pro.png'),
      imgAlt: 'APEX Pro',
      link: 'apex-pro'
    },
    feats: slice_default()(compareFeats).call(compareFeats, 0, -5),
    workouts: filterWorkouts(['compmultipitchclimb'])
  },
  apex46: {
    thumbnail: {
      img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/compareChart/b15.png'),
      imgAlt: 'APEX 46mm',
      link: 'apex'
    },
    feats: concat_default()(_context = slice_default()(compareFeats).call(compareFeats, 0, 20)).call(_context, slice_default()(compareFeats).call(compareFeats, 24, 27)),
    workouts: filterWorkouts(['compspeedsurfing', 'compwindsurfing', 'compwhitewater', 'compmultipitchclimb', 'compwalk'])
  },
  apex42: {
    thumbnail: {
      img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/compareChart/b13.png'),
      imgAlt: 'APEX 42mm',
      link: 'apex'
    },
    feats: concat_default()(_context2 = slice_default()(compareFeats).call(compareFeats, 0, 20)).call(_context2, slice_default()(compareFeats).call(compareFeats, 24, 27)),
    workouts: filterWorkouts(['compspeedsurfing', 'compwindsurfing', 'compwhitewater', 'compmultipitchclimb', 'compwalk'])
  },
  pace2: {
    thumbnail: {
      img: (0,assetsRequire/* assetsRequire */.y)('@assets/images/compareChart/pace2.png'),
      imgAlt: 'PACE 2',
      link: 'pace2'
    },
    feats: slice_default()(compareFeats).call(compareFeats, 0, -18),
    workouts: filterWorkouts(['comptrailrun', 'comphike', 'compmountainclimb', 'compski', 'compsnowboard', 'compxcski', 'compskitouring', 'compspeedsurfing', 'compwindsurfing', 'compwhitewater', 'compmultipitchclimb'])
  }
};
var compareWatches = ['vertix2', 'vertix', 'apexPro', APEX_46, APEX_42, 'pace2'];
var WatchThumbnail = {
  functional: true,
  render: function render(h, _ref) {
    var props = _ref.props;
    var _props$watch = props.watch,
      img = _props$watch.img,
      imgAlt = _props$watch.imgAlt,
      link = _props$watch.link;
    return h("a", {
      "attrs": {
        "href": link
      }
    }, [h("img", {
      "class": "product-img",
      "attrs": {
        "height": "120",
        "src": img,
        "alt": imgAlt
      }
    })]);
  }
};
var chain = /*#__PURE__*/function () {
  function chain() {
    (0,classCallCheck/* default */.Z)(this, chain);
    this._next = null;
  }
  return (0,createClass/* default */.Z)(chain, [{
    key: "setNext",
    value: function setNext(fn) {
      this._next = fn;
    }
  }]);
}();
var DefaultCompare = /*#__PURE__*/function (_chain) {
  function DefaultCompare() {
    (0,classCallCheck/* default */.Z)(this, DefaultCompare);
    return _callSuper(this, DefaultCompare, arguments);
  }
  (0,inherits/* default */.Z)(DefaultCompare, _chain);
  return (0,createClass/* default */.Z)(DefaultCompare, [{
    key: "exec",
    value: function exec(vm) {
      var _context3, _context6, _context11, _context12, _context15, _context16;
      var title = map_default()(_context3 = ['compproduct']).call(_context3, function (spec) {
        var _context4;
        return concat_default()(_context4 = [spec]).call(_context4, map_default()(compareWatches).call(compareWatches, function (watch) {
          var _context5;
          return concat_default()(_context5 = "".concat(spec)).call(_context5, watch.toLowerCase());
        }));
      });
      title.push(concat_default()(_context6 = ['']).call(_context6, map_default()(compareWatches).call(compareWatches, function (watch) {
        return {
          renderFn: function renderFn(h) {
            return h(WatchThumbnail, {
              "attrs": {
                "watch": watchesDetails[watch].thumbnail
              }
            });
          }
        };
      })));
      var specRows = map_default()(basisSpecs).call(basisSpecs, function (spec) {
        var _context7;
        return concat_default()(_context7 = [spec]).call(_context7, map_default()(compareWatches).call(compareWatches, function (watch) {
          var _context8;
          if (spec === 'price') {
            return (0,constant/* findPrice */.k)(watch.replace('apex', 'apex_').toLowerCase());
          } else if (spec === 'Commonshopnow') {
            return {
              renderFn: function renderFn(h) {
                return vm.$root.country === 'us' ? h("a", {
                  "class": "shopify-buy__btn inline-block",
                  "attrs": {
                    "href": watchesDetails[watch].thumbnail.link
                  }
                }, [vm.$t(spec)]) : h("ShopifyBuy", {
                  "class": "inline-block",
                  "attrs": {
                    "shop-link": "https://www.enjoyyourbike.com/COROS:.:350.html",
                    "shopify-id": watch.replace(/apex\d\d/, 'apex')
                  }
                }, [vm.$t(spec)]);
              }
            };
          }
          return concat_default()(_context8 = "".concat(spec)).call(_context8, watch.toLowerCase());
        }));
      });
      var featRows = map_default()(compareFeats).call(compareFeats, function (feat) {
        var _context9;
        return concat_default()(_context9 = [feat]).call(_context9, map_default()(compareWatches).call(compareWatches, function (watch) {
          var _context10;
          return includes_default()(_context10 = watchesDetails[watch].feats).call(_context10, feat) ? '√' : '';
        }));
      });
      var workoutRows = concat_default()(_context11 = concat_default()(_context12 = [[{
        renderFn: function renderFn(h) {
          return h("div", {
            "style": "height: 90px; line-height: 90px;"
          }, [vm.$t('compsupportedworkoutmodes')]);
        },
        colSpan: compareWatches.length + 1
      }]]).call(_context12, title)).call(_context11, map_default()(compareWorkouts).call(compareWorkouts, function (workout) {
        var _context13;
        return concat_default()(_context13 = [workout]).call(_context13, map_default()(compareWatches).call(compareWatches, function (watch) {
          var _context14;
          return includes_default()(_context14 = watchesDetails[watch].workouts).call(_context14, workout) ? '√' : '';
        }));
      }));
      return concat_default()(_context15 = concat_default()(_context16 = concat_default()(title).call(title, specRows)).call(_context16, featRows)).call(_context15, workoutRows);
    }
  }]);
}(chain);
var CompareInCn = /*#__PURE__*/function (_chain2) {
  function CompareInCn() {
    (0,classCallCheck/* default */.Z)(this, CompareInCn);
    return _callSuper(this, CompareInCn, arguments);
  }
  (0,inherits/* default */.Z)(CompareInCn, _chain2);
  return (0,createClass/* default */.Z)(CompareInCn, [{
    key: "exec",
    value: function exec(vm, locale) {
      if (locale === 'cn') {
        var _context18, _context19, _context20, _context21, _context22, _context23, _context28;
        var parseApexSpecs = function parseApexSpecs(i18nItem) {
          var _context17;
          var translation = vm.$t(i18nItem);
          if (is_array_default()(translation)) {
            return translation;
          }
          return fill_default()(_context17 = new Array(2)).call(_context17, translation);
        };
        // apex 两个尺寸的规格描述多语言只有apex 一个key，所以需要单独处理
        var uniqWatches = filter_default()(compareWatches).call(compareWatches, function (watch) {
          return watch !== APEX_42;
        });

        // apex 的规格描述有数组（两个值）的情况，需要压平
        var title = [flat_default()(_context18 = concat_default()(_context19 = ['']).call(_context19, map_default()(uniqWatches).call(uniqWatches, function (watch) {
          var i18nItem = "specs.".concat(watch.replace(/\d\d/, ''), ".modeVal");
          if (watch === APEX_46) {
            return parseApexSpecs(i18nItem);
          }
          return vm.$t(i18nItem).replace(/coros /i, '');
        }))).call(_context18)];
        title.push(concat_default()(_context20 = ['']).call(_context20, map_default()(compareWatches).call(compareWatches, function (watch) {
          return {
            renderFn: function renderFn(h) {
              return h(WatchThumbnail, {
                "attrs": {
                  "watch": watchesDetails[watch].thumbnail
                }
              });
            }
          };
        })));
        var specRows = map_default()(_context21 = map_default()(_context22 = filter_default()(_context23 = constants/* allSpecs.cn */.f.cn).call(_context23, function (_ref2) {
          var label = _ref2.label;
          return label !== 'specs.model';
        })).call(_context22, function (_ref3) {
          var label = _ref3.label;
          return label;
        })).call(_context21, function (spec) {
          var _context25, _context26;
          if (spec === '所有手表均支持的运动类型') {
            var _context24;
            return concat_default()(_context24 = [spec]).call(_context24, {
              cellVal: '跑步、跑步机、运动场跑步、骑行、室内骑行、泳池游泳、公开水域、健身、组合运动、户外有氧、室内有氧、铁人三项、划船机、赛艇、静水运动',
              colSpan: compareWatches.length
            });
          }
          return concat_default()(_context25 = [spec]).call(_context25, flat_default()(_context26 = map_default()(uniqWatches).call(uniqWatches, function (watch) {
            var _context27;
            var i18nItem = concat_default()(_context27 = "specs.".concat(watch.replace(/apex\d\d/, 'apex'), ".")).call(_context27, spec.replace('specs.', ''), "Val");
            if (watch === APEX_46) {
              return parseApexSpecs(i18nItem);
            }
            return i18nItem;
          })).call(_context26));
        });
        specRows.push(['所有手表均支持的运动类型', {
          cellVal: supportedBasisSportsCn.join('、'),
          colSpan: compareWatches.length
        }]);
        specRows.push(concat_default()(_context28 = ['额外支持的运动类型']).call(_context28, map_default()(compareWatches).call(compareWatches, function (watch) {
          var _context29;
          var i18nItem = "specs.".concat(watch.replace(/apex\d\d/, 'apex'), ".supportedWorkoutsVal");
          var localeText = vm.$t(i18nItem);
          return filter_default()(_context29 = localeText.split('、')).call(_context29, function (item) {
            return !includes_default()(supportedBasisSportsCn).call(supportedBasisSportsCn, item);
          }).join('、');
        })));
        return concat_default()(title).call(title, specRows);
      }
      return this._next.exec(vm, locale);
    }
  }]);
}(chain);
var defaultCompare = new DefaultCompare();
var compareInCn = new CompareInCn();
compareInCn.setNext(defaultCompare);
function getCompareData(vm, locale) {
  return compareInCn.exec(vm, locale);
}
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopifyBuy/index.vue + 3 modules
var ShopifyBuy = __webpack_require__(87649);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewCompareTable/index.vue?vue&type=script&lang=js





/* harmony default export */ const NewCompareTablevue_type_script_lang_js = ({
  name: 'NewCompareTable',
  components: {
    ShopifyBuy: ShopifyBuy/* default */.Z
  },
  computed: {
    tableData: function tableData() {
      return getCompareData(this, this.$i18n.locale);
    }
  },
  render: function render(h) {
    var _context,
      _this = this;
    return h("table", {
      "class": "compare-table text-center",
      "attrs": {
        "lang": this.$i18n.locale
      }
    }, [h("tbody", [map_default()(_context = this.tableData).call(_context, function (row) {
      return h("tr", {
        "class": "compare-table__row"
      }, [map_default()(row).call(row, function (cell) {
        var normalizeCell = (0,esm_typeof/* default */.Z)(cell) === 'object' ? cell : {
          cellVal: cell
        };
        return h("td", {
          "class": "compare-table__cell",
          "attrs": {
            "colspan": normalizeCell.colSpan
          }
        }, [normalizeCell.renderFn ? normalizeCell.renderFn.call(_this, h) : _this.$t(normalizeCell.cellVal)]);
      })]);
    })])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewCompareTable/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_NewCompareTablevue_type_script_lang_js = (NewCompareTablevue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/NewCompareTable/index.vue?vue&type=style&index=0&id=23e25a45&prod&lang=scss
var NewCompareTablevue_type_style_index_0_id_23e25a45_prod_lang_scss = __webpack_require__(72904);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewCompareTable/index.vue?vue&type=style&index=0&id=23e25a45&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/NewCompareTable/index.vue
var NewCompareTable_render, NewCompareTable_staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_NewCompareTablevue_type_script_lang_js,
  NewCompareTable_render,
  NewCompareTable_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const NewCompareTable = (component.exports);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/CompareTableDialog/index.vue?vue&type=script&lang=js


/* harmony default export */ const CompareTableDialogvue_type_script_lang_js = ({
  name: 'CompareTableDialog',
  components: {
    NewCompareTable: NewCompareTable
  },
  "extends": element_ui_common.Dialog,
  data: function data() {
    return {
      hasOpened: false
    };
  },
  watch: {
    visible: function visible(val) {
      if (val) {
        this.hasOpened = true;
      }
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/CompareTableDialog/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_CompareTableDialogvue_type_script_lang_js = (CompareTableDialogvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/CompareTableDialog/index.vue?vue&type=style&index=0&id=ed65e5f6&prod&lang=scss
var CompareTableDialogvue_type_style_index_0_id_ed65e5f6_prod_lang_scss = __webpack_require__(96979);
;// CONCATENATED MODULE: ./app/web/projects/www/components/CompareTableDialog/index.vue?vue&type=style&index=0&id=ed65e5f6&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/CompareTableDialog/index.vue



;


/* normalize component */

var CompareTableDialog_component = (0,componentNormalizer/* default */.Z)(
  components_CompareTableDialogvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const CompareTableDialog = (CompareTableDialog_component.exports);
// EXTERNAL MODULE: ./node_modules/vue-no-ssr/dist/vue-no-ssr.common.js
var vue_no_ssr_common = __webpack_require__(22261);
var vue_no_ssr_common_default = /*#__PURE__*/__webpack_require__.n(vue_no_ssr_common);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ProductMenu/index.vue?vue&type=script&lang=js








/* harmony default export */ const ProductMenuvue_type_script_lang_js = ({
  name: 'ProductMenu',
  props: {
    visible: {
      type: Boolean,
      "default": false
    },
    productName: {
      type: String,
      "default": ''
    },
    shopifyId: {
      type: String,
      "default": ''
    },
    showBuyButton: {
      type: Boolean,
      "default": true
    },
    accessoriesHref: {
      type: String,
      "default": ''
    },
    accessoriesBtnText: {
      type: String,
      "default": ''
    },
    customClass: {
      type: String,
      "default": ''
    },
    // 标题类名
    customTitleClass: {
      type: String,
      "default": ''
    },
    detailAnchor: {
      type: String,
      "default": ''
    },
    specAnchor: {
      type: String,
      "default": ''
    },
    customShopLink: {
      type: String,
      "default": ''
    },
    /**
     * 无手表对比弹窗
     */
    noComparisonModal: {
      type: Boolean,
      "default": false
    },
    /**
     * 隐藏前往评论的按钮
     */
    hideReview: {
      type: Boolean,
      "default": false
    },
    /**
     * 自动隐藏移动端下拉子菜单
     */
    autoHideMobileSubMenu: {
      type: Boolean,
      "default": false
    },
    hideSpec: {
      type: Boolean,
      "default": false
    }
  },
  data: function data() {
    return {
      visible4mobileSubMenus: false,
      visible4compareTable: false,
      reviewPath: '',
      productPath: ''
    };
  },
  computed: {
    isJapan: function isJapan() {
      return this.$root.country === 'jp';
    },
    isNewDesign: function isNewDesign() {
      var _context;
      return includes_default()(_context = ['us', 'ca', 'uk', 'jp', 'fr', 'es', 'de', 'eu', 'au']).call(_context, this.$root.country);
    }
  },
  mounted: function mounted() {
    this.productPath = location.pathname;
    this.reviewPath = location.pathname + '#stamped-main-widget';
  },
  methods: {
    renderDefaultMobileSubMenus: function renderDefaultMobileSubMenus() {
      var menus = this.hideSpec ? [] : [this.getSpecEl()];
      if (this.isNewDesign) {
        if (!this.hideReview) {
          menus.push((0,vue_common_prod.h)("li", {
            "class": "product-mobile-sub-menu__item"
          }, [(0,vue_common_prod.h)("a", {
            "on": {
              "click": this.closeMobileSubMenuIfNeed
            },
            "attrs": {
              "href": this.reviewPath
            }
          }, [this.$t('common.header.review')])]));
        }
        if (this.detailAnchor) {
          menus.unshift((0,vue_common_prod.h)("li", {
            "class": "product-mobile-sub-menu__item"
          }, [(0,vue_common_prod.h)("a", {
            "attrs": {
              "href": this.productPath + this.detailAnchor
            },
            "class": "product-menu__sub-menu-item-link uppercase",
            "on": {
              "click": this.closeMobileSubMenuIfNeed
            }
          }, [this.$t('common.header.overview')])]));
        }
      } else if (this.$root.country !== 'cn' && !this.noComparisonModal) {
        menus = concat_default()(menus).call(menus, (0,vue_common_prod.h)("li", {
          "class": "product-mobile-sub-menu__item",
          "on": {
            "click": this.openCompareTable
          }
        }, [this.$t('Commoncomparisonchart')]));
      }
      if (this.$root.country === 'cn') return menus;
      return concat_default()(menus).call(menus, this.accessoriesHref ? [(0,vue_common_prod.h)("li", {
        "class": "product-mobile-sub-menu__item"
      }, [(0,vue_common_prod.h)("a", {
        "attrs": {
          "href": this.accessoriesHref,
          "aria-label": "Shop accessories for ".concat(this.productName)
        },
        "class": "product-menu__sub-menu-item-link"
      }, [this.accessoriesBtnText])])] : []);
    },
    renderDefaultSubMenus: function renderDefaultSubMenus() {
      var menus = this.hideSpec ? [] : [this.getSpecEl()];
      if (this.isNewDesign) {
        if (!this.isJapan && !this.hideReview) {
          menus.push((0,vue_common_prod.h)("li", {
            "class": "product-menu__item btn"
          }, [(0,vue_common_prod.h)("a", {
            "attrs": {
              "href": this.reviewPath
            },
            "class": "product-menu__item-link"
          }, [(0,vue_common_prod.h)("h2", [this.$t('common.header.review')])])]));
        }
        if (this.detailAnchor) {
          menus.unshift((0,vue_common_prod.h)("li", {
            "class": "product-menu__item btn"
          }, [(0,vue_common_prod.h)("a", {
            "attrs": {
              "href": this.productPath + this.detailAnchor
            },
            "class": "product-menu__item-link"
          }, [(0,vue_common_prod.h)("h2", [this.$t('common.header.overview')])])]));
        }
      } else if (this.$root.country !== 'cn' && !this.noComparisonModal) {
        menus.unshift((0,vue_common_prod.h)("li", {
          "class": "product-menu__item btn",
          "on": {
            "click": this.openCompareTable
          }
        }, [this.$t('Commoncomparisonchart')]));
      }
      if (this.$root.country === 'cn') return menus;
      menus = concat_default()(menus).call(menus, this.accessoriesHref ? [(0,vue_common_prod.h)("li", {
        "class": "product-menu__item btn"
      }, [(0,vue_common_prod.h)("a", {
        "attrs": {
          "href": this.accessoriesHref,
          "aria-label": "Shop accessories for ".concat(this.productName)
        },
        "class": "product-menu__item-link"
      }, [(0,vue_common_prod.h)("h2", [this.accessoriesBtnText])])])] : []);
      return menus;
    },
    renderSubMenus: function renderSubMenus() {
      if (this.$dataBus.isPad) {
        return (0,vue_common_prod.h)("li", {
          "class": "product-menu__item",
          "on": {
            "click": this.toggleMobileSubMenus
          }
        }, [(0,vue_common_prod.h)("button", {
          "class": "bg-transparent border-0 align-middle",
          "attrs": {
            "aria-label": "more menus"
          }
        }, [(0,vue_common_prod.h)("i", {
          "class": "el-icon-arrow-down mobile-sub-nav ".concat(this.visible4mobileSubMenus ? 'active' : '')
        })])]);
      }
      if (this.$scopedSlots['sub-menus']) {
        return this.$scopedSlots['sub-menus']({
          productPath: this.productPath
        });
      }
      return this.renderDefaultSubMenus();
    },
    getSpecEl: function getSpecEl() {
      var _this$$dataBus = this.$dataBus,
        isMobile = _this$$dataBus.isMobile,
        isPad = _this$$dataBus.isPad;
      return (0,vue_common_prod.h)("li", helper_default()([{
        "class": isMobile || isPad ? 'product-mobile-sub-menu__item' : 'product-menu__item btn'
      }, this.specAnchor ? {} : {
        on: {
          click: this.openSpecs
        }
      }]), [this.specAnchor ? (0,vue_common_prod.h)("a", {
        "attrs": {
          "href": this.productPath + this.specAnchor
        },
        "class": isMobile || isPad ? 'product-menu__sub-menu-item-link' : 'product-menu__item-link',
        "on": {
          "click": this.closeMobileSubMenuIfNeed
        }
      }, [this.$t('common.header.specs')]) : this.$t('common.header.specs')]);
    },
    toggleMobileSubMenus: function toggleMobileSubMenus() {
      var _this = this;
      this.$dataBus.mainHeaderAnimating = true;
      this.visible4mobileSubMenus = !this.visible4mobileSubMenus;
      this.$nextTick(function () {
        // element-ui 手风琴菜单组件的动画效果持续时间为300，scroll 有防抖100毫秒，加50毫秒确保子菜单展开收起不触发导航栏的动画；
        set_timeout_default()(function () {
          _this.$dataBus.mainHeaderAnimating = false;
        }, 450);
      });
    },
    openCompareTable: function openCompareTable() {
      this.visible4compareTable = true;
    },
    closeMobileSubMenuIfNeed: function closeMobileSubMenuIfNeed() {
      var _this2 = this;
      if (this.$dataBus.isMobile && this.autoHideMobileSubMenu) {
        this.$nextTick(function () {
          _this2.visible4mobileSubMenus = false;
        });
      }
    },
    openSpecs: function openSpecs() {
      this.$emit('openSpecs');
      this.closeMobileSubMenuIfNeed();
    },
    scrollToTop: function scrollToTop() {
      scrollTo({
        top: 0,
        behavior: 'smooth'
      });
    }
  },
  render: function render(h) {
    var _this3 = this;
    return h("transition", {
      "attrs": {
        "name": "el-fade-in-linear"
      }
    }, [h("div", {
      "class": ['product-menu', this.customClass],
      "directives": [{
        name: "show",
        value: this.visible
      }],
      "attrs": {
        "data-country": this.$root.country
      }
    }, [h("ul", {
      "class": "product-menu__wrapper"
    }, [h("li", {
      "class": "product-menu__item ".concat(this.customTitleClass)
    }, [h("h1", [this.productName])]), h((vue_no_ssr_common_default()), {
      "attrs": {
        "placeholder": "---"
      }
    }, [this.renderSubMenus()]), this.showBuyButton ? h("li", {
      "class": "product-menu__item"
    }, [this.isNewDesign ? h("transition", {
      "attrs": {
        "name": this.$dataBus.isMobile ? 'collapse' : 'el-fade-in'
      }
    }, [h("button", {
      "class": "product-menu__btn whitespace-nowrap uppercase",
      "directives": [{
        name: "show",
        value: !this.$dataBus.isShopAreaAvailable
      }],
      "on": {
        "click": this.scrollToTop
      }
    }, [this.$t('common.shopnow')])]) : h(ShopifyBuy/* default */.Z, {
      "attrs": {
        "shopLink": this.customShopLink,
        "shopify-id": this.shopifyId
      }
    }, [this.$t('common.header.shopNow')])]) : null]), h("ElCollapseTransition", [h("ul", {
      "class": "product-mobile-sub-menu",
      "directives": [{
        name: "show",
        value: this.visible4mobileSubMenus
      }]
    }, [this.$scopedSlots['mobile-sub-menus'] ? this.$scopedSlots['mobile-sub-menus']({
      productPath: this.productPath
    }) : this.renderDefaultMobileSubMenus(h)])]), this.noComparisonModal ? null : h(CompareTableDialog, helper_default()([{
      "attrs": {
        "visible": this.visible4compareTable,
        "appendToBody": true
      }
    }, {
      "on": {
        'update:visible': function updateVisible(val) {
          _this3.visible4compareTable = val;
        }
      }
    }]))])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ProductMenu/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_ProductMenuvue_type_script_lang_js = (ProductMenuvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ProductMenu/index.vue?vue&type=style&index=0&id=131d42d1&prod&lang=scss
var ProductMenuvue_type_style_index_0_id_131d42d1_prod_lang_scss = __webpack_require__(74510);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ProductMenu/index.vue?vue&type=style&index=0&id=131d42d1&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/ProductMenu/index.vue
var ProductMenu_render, ProductMenu_staticRenderFns
;

;


/* normalize component */

var ProductMenu_component = (0,componentNormalizer/* default */.Z)(
  components_ProductMenuvue_type_script_lang_js,
  ProductMenu_render,
  ProductMenu_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ProductMenu = (ProductMenu_component.exports);

/***/ }),

/***/ 90800:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ResizeWatcher)
});

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/global-this.js
var global_this = __webpack_require__(92381);
var global_this_default = /*#__PURE__*/__webpack_require__.n(global_this);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/lodash/debounce.js
var debounce = __webpack_require__(23279);
var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ResizeWatcher/index.vue?vue&type=script&lang=js




/* harmony default export */ const ResizeWatchervue_type_script_lang_js = ({
  data: function data() {
    return {
      currentWindowWidth: (global_this_default()).innerWidth || 0
    };
  },
  props: {
    limit: {
      type: Number
    },
    condition: {
      type: String,
      validator: function validator(val) {
        var _context;
        return includes_default()(_context = [">", ">=", "<", "<="]).call(_context, val);
      }
    },
    cb: {
      type: Function
    },
    immediate: {
      type: Boolean,
      "default": false
    }
  },
  computed: {
    renderable: function renderable() {
      if (this.condition === ">") {
        return this.currentWindowWidth > this.limit;
      } else if (this.condition === ">=") {
        return this.currentWindowWidth >= this.limit;
      } else if (this.condition === "<") {
        return this.currentWindowWidth < this.limit;
      } else if (this.condition === "<=") {
        return this.currentWindowWidth <= this.limit;
      } else {
        return false;
      }
    }
  },
  methods: {
    handleResize: function handleResize() {
      this.currentWindowWidth = (global_this_default()).innerWidth || 0;
      this.cb && this.cb();
    }
  },
  render: function render() {
    return this.renderable ? this.$slots["default"] : null;
  },
  mounted: function mounted() {
    var resizeCb = debounce_default()(this.handleResize, 100);
    if (this.immediate) {
      resizeCb();
    }
    addEventListener("resize", resizeCb);
    this.$once("hook:beforeDestroy", function () {
      removeEventListener("resize", resizeCb);
    });
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ResizeWatcher/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_ResizeWatchervue_type_script_lang_js = (ResizeWatchervue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ResizeWatcher/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_ResizeWatchervue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ResizeWatcher = (component.exports);

/***/ }),

/***/ 96503:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ScrollWatcher)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/global-this.js
var global_this = __webpack_require__(92381);
var global_this_default = /*#__PURE__*/__webpack_require__.n(global_this);
// EXTERNAL MODULE: ./node_modules/lodash/debounce.js
var debounce = __webpack_require__(23279);
var debounce_default = /*#__PURE__*/__webpack_require__.n(debounce);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ScrollWatcher/index.vue?vue&type=script&lang=js


/* harmony default export */ const ScrollWatchervue_type_script_lang_js = ({
  props: {
    cb: {
      type: Function
    },
    immediate: {
      type: Boolean,
      "default": false
    }
  },
  created: function created() {
    if (this.cb && true) {
      var debouncedCb = debounce_default()(this.cb, 100);
      if (this.immediate) {
        debouncedCb();
      }
      global_this_default().addEventListener("scroll", debouncedCb);
      this.$once("hook:beforeDestroy", function () {
        global_this_default().removeEventListener("scroll", debouncedCb);
      });
    }
  },
  render: function render() {
    return null;
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ScrollWatcher/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_ScrollWatchervue_type_script_lang_js = (ScrollWatchervue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ScrollWatcher/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_ScrollWatchervue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ScrollWatcher = (component.exports);

/***/ }),

/***/ 56453:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ KlarnaPlacementWrapper)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/promise.js
var promise = __webpack_require__(35820);
var promise_default = /*#__PURE__*/__webpack_require__.n(promise);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-interval.js
var set_interval = __webpack_require__(34652);
var set_interval_default = /*#__PURE__*/__webpack_require__.n(set_interval);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
// EXTERNAL MODULE: ./node_modules/vue-no-ssr/dist/vue-no-ssr.common.js
var vue_no_ssr_common = __webpack_require__(22261);
var vue_no_ssr_common_default = /*#__PURE__*/__webpack_require__.n(vue_no_ssr_common);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/KlarnaPlacementWrapper/index.vue?vue&type=script&lang=js

function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }













// Function to dynamically load the Klarna SDK script
var loadKlarnaSDK = function () {
  var isLoaded = false;
  return function (clientId) {
    if (isLoaded) {
      console.log('Klarna SDK is already loaded');
      return promise_default().resolve();
    }
    return new (promise_default())(function (resolve, reject) {
      var script = document.createElement('script');
      script.async = true;
      script.src = 'https://js.klarna.com/web-sdk/v1/klarna.js';
      script.setAttribute('data-environment', 'production');
      script.setAttribute('data-client-id', clientId);

      // Resolve the promise once the script is loaded
      script.onload = function () {
        console.log('Klarna SDK loaded successfully');
        resolve();
      };

      // Reject the promise if loading the script fails
      script.onerror = function () {
        console.error('Failed to load the Klarna SDK');
        reject();
      };

      // Append the script to the document head
      document.head.appendChild(script);
    });
  };
}();
/* harmony default export */ const KlarnaPlacementWrappervue_type_script_lang_js = ({
  name: 'KlarnaPlacementWrapper',
  inheritAttrs: false,
  mounted: function mounted() {
    var _this = this;
    var clientId = 'bdef0216-02bf-5827-b186-52dbd2a81483';
    loadKlarnaSDK(clientId).then(function () {
      var intervalId = set_interval_default()(function () {
        var klarnaPlacement = _this.$el.querySelector('klarna-placement');
        if (klarnaPlacement && klarnaPlacement.shadowRoot) {
          var style = document.createElement('style');
          style.innerHTML = '.credit-promotion-auto-size { display: block !important; }';
          klarnaPlacement.shadowRoot.appendChild(style);
          clearInterval(intervalId); // clear the interval once the style is appended
        }
      }, 100);
    });
  },
  render: function render() {
    return (0,vue_common_prod.h)("div", {
      "attrs": {
        "id": "coros-strip-wrapper"
      }
    }, [(0,vue_common_prod.h)((vue_no_ssr_common_default()), [(0,vue_common_prod.h)("klarna-placement", {
      "attrs": _objectSpread({
        "id": "coros-strip",
        "data-key": "credit-promotion-auto-size",
        "data-locale": "en-US"
      }, this.$attrs)
    })])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/KlarnaPlacementWrapper/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_KlarnaPlacementWrappervue_type_script_lang_js = (KlarnaPlacementWrappervue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/KlarnaPlacementWrapper/index.vue?vue&type=style&index=0&id=cc25d9d8&prod&lang=scss
var KlarnaPlacementWrappervue_type_style_index_0_id_cc25d9d8_prod_lang_scss = __webpack_require__(87887);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/KlarnaPlacementWrapper/index.vue?vue&type=style&index=0&id=cc25d9d8&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/KlarnaPlacementWrapper/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_KlarnaPlacementWrappervue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const KlarnaPlacementWrapper = (component.exports);

/***/ }),

/***/ 43066:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ProvidedServices)
});

// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/ProvidedServices/index.vue?vue&type=script&lang=js



/* harmony default export */ const ProvidedServicesvue_type_script_lang_js = ({
  functional: true,
  props: {
    tag: {
      type: String,
      "default": 'div'
    },
    services: {
      type: Array,
      "default": function _default() {
        return [];
      }
    }
  },
  render: function render(h, _ref) {
    var _context;
    var props = _ref.props,
      data = _ref.data;
    return h(props.tag, {
      "class": ['flex', 'provided-service-wrapper', data.staticClass, props.services.length <= 3 ? 'justify-around' : 'justify-between'],
      attrs: data.attrs
    }, map_default()(_context = props.services).call(_context, function (service) {
      var basisContent = [h("i", {
        "class": ['iconfont inline-block', 'md:mb-md-25 mb-15', service.icon]
      }), h("br"), h("span", {
        "class": "inline-block whitespace-pre-line provided-service__text ".concat(service.link ? 'hover:underline' : '')
      }, [service.desc])];
      return h("div", {
        "class": "provided-service",
        "key": service.icon
      }, [service.link ? h("a", {
        "attrs": {
          "href": service.link,
          "target": "_blank"
        }
      }, [basisContent]) : basisContent]);
    }));
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/ProvidedServices/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_ProvidedServicesvue_type_script_lang_js = (ProvidedServicesvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/ProvidedServices/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_ProvidedServicesvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ProvidedServices = (component.exports);

/***/ }),

/***/ 73959:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ShopPanel)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/index-of.js
var index_of = __webpack_require__(51791);
var index_of_default = /*#__PURE__*/__webpack_require__.n(index_of);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js
var es_function_name = __webpack_require__(34284);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/index.vue?vue&type=template&id=42103bf7



var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    staticClass: "shop-panel",
    attrs: {
      "data-country": _vm.$i18n.locale,
      "data-nosnippet": _vm.noSnippet
    }
  }, [_vm.$dataBus.isMobile ? [_c("h2", {
    staticClass: "shop-panel__product-title whitespace-pre-line"
  }, [_vm._t("product-title", function () {
    return [_vm._v(_vm._s(_vm._f("splitByModel")(_vm.product.title, _vm.$root.country)))];
  }, {
    title: _vm.product.title || ""
  })], 2), _vm._v(" "), _vm.onlyOneVariant && !_vm.isWatch ? _c("div", {
    staticClass: "mb-15 shop-panel__product-price text-center"
  }, [_vm._v(_vm._s(_vm.formatPrice(_vm.variants[0].price)))]) : _vm._e(), _vm._v(" "), _c("div", {
    staticClass: "shopify-product-desc mb-md-60",
    domProps: {
      innerHTML: _vm._s(_vm.product.descriptionHtml)
    }
  })] : _vm._e(), _vm._v(" "), _c("div", {
    ref: "previewPanel",
    staticClass: "shop-panel__preview sticky md:relative",
    "class": _vm.onlyOneVariant && _vm.productImages.length === 1 ? "pointer-events-none" : "",
    style: _vm.$dataBus.isMobile ? {} : _vm.stickyStyle
  }, [_c("Swiper", {
    key: "preview_".concat(_vm.swiperOption4preview.slidesPerView),
    ref: "previewSwiper",
    staticClass: "swiper-container !static",
    attrs: {
      role: "region",
      "aria-roledescription": "carousel",
      "aria-label": _vm.selectedItems[0] ? "Previews for color(".concat(_vm.selectedItems[0].title, ")") : "Previews",
      options: _vm.swiperOption4preview
    }
  }, [_vm._l(_vm.productImages, function (img, slideIndex) {
    return _c("SwiperSlide", {
      key: img.id || img.src,
      staticClass: "text-center",
      attrs: {
        role: "group",
        "aria-roledescription": "slide",
        id: "product-preview-".concat(slideIndex + 1),
        "aria-label": "Product preview slide ".concat(slideIndex + 1)
      }
    }, [_c("img", {
      staticClass: "swiper-lazy preview__slide-img align-middle max-w-full",
      attrs: {
        alt: img.altText,
        src: _vm._f("cropShopifyImg")(img.src, 928, 928),
        height: "464"
      }
    })]);
  }), _vm._v(" "), _c("template", {
    slot: "pagination"
  }, [_c("button", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.productImages.length > 1,
      expression: "productImages.length > 1"
    }],
    staticClass: "preview-nav__prev",
    attrs: {
      slot: "button-prev",
      type: "button",
      "aria-label": "Previous slide"
    },
    slot: "button-prev"
  }), _vm._v(" "), _c("button", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.productImages.length > 1,
      expression: "productImages.length > 1"
    }],
    staticClass: "preview-nav__next",
    attrs: {
      slot: "button-next",
      type: "button",
      "aria-label": "Next slide"
    },
    slot: "button-next"
  }), _vm._v(" "), !_vm.$dataBus.isMobile ? _c("div", {
    staticClass: "text-center swiper-custom-pagination",
    attrs: {
      role: "tablist",
      "aria-label": "Pagination for product preview slides"
    },
    on: {
      click: _vm.handleSwiperNav
    }
  }, _vm._l(_vm.productImages, function (img, slideIndex) {
    return _c("button", {
      key: img.id || img.src,
      staticClass: "align-middle bg-transparent border-transparent swiper-custom-pagination__item",
      attrs: {
        "data-index": slideIndex,
        type: "button",
        role: "tab",
        "aria-label": "Product preview slide ".concat(slideIndex + 1),
        "aria-selected": "true",
        "aria-controls": "product-preview-".concat(slideIndex + 1),
        tabindex: _vm.currentPreviewIndex === slideIndex ? 0 : -1
      },
      on: {
        keydown: _vm.handleKeyPress4swiperPagination
      }
    }, [_c("img", {
      staticClass: "mt-25 inline-block align-middle swiper-nav-thumb",
      attrs: {
        alt: img.altText,
        "data-index": slideIndex,
        src: _vm._f("cropShopifyImg")(img.src, 100, 100),
        height: "68"
      }
    })]);
  }), 0) : _vm._e()])], 2), _vm._v(" "), !_vm.$dataBus.isMobile ? [_c("ProvidedServices", {
    staticClass: "text-center mt-35",
    attrs: {
      services: _vm.services
    }
  })] : _vm._e()], 2), _vm._v(" "), _c("div", {
    ref: "optionList",
    staticClass: "shop-panel__list"
  }, [!_vm.$dataBus.isMobile ? [_c("h2", {
    staticClass: "shop-panel__product-title whitespace-pre-line"
  }, [_vm._t("product-title", function () {
    return [_vm._v(_vm._s(_vm._f("splitByModel")(_vm.product.title, _vm.$root.country)))];
  }, {
    title: _vm.product.title || ""
  })], 2), _vm._v(" "), _vm.onlyOneVariant && !_vm.isWatch ? _c("div", {
    staticClass: "mb-15 shop-panel__product-price"
  }, [_vm._v(_vm._s(_vm.formatPrice(_vm.variants[0].price)))]) : _vm._e(), _vm._v(" "), _c("div", {
    staticClass: "shopify-product-desc",
    domProps: {
      innerHTML: _vm._s(_vm.product.descriptionHtml)
    }
  }), _vm._v(" "), _vm.detailAnchor ? _c("div", {
    staticClass: "leading-none mt-10"
  }, [_c("a", {
    staticClass: "overview-anchor",
    attrs: {
      href: _vm.currentPath + _vm.detailAnchor
    }
  }, [_vm._v(_vm._s(_vm.$t("shop.overview"))), _c("i", {
    staticClass: "iconfont icon-cijijiantou"
  })]), _vm._v(" "), _c("div", {
    staticClass: "link-to-molly"
  }, [_vm._t("link-anchor-for-jp")], 2)]) : _vm._e()] : _vm._e(), _vm._v(" "), _vm.filterColorOptions.length ? _c("div", {
    ref: "colorFilter",
    staticClass: "shop-panel__filter mt-60"
  }, [_vm._t("filter-color-title", function () {
    return [_c("h2", {
      staticClass: "leading-none shop-panel__list-title md:mt-md-100 mb-15 font-DIN-Condensed_Demi-Bold",
      attrs: {
        id: "shop-color-filter"
      }
    }, [_vm._v("\n          " + _vm._s(_vm.name4nonColorOptions ? _vm.name4nonColorOptions : _vm.filterColor === "screenSize" ? _vm.$t("shop.chooseSize") : _vm.$t("shop.chooseBandMaterial")) + "\n        ")])];
  }), _vm._v(" "), _vm._t("filter-sub-title"), _vm._v(" "), _c("div", {
    staticClass: "flex justify-between shop-panel__filter-list flex-wrap",
    attrs: {
      role: "radiogroup",
      "aria-labelledby": "shop-color-filter"
    }
  }, _vm._l(_vm.filterColorOptions, function (filter, index) {
    return _c("div", {
      key: filter.name,
      staticClass: "w-1/2 -mx-5 my-5 md:my-md-5 md:-mx-md-5 flex-shrink-0",
      "class": {
        "pl-5 md:pl-md-5": index % 2 === 0,
        "pr-5 md:pr-md-5": index % 2 === 1
      }
    }, [_c("button", {
      staticClass: "text-center shop-panel__filter-item bg-transparent w-full",
      "class": {
        selected: _vm.selectedFilterOption === filter.name
      },
      attrs: {
        id: "product-model-".concat(index),
        role: "radio",
        "aria-checked": "".concat(_vm.selectedFilterOption === filter.name),
        tabindex: _vm.selectedFilterOption ? _vm.selectedFilterOption === filter.name ? 0 : -1 : index === 0 ? 0 : -1
      },
      on: {
        keydown: [function ($event) {
          var _context;
          if (!index_of_default()(_context = $event.type).call(_context, "key") && _vm._k($event.keyCode, "right", 39, $event.key, ["Right", "ArrowRight"])) return null;
          if ("button" in $event && $event.button !== 2) return null;
          $event.preventDefault();
          return _vm.handleFocusNextColorFilter.apply(null, arguments);
        }, function ($event) {
          var _context2;
          if (!index_of_default()(_context2 = $event.type).call(_context2, "key") && _vm._k($event.keyCode, "down", 40, $event.key, ["Down", "ArrowDown"])) return null;
          $event.preventDefault();
          return _vm.handleFocusNextColorFilter.apply(null, arguments);
        }, function ($event) {
          var _context3;
          if (!index_of_default()(_context3 = $event.type).call(_context3, "key") && _vm._k($event.keyCode, "left", 37, $event.key, ["Left", "ArrowLeft"])) return null;
          if ("button" in $event && $event.button !== 0) return null;
          $event.preventDefault();
          return _vm.handleFocusNextColorFilter.apply(null, arguments);
        }, function ($event) {
          var _context4;
          if (!index_of_default()(_context4 = $event.type).call(_context4, "key") && _vm._k($event.keyCode, "up", 38, $event.key, ["Up", "ArrowUp"])) return null;
          $event.preventDefault();
          return _vm.handleFocusNextColorFilter.apply(null, arguments);
        }, function ($event) {
          var _context5;
          if (!index_of_default()(_context5 = $event.type).call(_context5, "key") && _vm._k($event.keyCode, "space", 32, $event.key, [" ", "Spacebar"])) return null;
          $event.preventDefault();
          _vm.selectedFilterOption = filter.name;
        }],
        click: function click($event) {
          _vm.selectedFilterOption = filter.name;
        }
      }
    }, [_c("span", {
      staticClass: "font-PFDINTextPro-Medium inline-block"
    }, [_vm._v(_vm._s(filter.name))])])]);
  }), 0)], 2) : _vm._e(), _vm._v(" "), _c("div", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.productIsReady,
      expression: "productIsReady"
    }],
    ref: "colorOptions",
    staticClass: "shop-panel__colors mt-60 md:mt-md-80",
    attrs: {
      role: "radiogroup",
      "aria-labelledby": "choose-color-title"
    }
  }, [_c("div", {
    staticClass: "mb-15 font-DIN-Condensed_Demi-Bold md:text-[0.56rem] leading-none shop-panel__list-title",
    attrs: {
      id: "choose-color-title"
    }
  }, [_vm._v(_vm._s(_vm.$t("shop.chooseColor"))), _vm._t("color-title-suffix")], 2), _vm._v(" "), _c("div", {
    staticClass: "link-to-molly"
  }, [_vm._t("link-to-molly")], 2), _vm._v(" "), _vm.$dataBus.isMobile ? _c("div", {
    staticClass: "link-to-molly"
  }, [_vm._t("link-anchor-for-jp")], 2) : _vm._e(), _vm._v(" "), _c("el-scrollbar", {
    ref: "colorsScrollbar",
    "class": _vm.isScrollable4colors ? "scrollable ml-[-5px] md:ml-0" : "",
    attrs: {
      "view-class": "shop-panel__color-list md:flex md:whitespace-nowrap",
      tag: "ul"
    }
  }, [_vm._l(_vm.variants, function (item, index) {
    var _context6, _context12, _context13;
    return _c("li", {
      key: item.id,
      staticClass: "shop-panel__color-item-wrapper"
    }, [_c("ColorOptionWrapper", {
      key: item.id,
      staticClass: "relative flex shop-panel__color-item items-center",
      "class": {
        selected: item.selected,
        "is-disabled": item.canSubscribeBIS || !item.available || _vm.filterColorOptions && !!_vm.filterColorOptions.length && !_vm.selectedFilterOption,
        "md:inline-flex": _vm.$dataBus.isMobile,
        "md:!w-full": _vm.variants.length === 1
      },
      attrs: {
        id: "color-item-".concat(item.id.split("/").pop()),
        variant: item,
        disabled: item.canSubscribeBIS || !item.available || _vm.filterColorOptions && !!_vm.filterColorOptions.length && !_vm.selectedFilterOption,
        tabindex: item.selected || _vm.selectedItems.length === 0 && index === 0 ? 0 : -1,
        role: item.pageLink ? false : "radio",
        "aria-label": concat_default()(_context6 = "".concat(_vm.product.title, " - ")).call(_context6, item.title),
        "aria-checked": "".concat(item.selected)
      },
      on: {
        click: function click($event) {
          return _vm.toggleItem(item);
        },
        keydown: [function ($event) {
          var _context7;
          if (!index_of_default()(_context7 = $event.type).call(_context7, "key") && _vm._k($event.keyCode, "space", 32, $event.key, [" ", "Spacebar"])) return null;
          $event.preventDefault();
          return _vm.toggleItem(item);
        }, function ($event) {
          var _context8;
          if (!index_of_default()(_context8 = $event.type).call(_context8, "key") && _vm._k($event.keyCode, "right", 39, $event.key, ["Right", "ArrowRight"])) return null;
          if ("button" in $event && $event.button !== 2) return null;
          $event.preventDefault();
          return _vm.selectNextOrPrevColor("next");
        }, function ($event) {
          var _context9;
          if (!index_of_default()(_context9 = $event.type).call(_context9, "key") && _vm._k($event.keyCode, "down", 40, $event.key, ["Down", "ArrowDown"])) return null;
          $event.preventDefault();
          return _vm.selectNextOrPrevColor("next");
        }, function ($event) {
          var _context10;
          if (!index_of_default()(_context10 = $event.type).call(_context10, "key") && _vm._k($event.keyCode, "left", 37, $event.key, ["Left", "ArrowLeft"])) return null;
          if ("button" in $event && $event.button !== 0) return null;
          $event.preventDefault();
          return _vm.selectNextOrPrevColor("prev");
        }, function ($event) {
          var _context11;
          if (!index_of_default()(_context11 = $event.type).call(_context11, "key") && _vm._k($event.keyCode, "up", 38, $event.key, ["Up", "ArrowUp"])) return null;
          $event.preventDefault();
          return _vm.selectNextOrPrevColor("prev");
        }]
      }
    }, [_c("div", {
      staticClass: "md:whitespace-pre-line"
    }, [_c("img", {
      staticClass: "color-thumbnail align-middle",
      attrs: {
        alt: "",
        src: _vm.colorMap4variant[item.id],
        height: "40"
      }
    })]), _vm._v(" "), _c("div", {
      staticClass: "whitespace-pre-line md:break-words flex-grow pl-10",
      style: _vm.$dataBus.isMobile ? "padding-top: 0.1em" : ""
    }, [_vm._v(_vm._s(_vm._f("normalizeColor")(item.title, _vm.$dataBus.isMobile)) + _vm._s(!item.available && !_vm.$dataBus.isMobile ? "\n(".concat(_vm.$dataBus.isFr ? _vm.$t("home.outOfStock") : _vm.$t("home.outOfStock").toUpperCase(), ")") : ""))]), _vm._v(" "), _c("div", {
      staticClass: "shop-panel__color-item-price"
    }, [_vm._v(_vm._s(_vm.formatPrice(item.price)))]), _vm._v(" "), item.canSubscribeBIS ? _c("div", {
      staticClass: "subscribe-bis-btn z-10 block uppercase md:pt-[0.35em] md:leading-[1.2] md:text-md-24 md:h-auto md:min-h-[0.56rem]",
      attrs: {
        role: "button",
        tabindex: "0",
        "aria-label": concat_default()(_context12 = concat_default()(_context13 = "".concat(_vm.$t("common.subscribeBIS.emailMeWhenAvailable"), " (")).call(_context13, _vm.product.title, " - ")).call(_context12, item.title, ")")
      },
      on: {
        click: function click($event) {
          return _vm.openSubscribeModal(_vm.product.id, item.id);
        },
        keydown: function keydown($event) {
          var _context14;
          if (!index_of_default()(_context14 = $event.type).call(_context14, "key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
          $event.preventDefault();
          return _vm.openSubscribeModal(_vm.product.id, item.id);
        }
      }
    }, [_vm._v(_vm._s(_vm.$t("common.subscribeBIS.emailMeWhenAvailable")))]) : _vm._e()])], 1);
  }), _vm._v(" "), _c("li", {
    staticClass: "h-[5px] md:hidden",
    attrs: {
      "aria-hidden": "true"
    }
  })], 2)], 1), _vm._v(" "), _c("NoSSR", [_vm.promotion.product && _vm.isWatch ? _c("SelectProductVariant", {
    key: "free-item",
    staticClass: "mt-60",
    attrs: {
      id: "nn-water-bottle",
      title: _vm.promotion.title,
      "product-id": _vm.promotion.product,
      "next-anchor": "accessories",
      value: _vm.selectedFreeItem
    },
    on: {
      input: _vm.handleSelectFreeItem
    },
    scopedSlots: _vm._u([_vm.promotion.subTitles ? {
      key: "subtitle",
      fn: function fn() {
        return [_c("div", {
          staticClass: "shop-panel__list-sub-title mt-15 whitespace-pre-line",
          "class": _vm.$dataBus.isMobile ? "font-big" : "font-normal"
        }, [_vm._v(_vm._s(_vm.promotion.subTitles))])];
      },
      proxy: true
    } : null], null, true)
  }) : _vm._e()], 1), _vm._v(" "), _vm.topAccessoriesCollection ? _c("SelectAccessories", {
    attrs: {
      id: "accessories",
      "collection-id": _vm.topAccessoriesCollection,
      value: _vm.selectedAccessories,
      "scroll-in-to-view-at-first-selection": ""
    },
    on: {
      input: _vm.handleSelectAccessories
    }
  }) : _vm._e(), _vm._v(" "), _vm.bandCollection ? _c("SelectBands", {
    staticClass: "mt-60",
    attrs: {
      id: "bands",
      "collection-id": _vm.bandCollection,
      "scroll-in-to-view-at-first-selection": "",
      "product-filter-func": _vm.bandExtraFilter
    },
    model: {
      value: _vm.selectedBands,
      callback: function callback($$v) {
        _vm.selectedBands = $$v;
      },
      expression: "selectedBands"
    }
  }) : _vm._e(), _vm._v(" "), _vm.$slots["total-prefix"] ? _c("div", {
    staticClass: "total-info-prefix"
  }, [_vm._t("total-prefix")], 2) : _vm._e(), _vm._v(" "), _c("div", {
    staticClass: "total-info",
    "class": _vm.$slots["total-prefix"] ? "with-prefix" : "",
    attrs: {
      id: "shop-total"
    }
  }, [!_vm.onlyOneVariant || _vm.topAccessoriesCollection ? [_c("h2", {
    staticClass: "total-info__title flex justify-between"
  }, [_c("span", {
    staticClass: "lang-ja:flex-shrink-0"
  }, [_vm._v(_vm._s(_vm.$t("shop.total")))]), _vm._v(" "), _c("span", {
    staticClass: "total-info__total-price lang-ja:whitespace-pre-line lang-ja:md:whitespace-normal"
  }, [_vm._v(_vm._s(_vm.formatPrice(_vm.totalPriceWithDiscount || _vm.totalPrice, !!(_vm.totalPriceWithDiscount || _vm.totalPrice))))])]), _vm._v(" "), _c("ul", [_vm._l(_vm.selectedItems, function (item, index) {
    return _c("li", {
      key: item.id,
      staticClass: "total-info__item flex justify-between",
      "class": {
        "mb-30 md:mb-md-50": !_vm.$dataBus.isUs,
        "mb-15 md:mb-md-30": _vm.$dataBus.isUs
      }
    }, [_c("div", [_c("p", {
      staticClass: "total-info__item-title whitespace-pre-line same-line-style"
    }, [_vm._v(_vm._s(_vm._f("splitByModel")(_vm.product.title, _vm.$root.country)) + _vm._s("\n")), _c("span", {
      staticClass: "inline-block total-info__item-sub-title"
    }, [_vm._v(_vm._s(item.title))])])]), _vm._v(" "), _c("div", [_vm._v(_vm._s(_vm.formatPrice(item.price)))])]);
  }), _vm._v(" "), _vm._l(_vm.selectedFreeItem, function (item) {
    return _c("li", {
      key: item.id,
      staticClass: "total-info__item flex justify-between"
    }, [_c("div", [_c("p", {
      staticClass: "total-info__item-title whitespace-pre-line"
    }, [_vm._v(_vm._s(item.title))])]), _vm._v(" "), _c("div", {
      staticClass: "whitespace-nowrap"
    }, [item.discountPrice ? _c("span", {
      staticClass: "inline-block mr-15 line-through total-info__item-discount align-bottom"
    }, [_vm._v(_vm._s(_vm.formatPrice(item.price)))]) : _vm._e(), _vm._v("\n              " + _vm._s(_vm.formatPrice(item.discountPrice || item.price)) + "\n            ")])]);
  }), _vm._v(" "), _vm._l(_vm.selectedBands, function (item) {
    return _c("li", {
      key: item.id,
      staticClass: "total-info__item flex justify-between"
    }, [_c("div", [_c("p", {
      staticClass: "total-info__item-title whitespace-pre-line"
    }, [_vm._v(_vm._s(_vm.watchShortName) + " " + _vm._s(item.bandType) + _vm._s("\n") + _vm._s(item.title))])]), _vm._v(" "), _c("div", [_vm._v(_vm._s(_vm.formatPrice(item.price)))])]);
  }), _vm._v(" "), _vm._l(_vm.selectedAccessories, function (item) {
    return _c("li", {
      key: item.id,
      staticClass: "total-info__item flex justify-between"
    }, [_c("div", [_c("p", {
      staticClass: "total-info__item-title same-line-style"
    }, [_vm._v(_vm._s(item.title))])]), _vm._v(" "), _c("div", {
      staticClass: "whitespace-nowrap"
    }, [item.discountPrice ? _c("span", {
      staticClass: "inline-block mr-15 line-through total-info__item-discount align-bottom"
    }, [_vm._v(_vm._s(_vm.formatPrice(item.price)))]) : _vm._e(), _vm._v("\n              " + _vm._s(_vm.formatPrice(item.discountPrice || item.price)) + "\n            ")])]);
  })], 2)] : _vm._e(), _vm._v(" "), _vm.$dataBus.isUs && _vm.totalPriceWithDiscount ? _c("KlarnaPlacementWrapper", {
    staticClass: "mt-15 md:mt-md-30 pt-15 md:pt-md-30 md:mb-md-45 border-t border-0 border-[#d8d8d8] border-solid",
    attrs: {
      "data-purchase-amount": _vm.totalPriceWithDiscount * 100
    }
  }) : _vm._e(), _vm._v(" "), _c("button", {
    directives: [{
      name: "loading",
      rawName: "v-loading",
      value: _vm.addingToBag,
      expression: "addingToBag"
    }],
    staticClass: "total-info__btn uppercase lang-fr:normal-case",
    "class": {
      "klarna-placement": _vm.$dataBus.isUs,
      "plain-btn": _vm.onlyOneVariant
    },
    attrs: {
      disabled: _vm.isEmpty
    },
    on: {
      click: _vm.addToBag
    }
  }, [_vm._v("\n        " + _vm._s(_vm.onlyOneVariant && _vm.autoSelect && _vm.isEmpty ? _vm.$t("home.outOfStock") : _vm.$t("shop.add2Bag")) + "\n      ")]), _vm._v(" "), _vm.$dataBus.isUs && !_vm.noLocallyEmbed && _vm.upc ? _c("LocallyEmbed", {
    attrs: {
      upc: _vm.upc
    }
  }) : _vm._e()], 2), _vm._v(" "), _vm.$dataBus.isMobile ? _c("ProvidedServices", {
    staticClass: "text-center mt-70",
    attrs: {
      services: _vm.services
    }
  }) : _vm._e()], 2)], 2);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/index.vue?vue&type=template&id=42103bf7

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js + 3 modules
var toConsumableArray = __webpack_require__(71649);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/asyncToGenerator.js
var asyncToGenerator = __webpack_require__(33938);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js + 3 modules
var slicedToArray = __webpack_require__(95266);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/regenerator/index.js
var regenerator = __webpack_require__(30222);
var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/includes.js
var includes = __webpack_require__(91829);
var includes_default = /*#__PURE__*/__webpack_require__.n(includes);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/reduce.js
var reduce = __webpack_require__(53706);
var reduce_default = /*#__PURE__*/__webpack_require__.n(reduce);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find.js
var find = __webpack_require__(86981);
var find_default = /*#__PURE__*/__webpack_require__.n(find);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/sort.js
var sort = __webpack_require__(76555);
var sort_default = /*#__PURE__*/__webpack_require__.n(sort);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/values.js
var values = __webpack_require__(89221);
var values_default = /*#__PURE__*/__webpack_require__.n(values);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/some.js
var some = __webpack_require__(27525);
var some_default = /*#__PURE__*/__webpack_require__.n(some);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/trim.js
var trim = __webpack_require__(84705);
var trim_default = /*#__PURE__*/__webpack_require__.n(trim);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-timeout.js
var set_timeout = __webpack_require__(9938);
var set_timeout_default = /*#__PURE__*/__webpack_require__.n(set_timeout);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/find-index.js
var find_index = __webpack_require__(13464);
var find_index_default = /*#__PURE__*/__webpack_require__.n(find_index);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/promise.js
var promise = __webpack_require__(35820);
var promise_default = /*#__PURE__*/__webpack_require__.n(promise);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/every.js
var every = __webpack_require__(8244);
var every_default = /*#__PURE__*/__webpack_require__.n(every);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/slice.js
var slice = __webpack_require__(35704);
var slice_default = /*#__PURE__*/__webpack_require__.n(slice);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/from.js
var from = __webpack_require__(10349);
var from_default = /*#__PURE__*/__webpack_require__.n(from);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/symbol.js
var symbol = __webpack_require__(52472);
var symbol_default = /*#__PURE__*/__webpack_require__.n(symbol);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js
var get_iterator_method = __webpack_require__(19389);
var get_iterator_method_default = /*#__PURE__*/__webpack_require__.n(get_iterator_method);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js
var is_array = __webpack_require__(98235);
var is_array_default = /*#__PURE__*/__webpack_require__.n(is_array);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.cause.js
var es_error_cause = __webpack_require__(21057);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.to-string.js
var es_error_to_string = __webpack_require__(68932);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.join.js
var es_array_join = __webpack_require__(6203);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.date.to-string.js
var es_date_to_string = __webpack_require__(30024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.to-fixed.js
var es_number_to_fixed = __webpack_require__(97389);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.keys.js
var es_object_keys = __webpack_require__(69358);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js
var es_object_to_string = __webpack_require__(60228);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.js
var es_promise = __webpack_require__(73964);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.finally.js
var es_promise_finally = __webpack_require__(36409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js
var es_regexp_exec = __webpack_require__(64043);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.test.js
var es_regexp_test = __webpack_require__(7409);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js
var es_regexp_to_string = __webpack_require__(12826);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js
var es_string_replace = __webpack_require__(57267);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.split.js
var es_string_split = __webpack_require__(9873);
// EXTERNAL MODULE: ./node_modules/lodash/lodash.js
var lodash = __webpack_require__(96486);
// EXTERNAL MODULE: ./node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js
var vue_awesome_swiper = __webpack_require__(90697);
// EXTERNAL MODULE: ./node_modules/swiper/css/swiper.css
var swiper = __webpack_require__(74838);
// EXTERNAL MODULE: ./node_modules/vue-no-ssr/dist/vue-no-ssr.common.js
var vue_no_ssr_common = __webpack_require__(22261);
var vue_no_ssr_common_default = /*#__PURE__*/__webpack_require__.n(vue_no_ssr_common);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopifyBuy/shopifyBuy.js + 1 modules
var shopifyBuy = __webpack_require__(86567);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectBands/index.vue?vue&type=template&id=ed547998
var SelectBandsvue_type_template_id_ed547998_render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    staticClass: "band-container"
  }, [_c("div", {
    staticClass: "leading-none mb-10 md:mt-md-80 md:mb-md-20"
  }, [_c("h2", {
    staticClass: "md:text-[0.56rem] shop-panel__list-title",
    attrs: {
      id: _vm.labelId
    }
  }, [_vm._v(_vm._s(_vm.$t("shop.chooseAdditionalBands")))])]), _vm._v(" "), _c("el-tabs", {
    model: {
      value: _vm.activeBandType,
      callback: function callback($$v) {
        _vm.activeBandType = $$v;
      },
      expression: "activeBandType"
    }
  }, _vm._l(_vm.bandTypes, function (item) {
    return _c("el-tab-pane", {
      key: item.value,
      attrs: {
        label: _vm.$t(item.label),
        name: item.value
      }
    }, [_c("SelectVariant", _vm._g({
      ref: "selector",
      refInFor: true,
      attrs: {
        variants: _vm.groupedBandVariants[item.value],
        value: _vm.value
      }
    }, _vm.$listeners.input ? {
      input: _vm.$listeners.input
    } : {}))], 1);
  }), 1)], 1);
};
var SelectBandsvue_type_template_id_ed547998_staticRenderFns = [];
SelectBandsvue_type_template_id_ed547998_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectBands/index.vue?vue&type=template&id=ed547998

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/flat.js
var flat = __webpack_require__(49804);
var flat_default = /*#__PURE__*/__webpack_require__.n(flat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/create.js
var create = __webpack_require__(3841);
var create_default = /*#__PURE__*/__webpack_require__.n(create);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.link.js
var es_string_link = __webpack_require__(37960);
// EXTERNAL MODULE: ./app/web/component/layout/index/config/index.js + 1 modules
var config = __webpack_require__(32064);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/index.js + 6 modules
var variantDetailDialog = __webpack_require__(74712);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue?vue&type=script&lang=js

















var DetailBtn = {
  functional: true,
  render: function render(h, _ref) {
    var parent = _ref.parent,
      listeners = _ref.listeners,
      _ref$props = _ref.props,
      title = _ref$props.title,
      productId = _ref$props.productId,
      variantId = _ref$props.variantId,
      link = _ref$props.link,
      disabled = _ref$props.disabled;
    var wrapperTag = 'button';
    var attrs = {};
    if (link) {
      wrapperTag = 'a';
      attrs.href = link;
      attrs['aria-label'] = "details - ".concat(title);
    } else {
      var _context;
      attrs['aria-label'] = concat_default()(_context = "".concat(title, " - ")).call(_context, parent.$t('shop.details'));
      attrs['aria-haspopup'] = 'dialog';
      attrs['aria-controls'] = 'variant-detail-dialog';
      attrs.disabled = disabled;
    }
    return h(wrapperTag, {
      "class": "detail-btn bg-transparent border-0 ".concat(link ? 'underline hover:underline underline-offset-4' : ''),
      attrs: attrs,
      on: {
        click: function click(event) {
          event.stopPropagation();
          if (link) {
            return;
          }
          if (listeners['open-detail']) {
            listeners['open-detail'](productId, variantId);
          }
        }
      }
    }, ["".concat(parent.$t('shop.details'), " "), h("i", {
      "class": "iconfont icon-cijijiantou"
    })]);
  }
};
/* harmony default export */ const SelectVariantvue_type_script_lang_js = ({
  props: {
    variants: {
      type: Array,
      "default": function _default() {
        return [];
      }
    },
    value: {
      type: Array,
      "default": function _default() {
        return [];
      }
    }
  },
  data: function data() {
    var _context2;
    var isSuffixUnit = includes_default()(_context2 = ['de', 'fr', 'es', 'eu']).call(_context2, this.$root.country);
    return {
      isSuffixUnit: isSuffixUnit,
      scrollable: true,
      selectionMap: {}
    };
  },
  computed: {
    priceUnit: function priceUnit() {
      return config/* currencyUnit */.CA[this.$root.country || 'us'];
    }
  },
  watch: {
    value: {
      handler: function handler(newVal) {
        this.selectionMap = reduce_default()(newVal).call(newVal, function (newMap, item) {
          newMap[item.id] = true;
          return newMap;
        }, create_default()(null));
      }
    },
    variants: 'checkScrollable'
  },
  mounted: function mounted() {
    var _this = this;
    var resizeObserver = new ResizeObserver(function () {
      var _this$$refs;
      (_this$$refs = _this.$refs) === null || _this$$refs === void 0 || _this$$refs.scroll.update();
    });
    resizeObserver.observe(this.$el.querySelector('.select-variant-list-wrapper'));
  },
  methods: {
    checkScrollable: function checkScrollable() {
      var _this2 = this;
      this.$nextTick().then(function () {
        set_timeout_default()(function () {
          return requestAnimationFrame(function () {
            var _this2$$refs;
            var listEl = _this2.$el.querySelector('.select-variant-list-wrapper');
            var isVerticalScrollable = !_this2.$dataBus.isMobile && listEl.scrollHeight > listEl.clientHeight;
            var isHorizontalScrollable = _this2.$dataBus.isMobile && listEl.scrollWidth > listEl.clientWidth;
            _this2.scrollable = isVerticalScrollable || isHorizontalScrollable;
            (_this2$$refs = _this2.$refs) === null || _this2$$refs === void 0 || _this2$$refs.scroll.update();
          });
        }, 50);
      });
    },
    cropShopifyImg: function cropShopifyImg(url) {
      var _context3;
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;
      return url ? url.replace(/\.(jpg|jpeg|png|webp)/, concat_default()(_context3 = "_".concat(width, "x")).call(_context3, height === 0 ? '' : height, ".$1")) : '';
    },
    openVariantDetails: function openVariantDetails(productId, variantId) {
      variantDetailDialog/* default.open */.Z.open(productId, variantId);
    },
    handleChange: function handleChange() {
      var _context4;
      var newVal = filter_default()(_context4 = this.variants).call(_context4, function (item) {
        return item.checked;
      });
      this.$emit('input', newVal.length === 1 ? newVal[0].id : map_default()(newVal).call(newVal, function (item) {
        return item.id;
      }));
    },
    toggleItem: function toggleItem(data) {
      if (data.available) {
        var _context5;
        var newVal = null;
        if (find_default()(_context5 = this.value).call(_context5, function (item) {
          return item.id === data.id;
        })) {
          var _context6;
          newVal = filter_default()(_context6 = this.value).call(_context6, function (item) {
            return item.id !== data.id;
          });
          this.selectionMap[data.id] = false;
        } else {
          var _context7;
          newVal = concat_default()(_context7 = []).call(_context7, (0,toConsumableArray/* default */.Z)(this.value), [data]);
          this.$set(this.selectionMap, data.id, true);
        }
        this.$emit('input', newVal);
      }
    },
    formatPrice: function formatPrice(price) {
      var _context8, _context10, _context11, _context12;
      var country = this.$root.country;
      if (includes_default()(_context8 = ['jp']).call(_context8, country)) {
        price = Number(price).toLocaleString('ja-JP');
      } else {
        var _context9;
        price = Number(price).toFixed(2);
        if (includes_default()(_context9 = ['fr', 'es']).call(_context9, country)) {
          price = String(price).replace('.', ',');
        }
      }
      var more = country === 'jp' ? '（税込）' : '';
      return this.isSuffixUnit ? concat_default()(_context10 = "".concat(price)).call(_context10, this.priceUnit) : concat_default()(_context11 = concat_default()(_context12 = "".concat(this.priceUnit)).call(_context12, price)).call(_context11, more);
    }
  },
  render: function render(h) {
    var _context13,
      _this3 = this;
    var _this$$dataBus = this.$dataBus,
      isMobile = _this$$dataBus.isMobile,
      isFr = _this$$dataBus.isFr;
    return h("el-scrollbar", {
      "attrs": {
        "tag": "ul",
        "view-class": ['select-variant-list-wrapper', {
          flex: isMobile,
          'flex-nowrap': isMobile
        }]
      },
      "class": this.scrollable ? 'scrollable' : '',
      "ref": "scroll"
    }, [map_default()(_context13 = this.variants).call(_context13, function (item) {
      var isSelected = _this3.selectionMap[item.id];
      var priceContent = _this3.formatPrice(item.price);
      var normalizedDiscountPrice = _this3.formatPrice(item.discountPrice);
      var detailBtn = h(DetailBtn, {
        "attrs": {
          "t": _this3.$t,
          "title": item.title,
          "productId": item.productId,
          "variantId": item.id,
          "link": item.productLink,
          "disabled": !item.available
        },
        "on": {
          "open-detail": _this3.openVariantDetails
        }
      });
      var handleToggleItem = function handleToggleItem() {
        return _this3.toggleItem(item);
      };
      return h("li", {
        "key": item.id,
        "class": ['variant-item', 'flex', {
          selected: isSelected,
          'md:flex-col': isMobile,
          'shrink-0': isMobile,
          'out-of-stock': !item.available
        }],
        "on": {
          "click": handleToggleItem
        }
      }, [h("div", {
        "class": ['justify-between', {
          flex: !isMobile
        }]
      }, [h("div", {
        "class": "flex-grow"
      }, [h("img", {
        "attrs": {
          "src": _this3.cropShopifyImg(item.image.src, 300, 0),
          "alt": item.image.altText || ''
        },
        "class": "select-variant__thumbnail align-top float-left md:float-none"
      }), h("div", {
        "class": "variant-item__content"
      }, [h("span", {
        "class": ['md:inline-block md:mt-md-20 md:mb-md-20', isMobile ? 'variant-item__price' : '', {
          'include-discount': isMobile && item.discountPrice && isSelected
        }],
        "attrs": {
          "data-discount-price": "\n".concat(normalizedDiscountPrice)
        }
      }, [h("span", {
        "class": {
          'line-through': isMobile && item.discountPrice && isSelected,
          'whitespace-pre-line': !item.available && !isMobile
        }
      }, [isMobile ? priceContent : item.title + (!item.available ? "\n(".concat(isFr ? _this3.$t('home.outOfStock') : _this3.$t('home.outOfStock').toUpperCase(), ")") : '')])]), h("br"), isMobile ? null : detailBtn])]), h("div", {
        "class": [isMobile ? 'text-left' : 'variant-item__price text-right', 'md:whitespace-normal', {
          'include-discount': !isMobile && item.discountPrice && isSelected
        }],
        "attrs": {
          "data-discount-price": "\n".concat(normalizedDiscountPrice)
        }
      }, [h("span", {
        "class": {
          'line-through': !isMobile && item.discountPrice && isSelected
        }
      }, [isMobile ? item.title : priceContent])])]), h("div", {
        "class": "text-right leading-none text-[0] md:mt-md-30"
      }, [h("el-checkbox", {
        "attrs": {
          "aria-label": item.title,
          "disabled": !item.available,
          "value": isSelected
        },
        "class": "pointer-events-none",
        "nativeOn": {
          "keydown": function keydown($event) {
            if (!("button" in $event) && _this3._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
            return handleToggleItem($event);
          }
        }
      }), isMobile ? [' ', detailBtn] : null]), item.canSubscribeBIS ? h("div", {
        "attrs": {
          "role": "button",
          "tabindex": "0"
        },
        "class": "subscribe-bis-btn border-0 text-white uppercase z-10 md:text-md-24 md:pt-[0.42em] md:pb-[0.3em] md:leading-[1.2] md:h-auto md:min-h-[0.56rem] -mx-[1px]",
        "on": {
          "click": function click() {
            return _this3.openVariantDetails(item.productId, item.id);
          },
          "keyup": function keyup($event) {
            if (!("button" in $event) && _this3._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
            $event.preventDefault();
            return function () {
              return _this3.openVariantDetails(item.productId, item.id);
            }($event);
          }
        }
      }, [_this3.$t('common.subscribeBIS.emailMeWhenAvailable')]) : null]);
    })]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_SelectVariantvue_type_script_lang_js = (SelectVariantvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue?vue&type=style&index=0&id=624fe0c1&prod&lang=scss
var SelectVariantvue_type_style_index_0_id_624fe0c1_prod_lang_scss = __webpack_require__(64348);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue?vue&type=style&index=0&id=624fe0c1&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue?vue&type=style&index=1&id=624fe0c1&prod&lang=scss
var SelectVariantvue_type_style_index_1_id_624fe0c1_prod_lang_scss = __webpack_require__(48379);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue?vue&type=style&index=1&id=624fe0c1&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectVariant/index.vue
var SelectVariant_render, SelectVariant_staticRenderFns
;

;



/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_SelectVariantvue_type_script_lang_js,
  SelectVariant_render,
  SelectVariant_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const SelectVariant = (component.exports);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/mixins/anchor.js

var ANCHOR_OFFSET = 100;
/* harmony default export */ const mixins_anchor = ({
  data: function data() {
    return {
      hasScrolledInToView: false
    };
  },
  props: {
    /**
     * 需要滚动到的目标锚点
     */
    nextAnchor: {
      type: String,
      "default": ''
    },
    anchorOffset: {
      type: Number,
      "default": ANCHOR_OFFSET
    },
    /**
     * 是否在第一次选中的时候滚动到视图，和nextAnchor互斥，优先级比nextAnchor高
     */
    scrollInToViewAtFirstSelection: {
      type: Boolean,
      "default": false
    }
  },
  methods: {
    scrollToNext: function scrollToNext() {
      if (this.nextAnchor) {
        var el = document.getElementById(this.nextAnchor);
        if (el) {
          var _el$getBoundingClient = el.getBoundingClientRect(),
            top = _el$getBoundingClient.top;
          scrollTo({
            behavior: 'smooth',
            top: scrollY + top - this.anchorOffset
          });
        }
      }
    },
    scrollInToView: function scrollInToView() {
      var _this$$el$getBounding = this.$el.getBoundingClientRect(),
        top = _this$$el$getBounding.top;
      scrollTo({
        behavior: 'smooth',
        top: scrollY + top - this.anchorOffset
      });
    }
  }
});
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectBands/index.vue?vue&type=script&lang=js








function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context12, _context13; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context12 = ownKeys(Object(t), !0)).call(_context12, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context13 = ownKeys(Object(t))).call(_context13, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }










/* harmony default export */ const SelectBandsvue_type_script_lang_js = ({
  name: 'SelectBands',
  components: {
    SelectVariant: SelectVariant
  },
  mixins: [mixins_anchor],
  props: {
    collectionId: {
      type: String,
      required: true
    },
    value: {
      type: [Array, String],
      "default": ''
    },
    productFilterFunc: {
      type: Function
    }
  },
  data: function data() {
    return {
      labelId: 'select-bands',
      activeBandType: 'Nylon',
      bandTypes: [{
        label: 'shop.bandTypes.nylon',
        value: 'Nylon'
      }, {
        label: 'shop.bandTypes.silicone',
        value: 'Silicone'
      }],
      allBands: []
    };
  },
  computed: {
    filteredBandProducts: function filteredBandProducts() {
      var _context,
        _this = this;
      return filter_default()(_context = this.allBands).call(_context, function (item) {
        return _this.productFilterFunc ? _this.productFilterFunc(item) : true;
      });
    },
    groupedBandVariants: function groupedBandVariants() {
      var _context2,
        _this2 = this;
      return reduce_default()(_context2 = this.bandTypes).call(_context2, function (acc, bandType) {
        var _context3, _context4, _context5;
        acc[bandType.value] = flat_default()(_context3 = map_default()(_context4 = filter_default()(_context5 = _this2.filteredBandProducts).call(_context5, function (product) {
          return product.bandType === bandType.value;
        })).call(_context4, function (item) {
          return item.variants;
        })).call(_context3);
        return acc;
      }, {});
    }
  },
  watch: {
    collectionId: {
      handler: function handler(val) {
        if (val) {
          this.getCollection();
        }
      },
      immediate: true
    },
    value: {
      handler: function handler(newVal, oldVal) {
        if (this.scrollInToViewAtFirstSelection) {
          if (newVal.length > 0 && this.hasScrolledInToView === false) {
            this.hasScrolledInToView = true;
            this.scrollInToView();
          }
        } else if (newVal.length > oldVal.length) {
          window.scrollTo({
            top: this.$el.offsetTop - 100,
            behavior: 'smooth'
          });
        }
      }
    },
    activeBandType: function activeBandType(newVal) {
      var _context6;
      var index = find_index_default()(_context6 = this.bandTypes).call(_context6, function (item) {
        return item.value === newVal;
      });
      this.$refs.selector[index].checkScrollable();
    }
  },
  mounted: function mounted() {
    var _this3 = this;
    this.$nextTick(function () {
      _this3.$el.querySelector('.el-tabs__nav').setAttribute('aria-labelledby', _this3.labelId);
    });
  },
  methods: {
    getCollection: function getCollection() {
      var _this4 = this;
      shopifyBuy/* default.getCollectionNew */.Z.getCollectionNew(this.collectionId).then(function (collection) {
        var _context7;
        _this4.allBands = map_default()(_context7 = collection.products).call(_context7, function (src) {
          var _context8, _this4$bandTypes$find, _context9, _context11;
          var item = _objectSpread({}, src);
          item.tags = map_default()(_context8 = item.tags).call(_context8, function (_ref) {
            var value = _ref.value;
            return value;
          });
          item.bandType = (_this4$bandTypes$find = find_default()(_context9 = _this4.bandTypes).call(_context9, function (bandType) {
            var _context10;
            return includes_default()(_context10 = item.tags).call(_context10, bandType.value);
          })) === null || _this4$bandTypes$find === void 0 ? void 0 : _this4$bandTypes$find.value;
          item.variants = map_default()(_context11 = item.variants).call(_context11, function (variant) {
            variant.bandType = item.bandType ? "".concat(item.bandType, " Band") : '';
            variant.productId = item.id;
            variant.productLink = shopifyBuy/* default.getConfiguredProductLink */.Z.getConfiguredProductLink(item);
            return _objectSpread({}, variant);
          });
          return item;
        });
      });
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectBands/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_SelectBandsvue_type_script_lang_js = (SelectBandsvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectBands/index.vue?vue&type=style&index=0&id=ed547998&prod&lang=scss
var SelectBandsvue_type_style_index_0_id_ed547998_prod_lang_scss = __webpack_require__(55828);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectBands/index.vue?vue&type=style&index=0&id=ed547998&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectBands/index.vue



;


/* normalize component */

var SelectBands_component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_SelectBandsvue_type_script_lang_js,
  SelectBandsvue_type_template_id_ed547998_render,
  SelectBandsvue_type_template_id_ed547998_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const SelectBands = (SelectBands_component.exports);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue?vue&type=template&id=69dc41d9
var SelectAccessoriesvue_type_template_id_69dc41d9_render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    staticClass: "relative-accessories-container mt-60 md:mt-md-80"
  }, [_c("div", {
    staticClass: "mb-15 md:mb-md-30"
  }, [_c("h2", {
    staticClass: "md:text-[0.56rem] shop-panel__list-title"
  }, [_vm._v(_vm._s(_vm.$t("shop.chooseAccessories")))])]), _vm._v(" "), _c("SelectVariant", _vm._g({
    attrs: {
      variants: _vm.allVariants,
      value: _vm.value
    }
  }, _vm.$listeners.input ? {
    input: _vm.$listeners.input
  } : {}))], 1);
};
var SelectAccessoriesvue_type_template_id_69dc41d9_staticRenderFns = [];
SelectAccessoriesvue_type_template_id_69dc41d9_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue?vue&type=template&id=69dc41d9

;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue?vue&type=script&lang=js









function SelectAccessoriesvue_type_script_lang_js_ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function SelectAccessoriesvue_type_script_lang_js_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context4, _context5; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context4 = SelectAccessoriesvue_type_script_lang_js_ownKeys(Object(t), !0)).call(_context4, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context5 = SelectAccessoriesvue_type_script_lang_js_ownKeys(Object(t))).call(_context5, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }







/* harmony default export */ const SelectAccessoriesvue_type_script_lang_js = ({
  name: 'SelectAccessories',
  components: {
    SelectVariant: SelectVariant
  },
  mixins: [mixins_anchor],
  props: {
    collectionId: {
      type: [Number, String]
      //   required: true,
    },
    value: {
      type: [Array, String],
      "default": ''
    }
  },
  data: function data() {
    return {
      activeBandType: '',
      allVariants: []
    };
  },
  watch: {
    collectionId: {
      handler: function handler(val) {
        if (val) {
          this.getCollection();
        }
      },
      immediate: true
    },
    value: {
      handler: function handler(newVal, oldVal) {
        if (this.scrollInToViewAtFirstSelection) {
          if (newVal.length > 0 && this.hasScrolledInToView === false) {
            this.hasScrolledInToView = true;
            this.scrollInToView();
          }
        } else if (newVal.length > oldVal.length) {
          this.scrollToNext();
        }
      }
    }
  },
  methods: {
    getCollection: function getCollection() {
      var _this = this;
      shopifyBuy/* default.getCollectionNew */.Z.getCollectionNew(this.collectionId).then(function (collection) {
        var _context;
        var allVariants = map_default()(_context = collection.products).call(_context, function (node) {
          var _context2;
          var variants = map_default()(_context2 = node.variants).call(_context2, function (variant) {
            var _context3;
            variant.productId = node.id;
            variant.productLink = shopifyBuy/* default.getConfiguredProductLink */.Z.getConfiguredProductLink(node);
            variant.title = node.variants.length === 1 ? node.title : concat_default()(_context3 = "".concat(node.title, " - ")).call(_context3, variant.title);
            return SelectAccessoriesvue_type_script_lang_js_objectSpread({}, variant);
          });
          if (variants.length === 1) {
            if (!variants[0].image) {
              variants[0].image = node.images[0].node;
            }
          }
          return variants;
        });
        _this.allVariants = flat_default()(allVariants).call(allVariants);
      });
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_SelectAccessoriesvue_type_script_lang_js = (SelectAccessoriesvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue?vue&type=style&index=0&id=69dc41d9&prod&lang=scss
var SelectAccessoriesvue_type_style_index_0_id_69dc41d9_prod_lang_scss = __webpack_require__(42983);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue?vue&type=style&index=0&id=69dc41d9&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectAccessories/index.vue



;


/* normalize component */

var SelectAccessories_component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_SelectAccessoriesvue_type_script_lang_js,
  SelectAccessoriesvue_type_template_id_69dc41d9_render,
  SelectAccessoriesvue_type_template_id_69dc41d9_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const SelectAccessories = (SelectAccessories_component.exports);
;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue?vue&type=template&id=6fbcb9fd
var SelectProductVariantvue_type_template_id_6fbcb9fd_render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("div", {
    staticClass: "select-product-variant"
  }, [_vm._t("title", function () {
    return [_c("div", {
      staticClass: "leading-none md:mt-md-80 mb-15 md:mb-md-30"
    }, [_c("h2", {
      staticClass: "md:text-[0.56rem] shop-panel__list-title"
    }, [_vm._v(_vm._s(_vm.title))])])];
  }), _vm._v(" "), _vm._t("subtitle"), _vm._v(" "), _vm.availableTabOptions.length ? _c("el-tabs", {
    model: {
      value: _vm.activeOption,
      callback: function callback($$v) {
        _vm.activeOption = $$v;
      },
      expression: "activeOption"
    }
  }, _vm._l(_vm.availableTabOptions, function (item) {
    return _c("el-tab-pane", {
      key: item,
      attrs: {
        label: item,
        name: item
      }
    });
  }), 1) : _vm._e(), _vm._v(" "), _c("SelectVariant", _vm._g({
    ref: "selector",
    attrs: {
      variants: _vm.filteredVariants,
      value: _vm.value
    }
  }, _vm.$listeners.input ? {
    input: _vm.$listeners.input
  } : {}))], 2);
};
var SelectProductVariantvue_type_template_id_6fbcb9fd_staticRenderFns = [];
SelectProductVariantvue_type_template_id_6fbcb9fd_render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue?vue&type=template&id=6fbcb9fd

;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue?vue&type=script&lang=js

function SelectProductVariantvue_type_script_lang_js_ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function SelectProductVariantvue_type_script_lang_js_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context6, _context7; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context6 = SelectProductVariantvue_type_script_lang_js_ownKeys(Object(t), !0)).call(_context6, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context7 = SelectProductVariantvue_type_script_lang_js_ownKeys(Object(t))).call(_context7, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }
















/* harmony default export */ const SelectProductVariantvue_type_script_lang_js = ({
  name: 'SelectBands',
  components: {
    SelectVariant: SelectVariant
  },
  mixins: [mixins_anchor],
  props: {
    title: {
      type: String
    },
    productId: {
      type: String,
      required: true
    },
    value: {
      type: [Array, String],
      "default": ''
    },
    tabOption: {
      type: String
    }
  },
  data: function data() {
    return {
      activeOption: '',
      allVariants: [],
      availableTabOptions: []
    };
  },
  computed: {
    filteredVariants: function filteredVariants() {
      var _this = this;
      if (this.activeOption) {
        var _context;
        return filter_default()(_context = this.allVariants).call(_context, function (variant) {
          var _context2;
          return some_default()(_context2 = variant.selectedOptions).call(_context2, function (item) {
            return item.value === _this.activeOption;
          });
        });
      }
      return this.allVariants;
    }
  },
  watch: {
    productId: {
      handler: function handler(val) {
        if (val) {
          this.getProduct();
        }
      },
      immediate: true
    },
    value: {
      handler: function handler(newVal, oldVal) {
        if (newVal.length > oldVal.length) {
          window.scrollTo({
            top: this.$el.offsetTop - 100,
            behavior: 'smooth'
          });
        }
      }
    }
  },
  methods: {
    getProduct: function getProduct() {
      var _this2 = this;
      if (true) {
        shopifyBuy/* default.getProductNew */.Z.getProductNew(this.productId).then(function (product) {
          var _context4;
          if (_this2.tabOption) {
            var _product$options$find, _context3;
            _this2.availableTabOptions = ((_product$options$find = find_default()(_context3 = product.options).call(_context3, function (item) {
              return item.name === _this2.tabOption;
            })) === null || _product$options$find === void 0 ? void 0 : values_default()(_product$options$find)) || [];
            _this2.activeOption = _this2.availableTabOptions[0] || '';
          }
          _this2.allVariants = map_default()(_context4 = product.variants).call(_context4, function (src, index, arr) {
            var _context5;
            var item = SelectProductVariantvue_type_script_lang_js_objectSpread({}, src);
            item.selectedOptions = map_default()(_context5 = item.selectedOptions).call(_context5, function (option) {
              return SelectProductVariantvue_type_script_lang_js_objectSpread({}, option);
            });
            item.productLink = shopifyBuy/* default.getConfiguredProductLink */.Z.getConfiguredProductLink(product);
            item.productTitle = product.title;
            item.productId = product.id;
            if (arr.length === 1) {
              item.title = product.title;
            }
            return item;
          });
        });
      }
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_SelectProductVariantvue_type_script_lang_js = (SelectProductVariantvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue?vue&type=style&index=0&id=6fbcb9fd&prod&lang=scss
var SelectProductVariantvue_type_style_index_0_id_6fbcb9fd_prod_lang_scss = __webpack_require__(83251);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue?vue&type=style&index=0&id=6fbcb9fd&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/SelectProductVariant/index.vue



;


/* normalize component */

var SelectProductVariant_component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_SelectProductVariantvue_type_script_lang_js,
  SelectProductVariantvue_type_template_id_6fbcb9fd_render,
  SelectProductVariantvue_type_template_id_6fbcb9fd_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const SelectProductVariant = (SelectProductVariant_component.exports);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/ProvidedServices/index.vue + 2 modules
var ProvidedServices = __webpack_require__(43066);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/ProvidedServices/utils.js + 1 modules
var utils = __webpack_require__(39533);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/LocallyEmbed/index.js




/* harmony default export */ const LocallyEmbed = ({
  name: 'LocallyEmbed',
  props: {
    upc: {
      type: String,
      required: true
    }
  },
  data: function data() {
    return {
      isReady: false
    };
  },
  watch: {
    upc: {
      handler: function handler(newVal) {
        this.reloadByUpc(newVal);
      }
    }
  },
  mounted: function mounted() {
    this.initLocally(this.upc);
  },
  methods: {
    initLocally: function initLocally(upc) {
      var _context,
        _this = this;
      var queryData = {
        company_name: 'COROS',
        company_id: '218070',
        button_text: 'shop locally',
        button_id: 'HTML',
        css: '3',
        upc: upc,
        show_location_prompt: '1',
        lang: 'en-us',
        show_dealers: '1',
        n_dealers: '3',
        show_address: '1',
        show_phone: '1',
        no_link: '1'
      };
      var queryStr = reduce_default()(_context = keys_default()(queryData)).call(_context, function (a, k) {
        a.push(encodeURIComponent(k) + '=' + encodeURIComponent(queryData[k]));
        return a;
      }, []).join('&');
      var scriptUrl = 'https://www.locally.com/stores/map.js?' + queryStr;
      return window.System["import"](scriptUrl).then(function () {
        _this.isReady = true;
      });
    },
    reloadByUpc: function reloadByUpc(upc) {
      if (this.isReady) {
        window.lcly_reload_0({
          upc: upc
        });
      }
    }
  },
  render: function render(h) {
    return h("div", {
      "attrs": {
        "id": "lcly-button-0",
        "data-switchlive": "true",
        "data-switchlive-impression": "true",
        "data-switchlive-impression-id-PL": "1"
      }
    }, [h("a", {
      "attrs": {
        "id": "lcly-link-0",
        "data-switchlive": "true",
        "data-switchlive-mode": "auto",
        "data-switchlive-id-PL": "6",
        "role": "button",
        "href": "https://join.locally.com/for-brands",
        "target": "_blank"
      },
      "class": ""
    }, ["shop locally"])]);
  }
});
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/KlarnaPlacementWrapper/index.vue + 3 modules
var KlarnaPlacementWrapper = __webpack_require__(56453);
// EXTERNAL MODULE: ./node_modules/js-cookie/dist/js.cookie.mjs
var js_cookie = __webpack_require__(31955);
// EXTERNAL MODULE: ./node_modules/@vue/babel-helper-vue-jsx-merge-props/dist/helper.js
var helper = __webpack_require__(36568);
var helper_default = /*#__PURE__*/__webpack_require__.n(helper);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/ColorOptionWrapper/index.vue?vue&type=script&lang=js



/* harmony default export */ const ColorOptionWrappervue_type_script_lang_js = ({
  name: 'ColorOptionWrapper',
  functional: true,
  props: {
    variant: {
      type: Object,
      required: true
    },
    disabled: {
      type: Boolean,
      "default": false
    }
  },
  render: function render(h, context) {
    var _context$props = context.props,
      variant = _context$props.variant,
      disabled = _context$props.disabled,
      children = context.children,
      data = context.data;
    var isLink = !!variant.pageLink;
    var hasAvailableLink = isLink && !disabled;
    if (hasAvailableLink) {
      return h("a", helper_default()([{
        "attrs": {
          "href": variant.pageLink
        }
      }, (0,lodash.omit)(data, 'on')]), [children]);
    }
    return h("div", helper_default()([{}, data]), [children]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/ColorOptionWrapper/index.vue?vue&type=script&lang=js
 /* harmony default export */ const ShopPanel_ColorOptionWrappervue_type_script_lang_js = (ColorOptionWrappervue_type_script_lang_js); 
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/ColorOptionWrapper/index.vue
var ColorOptionWrapper_render, ColorOptionWrapper_staticRenderFns
;



/* normalize component */
;
var ColorOptionWrapper_component = (0,componentNormalizer/* default */.Z)(
  ShopPanel_ColorOptionWrappervue_type_script_lang_js,
  ColorOptionWrapper_render,
  ColorOptionWrapper_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ColorOptionWrapper = (ColorOptionWrapper_component.exports);
// EXTERNAL MODULE: ./node_modules/axios/index.js
var axios = __webpack_require__(9669);
var axios_default = /*#__PURE__*/__webpack_require__.n(axios);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/index.vue?vue&type=script&lang=js



function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof (symbol_default()) && get_iterator_method_default()(r) || r["@@iterator"]; if (!t) { if (is_array_default()(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { var _context68; if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = slice_default()(_context68 = {}.toString.call(r)).call(_context68, 8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? from_default()(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }























































var metafieldAlias = {
  bandMaterial: 'band_material',
  screenSize: 'screen_size',
  apex2model: 'apex_2_model'
};
/* harmony default export */ const ShopPanelvue_type_script_lang_js = ({
  name: 'ShopPanel',
  components: {
    SelectBands: SelectBands,
    Swiper: vue_awesome_swiper.Swiper,
    SwiperSlide: vue_awesome_swiper.SwiperSlide,
    SelectAccessories: SelectAccessories,
    ProvidedServices: ProvidedServices/* default */.Z,
    LocallyEmbed: LocallyEmbed,
    KlarnaPlacementWrapper: KlarnaPlacementWrapper/* default */.Z,
    SelectProductVariant: SelectProductVariant,
    ColorOptionWrapper: ColorOptionWrapper,
    NoSSR: (vue_no_ssr_common_default())
  },
  filters: {
    fixedNumber: function fixedNumber(num) {
      return Number(num).toFixed(2);
    },
    cropShopifyImg: function cropShopifyImg(url) {
      var _context;
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;
      return url ? url.replace(/\.(jpg|jpeg|png|webp)/, concat_default()(_context = "_".concat(width, "x")).call(_context, height, ".$1")) : '';
    },
    splitByModel: function splitByModel(src, country) {
      var processedStr = src;
      var duraExp = /(dura)/i;
      if (duraExp.test(src)) {
        return processedStr = src.replace(duraExp, '$1\n');
      }
      var splitReg = {
        en: /(gps)/i,
        fr: /(Montre)/i,
        es: /(RELOJ)/i
      };
      var regex4gps = splitReg[country] || splitReg.en;
      if (regex4gps.test(processedStr)) {
        return processedStr.replace(regex4gps, '\n$1');
      }
      return processedStr;
    },
    normalizeColor: function normalizeColor(str) {
      var isMobile = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      if (isMobile) {
        var sizeRegex = /(\d+mm) ?([^\d]*)$/;
        var materialRegex = /\//;
        if (sizeRegex.test(str)) {
          return str.replace(sizeRegex, '$2\n$1');
        } else if (materialRegex.test(str)) {
          return str.replace(materialRegex, '\n');
        }
        return str;
      }
      var _str$split = str.split('/'),
        _str$split2 = (0,slicedToArray/* default */.Z)(_str$split, 1),
        colorName = _str$split2[0];
      return colorName.replace(/\d+mm ?/, '');
    }
  },
  props: {
    /**
     * 自动选中第一个可以的选项（有颜色过滤的，选中第一个颜色过滤选项）
     */
    autoSelect: {
      type: Boolean
    },
    productId: {
      type: String
    },
    productHandle: {
      type: String,
      "default": ''
    },
    parseNonColorOption: {
      type: Boolean,
      "default": false
    },
    detailAnchor: {
      type: String,
      "default": ''
    },
    filterByBand: {
      type: Boolean,
      "default": false
    },
    filterBySize: {
      type: Boolean,
      "default": false
    },
    filterColor: {
      type: String,
      validator: function validator(val) {
        var _context2;
        return includes_default()(_context2 = keys_default()(metafieldAlias)).call(_context2, val);
      }
    },
    noLocallyEmbed: {
      type: Boolean,
      "default": false
    },
    noSnippet: {
      type: Boolean,
      "default": true
    }
  },
  data: function data() {
    var _this = this;
    return {
      triggedAutoSelect: false,
      product: {},
      productIsReady: false,
      autoDiscount: {},
      colorMap4variant: {},
      selectedItems: [],
      selectedRecommended: [],
      selectedBands: [],
      selectedFreeItem: [],
      selectedAccessories: [],
      currentPreviewIndex: 0,
      swiperOption4preview: {
        a11y: true,
        slidesPerView: 1,
        spaceBetween: 0,
        watchSlidesProgress: true,
        initialSlide: 0,
        navigation: {
          nextEl: '.preview-nav__next',
          prevEl: '.preview-nav__prev'
        },
        on: {
          slideChange: (0,lodash.debounce)(function () {
            _this.currentPreviewIndex = _this.$refs.previewSwiper.$swiper.activeIndex;
          }, 50)
        }
        // ...
      },
      isScrollable4colors: false,
      selectedFilterOption: '',
      addingToBag: false,
      currentPath: '',
      stickyStyle: {},
      selectedDiscountItemsQuantity: 0
    };
  },
  computed: {
    promotion: function promotion() {
      if (this.$dataBus.isUs || this.$dataBus.isFr || this.$dataBus.isAu) {
        var ids = {
          au: '7982050934938'
        };
        return {
          product: ids[this.$root.country],
          title: this.$t('shop.bagPromotion.title'),
          subTitles: this.$t('shop.bagPromotion.subTitles')
        };
      }
      return {};
    },
    isOpenBox: function isOpenBox() {
      return shopifyBuy/* default.isOpenBox */.Z.isOpenBox(this.product);
    },
    isSuffixUnit: function isSuffixUnit() {
      var _context3;
      return includes_default()(_context3 = ['de', 'fr', 'es', 'eu']).call(_context3, this.$root.country);
    },
    isEmpty: function isEmpty() {
      var _context4,
        _this2 = this;
      return reduce_default()(_context4 = ['selectedItems', 'selectedRecommended', 'selectedBands', 'selectedAccessories', 'selectedFreeItem']).call(_context4, function (acc, field) {
        return acc + _this2[field].length;
      }, 0) === 0;
    },
    isWatch: function isWatch() {
      var reg = {
        en: /(watch)/i,
        fr: /(Montre)/i,
        es: /(RELOJ)/i
      };
      var thisReg = reg[this.$root.country] || reg.en;
      return thisReg.test(this.product.title) || this.product.productType === 'Watch';
    },
    services: function services() {
      // productId 可能是别名，后面看能否shopify 直接维护保修信息
      var servicesData = utils/* calcServices.exec */.c.exec(this.$root.country, false, this.productId, this.product);
      return servicesData;
    },
    onlyOneVariant: function onlyOneVariant() {
      if (this.product.variants) {
        return this.product.variants.length === 1;
      }
      return false;
    },
    variantBaseOptionName: function variantBaseOptionName() {
      if (this.product.options) {
        if (this.product.options.length === 1) {
          return this.product.options[0].name;
        }
        return 'Color';
      }
      return 'Color';
    },
    name4nonColorOptions: function name4nonColorOptions() {
      if (this.parseNonColorOption && this.product.options && this.product.options.length > 1) {
        var _this$product$options, _context5;
        return ((_this$product$options = find_default()(_context5 = this.product.options).call(_context5, function (option) {
          return option.name !== 'Color';
        })) === null || _this$product$options === void 0 ? void 0 : _this$product$options.name) || '';
      }
      return '';
    },
    filterColorOptions: function filterColorOptions() {
      var _this3 = this;
      if (this.filterColor && this.product.variants) {
        var _context6;
        var filters = [];
        for_each_default()(_context6 = this.product.variants).call(_context6, function (node) {
          if (find_default()(filters).call(filters, function (filter) {
            return filter.name === node[_this3.filterColor];
          })) {
            return;
          } else {
            filters.push({
              name: node[_this3.filterColor],
              price: node.price
            });
          }
        });
        if (this.filterColor === 'screenSize') {
          sort_default()(filters).call(filters, function (a, b) {
            return Number(a.price) - Number(b.price);
          });
        }
        return filters;
      } else if (this.parseNonColorOption && this.product.options && this.product.options.length > 1) {
        var _context7;
        var nonColorOption = find_default()(_context7 = this.product.options).call(_context7, function (option) {
          return option.name !== 'Color';
        });
        if (nonColorOption) {
          var _context8;
          return map_default()(_context8 = values_default()(nonColorOption)).call(_context8, function (val) {
            return {
              name: val
            };
          });
        }
        return [];
      }
      return [];
    },
    colorFilter: function colorFilter() {
      var _this4 = this;
      if (this.filterColorOptions.length && this.selectedFilterOption) {
        return function (item) {
          var _context9, _context10;
          return find_default()(_context9 = item.metafields).call(_context9, function (node) {
            return node.value === _this4.selectedFilterOption;
          }) || find_default()(_context10 = item.selectedOptions).call(_context10, function (node) {
            return node.value === _this4.selectedFilterOption;
          });
        };
      }
      return null;
    },
    bandExtraFilter: function bandExtraFilter() {
      var _this5 = this;
      if (this.filterColor === 'screenSize' && this.selectedFilterOption) {
        return function (item) {
          var _context11;
          var sizeAlias = {
            '42mm': '1318',
            '46mm': '1517'
          };
          return includes_default()(_context11 = item.tags).call(_context11, sizeAlias[_this5.selectedFilterOption]);
        };
      }
      if (this.filterColor === 'apex2model' && this.selectedFilterOption) {
        return function (item) {
          var _context12;
          return some_default()(_context12 = item.metafields).call(_context12, function (field) {
            return field.value === _this5.selectedFilterOption;
          });
        };
      }
      return undefined;
    },
    bandCollection: function bandCollection() {
      if (this.product.metafields) {
        var _this$product$metafie, _context13;
        return (_this$product$metafie = find_default()(_context13 = this.product.metafields).call(_context13, function (node) {
          return node.key === 'watch_band_collection';
        })) === null || _this$product$metafie === void 0 ? void 0 : _this$product$metafie.value;
      }
      return '';
    },
    topAccessoriesCollection: function topAccessoriesCollection() {
      if (this.product.metafields) {
        var _this$product$metafie2, _context14;
        return (_this$product$metafie2 = find_default()(_context14 = this.product.metafields).call(_context14, function (node) {
          return node.key === 'top_accessories_collection';
        })) === null || _this$product$metafie2 === void 0 ? void 0 : _this$product$metafie2.value;
      }
      return '';
    },
    watchShortName: function watchShortName() {
      if (/model$/i.test(this.filterColor) && this.selectedFilterOption) {
        return "COROS ".concat(this.selectedFilterOption);
      }
      if (this.product.title) {
        var _context15;
        // Todo 和splitByModel 共用？
        var splitReg = {
          en: /(gps)/i,
          fr: /(Montre)/i,
          es: /(RELOJ)/i
        };
        var regex = splitReg[this.$root.country] || splitReg.en;
        return regex.test(this.product.title) ? trim_default()(_context15 = this.product.title.split(splitReg[this.$root.country] || splitReg.en)[0]).call(_context15) : '';
      }
      return '';
    },
    priceUnit: function priceUnit() {
      return config/* currencyUnit */.CA[this.$root.country || 'us'];
    },
    totalPriceWithDiscount: function totalPriceWithDiscount() {
      var _context16,
        _context17,
        _this6 = this;
      var watchTotalPrice = reduce_default()(_context16 = this.selectedItems).call(_context16, function (acc, item) {
        return acc + Number(item.price);
      }, 0);
      return reduce_default()(_context17 = ['selectedRecommended', 'selectedBands', 'selectedAccessories', 'selectedFreeItem']).call(_context17, function (acc, field) {
        var _context18;
        return acc + reduce_default()(_context18 = _this6[field]).call(_context18, function (acc, item) {
          return acc + Number(item.discountPrice || item.price);
        }, 0);
      }, watchTotalPrice);
    },
    totalPrice: function totalPrice() {
      var _context19,
        _this7 = this;
      return reduce_default()(_context19 = ['selectedItems', 'selectedRecommended', 'selectedBands', 'selectedAccessories', 'selectedFreeItem']).call(_context19, function (acc, field) {
        var _context20;
        return acc + reduce_default()(_context20 = _this7[field]).call(_context20, function (acc, item) {
          return acc + Number(item.price);
        }, 0);
      }, 0);
    },
    productImages: function productImages() {
      var previewVariant;
      if (this.onlyOneVariant) {
        var _this$product$variant, _this$product$images;
        var variant = (_this$product$variant = this.product.variants) === null || _this$product$variant === void 0 ? void 0 : _this$product$variant[0];
        return variant.multipleViews.length ? variant.multipleViews : [(_this$product$images = this.product.images) === null || _this$product$images === void 0 ? void 0 : _this$product$images[0]];
      }
      if (this.selectedItems.length) {
        previewVariant = this.selectedItems[0];
      } else if (this.selectedFilterOption) {
        previewVariant = this.variants[0];
      } else {
        return this.product.images || [];
      }
      if (previewVariant) {
        return previewVariant.multipleViews.length ? previewVariant.multipleViews : [previewVariant.image];
      }
      return [];
    },
    variants: function variants() {
      var _this8 = this;
      if (this.product.variants) {
        var _context21;
        var allVariants = map_default()(_context21 = this.product.variants).call(_context21, function (node) {
          var _node$metafields$find, _context22;
          var colorImgUrl = (_node$metafields$find = find_default()(_context22 = node.metafields).call(_context22, function (_ref) {
            var key = _ref.key;
            return key === 'color_icon_link';
          })) === null || _node$metafields$find === void 0 ? void 0 : _node$metafields$find.value;
          if (colorImgUrl) {
            _this8.$set(_this8.colorMap4variant, node.id, colorImgUrl);
          }
          return node;
        });
        if (this.colorFilter) {
          return filter_default()(allVariants).call(allVariants, this.colorFilter);
        }
        return allVariants;
      }
      return [];
    },
    upc: function upc() {
      var _context23;
      var items = this.variants;
      if (this.selectedItems.length) {
        items = this.selectedItems;
      }
      return filter_default()(_context23 = map_default()(items).call(items, function (item) {
        return item.barcode;
      })).call(_context23, function (str) {
        return !!str;
      }).join(',');
    },
    matchedDiscount: function matchedDiscount() {
      var _this9 = this;
      if (this.autoDiscount.requirements) {
        var _context24, _context26;
        if (some_default()(_context24 = [this.selectedItems, this.selectedRecommended, this.selectedBands, this.selectedAccessories, this.selectedFreeItem]).call(_context24, function (selection) {
          return some_default()(selection).call(selection, function (item) {
            var _context25;
            return includes_default()(_context25 = _this9.autoDiscount.requirements.products).call(_context25, item.productId);
          });
        }) || some_default()(_context26 = [this.selectedItems, this.selectedRecommended, this.selectedBands, this.selectedAccessories, this.selectedFreeItem]).call(_context26, function (selection) {
          return some_default()(selection).call(selection, function (item) {
            var _context27;
            return includes_default()(_context27 = _this9.autoDiscount.requirements.variantsId).call(_context27, item.id);
          });
        })) {
          var _context28;
          //   Todo: 固定金额优化适配
          var totalPriceWithOutTarget = reduce_default()(_context28 = ['selectedItems', 'selectedRecommended', 'selectedBands', 'selectedAccessories', 'selectedFreeItem']).call(_context28, function (acc, field) {
            var _context29;
            return acc + reduce_default()(_context29 = _this9[field]).call(_context29, function (acc, item) {
              var _context30;
              return acc + (includes_default()(_context30 = _this9.autoDiscount.discount.products).call(_context30, item.productId) ? 0 : Number(item.price));
            }, 0);
          }, 0);
          if (this.autoDiscount.amount) {
            if (totalPriceWithOutTarget >= this.autoDiscount.amount) {
              return this.autoDiscount.discount;
            }
            return {};
          }
          return this.autoDiscount.discount;
        }
        return {};
      }
      return {};
    }
  },
  watch: {
    '$dataBus.mainHeaderAnimating': {
      handler: function handler(newVal) {
        this.handleStickPreviewPanel(newVal);
      }
    },
    variants: {
      handler: function handler() {
        this.$nextTick(this.handleResize);
      }
    },
    selectedFilterOption: {
      handler: function handler(newVal, oldVal) {
        var _context31,
          _this10 = this;
        for_each_default()(_context31 = this.variants).call(_context31, function (item) {
          item.selected = false;
        });
        this.selectedItems = [];
        this.handleSelectFreeItem([]);

        // nextTick 时间不够，暂时使用settimeout
        set_timeout_default()(function () {
          var _this10$$refs$colorsS, _this10$$refs$colorsS2;
          return (_this10$$refs$colorsS = (_this10$$refs$colorsS2 = _this10.$refs.colorsScrollbar).update) === null || _this10$$refs$colorsS === void 0 ? void 0 : _this10$$refs$colorsS.call(_this10$$refs$colorsS2);
        }, 10);
      }
    },
    bandExtraFilter: {
      handler: function handler() {
        this.selectedBands = [];
      }
    },
    productImages: {
      handler: function handler(newVal) {
        var _this11 = this;
        if (newVal.length) {
          this.$nextTick().then(function () {
            _this11.$refs.previewSwiper.swiperInstance.slideTo(0);
          });
        }
      }
    },
    matchedDiscount: {
      handler: function handler(newVal) {
        if ((0,lodash.isEmpty)(newVal)) {
          this.selectedDiscountItemsQuantity = 0;
        }
      }
    },
    selectedItems: {
      handler: function handler() {
        this.handleSelectAccessories(this.selectedAccessories);
        this.handleSelectFreeItem(this.selectedFreeItem);
      }
    }
  },
  updated: function updated() {
    this.checkIfHeightUpdated();
  },
  mounted: function mounted() {
    var _this12 = this;
    this.getProductDetails().then( /*#__PURE__*/(0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee() {
      var _context32, _this12$filterColorOp;
      return regenerator_default().wrap(function _callee$(_context33) {
        while (1) switch (_context33.prev = _context33.next) {
          case 0:
            if (!_this12.autoSelect) {
              _context33.next = 9;
              break;
            }
            _context33.next = 3;
            return _this12.$nextTick();
          case 3:
            if (!_this12.filterColorOptions.length) {
              _context33.next = 7;
              break;
            }
            _this12.selectedFilterOption = (_this12$filterColorOp = _this12.filterColorOptions[0]) === null || _this12$filterColorOp === void 0 ? void 0 : _this12$filterColorOp.name;
            _context33.next = 7;
            return _this12.$nextTick();
          case 7:
            some_default()(_context32 = _this12.variants).call(_context32, function (variant) {
              if (variant.available) {
                _this12.toggleItem(variant);
                _this12.triggedAutoSelect = true;
                return true;
              }
              return false;
            });
            return _context33.abrupt("return", _this12.$nextTick());
          case 9:
          case "end":
            return _context33.stop();
        }
      }, _callee);
    }))).then(this.handleStickPreviewPanel).then(function () {
      _this12.$emit('domReady');
    });
    this.getAutoDiscount();
    this.currentPath = location.pathname;
    this.$watch(function () {
      return [_this12.currentPreviewIndex, _this12.productImages];
    }, function (_ref3) {
      var _ref4 = (0,slicedToArray/* default */.Z)(_ref3, 2),
        currentPreviewIndex = _ref4[0],
        productImages = _ref4[1];
      if ((currentPreviewIndex === 0 || currentPreviewIndex === productImages.length - 1) && productImages.length > 1) {
        _this12.$nextTick(function () {
          var _context34;
          _this12.tabableEls = filter_default()(_context34 = (0,toConsumableArray/* default */.Z)(document.body.querySelectorAll('button:not([tabindex="-1"]), [href], a, input, select, textarea, [tabindex]:not([tabindex="-1"])'))).call(_context34, function (el) {
            return el.offsetParent;
          });
        });
      }
    }, {
      immediate: true
    });
    this.$once('hook:beforeDestroy', function () {
      _this12.tabableEls = null;
    });
  },
  methods: {
    handleStickPreviewPanel: function handleStickPreviewPanel() {
      var mainHeaderAnimating = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
      if (mainHeaderAnimating) {
        this.stickyStyle = {
          top: "".concat((this.$dataBus.mainHeaderIsCollapsed ? this.$dataBus.initHeight4mainHeader : 0) + 85 + 60, "px")
        };
      }
    },
    handleKeyPress4swiperPagination: function handleKeyPress4swiperPagination(event) {
      var _context35,
        _this13 = this;
      var flag = false;
      var swiperInstance = this.$refs.previewSwiper.swiperInstance;
      switch (event.key) {
        case 'ArrowRight':
          if (swiperInstance.isEnd) {
            swiperInstance.slideTo(0);
          } else {
            swiperInstance.slideNext();
          }
          flag = true;
          break;
        case 'ArrowLeft':
          if (swiperInstance.isBeginning) {
            swiperInstance.slideTo(this.productImages.length - 1);
          } else {
            swiperInstance.slidePrev();
          }
          flag = true;
          break;
        case 'Home':
          swiperInstance.slideTo(0);
          flag = true;
          break;
        case 'End':
          swiperInstance.slideTo(this.productImages.length - 1);
          flag = true;
          break;
        case 'Tab':
          // eslint-disable-next-line no-case-declarations
          var paginationStartIndex = find_index_default()(_context35 = this.tabableEls).call(_context35, function (el) {
            var _context36;
            return includes_default()(_context36 = el.getAttribute('class') || '').call(_context36, 'swiper-custom-pagination__item');
          });
          // eslint-disable-next-line no-case-declarations
          var el2focus;
          if (event.shiftKey) {
            el2focus = this.tabableEls[paginationStartIndex - 1];
          } else {
            el2focus = this.tabableEls[paginationStartIndex + 1];
          }
          el2focus.focus();
          flag = false;
          break;
        default:
          return;
      }
      if (flag) {
        set_timeout_default()(function () {
          _this13.$el.querySelectorAll('.swiper-custom-pagination__item')[swiperInstance.activeIndex].focus();
        });
      }
      event.stopPropagation();
      event.preventDefault();
    },
    handleNav4colorFilter: function handleNav4colorFilter(nav) {
      var _context37,
        _this14 = this;
      var currentIndex = this.selectedFilterOption ? find_index_default()(_context37 = this.filterColorOptions).call(_context37, function (node) {
        return node.name === _this14.selectedFilterOption;
      }) : -1;
      var newIndex;
      if (nav === 'next') {
        if (currentIndex === this.filterColorOptions.length - 1) {
          newIndex = 0;
        } else {
          newIndex = currentIndex + 1;
        }
      } else {
        if (currentIndex === 0) {
          newIndex = this.filterColorOptions.length - 1;
        } else {
          newIndex = currentIndex - 1;
        }
      }
      if (newIndex !== undefined) {
        this.selectedFilterOption = this.filterColorOptions[newIndex].name;
        this.$nextTick(function () {
          _this14.$refs.colorFilter.querySelector("#product-model-".concat(newIndex)).focus();
        });
      }
    },
    handleFocusNextColorFilter: function handleFocusNextColorFilter(e) {
      this.handleNav4colorFilter('next');
    },
    handleFOcusPrevColorFIlter: function handleFOcusPrevColorFIlter(e) {
      this.handleNav4colorFilter('prev');
    },
    openSubscribeModal: function openSubscribeModal(productId, variantId) {
      variantDetailDialog/* default.open */.Z.open(productId, variantId);
    },
    checkIfHeightUpdated: (0,lodash.debounce)(function () {
      if (this.$el.offsetHeight !== this.lastOffsetHeight) {
        this.lastOffsetHeight = this.$el.offsetHeight;
        this.$emit('height-updated');
      }
    }, 500),
    handleSelectItemWithDiscount: function handleSelectItemWithDiscount(val, field) {
      var _this15 = this;
      var hasDiscountItemRemoved = false;
      var isRemoved = function isRemoved(item) {
        return !find_default()(val).call(val, function (node) {
          return node.id === item.id;
        });
      };
      var hasDiscount = function hasDiscount(item) {
        return item.discountPrice !== null && item.discountPrice !== undefined;
      };
      if (this[field] && this[field].length) {
        var _context38;
        for_each_default()(_context38 = this[field]).call(_context38, function (item) {
          if (hasDiscount(item)) {
            _this15.selectedDiscountItemsQuantity -= 1;
            if (isRemoved(item)) {
              hasDiscountItemRemoved = true;
            }
          }
        });
      }
      this[field] = this.appendDiscountPriceIfNeeded(val);
      if (hasDiscountItemRemoved) {
        var _context39, _context40;
        for_each_default()(_context39 = filter_default()(_context40 = ['selectedBands', 'selectedAccessories', 'selectedFreeItem']).call(_context40, function (_field) {
          return _field !== field && _this15[_field] && _this15[_field].length;
        })).call(_context39, function (otherField) {
          if (_this15[otherField] && _this15[otherField].length) {
            _this15[otherField] = _this15.appendDiscountPriceIfNeeded(_this15[otherField]);
          }
        });
      }
    },
    handleResize: function handleResize() {
      var _this16 = this;
      if (this.onlyOneVariant) return;
      requestAnimationFrame(function () {
        var listEl = _this16.$el.querySelector('.shop-panel__color-list');
        var isVerticalScrollable = !_this16.$dataBus.isMobile && listEl.scrollHeight > listEl.clientHeight;
        var isHorizontalScrollable = _this16.$dataBus.isMobile && listEl.scrollWidth > listEl.clientWidth;
        _this16.isScrollable4colors = isVerticalScrollable || isHorizontalScrollable;
      });
    },
    addToBag: function addToBag() {
      var _context41,
        _context42,
        _context43,
        _context44,
        _context45,
        _context46,
        _this17 = this;
      this.addingToBag = true;
      var params = {
        products: concat_default()(_context41 = map_default()(_context42 = this.selectedItems).call(_context42, function (item) {
          var data = {
            merchandiseId: item.id,
            quantity: 1
          };
          return data;
        })).call(_context41, map_default()(_context43 = concat_default()(_context44 = concat_default()(_context45 = this.selectedFreeItem).call(_context45, this.selectedRecommended)).call(_context44, concat_default()(_context46 = this.selectedBands).call(_context46, this.selectedAccessories))).call(_context43, function (item) {
          return {
            merchandiseId: item.id,
            quantity: 1
          };
        }))
      };
      return shopifyBuy/* default.addToCart */.Z.addToCart(localStorage.cartId, params.products).then(function (cartData) {
        var _context47;
        var lines2check = map_default()(_context47 = cartData.lines).call(_context47, function (item) {
          return item.id;
        });
        return _this17.checkIfCartReady(lines2check, 5).then(function (isReady) {
          if (isReady) {
            js_cookie/* default.set */.Z.set('added_to_bag', 1, {
              path: ''
            });
            location.href = 'shop/bag';
          }
        });
      })["finally"](function () {
        _this17.addingToBag = false;
      });
    },
    /**
     * 检查购物车是否已经准备好
     * @param {Array} lines2check Cart lines to check
     * @param {Number} retries Max retry times
     */
    checkIfCartReady: function checkIfCartReady(lines2check) {
      var _arguments = arguments;
      return (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee2() {
        var retries, successfullyAdded, checkCart, index;
        return regenerator_default().wrap(function _callee2$(_context49) {
          while (1) switch (_context49.prev = _context49.next) {
            case 0:
              checkCart = function _checkCart() {
                return new (promise_default())(function (resolve) {
                  shopifyBuy/* default.getCart */.Z.getCart().then(function (cart) {
                    var _context48;
                    if (every_default()(_context48 = cart.lines).call(_context48, function (item) {
                      return includes_default()(lines2check).call(lines2check, item.id);
                    })) {
                      successfullyAdded = true;
                    }
                    resolve();
                  })["catch"](function () {
                    return resolve();
                  });
                });
              };
              retries = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : 3;
              successfullyAdded = false;
              index = 0;
            case 4:
              if (!(index < retries)) {
                _context49.next = 14;
                break;
              }
              _context49.next = 7;
              return new (promise_default())(function (resolve) {
                set_timeout_default()(resolve, 250);
              });
            case 7:
              _context49.next = 9;
              return checkCart();
            case 9:
              if (!successfullyAdded) {
                _context49.next = 11;
                break;
              }
              return _context49.abrupt("break", 14);
            case 11:
              index++;
              _context49.next = 4;
              break;
            case 14:
              return _context49.abrupt("return", successfullyAdded);
            case 15:
            case "end":
              return _context49.stop();
          }
        }, _callee2);
      }))();
    },
    handleSelectFreeItem: function handleSelectFreeItem(val) {
      this.handleSelectItemWithDiscount(val, 'selectedFreeItem');
    },
    handleSelectAccessories: function handleSelectAccessories(val) {
      this.handleSelectItemWithDiscount(val, 'selectedAccessories');
    },
    appendDiscountPriceIfNeeded: function appendDiscountPriceIfNeeded(val) {
      var _this18 = this;
      var discountQuantity = Number(this.matchedDiscount.quantity);
      return map_default()(val).call(val, function (item) {
        var _this18$matchedDiscou;
        var discount = (_this18$matchedDiscou = _this18.matchedDiscount.products) !== null && _this18$matchedDiscou !== void 0 && includes_default()(_this18$matchedDiscou).call(_this18$matchedDiscou, item.productId) ? _this18.matchedDiscount : null;
        if (discount && _this18.selectedDiscountItemsQuantity < discountQuantity) {
          item.discountPrice = (Number(item.price) * (1 - discount.percentage)).toFixed(2);
          _this18.selectedDiscountItemsQuantity += 1;
        } else {
          item.discountPrice = null;
        }
        return item;
      });
    },
    getAutoDiscount: function getAutoDiscount() {
      var _this19 = this;
      axios_default().get('/shopify/auto/discount').then( /*#__PURE__*/function () {
        var _ref5 = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee3(res) {
          var _collections$edges, _context50, _context51;
          var discountData, _discountData$custome, _discountData$custome2, productVariants, _discountData$custome3, collections, customerBuysCollection, requirements, products, _discountData$custome4, percentage, quantity, _context52, _collectionDetail;
          return regenerator_default().wrap(function _callee3$(_context53) {
            while (1) switch (_context53.prev = _context53.next) {
              case 0:
                discountData = res.data.data;
                if (!(keys_default()(discountData).length === 0)) {
                  _context53.next = 3;
                  break;
                }
                return _context53.abrupt("return");
              case 3:
                _discountData$custome = discountData.customerBuys.items, _discountData$custome2 = _discountData$custome.productVariants, productVariants = _discountData$custome2 === void 0 ? {} : _discountData$custome2, _discountData$custome3 = _discountData$custome.collections, collections = _discountData$custome3 === void 0 ? {} : _discountData$custome3;
                customerBuysCollection = (_collections$edges = collections.edges) === null || _collections$edges === void 0 ? void 0 : _collections$edges[0].node.id;
                requirements = {
                  products: [],
                  variantsId: map_default()(_context50 = productVariants.edges || []).call(_context50, function (item) {
                    return item.node.id;
                  })
                };
                products = map_default()(_context51 = discountData.customerGets.items.products.edges).call(_context51, function (item) {
                  return item.node.id;
                });
                _discountData$custome4 = discountData.customerGets.value, percentage = _discountData$custome4.effect.percentage, quantity = _discountData$custome4.quantity.quantity;
                if (!customerBuysCollection) {
                  _context53.next = 19;
                  break;
                }
                _context53.prev = 9;
                _context53.next = 12;
                return shopifyBuy/* default.getCollectionNew */.Z.getCollectionNew(customerBuysCollection.split('/').pop(), true);
              case 12:
                _collectionDetail = _context53.sent;
                requirements.products = map_default()(_context52 = _collectionDetail.products).call(_context52, function (item) {
                  return item.id;
                });
                _context53.next = 19;
                break;
              case 16:
                _context53.prev = 16;
                _context53.t0 = _context53["catch"](9);
                console.error(_context53.t0);
              case 19:
                _this19.autoDiscount = {
                  requirements: requirements,
                  amount: Number(discountData.customerBuys.value.quantity),
                  discount: {
                    products: products,
                    percentage: percentage,
                    quantity: quantity
                  }
                };
              case 20:
              case "end":
                return _context53.stop();
            }
          }, _callee3, null, [[9, 16]]);
        }));
        return function (_x) {
          return _ref5.apply(this, arguments);
        };
      }());
    },
    handleSwiperNav: function handleSwiperNav(event) {
      if (event.target !== event.currentTarget) {
        var navIndex = Number(event.target.dataset.index);
        this.$refs.previewSwiper.swiperInstance.slideTo(navIndex);
      }
    },
    selectNextOrPrevColor: function selectNextOrPrevColor(op) {
      var _context54,
        _this20 = this;
      var currentIndex = find_index_default()(_context54 = this.variants).call(_context54, function (node) {
        return node.selected;
      });
      var nextIndex;
      if (op === 'next') {
        if (currentIndex === this.variants.length - 1) {
          nextIndex = 0;
        } else {
          nextIndex = currentIndex + 1;
        }
      } else {
        if (currentIndex === 0) {
          nextIndex = this.variants.length - 1;
        } else {
          nextIndex = currentIndex - 1;
        }
      }
      var colorItem = this.variants[nextIndex];
      this.toggleItem(colorItem);
      set_timeout_default()(function () {
        _this20.$el.querySelector("#color-item-".concat(colorItem.id.split('/').pop())).focus();
      }, 0);
    },
    toggleItem: function toggleItem(data) {
      var _context55;
      if (!data.available || this.filterColorOptions && !!this.filterColorOptions.length && !this.selectedFilterOption) {
        return;
      }
      for_each_default()(_context55 = this.variants).call(_context55, function (item) {
        item.selected = item.id === data.id;
      });
      this.selectedItems = [data];

      // 移动端不显示独立的过滤选项，以所选的颜色带的过滤项为准
      if (this.$dataBus.isMobile && this.filterColor === 'screenSize') {
        this.selectedFilterOption = data[this.filterColor];
      }
    },
    getProductDetails: function getProductDetails() {
      var _this21 = this;
      return (this.productId ? shopifyBuy/* default.getProductNew */.Z.getProductNew(this.productId) : shopifyBuy/* default.getProductByHandle */.Z.getProductByHandle(this.productHandle)).then( /*#__PURE__*/function () {
        var _ref6 = (0,asyncToGenerator/* default */.Z)( /*#__PURE__*/regenerator_default().mark(function _callee4(product) {
          var images2fetch, _iterator, _step, _context57, _node$metafields$find2, _context58, _node$metafields$find3, _context59, _node, metafield, variantImageIds, _context60, _node$metafields$find4, _context61, fetchedImages, _iterator2, _step2, _context56, node;
          return regenerator_default().wrap(function _callee4$(_context62) {
            while (1) switch (_context62.prev = _context62.next) {
              case 0:
                images2fetch = [];
                _iterator = _createForOfIteratorHelper(product.variants);
                try {
                  for (_iterator.s(); !(_step = _iterator.n()).done;) {
                    _node = _step.value;
                    metafield = void 0;
                    if (_this21.filterColor && (metafield = find_default()(_context57 = _node.metafields).call(_context57, function (item) {
                      return item.key === metafieldAlias[_this21.filterColor];
                    }))) {
                      _node[_this21.filterColor] = metafield.value;
                    }
                    if (((_node$metafields$find2 = find_default()(_context58 = _node.metafields).call(_context58, function (item) {
                      return item.key === 'is_disabled';
                    })) === null || _node$metafields$find2 === void 0 ? void 0 : _node$metafields$find2.value) === '1') {
                      _node.available = false;
                    }
                    _node.pageLink = shopifyBuy/* default.getConfiguredProductLink */.Z.getConfiguredProductLink(_node);
                    _node.productId = product.id;
                    variantImageIds = JSON.parse(((_node$metafields$find3 = find_default()(_context59 = _node.metafields).call(_context59, function (item) {
                      return item.key === 'product_assets';
                    })) === null || _node$metafields$find3 === void 0 ? void 0 : _node$metafields$find3.value) || '[]');
                    if (variantImageIds.length) {
                      images2fetch.push.apply(images2fetch, (0,toConsumableArray/* default */.Z)(variantImageIds));
                      _node.multipleViews = variantImageIds;
                    } else {
                      _node.multipleViews = map_default()(_context60 = JSON.parse(((_node$metafields$find4 = find_default()(_context61 = _node.metafields).call(_context61, function (item) {
                        return item.key === 'variant_images';
                      })) === null || _node$metafields$find4 === void 0 ? void 0 : _node$metafields$find4.value) || '[]')).call(_context60, function (str) {
                        return {
                          src: str,
                          altText: ''
                        };
                      });
                    }
                  }
                } catch (err) {
                  _iterator.e(err);
                } finally {
                  _iterator.f();
                }
                if (!images2fetch.length) {
                  _context62.next = 9;
                  break;
                }
                _context62.next = 6;
                return shopifyBuy/* default.getImages */.Z.getImages(images2fetch);
              case 6:
                fetchedImages = _context62.sent;
                _iterator2 = _createForOfIteratorHelper(product.variants);
                try {
                  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
                    node = _step2.value;
                    node.multipleViews = map_default()(_context56 = node.multipleViews).call(_context56, function (item) {
                      if (typeof item === 'string') {
                        var matchedImage = find_default()(fetchedImages).call(fetchedImages, function (image) {
                          return image.id === item;
                        });
                        if (matchedImage) {
                          return matchedImage;
                        }
                        return null;
                      }
                      return item;
                    });
                  }
                } catch (err) {
                  _iterator2.e(err);
                } finally {
                  _iterator2.f();
                }
              case 9:
                _this21.product = product;
                _this21.productIsReady = true;
              case 11:
              case "end":
                return _context62.stop();
            }
          }, _callee4);
        }));
        return function (_x2) {
          return _ref6.apply(this, arguments);
        };
      }());
    },
    formatPrice: function formatPrice(price) {
      var _context63, _context65, _context66, _context67;
      var newline4suffix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var country = this.$root.country;
      if (includes_default()(_context63 = ['jp']).call(_context63, country)) {
        price = Number(price).toLocaleString('ja-JP');
      } else {
        var _context64;
        price = Number(price).toFixed(2);
        if (includes_default()(_context64 = ['fr', 'es']).call(_context64, country)) {
          price = String(price).replace('.', ',');
        }
      }
      var more = country === 'jp' ? "".concat(newline4suffix ? '\n' : '', "\uFF08\u7A0E\u8FBC\uFF09") : '';
      return this.isSuffixUnit ? concat_default()(_context65 = "".concat(price)).call(_context65, this.priceUnit) : concat_default()(_context66 = concat_default()(_context67 = "".concat(this.priceUnit)).call(_context67, price)).call(_context66, more);
    }
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_ShopPanelvue_type_script_lang_js = (ShopPanelvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopPanel/index.vue?vue&type=style&index=0&id=42103bf7&prod&lang=scss
var ShopPanelvue_type_style_index_0_id_42103bf7_prod_lang_scss = __webpack_require__(32427);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/index.vue?vue&type=style&index=0&id=42103bf7&prod&lang=scss

;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopPanel/index.vue



;


/* normalize component */

var ShopPanel_component = (0,componentNormalizer/* default */.Z)(
  components_ShopPanelvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ShopPanel = (ShopPanel_component.exports);

/***/ }),

/***/ 87649:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ ShopifyBuy)
});

// EXTERNAL MODULE: ./app/web/projects/www/components/ShopifyBuy/shopifyBuy.js + 1 modules
var shopifyBuy = __webpack_require__(86567);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopifyBuy/index.vue?vue&type=script&lang=js


/* harmony default export */ const ShopifyBuyvue_type_script_lang_js = ({
  name: 'ShopifyBuy',
  props: {
    shopifyId: {
      type: String
    },
    shopLink: {
      type: String
    }
  },
  mounted: function mounted() {
    this.init();
  },
  created: function created() {
    var _this = this;
    this.$parent.$once('hook:mounted', function () {
      _this.$parent.$forceUpdate();
    });
  },
  methods: {
    openModal: function openModal() {
      shopifyBuy/* default.openProduct */.Z.openProduct(this.shopifyId);
    },
    /**
     * 初始化shopify buy 购买弹窗，同一id 只会初始化一次
     */
    init: function init() {
      var _this2 = this;
      shopifyBuy/* default.initShopifyUi */.Z.initShopifyUi().then(function () {
        shopifyBuy/* default.shopifyProductsMap */.Z.shopifyProductsMap[_this2.shopifyId] = (shopifyBuy/* default.shopifyProductsMap */.Z.shopifyProductsMap[_this2.shopifyId] || 0) + 1;
        _this2.$once('hook:beforeDestroy', function () {
          shopifyBuy/* default.shopifyProductsMap */.Z.shopifyProductsMap[_this2.shopifyId] -= 1;
          if (shopifyBuy/* default.shopifyProductsMap */.Z.shopifyProductsMap[_this2.shopifyId] === 0) {
            shopifyBuy/* default.destroyProduct */.Z.destroyProduct(_this2.shopifyId);
          }
        });
        var country = _this2.$root.country;
        var moneyFormat = shopifyBuy/* default.clientConfig */.Z.clientConfig ? shopifyBuy/* default.clientConfig */.Z.clientConfig[country].moneyFormat : '%24%7B%7Bamount%7D%7D';
        shopifyBuy/* default.initProduct */.Z.initProduct(_this2.shopifyId, moneyFormat);
      })["catch"](function () {});
    }
  },
  render: function render(h) {
    if (this.$parent._isMounted) {
      if (shopifyBuy/* default.isAvailable */.Z.isAvailable()) {
        return h("button", {
          "class": "shopify-buy__btn",
          "on": {
            "click": this.openModal
          }
        }, [this.$slots["default"]]);
      } else if (this.shopLink) {
        return h("a", {
          "class": "shopify-buy__btn inline-block",
          "attrs": {
            "href": this.shopLink
          }
        }, [this.$slots["default"]]);
      }
    }
    return h(false);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopifyBuy/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_ShopifyBuyvue_type_script_lang_js = (ShopifyBuyvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ShopifyBuy/index.vue?vue&type=style&index=0&id=fbbbf710&prod&lang=scss
var ShopifyBuyvue_type_style_index_0_id_fbbbf710_prod_lang_scss = __webpack_require__(63527);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopifyBuy/index.vue?vue&type=style&index=0&id=fbbbf710&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ShopifyBuy/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_ShopifyBuyvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ShopifyBuy = (component.exports);

/***/ }),

/***/ 93483:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ Specs)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js + 3 modules
var toConsumableArray = __webpack_require__(71649);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/map.js
var map = __webpack_require__(88946);
var map_default = /*#__PURE__*/__webpack_require__.n(map);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/array/is-array.js
var is_array = __webpack_require__(98235);
var is_array_default = /*#__PURE__*/__webpack_require__.n(is_array);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/flat.js
var flat = __webpack_require__(49804);
var flat_default = /*#__PURE__*/__webpack_require__.n(flat);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/concat.js
var concat = __webpack_require__(8571);
var concat_default = /*#__PURE__*/__webpack_require__.n(concat);
// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/Specs/index.vue?vue&type=script&lang=js








/* harmony default export */ const Specsvue_type_script_lang_js = ({
  name: 'Specs',
  "extends": element_ui_common.Dialog,
  props: {
    allSpecs: {
      type: Array,
      "default": function _default() {
        return [];
      }
    },
    colWidths: {
      type: Array,
      "default": function _default() {
        return ['150px'];
      }
    }
  },
  computed: {
    maxValSpan: function maxValSpan() {
      var _context,
        _this = this;
      return Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(map_default()(_context = this.allSpecs).call(_context, function (item) {
        var i18nText = _this.$t(item.value);
        return is_array_default()(i18nText) ? i18nText.length : 1;
      })));
    },
    normalizedRows: function normalizedRows() {
      var _context2,
        _this2 = this;
      var rows = [];
      for_each_default()(_context2 = this.allSpecs).call(_context2, function (spec) {
        var label = _this2.$t(spec.label);
        var cellVals = _this2.$t(spec.value);
        cellVals = is_array_default()(cellVals) ? cellVals : [cellVals];
        if (spec.separateRow4value) {
          for_each_default()(cellVals).call(cellVals, function (val, index) {
            var row = [{
              val: val
            }];
            if (index === 0) {
              row.unshift({
                val: label
              });
            }
            rows.push(row);
            if (index === cellVals.length - 1) {
              rows[rows.length - cellVals.length][0].rowSpan = cellVals.length;
            }
          });
        } else {
          var _context3;
          var row = flat_default()(_context3 = [map_default()(cellVals).call(cellVals, function (val) {
            return {
              val: val
            };
          })]).call(_context3);
          if (spec.label && label) {
            row.unshift({
              val: label
            });
          }
          if (spec.rowSpan) {
            row[0].rowSpan = spec.rowSpan;
          }
          if (row.length === 2 && _this2.maxValSpan > 1) {
            row[row.length - 1].colSpan = _this2.maxValSpan;
          }
          rows.push(row);
        }
      });
      return rows;
    }
  },
  render: function render() {
    var _context4;
    return (0,vue_common_prod.h)("transition", {
      "attrs": {
        "name": "dialog-fade"
      },
      "on": {
        "after-enter": this.afterEnter,
        "after-leave": this.afterLeave
      }
    }, [(0,vue_common_prod.h)("div", {
      "directives": [{
        name: "show",
        value: this.visible
      }],
      "class": "el-dialog__wrapper",
      "on": {
        "click_self": this.handleWrapperClick
      }
    }, [this.showClose ? (0,vue_common_prod.h)("button", {
      "attrs": {
        "type": "button",
        "aria-label": "Close"
      },
      "class": "specs-wrapper__close-btn",
      "on": {
        "click": this.handleClose
      }
    }, [(0,vue_common_prod.h)("i", {
      "class": "el-icon el-icon-close"
    })]) : null, (0,vue_common_prod.h)("div", {
      "ref": "dialog",
      "class": "specs-wrapper"
    }, [(0,vue_common_prod.h)("table", {
      "class": "specs-wrapper__table"
    }, [(0,vue_common_prod.h)("colgroup", [(0,vue_common_prod.h)("col", {
      "style": this.colWidths[0] ? "width: ".concat(this.colWidths[0]) : ''
    }), (0,vue_common_prod.h)("col", {
      "style": this.colWidths[1] ? "width: ".concat(this.colWidths[1]) : ''
    })]), (0,vue_common_prod.h)("tbody", [map_default()(_context4 = this.normalizedRows).call(_context4, function (row, rowIndex) {
      return (0,vue_common_prod.h)("tr", {
        "key": "row_".concat(rowIndex)
      }, [map_default()(row).call(row, function (cell, cellIndex) {
        var _context5;
        return (0,vue_common_prod.h)("td", {
          "class": "specs-wrapper__table-cell",
          "attrs": {
            "rowspan": cell.rowSpan,
            "colspan": cell.colSpan
          },
          "key": concat_default()(_context5 = "row_".concat(rowIndex, "cell_")).call(_context5, cellIndex)
        }, [cell.val]);
      })]);
    })])])])])]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/Specs/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_Specsvue_type_script_lang_js = (Specsvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/Specs/index.vue?vue&type=style&index=0&id=282814fd&prod&lang=scss
var Specsvue_type_style_index_0_id_282814fd_prod_lang_scss = __webpack_require__(52080);
;// CONCATENATED MODULE: ./app/web/projects/www/components/Specs/index.vue?vue&type=style&index=0&id=282814fd&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/Specs/index.vue
var render, staticRenderFns
;

;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_Specsvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const Specs = (component.exports);

/***/ }),

/***/ 10286:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ Stamped)
});

;// CONCATENATED MODULE: ./node_modules/url-loader/dist/cjs.js?limit=false!./app/web/assets/js/stampedWidget.js
/* harmony default export */ const stampedWidget = (__webpack_require__.p + "3558a74d2554c3284dc5a3f51214ad7c.js");
;// CONCATENATED MODULE: ./app/web/projects/www/components/Stamped/utils.js
/* harmony default export */ const utils = ({
  isInited: false
});
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/Stamped/index.vue?vue&type=script&lang=js


/* harmony default export */ const Stampedvue_type_script_lang_js = ({
  methods: {
    init: function init() {
      var apiKey = 'pubkey-3LAO223qRh2fn2876j1GV72tH83A02';
      var storeUrl = 'coroswearables.myshopify.com';
      StampedFn.init({
        apiKey: apiKey,
        storeUrl: storeUrl
      });
    }
  },
  mounted: function mounted() {
    if (utils.isInited) return;
    utils.isInited = true;
    window.System["import"](stampedWidget).then(this.init);
  },
  render: function render() {
    return this.$slots["default"];
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/Stamped/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_Stampedvue_type_script_lang_js = (Stampedvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/Stamped/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_Stampedvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const Stamped = (component.exports);

/***/ }),

/***/ 49394:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ VideoWithScrollControll),
  "I": () => (/* reexport */ once)
});

// EXTERNAL MODULE: ./node_modules/vue/dist/vue.common.prod.js
var vue_common_prod = __webpack_require__(91317);
// EXTERNAL MODULE: ./node_modules/gsap/index.js + 2 modules
var gsap = __webpack_require__(66358);
// EXTERNAL MODULE: ./node_modules/gsap/ScrollTrigger.js + 1 modules
var ScrollTrigger = __webpack_require__(49092);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/set-interval.js
var set_interval = __webpack_require__(34652);
var set_interval_default = /*#__PURE__*/__webpack_require__.n(set_interval);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/ScrollHeightWatcher/index.vue?vue&type=script&lang=js

/* harmony default export */ const ScrollHeightWatchervue_type_script_lang_js = ({
  name: 'ScrollHeightWatcher',
  props: {
    cb: {
      type: Function
    },
    immediate: {
      type: Boolean,
      "default": false
    }
  },
  data: function data() {
    return {
      scrollHeight: 0
    };
  },
  watch: {
    scrollHeight: function scrollHeight() {
      if (this.cb) {
        this.cb();
      }
    }
  },
  created: function created() {
    var _this = this;
    if (this.cb && true) {
      var _intervalId = set_interval_default()(function () {
        _this.scrollHeight = document.body.scrollHeight;
      }, 1000);
      this.$once('hook:beforeDestroy', function () {
        clearInterval(_intervalId);
      });
    }
  },
  render: function render() {
    return null;
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/ScrollHeightWatcher/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_ScrollHeightWatchervue_type_script_lang_js = (ScrollHeightWatchervue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/ScrollHeightWatcher/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_ScrollHeightWatchervue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const ScrollHeightWatcher = (component.exports);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/VideoWithScrollControll/index.vue?vue&type=script&lang=js




gsap/* default.registerPlugin */.ZP.registerPlugin(ScrollTrigger/* default */.Z);
var once = function once(el, event, fn, opts) {
  var _onceFn = function onceFn() {
    el.removeEventListener(event, _onceFn);
    fn.apply(this, arguments);
  };
  el.addEventListener(event, _onceFn, opts);
  return _onceFn;
};
/* harmony default export */ const VideoWithScrollControllvue_type_script_lang_js = ({
  name: 'VideoWithScrollControll',
  props: {
    src: {
      type: String,
      "default": '',
      required: true
    },
    debug: {
      type: Boolean,
      "default": false
    },
    start: {
      type: String,
      "default": 'top+=75 top+=180'
    },
    end: {
      type: String,
      "default": 'bottom bottom'
    },
    videoClass: {
      type: String,
      "default": 'w-full'
    },
    pin: {
      type: Boolean,
      "default": true
    },
    autoRefreshTrigger: {
      type: Boolean,
      "default": false
    }
  },
  mounted: function mounted() {
    this.init();
  },
  methods: {
    init: function init() {
      var _this = this;
      var videoEl = this.$refs.video;
      this.tl = gsap/* default.timeline */.ZP.timeline({
        defaults: {
          duration: 1
        },
        scrollTrigger: {
          trigger: this.$refs.videoContainer,
          start: this.start,
          end: this.end,
          markers: this.debug,
          anticipatePin: 1,
          pin: this.pin ? videoEl : null,
          scrub: 1,
          pinSpacing: false
        }
      });
      once(videoEl, 'loadedmetadata', function () {
        _this.tl.fromTo(videoEl, {
          currentTime: 0
        }, {
          currentTime: videoEl.duration || 1
        });
      });
      if (this.$dataBus.isMobile) {
        once(document.documentElement, 'touchstart', function (e) {
          videoEl.play();
          videoEl.pause();
        });
      }
      this.$once('hook:beforeDestroy', function () {
        _this.tl.kill();
      });
    },
    refreshScrollTrigger: function refreshScrollTrigger() {
      if (this.tl) {
        this.tl.scrollTrigger.refresh();
      }
    }
  },
  render: function render() {
    return (0,vue_common_prod.h)("div", {
      "ref": "videoContainer",
      "class": "video-with-scroll-controll"
    }, [(0,vue_common_prod.h)("video", {
      "ref": "video",
      "attrs": {
        "src": this.src,
        "playsinline": "true",
        "webkit-playsinline": "true",
        "preload": "auto",
        "muted": "muted"
      },
      "class": "video-with-scroll-controll__inner ".concat(this.videoClass)
    }), this.autoRefreshTrigger ? (0,vue_common_prod.h)(ScrollHeightWatcher, {
      "attrs": {
        "cb": this.refreshScrollTrigger
      }
    }) : null]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/VideoWithScrollControll/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_VideoWithScrollControllvue_type_script_lang_js = (VideoWithScrollControllvue_type_script_lang_js); 
;// CONCATENATED MODULE: ./app/web/projects/www/components/VideoWithScrollControll/index.vue
var VideoWithScrollControll_render, VideoWithScrollControll_staticRenderFns
;



/* normalize component */
;
var VideoWithScrollControll_component = (0,componentNormalizer/* default */.Z)(
  components_VideoWithScrollControllvue_type_script_lang_js,
  VideoWithScrollControll_render,
  VideoWithScrollControll_staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const VideoWithScrollControll = (VideoWithScrollControll_component.exports);

/***/ }),

/***/ 76517:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ WebpImg)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/keys.js
var keys = __webpack_require__(62079);
var keys_default = /*#__PURE__*/__webpack_require__.n(keys);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-symbols.js
var get_own_property_symbols = __webpack_require__(52020);
var get_own_property_symbols_default = /*#__PURE__*/__webpack_require__.n(get_own_property_symbols);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/filter.js
var filter = __webpack_require__(73324);
var filter_default = /*#__PURE__*/__webpack_require__.n(filter);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptor.js
var get_own_property_descriptor = __webpack_require__(88546);
var get_own_property_descriptor_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptor);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/instance/for-each.js
var for_each = __webpack_require__(99595);
var for_each_default = /*#__PURE__*/__webpack_require__.n(for_each);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/get-own-property-descriptors.js
var get_own_property_descriptors = __webpack_require__(66775);
var get_own_property_descriptors_default = /*#__PURE__*/__webpack_require__.n(get_own_property_descriptors);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-properties.js
var define_properties = __webpack_require__(2201);
var define_properties_default = /*#__PURE__*/__webpack_require__.n(define_properties);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/core-js/object/define-property.js
var define_property = __webpack_require__(57445);
var define_property_default = /*#__PURE__*/__webpack_require__.n(define_property);
// EXTERNAL MODULE: ./node_modules/@vue/babel-helper-vue-jsx-merge-props/dist/helper.js
var helper = __webpack_require__(36568);
var helper_default = /*#__PURE__*/__webpack_require__.n(helper);
// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js
var defineProperty = __webpack_require__(44845);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.number.constructor.js
var es_number_constructor = __webpack_require__(79288);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/components/WebpImg/index.vue?vue&type=script&lang=js











function ownKeys(e, r) { var t = keys_default()(e); if ((get_own_property_symbols_default())) { var o = get_own_property_symbols_default()(e); r && (o = filter_default()(o).call(o, function (r) { return get_own_property_descriptor_default()(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? for_each_default()(_context = ownKeys(Object(t), !0)).call(_context, function (r) { (0,defineProperty/* default */.Z)(e, r, t[r]); }) : (get_own_property_descriptors_default()) ? define_properties_default()(e, get_own_property_descriptors_default()(t)) : for_each_default()(_context2 = ownKeys(Object(t))).call(_context2, function (r) { define_property_default()(e, r, get_own_property_descriptor_default()(t, r)); }); } return e; }


/* harmony default export */ const WebpImgvue_type_script_lang_js = ({
  name: 'WebpImage',
  functional: true,
  props: {
    src: {
      type: String,
      required: true
    },
    // 待移除
    webpSrc: {
      type: String
    },
    // 待移除
    srcset: {
      type: String
    },
    lazyload: {
      type: Boolean,
      "default": true
    },
    height: {
      type: Number
    },
    alt: {
      type: String,
      "default": ''
    },
    // class to picture tag
    pictureCls: {
      type: [String, Array],
      "default": ''
    },
    // 未指定高度，优先以检测的高度为准
    preferClientHeight: {
      type: Boolean,
      "default": false
    },
    quality: {
      type: Number,
      "default": 80
    }
  },
  render: function render(h, context) {
    var _context$props = context.props,
      _context$props$src = _context$props.src,
      src = _context$props$src === void 0 ? '' : _context$props$src,
      pictureCls = _context$props.pictureCls,
      lazyload = _context$props.lazyload,
      quality = _context$props.quality;
    var classNames4img = [];
    if (context.data.staticClass) classNames4img.push(context.data.staticClass);
    if (context.data["class"]) classNames4img.push(context.data["class"]);
    var eventListener4img = context.listeners['img-loaded'] ? {
      on: {
        load: context.listeners['img-loaded']
      }
    } : {};
    return h("picture", {
      "class": pictureCls
    }, [h("source", helper_default()([{}, {
      attrs: {
        type: 'image/webp'
      },
      directives: [{
        name: 'image-transform',
        value: src,
        modifiers: {
          webp: true
        },
        arg: {
          targetAttr: 'data-srcset',
          height: context.props.height,
          preferClientHeight: context.props.preferClientHeight,
          lazyload: lazyload,
          quality: quality
        }
      }]
    }])), h("img", helper_default()([{
      "class": classNames4img,
      "style": context.data.style
    }, eventListener4img, {}, {
      attrs:  false ? 0 : _objectSpread({
        alt: context.props.alt
      }, context.data.attrs),
      directives: [{
        name: 'image-transform',
        value: src,
        arg: {
          preferClientHeight: context.props.preferClientHeight,
          height: context.props.height,
          lazyload: lazyload,
          quality: quality
        }
      }]
    }]))]);
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/components/WebpImg/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_WebpImgvue_type_script_lang_js = (WebpImgvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/components/WebpImg/index.vue
var render, staticRenderFns
;



/* normalize component */
;
var component = (0,componentNormalizer/* default */.Z)(
  components_WebpImgvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const WebpImg = (component.exports);

/***/ }),

/***/ 46705:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ FilterDifferentDialog)
});

;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue?vue&type=template&id=86350dbe
var render = function render() {
  var _vm = this,
    _c = _vm._self._c;
  return _c("transition", {
    attrs: {
      name: "dialog-fade"
    },
    on: {
      "after-enter": _vm.afterEnter,
      "after-leave": _vm.afterLeave
    }
  }, [_c("div", {
    directives: [{
      name: "show",
      rawName: "v-show",
      value: _vm.visible,
      expression: "visible"
    }],
    staticClass: "el-dialog__wrapper",
    on: {
      click: function click($event) {
        if ($event.target !== $event.currentTarget) return null;
        return _vm.handleWrapperClick.apply(null, arguments);
      }
    }
  }, [_c("div", _vm._b({
    ref: "dialog",
    staticClass: "filter-different-dialog",
    attrs: {
      "data-country": _vm.$i18n.locale
    }
  }, "div", _vm.ariaAttrs, false), [_vm.showClose ? _c("button", {
    staticClass: "filter-different-wrapper__close-btn",
    attrs: {
      type: "button",
      "aria-label": "Close"
    },
    on: {
      click: _vm.handleClose
    }
  }, [_c("i", {
    staticClass: "el-icon el-icon-close"
  })]) : _vm._e(), _vm._v(" "), _c("div", {
    staticClass: "filter-different-wrapper"
  }, [_c("ul", {
    staticClass: "md:mt-md-20"
  }, [_c("li", {
    staticClass: "mb-25"
  }, [_c("strong", {
    staticClass: "label"
  }, [_vm._v(_vm._s(_vm.$t("shop.pace2.silicone1")))]), _vm._v(" " + _vm._s(_vm.$t("shop.pace2.silicone2")) + "\n          ")]), _vm._v(" "), _c("li", [_c("strong", {
    staticClass: "label"
  }, [_vm._v(_vm._s(_vm.$t("shop.pace2.nylon1")))]), _vm._v(" " + _vm._s(_vm.$t("shop.pace2.nylon2")) + "\n          ")])])])])])]);
};
var staticRenderFns = [];
render._withStripped = true;

;// CONCATENATED MODULE: ./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue?vue&type=template&id=86350dbe

// EXTERNAL MODULE: ./node_modules/element-ui/lib/element-ui.common.js
var element_ui_common = __webpack_require__(64720);
// EXTERNAL MODULE: ./app/web/projects/www/components/ShopPanel/variantDetailDialog/trapFocus.js
var trapFocus = __webpack_require__(26386);
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js??clonedRuleSet-1.use[0]!./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[1]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue?vue&type=script&lang=js


/* harmony default export */ const FilterDifferentDialogvue_type_script_lang_js = ({
  name: 'FilterDifferentDialog',
  "extends": element_ui_common.Dialog,
  mixins: [trapFocus/* default */.ZP],
  props: {
    ariaAttrs: {
      type: Object,
      "default": function _default() {
        return {};
      }
    }
  },
  data: function data() {
    return {};
  }
});
;// CONCATENATED MODULE: ./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue?vue&type=script&lang=js
 /* harmony default export */ const components_FilterDifferentDialogvue_type_script_lang_js = (FilterDifferentDialogvue_type_script_lang_js); 
// EXTERNAL MODULE: ./node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-3.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-3.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue?vue&type=style&index=0&id=86350dbe&prod&lang=scss
var FilterDifferentDialogvue_type_style_index_0_id_86350dbe_prod_lang_scss = __webpack_require__(62284);
;// CONCATENATED MODULE: ./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue?vue&type=style&index=0&id=86350dbe&prod&lang=scss

// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(51900);
;// CONCATENATED MODULE: ./app/web/projects/www/pace2/components/FilterDifferentDialog/index.vue



;


/* normalize component */

var component = (0,componentNormalizer/* default */.Z)(
  components_FilterDifferentDialogvue_type_script_lang_js,
  render,
  staticRenderFns,
  false,
  null,
  null,
  null
  
)

/* harmony default export */ const FilterDifferentDialog = (component.exports);

/***/ }),

/***/ 19389:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = __webpack_require__(19841);

/***/ }),

/***/ 18033:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = __webpack_require__(98909);

/***/ }),

/***/ 49804:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = __webpack_require__(22706);

/***/ }),

/***/ 84705:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = __webpack_require__(77798);

/***/ }),

/***/ 24835:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = __webpack_require__(49596);

/***/ }),

/***/ 34652:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = __webpack_require__(36014);

/***/ }),

/***/ 74483:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(45229);

module.exports = parent;


/***/ }),

/***/ 38169:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(4294);

module.exports = parent;


/***/ }),

/***/ 17588:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(85337);

module.exports = parent;


/***/ }),

/***/ 44920:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(2309);

module.exports = parent;


/***/ }),

/***/ 24502:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(61846);

module.exports = parent;


/***/ }),

/***/ 45060:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

__webpack_require__(28668);
var getBuiltInPrototypeMethod = __webpack_require__(30251);

module.exports = getBuiltInPrototypeMethod('Array', 'fill');


/***/ }),

/***/ 8084:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

__webpack_require__(10889);
__webpack_require__(33048);
var getBuiltInPrototypeMethod = __webpack_require__(30251);

module.exports = getBuiltInPrototypeMethod('Array', 'flat');


/***/ }),

/***/ 17265:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var isPrototypeOf = __webpack_require__(61727);
var method = __webpack_require__(45060);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.fill;
  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own;
};


/***/ }),

/***/ 5122:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var isPrototypeOf = __webpack_require__(61727);
var method = __webpack_require__(8084);

var ArrayPrototype = Array.prototype;

module.exports = function (it) {
  var own = it.flat;
  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flat) ? method : own;
};


/***/ }),

/***/ 55538:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var isPrototypeOf = __webpack_require__(61727);
var method = __webpack_require__(18812);

var StringPrototype = String.prototype;

module.exports = function (it) {
  var own = it.trim;
  return typeof it == 'string' || it === StringPrototype
    || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.trim) ? method : own;
};


/***/ }),

/***/ 98295:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

__webpack_require__(13217);
var path = __webpack_require__(29068);

module.exports = path.Reflect.construct;


/***/ }),

/***/ 18812:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

__webpack_require__(86650);
var getBuiltInPrototypeMethod = __webpack_require__(30251);

module.exports = getBuiltInPrototypeMethod('String', 'trim');


/***/ }),

/***/ 19841:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(6919);


/***/ }),

/***/ 98909:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(7297);


/***/ }),

/***/ 22706:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(18306);


/***/ }),

/***/ 77798:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(51309);


/***/ }),

/***/ 49596:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(72316);


/***/ }),

/***/ 36014:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(70753);


/***/ }),

/***/ 7297:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(74483);

module.exports = parent;


/***/ }),

/***/ 18306:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(38169);

module.exports = parent;


/***/ }),

/***/ 51309:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(17588);

module.exports = parent;


/***/ }),

/***/ 72316:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(44920);

module.exports = parent;


/***/ }),

/***/ 70753:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(24502);

module.exports = parent;


/***/ }),

/***/ 57015:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var toObject = __webpack_require__(42962);
var toAbsoluteIndex = __webpack_require__(58100);
var lengthOfArrayLike = __webpack_require__(37165);

// `Array.prototype.fill` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.fill
module.exports = function fill(value /* , start = 0, end = @length */) {
  var O = toObject(this);
  var length = lengthOfArrayLike(O);
  var argumentsLength = arguments.length;
  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);
  var end = argumentsLength > 2 ? arguments[2] : undefined;
  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
  while (endPos > index) O[index++] = value;
  return O;
};


/***/ }),

/***/ 1531:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var isArray = __webpack_require__(13527);
var lengthOfArrayLike = __webpack_require__(37165);
var doesNotExceedSafeInteger = __webpack_require__(9939);
var bind = __webpack_require__(29605);

// `FlattenIntoArray` abstract operation
// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
var flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {
  var targetIndex = start;
  var sourceIndex = 0;
  var mapFn = mapper ? bind(mapper, thisArg) : false;
  var element, elementLen;

  while (sourceIndex < sourceLen) {
    if (sourceIndex in source) {
      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];

      if (depth > 0 && isArray(element)) {
        elementLen = lengthOfArrayLike(element);
        targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;
      } else {
        doesNotExceedSafeInteger(targetIndex + 1);
        target[targetIndex] = element;
      }

      targetIndex++;
    }
    sourceIndex++;
  }
  return targetIndex;
};

module.exports = flattenIntoArray;


/***/ }),

/***/ 96356:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var PROPER_FUNCTION_NAME = (__webpack_require__(28766).PROPER);
var fails = __webpack_require__(49353);
var whitespaces = __webpack_require__(3761);

var non = '\u200B\u0085\u180E';

// check that a method works with the correct list
// of whitespaces and has a correct name
module.exports = function (METHOD_NAME) {
  return fails(function () {
    return !!whitespaces[METHOD_NAME]()
      || non[METHOD_NAME]() !== non
      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);
  });
};


/***/ }),

/***/ 28668:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var $ = __webpack_require__(74715);
var fill = __webpack_require__(57015);
var addToUnscopables = __webpack_require__(66888);

// `Array.prototype.fill` method
// https://tc39.es/ecma262/#sec-array.prototype.fill
$({ target: 'Array', proto: true }, {
  fill: fill
});

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('fill');


/***/ }),

/***/ 10889:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var $ = __webpack_require__(74715);
var flattenIntoArray = __webpack_require__(1531);
var toObject = __webpack_require__(42962);
var lengthOfArrayLike = __webpack_require__(37165);
var toIntegerOrInfinity = __webpack_require__(96169);
var arraySpeciesCreate = __webpack_require__(7265);

// `Array.prototype.flat` method
// https://tc39.es/ecma262/#sec-array.prototype.flat
$({ target: 'Array', proto: true }, {
  flat: function flat(/* depthArg = 1 */) {
    var depthArg = arguments.length ? arguments[0] : undefined;
    var O = toObject(this);
    var sourceLen = lengthOfArrayLike(O);
    var A = arraySpeciesCreate(O, 0);
    A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));
    return A;
  }
});


/***/ }),

/***/ 33048:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

// this method was added to unscopables after implementation
// in popular engines, so it's moved to a separate module
var addToUnscopables = __webpack_require__(66888);

// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('flat');


/***/ }),

/***/ 13217:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var $ = __webpack_require__(74715);
var getBuiltIn = __webpack_require__(87192);
var apply = __webpack_require__(10145);
var bind = __webpack_require__(13012);
var aConstructor = __webpack_require__(73164);
var anObject = __webpack_require__(18879);
var isObject = __webpack_require__(39611);
var create = __webpack_require__(33010);
var fails = __webpack_require__(49353);

var nativeConstruct = getBuiltIn('Reflect', 'construct');
var ObjectPrototype = Object.prototype;
var push = [].push;

// `Reflect.construct` method
// https://tc39.es/ecma262/#sec-reflect.construct
// MS Edge supports only 2 arguments and argumentsList argument is optional
// FF Nightly sets third argument as `new.target`, but does not create `this` from it
var NEW_TARGET_BUG = fails(function () {
  function F() { /* empty */ }
  return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);
});

var ARGS_BUG = !fails(function () {
  nativeConstruct(function () { /* empty */ });
});

var FORCED = NEW_TARGET_BUG || ARGS_BUG;

$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {
  construct: function construct(Target, args /* , newTarget */) {
    aConstructor(Target);
    anObject(args);
    var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
    if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
    if (Target === newTarget) {
      // w/o altered newTarget, optimization for 0-4 arguments
      switch (args.length) {
        case 0: return new Target();
        case 1: return new Target(args[0]);
        case 2: return new Target(args[0], args[1]);
        case 3: return new Target(args[0], args[1], args[2]);
        case 4: return new Target(args[0], args[1], args[2], args[3]);
      }
      // w/o altered newTarget, lot of arguments case
      var $args = [null];
      apply(push, $args, args);
      return new (apply(bind, Target, $args))();
    }
    // with altered newTarget, not support built-in constructors
    var proto = newTarget.prototype;
    var instance = create(isObject(proto) ? proto : ObjectPrototype);
    var result = apply(Target, instance, args);
    return isObject(result) ? result : instance;
  }
});


/***/ }),

/***/ 86650:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var $ = __webpack_require__(74715);
var $trim = (__webpack_require__(21845).trim);
var forcedStringTrimMethod = __webpack_require__(96356);

// `String.prototype.trim` method
// https://tc39.es/ecma262/#sec-string.prototype.trim
$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
  trim: function trim() {
    return $trim(this);
  }
});


/***/ }),

/***/ 45229:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(17265);

module.exports = parent;


/***/ }),

/***/ 4294:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(5122);

module.exports = parent;


/***/ }),

/***/ 85337:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(55538);

module.exports = parent;


/***/ }),

/***/ 2309:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var parent = __webpack_require__(98295);

module.exports = parent;


/***/ }),

/***/ 61846:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

__webpack_require__(89732);
var path = __webpack_require__(29068);

module.exports = path.setInterval;


/***/ }),

/***/ 91245:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var isObject = __webpack_require__(48999);
var classof = __webpack_require__(6648);
var wellKnownSymbol = __webpack_require__(44201);

var MATCH = wellKnownSymbol('match');

// `IsRegExp` abstract operation
// https://tc39.es/ecma262/#sec-isregexp
module.exports = function (it) {
  var isRegExp;
  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');
};


/***/ }),

/***/ 69358:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var $ = __webpack_require__(79989);
var toObject = __webpack_require__(90690);
var nativeKeys = __webpack_require__(20300);
var fails = __webpack_require__(3689);

var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
  keys: function keys(it) {
    return nativeKeys(toObject(it));
  }
});


/***/ }),

/***/ 52003:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var DESCRIPTORS = __webpack_require__(67697);
var globalThis = __webpack_require__(51087);
var uncurryThis = __webpack_require__(68844);
var isForced = __webpack_require__(35266);
var inheritIfRequired = __webpack_require__(33457);
var createNonEnumerableProperty = __webpack_require__(75773);
var create = __webpack_require__(25391);
var getOwnPropertyNames = (__webpack_require__(72741).f);
var isPrototypeOf = __webpack_require__(23622);
var isRegExp = __webpack_require__(91245);
var toString = __webpack_require__(34327);
var getRegExpFlags = __webpack_require__(63477);
var stickyHelpers = __webpack_require__(87901);
var proxyAccessor = __webpack_require__(38055);
var defineBuiltIn = __webpack_require__(11880);
var fails = __webpack_require__(3689);
var hasOwn = __webpack_require__(36812);
var enforceInternalState = (__webpack_require__(618).enforce);
var setSpecies = __webpack_require__(14241);
var wellKnownSymbol = __webpack_require__(44201);
var UNSUPPORTED_DOT_ALL = __webpack_require__(62100);
var UNSUPPORTED_NCG = __webpack_require__(26738);

var MATCH = wellKnownSymbol('match');
var NativeRegExp = globalThis.RegExp;
var RegExpPrototype = NativeRegExp.prototype;
var SyntaxError = globalThis.SyntaxError;
var exec = uncurryThis(RegExpPrototype.exec);
var charAt = uncurryThis(''.charAt);
var replace = uncurryThis(''.replace);
var stringIndexOf = uncurryThis(''.indexOf);
var stringSlice = uncurryThis(''.slice);
// TODO: Use only proper RegExpIdentifierName
var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
var re1 = /a/g;
var re2 = /a/g;

// "new" should create a new object, old webkit bug
var CORRECT_NEW = new NativeRegExp(re1) !== re1;

var MISSED_STICKY = stickyHelpers.MISSED_STICKY;
var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;

var BASE_FORCED = DESCRIPTORS &&
  (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {
    re2[MATCH] = false;
    // RegExp constructor can alter flags and IsRegExp works correct with @@match
    return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';
  }));

var handleDotAll = function (string) {
  var length = string.length;
  var index = 0;
  var result = '';
  var brackets = false;
  var chr;
  for (; index <= length; index++) {
    chr = charAt(string, index);
    if (chr === '\\') {
      result += chr + charAt(string, ++index);
      continue;
    }
    if (!brackets && chr === '.') {
      result += '[\\s\\S]';
    } else {
      if (chr === '[') {
        brackets = true;
      } else if (chr === ']') {
        brackets = false;
      } result += chr;
    }
  } return result;
};

var handleNCG = function (string) {
  var length = string.length;
  var index = 0;
  var result = '';
  var named = [];
  var names = create(null);
  var brackets = false;
  var ncg = false;
  var groupid = 0;
  var groupname = '';
  var chr;
  for (; index <= length; index++) {
    chr = charAt(string, index);
    if (chr === '\\') {
      chr += charAt(string, ++index);
    } else if (chr === ']') {
      brackets = false;
    } else if (!brackets) switch (true) {
      case chr === '[':
        brackets = true;
        break;
      case chr === '(':
        result += chr;
        // ignore non-capturing groups
        if (stringSlice(string, index + 1, index + 3) === '?:') {
          continue;
        }
        if (exec(IS_NCG, stringSlice(string, index + 1))) {
          index += 2;
          ncg = true;
        }
        groupid++;
        continue;
      case chr === '>' && ncg:
        if (groupname === '' || hasOwn(names, groupname)) {
          throw new SyntaxError('Invalid capture group name');
        }
        names[groupname] = true;
        named[named.length] = [groupname, groupid];
        ncg = false;
        groupname = '';
        continue;
    }
    if (ncg) groupname += chr;
    else result += chr;
  } return [result, named];
};

// `RegExp` constructor
// https://tc39.es/ecma262/#sec-regexp-constructor
if (isForced('RegExp', BASE_FORCED)) {
  var RegExpWrapper = function RegExp(pattern, flags) {
    var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);
    var patternIsRegExp = isRegExp(pattern);
    var flagsAreUndefined = flags === undefined;
    var groups = [];
    var rawPattern = pattern;
    var rawFlags, dotAll, sticky, handled, result, state;

    if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {
      return pattern;
    }

    if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {
      pattern = pattern.source;
      if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);
    }

    pattern = pattern === undefined ? '' : toString(pattern);
    flags = flags === undefined ? '' : toString(flags);
    rawPattern = pattern;

    if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {
      dotAll = !!flags && stringIndexOf(flags, 's') > -1;
      if (dotAll) flags = replace(flags, /s/g, '');
    }

    rawFlags = flags;

    if (MISSED_STICKY && 'sticky' in re1) {
      sticky = !!flags && stringIndexOf(flags, 'y') > -1;
      if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');
    }

    if (UNSUPPORTED_NCG) {
      handled = handleNCG(pattern);
      pattern = handled[0];
      groups = handled[1];
    }

    result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);

    if (dotAll || sticky || groups.length) {
      state = enforceInternalState(result);
      if (dotAll) {
        state.dotAll = true;
        state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);
      }
      if (sticky) state.sticky = true;
      if (groups.length) state.groups = groups;
    }

    if (pattern !== rawPattern) try {
      // fails in old engines, but we have no alternatives for unsupported regex syntax
      createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);
    } catch (error) { /* empty */ }

    return result;
  };

  for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {
    proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);
  }

  RegExpPrototype.constructor = RegExpWrapper;
  RegExpWrapper.prototype = RegExpPrototype;
  defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true });
}

// https://tc39.es/ecma262/#sec-get-regexp-@@species
setSpecies('RegExp');


/***/ }),

/***/ 68518:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var DESCRIPTORS = __webpack_require__(67697);
var UNSUPPORTED_DOT_ALL = __webpack_require__(62100);
var classof = __webpack_require__(6648);
var defineBuiltInAccessor = __webpack_require__(62148);
var getInternalState = (__webpack_require__(618).get);

var RegExpPrototype = RegExp.prototype;
var $TypeError = TypeError;

// `RegExp.prototype.dotAll` getter
// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall
if (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {
  defineBuiltInAccessor(RegExpPrototype, 'dotAll', {
    configurable: true,
    get: function dotAll() {
      if (this === RegExpPrototype) return;
      // We can't use InternalStateModule.getterFor because
      // we don't add metadata for regexps created by a literal.
      if (classof(this) === 'RegExp') {
        return !!getInternalState(this).dotAll;
      }
      throw new $TypeError('Incompatible receiver, RegExp required');
    }
  });
}


/***/ }),

/***/ 13440:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var DESCRIPTORS = __webpack_require__(67697);
var MISSED_STICKY = (__webpack_require__(87901).MISSED_STICKY);
var classof = __webpack_require__(6648);
var defineBuiltInAccessor = __webpack_require__(62148);
var getInternalState = (__webpack_require__(618).get);

var RegExpPrototype = RegExp.prototype;
var $TypeError = TypeError;

// `RegExp.prototype.sticky` getter
// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky
if (DESCRIPTORS && MISSED_STICKY) {
  defineBuiltInAccessor(RegExpPrototype, 'sticky', {
    configurable: true,
    get: function sticky() {
      if (this === RegExpPrototype) return;
      // We can't use InternalStateModule.getterFor because
      // we don't add metadata for regexps created by a literal.
      if (classof(this) === 'RegExp') {
        return !!getInternalState(this).sticky;
      }
      throw new $TypeError('Incompatible receiver, RegExp required');
    }
  });
}


/***/ }),

/***/ 9873:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var call = __webpack_require__(22615);
var uncurryThis = __webpack_require__(68844);
var fixRegExpWellKnownSymbolLogic = __webpack_require__(65773);
var anObject = __webpack_require__(85027);
var isNullOrUndefined = __webpack_require__(5726);
var requireObjectCoercible = __webpack_require__(74684);
var speciesConstructor = __webpack_require__(76373);
var advanceStringIndex = __webpack_require__(71514);
var toLength = __webpack_require__(43126);
var toString = __webpack_require__(34327);
var getMethod = __webpack_require__(54849);
var regExpExec = __webpack_require__(66100);
var stickyHelpers = __webpack_require__(87901);
var fails = __webpack_require__(3689);

var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
var MAX_UINT32 = 0xFFFFFFFF;
var min = Math.min;
var push = uncurryThis([].push);
var stringSlice = uncurryThis(''.slice);

// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
// Weex JS has frozen built-in prototypes, so use try / catch wrapper
var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
  // eslint-disable-next-line regexp/no-empty-group -- required for testing
  var re = /(?:)/;
  var originalExec = re.exec;
  re.exec = function () { return originalExec.apply(this, arguments); };
  var result = 'ab'.split(re);
  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
});

var BUGGY = 'abbc'.split(/(b)*/)[1] === 'c' ||
  // eslint-disable-next-line regexp/no-empty-group -- required for testing
  'test'.split(/(?:)/, -1).length !== 4 ||
  'ab'.split(/(?:ab)*/).length !== 2 ||
  '.'.split(/(.?)(.?)/).length !== 4 ||
  // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
  '.'.split(/()()/).length > 1 ||
  ''.split(/.?/).length;

// @@split logic
fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {
  var internalSplit = '0'.split(undefined, 0).length ? function (separator, limit) {
    return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);
  } : nativeSplit;

  return [
    // `String.prototype.split` method
    // https://tc39.es/ecma262/#sec-string.prototype.split
    function split(separator, limit) {
      var O = requireObjectCoercible(this);
      var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT);
      return splitter
        ? call(splitter, separator, O, limit)
        : call(internalSplit, toString(O), separator, limit);
    },
    // `RegExp.prototype[@@split]` method
    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
    //
    // NOTE: This cannot be properly polyfilled in engines that don't support
    // the 'y' flag.
    function (string, limit) {
      var rx = anObject(this);
      var S = toString(string);

      if (!BUGGY) {
        var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
        if (res.done) return res.value;
      }

      var C = speciesConstructor(rx, RegExp);
      var unicodeMatching = rx.unicode;
      var flags = (rx.ignoreCase ? 'i' : '') +
                  (rx.multiline ? 'm' : '') +
                  (rx.unicode ? 'u' : '') +
                  (UNSUPPORTED_Y ? 'g' : 'y');
      // ^(? + rx + ) is needed, in combination with some S slicing, to
      // simulate the 'y' flag.
      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
      if (lim === 0) return [];
      if (S.length === 0) return regExpExec(splitter, S) === null ? [S] : [];
      var p = 0;
      var q = 0;
      var A = [];
      while (q < S.length) {
        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
        var z = regExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);
        var e;
        if (
          z === null ||
          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
        ) {
          q = advanceStringIndex(S, q, unicodeMatching);
        } else {
          push(A, stringSlice(S, p, q));
          if (A.length === lim) return A;
          for (var i = 1; i <= z.length - 1; i++) {
            push(A, z[i]);
            if (A.length === lim) return A;
          }
          q = p = e;
        }
      }
      push(A, stringSlice(S, p));
      return A;
    }
  ];
}, BUGGY || !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);


/***/ }),

/***/ 3362:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ _getPrototypeOf)
/* harmony export */ });
/* harmony import */ var core_js_pure_features_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17013);
/* harmony import */ var core_js_pure_features_instance_bind_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82924);
/* harmony import */ var core_js_pure_features_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10223);



function _getPrototypeOf(t) {
  var _context;
  return _getPrototypeOf = core_js_pure_features_object_set_prototype_of_js__WEBPACK_IMPORTED_MODULE_0__ ? core_js_pure_features_instance_bind_js__WEBPACK_IMPORTED_MODULE_1__(_context = core_js_pure_features_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_2__).call(_context) : function (t) {
    return t.__proto__ || core_js_pure_features_object_get_prototype_of_js__WEBPACK_IMPORTED_MODULE_2__(t);
  }, _getPrototypeOf(t);
}


/***/ }),

/***/ 84441:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ _inherits)
});

// EXTERNAL MODULE: ./node_modules/core-js-pure/full/object/create.js
var create = __webpack_require__(90695);
// EXTERNAL MODULE: ./node_modules/core-js-pure/full/object/define-property.js
var define_property = __webpack_require__(31685);
// EXTERNAL MODULE: ./node_modules/core-js-pure/full/object/set-prototype-of.js
var set_prototype_of = __webpack_require__(17013);
// EXTERNAL MODULE: ./node_modules/core-js-pure/full/instance/bind.js
var bind = __webpack_require__(82924);
;// CONCATENATED MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/setPrototypeOf.js


function _setPrototypeOf(t, e) {
  var _context;
  return _setPrototypeOf = set_prototype_of ? bind(_context = set_prototype_of).call(_context) : function (t, e) {
    return t.__proto__ = e, t;
  }, _setPrototypeOf(t, e);
}

;// CONCATENATED MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/inherits.js



function _inherits(t, e) {
  if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
  t.prototype = create(e && e.prototype, {
    constructor: {
      value: t,
      writable: !0,
      configurable: !0
    }
  }), define_property(t, "prototype", {
    writable: !1
  }), e && _setPrototypeOf(t, e);
}


/***/ }),

/***/ 22310:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ _possibleConstructorReturn)
});

// EXTERNAL MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js
var esm_typeof = __webpack_require__(19623);
;// CONCATENATED MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js
function _assertThisInitialized(e) {
  if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  return e;
}

;// CONCATENATED MODULE: ./node_modules/@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn.js


function _possibleConstructorReturn(t, e) {
  if (e && ("object" == (0,esm_typeof/* default */.Z)(e) || "function" == typeof e)) return e;
  if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
  return _assertThisInitialized(t);
}


/***/ }),

/***/ 31955:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ api)
/* harmony export */ });
/*! js-cookie v3.0.5 | MIT */
/* eslint-disable no-var */
function assign (target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i];
    for (var key in source) {
      target[key] = source[key];
    }
  }
  return target
}
/* eslint-enable no-var */

/* eslint-disable no-var */
var defaultConverter = {
  read: function (value) {
    if (value[0] === '"') {
      value = value.slice(1, -1);
    }
    return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent)
  },
  write: function (value) {
    return encodeURIComponent(value).replace(
      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,
      decodeURIComponent
    )
  }
};
/* eslint-enable no-var */

/* eslint-disable no-var */

function init (converter, defaultAttributes) {
  function set (name, value, attributes) {
    if (typeof document === 'undefined') {
      return
    }

    attributes = assign({}, defaultAttributes, attributes);

    if (typeof attributes.expires === 'number') {
      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);
    }
    if (attributes.expires) {
      attributes.expires = attributes.expires.toUTCString();
    }

    name = encodeURIComponent(name)
      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)
      .replace(/[()]/g, escape);

    var stringifiedAttributes = '';
    for (var attributeName in attributes) {
      if (!attributes[attributeName]) {
        continue
      }

      stringifiedAttributes += '; ' + attributeName;

      if (attributes[attributeName] === true) {
        continue
      }

      // Considers RFC 6265 section 5.2:
      // ...
      // 3.  If the remaining unparsed-attributes contains a %x3B (";")
      //     character:
      // Consume the characters of the unparsed-attributes up to,
      // not including, the first %x3B (";") character.
      // ...
      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
    }

    return (document.cookie =
      name + '=' + converter.write(value, name) + stringifiedAttributes)
  }

  function get (name) {
    if (typeof document === 'undefined' || (arguments.length && !name)) {
      return
    }

    // To prevent the for loop in the first place assign an empty array
    // in case there are no cookies at all.
    var cookies = document.cookie ? document.cookie.split('; ') : [];
    var jar = {};
    for (var i = 0; i < cookies.length; i++) {
      var parts = cookies[i].split('=');
      var value = parts.slice(1).join('=');

      try {
        var found = decodeURIComponent(parts[0]);
        jar[found] = converter.read(value, found);

        if (name === found) {
          break
        }
      } catch (e) {}
    }

    return name ? jar[name] : jar
  }

  return Object.create(
    {
      set,
      get,
      remove: function (name, attributes) {
        set(
          name,
          '',
          assign({}, attributes, {
            expires: -1
          })
        );
      },
      withAttributes: function (attributes) {
        return init(this.converter, assign({}, this.attributes, attributes))
      },
      withConverter: function (converter) {
        return init(assign({}, this.converter, converter), this.attributes)
      }
    },
    {
      attributes: { value: Object.freeze(defaultAttributes) },
      converter: { value: Object.freeze(converter) }
    }
  )
}

var api = init(defaultConverter, { path: '/' });
/* eslint-enable no-var */




/***/ })

},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ __webpack_require__.O(0, [8592], () => (__webpack_exec__(86423)));
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ }
]);