{"version":3,"file":"js/carousel.js","mappings":"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CAC3C,YAAa,YACbC,EAAG,o4BACHD,KAAM,WAEV,EC6PME,YAAa,gCAKNC,EAAe,CAC1B,GAAM,CACJ,CACEZ,MAAO,eACPa,KAAM,4DACNC,MAAO,yBACPC,KAAM,mTAER,CACEf,MAAO,iBACPa,KAAM,4DACNC,MAAO,sBACPC,KAAM,wZAER,CACEf,MAAO,iBACPa,KAAM,8DACNC,MAAO,0CACPC,KAAM,qJAER,CACEf,MAAO,WACPc,MAAO,qEACPC,KAAM,uSACNF,KAAM,oEAER,CACEb,MAAO,WACPc,MAAO,iFACPC,KAAM,8bACNF,KAAM,oEAER,CACEb,MAAO,YACPc,MAAO,uCACPC,KAAM,qHACNF,KAAM,oEAER,CACEb,MAAO,WACPc,MAAO,wCACPC,KAAM,skBACNF,KAAM,oEAER,CACEb,MAAO,UACPc,MAAO,wDACPC,KAAM,mMACNF,KAAM,oEAER,CACEb,MAAO,YACPc,MAAO,mCACPC,KAAM,obACNF,KAAM,oEAER,CACEb,MAAO,YACPc,MAAO,yEACPC,KAAM,ugBACNF,KAAM,oEAER,CACEb,MAAO,kBACPc,MAAO,gCACPC,KAAM,4VACNF,KAAM,6DAER,CACEb,MAAO,aACPc,MAAO,yCACPC,KAAM,sPACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,kCACPC,KAAM,qnBACNF,KAAM,6DAER,CACEb,MAAO,yBACPc,MAAO,0CACPC,KAAM,mJACNF,KAAM,+DAER,CACEb,MAAO,kBACPc,MAAO,2BACPC,KAAM,2oBACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,eACPC,KAAM,gtBACNF,KAAM,6DAER,CACEb,MAAO,mBACPc,MAAO,0CACPC,KAAM,gVACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,iCACPC,KAAM,4iBACNF,KAAM,oEAER,CACEb,MAAO,YACPc,MAAO,kEACPC,KAAM,iRACNF,KAAM,oEAER,CACEb,MAAO,cACPc,MAAO,uBACPC,KAAM,4pBACNF,KAAM,oEAER,CACEb,MAAO,WACPc,MAAO,8CACPC,KAAM,2MACNF,KAAM,oEAER,CACEb,MAAO,kCACPc,MAAO,iCACPC,KAAM,oGACNF,KAAM,oEAER,CACEb,MAAO,aACPc,MAAO,iCACPC,KAAM,6GACNF,KAAM,oEAER,CACEb,MAAO,WACPc,MAAO,iCACPC,KAAM,smBACNF,KAAM,oEAER,CACEb,MAAO,SACPc,MAAO,gDACPC,KAAM,gdACNF,KAAM,oEAER,CACEb,MAAO,WACPc,MAAO,mDACPC,KAAM,6aACNF,KAAM,oEAER,CACEb,MAAO,YACPc,MAAO,4DACPC,KAAM,ibACNF,KAAM,oEAER,CACEb,MAAO,eACPc,MAAO,qDACPC,KAAM,u3BACNF,KAAM,oEAER,CACEb,MAAO,mBACPc,MAAO,2DACPC,KAAM,k7BACNF,KAAM,oEAER,CACEb,MAAO,aACPc,MAAO,uCACPC,KAAM,+kCACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,uCACPC,KAAM,gbACNF,KAAM,6DAER,CACEb,MAAO,wBACPc,MAAO,0CACPC,KAAM,yxBACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,+BACPC,KAAM,2GACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,mCACPC,KAAM,oTACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,yCACPC,KAAM,slBACNF,KAAM,6DAER,CACEb,MAAO,YACPc,MAAO,6BACPC,KAAM,q1BACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,iBACPC,KAAM,w9CACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,6CACPC,KAAM,6DACNF,KAAM,6DAER,CACEb,MAAO,aACPc,MAAO,uCACPC,KAAM,sOACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,+BACPC,KAAM,0FACNF,KAAM,6DAER,CACEb,MAAO,oBACPc,MAAO,uCACPC,KAAM,0KACNF,KAAM,+DAER,CACEb,MAAO,mBACPc,MAAO,sCACPC,KAAM,2MACNF,KAAM,+DAER,CACEb,MAAO,eACPc,MAAO,UACPC,KAAM,4FACNF,KAAM,+DAER,CACEb,MAAO,OACPc,MAAO,oDACPC,KAAM,4IACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,+BACPC,KAAM,iKACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,8BACPC,KAAM,00BACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,4BACPC,KAAM,gLACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,0CACPC,KAAM,mJACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,gCACPC,KAAM,4VACNF,KAAM,6DAER,CACEb,MAAO,aACPc,MAAO,yCACPC,KAAM,sPACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,qCACPC,KAAM,qbACNF,KAAM,+DAER,CACEb,MAAO,kBACPc,MAAO,2BACPC,KAAM,46BACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,qBACPC,KAAM,uRACNF,KAAM,8DAGV,GAAM,CACJ,CACEb,MAAO,UACPa,KAAM,8DACNC,MAAO,kCACPC,KAAM,iJAER,CACEf,MAAO,sBACPa,KAAM,2DACNC,MAAO,wDACPC,KAAM,8JAER,CACEf,MAAO,QACPa,KAAM,4DACNC,MAAO,+DACPC,KAAM,6FAER,CACEf,MAAO,MACPc,MAAO,wCACPC,KAAM,8rBACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,4BACPC,KAAM,gNACNF,KAAM,4DAER,CACEb,MAAO,SACPc,MAAO,0BACPC,KAAM,kIACNF,KAAM,4DAER,CACEb,MAAO,QACPc,MAAO,2CACPC,KAAM,iRACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,wBACPC,KAAM,86BACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,gBACPC,KAAM,6DACNF,KAAM,6DAER,CACEb,MAAO,OACPc,MAAO,+BACPC,KAAM,mKACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,SACPC,KAAM,8GACNF,KAAM,6DAER,CACEb,MAAO,YACPc,MAAO,oBACPC,KAAM,2CACNF,KAAM,6DAER,CACEb,MAAO,mBACPc,MAAO,sCACPC,KAAM,ybACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,oCACPC,KAAM,8kBACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,wCACPC,KAAM,mYACNF,KAAM,6DAER,CACEb,MAAO,iBACPc,MAAO,uCACPC,KAAM,oGACNF,KAAM,6DAER,CACEb,MAAO,uBACPc,MAAO,kBACPC,KAAM,4YACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,qCACPC,KAAM,kLACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,yCACPC,KAAM,oIACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,wBACPC,KAAM,mMACNF,KAAM,+DAER,CACEb,MAAO,YACPc,MAAO,oBACPC,KAAM,qNACNF,KAAM,+DAER,CACEb,MAAO,WACPc,MAAO,iDACPC,KAAM,yUACNF,KAAM,6DAER,CACEb,MAAO,sBACPc,MAAO,2BACPC,KAAM,sIACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,gBACPC,KAAM,qyBACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,oBACPC,KAAM,ioBACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,gCACPC,KAAM,kkBACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,2CACPC,KAAM,mgCACNF,KAAM,6DAER,CACEb,MAAO,sBACPc,MAAO,wDACPC,KAAM,wTACNF,KAAM,6DAER,CACEb,MAAO,sBACPc,MAAO,sBACPC,KAAM,uWACNF,KAAM,6DAER,CACEb,MAAO,YACPc,MAAO,kCACPC,KAAM,0RACNF,KAAM,6DAER,CACEb,MAAO,cACPc,MAAO,0BACPC,KAAM,gKACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,iBACPC,KAAM,0KACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,0BACPC,KAAM,kIACNF,KAAM,6DAER,CACEb,MAAO,cACPc,MAAO,sCACPC,KAAM,uXACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,4BACPC,KAAM,kQACNF,KAAM,6DAER,CACEb,MAAO,uBACPc,MAAO,0CACPC,KAAM,yYACNF,KAAM,6DAER,CACEb,MAAO,QACPc,MAAO,yCACPC,KAAM,4EACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,kCACPC,KAAM,iJACNF,KAAM,+DAER,CACEb,MAAO,eACPc,MAAO,wCACPC,KAAM,8cACNF,KAAM,6DAER,CACEb,MAAO,aACPc,MAAO,4CACPC,KAAM,8MACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,gCACPC,KAAM,+PACNF,KAAM,6DAER,CACEb,MAAO,yBACPc,MAAO,6CACPC,KAAM,2mBACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,2EACPC,KAAM,yiBACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,2CACPC,KAAM,2EACNF,KAAM,6DAER,CACEb,MAAO,eACPc,MAAO,yCACPC,KAAM,6KACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,yCACPC,KAAM,mFACNF,KAAM,6DAER,CACEb,MAAO,WACPc,MAAO,qBACPC,KAAM,6LACNF,KAAM,6DAER,CACEb,MAAO,UACPc,MAAO,wBACPC,KAAM,odACNF,KAAM,6DAER,CACEb,MAAO,WACPc,MAAO,2CACPC,KAAM,qYACNF,KAAM,6DAER,CACEb,MAAO,WACPc,MAAO,uBACPC,KAAM,4GACNF,KAAM,+DAER,CACEb,MAAO,UACPc,MAAO,sBACPC,KAAM,uTACNF,KAAM,6DAER,CACEb,MAAO,kBACPc,MAAO,gBACPC,KAAM,0OACNF,KAAM,8DAGV,GAAM,CACJ,CACEb,MAAO,kBACPa,KAAM,2DACNC,MAAO,0BACPC,KAAM,4IAER,CACEf,MAAO,aACPa,KAAM,4DACNC,MAAO,0CACPC,KAAM,qSAER,CACEf,MAAO,OACPa,KAAM,2DACNC,MAAO,sCACPC,KAAM,sPAER,CACEf,MAAO,6BACPc,MAAO,yBACPC,KAAM,uOACNF,KAAM,4DAER,CACEb,MAAO,8BACPc,MAAO,WACPC,KAAM,gHACNF,KAAM,4DAER,CACEb,MAAO,aACPc,MAAO,oCACPC,KAAM,4EACNF,KAAM,6DAER,CACEb,MAAO,SACPc,MAAO,2BACPC,KAAM,mdACNF,KAAM,6DAER,CACEb,MAAO,c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","sources":["webpack://pcloud-site/webpack/runtime/chunk loaded","webpack://pcloud-site/./src/lib/move.js","webpack://pcloud-site/./src/lib/componentMount.js","webpack://pcloud-site/./new_site/images/pCloudPass/Pricing/documents.svg","webpack://pcloud-site/./new_site/images/pCloudPass/Pricing/trash.svg","webpack://pcloud-site/./new_site/images/pCloudPass/Pricing/business.svg","webpack://pcloud-site/./src/lib/constants.js","webpack://pcloud-site/./src/components/Carousel/TestimonialCard/TestimonialCard.js","webpack://pcloud-site/./src/components/Carousel/RoadmapCard/RoadMapCard.js","webpack://pcloud-site/./src/components/Carousel/images/right-icon.svg","webpack://pcloud-site/./src/components/Carousel/images/left-icon.svg","webpack://pcloud-site/./src/lib/utils.js","webpack://pcloud-site/./src/components/Carousel/Carousel.js","webpack://pcloud-site/./src/exports/carousel.js","webpack://pcloud-site/./node_modules/clsx/dist/clsx.m.js","webpack://pcloud-site/./node_modules/shallowequal/index.js","webpack://pcloud-site/external window \"jQuery\"","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/array/from.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/array/is-array.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/assign.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/define-properties.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/define-property.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptor.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-descriptors.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/get-own-property-symbols.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/object/keys.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/parse-float.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/parse-int.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/symbol.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/symbol/iterator.js","webpack://pcloud-site/./node_modules/@babel/runtime-corejs2/core-js/symbol/to-primitive.js","webpack://pcloud-site/./node_modules/tslib/tslib.es6.mjs","webpack://pcloud-site/webpack/bootstrap","webpack://pcloud-site/webpack/runtime/amd options","webpack://pcloud-site/webpack/runtime/compat get default export","webpack://pcloud-site/webpack/runtime/define property getters","webpack://pcloud-site/webpack/runtime/global","webpack://pcloud-site/webpack/runtime/hasOwnProperty shorthand","webpack://pcloud-site/webpack/runtime/make namespace object","webpack://pcloud-site/webpack/runtime/jsonp chunk loading","webpack://pcloud-site/webpack/runtime/nonce","webpack://pcloud-site/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","const _move = (obj, _attachList) => {\n for (var n in obj) {\n if (obj.hasOwnProperty(n)) {\n for (var k = 0; k < _attachList.length; ++k) {\n if (_attachList[k].list.indexOf(n) != -1) {\n _attachList[k].attach[n] = obj[n];\n }\n }\n }\n }\n}\n\nexport default _move;","// @flow\n\nimport * as React from \"react\";\nimport { createRoot } from 'react-dom/client';\n\nconst usedReactRoots = {};\n\nconst getExistingOrNewRoot = (element: HTMLElement) => {\n // Existing ID or create new unique ID.\n const reactRootId = element.dataset.reactRootId || Math.random().toString(16).slice(2);\n let root = usedReactRoots[reactRootId] || null;\n\n if (root === null) {\n // Save the generated new ID to the element to be reused if we change the props and call this again.\n element.dataset.reactRootId = reactRootId;\n root = createRoot(element);\n }\n\n // Cache the root.\n usedReactRoots[reactRootId] = root;\n\n return {reactRootId , root};\n}\n\nconst componentMount = (render: (props: {}) => React.Node) => (element: HTMLElement, props: {}) => {\n if (!element) {\n return null;\n }\n\n const {reactRootId, root} = getExistingOrNewRoot(element);\n root.render(render(props));\n\n return () => {\n root.unmount();\n delete usedReactRoots[reactRootId];\n };\n};\n\nexport function componentRender(element: HTMLElement, render: React.Element) {\n const {reactRootId, root} = getExistingOrNewRoot(element);\n root.render(render);\n\n return () => {\n root.unmount();\n delete usedReactRoots[reactRootId];\n };\n}\n\nexport default componentMount;\n","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgDocuments(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 64,\n height: 64\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Group 1271\",\n transform: \"translate(-1588 -4920)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n \"data-name\": \"Ellipse 1164\",\n cx: 32,\n cy: 32,\n r: 32,\n transform: \"translate(1588 4920)\",\n fill: \"#0074cc\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 8096\",\n d: \"M1613.883 4944.748a1.156 1.156 0 01-.778-.311 1.086 1.086 0 01-.311-.778 1.062 1.062 0 01.311-.739 1.086 1.086 0 01.778-.311h11.47a1.156 1.156 0 01.778.311 1.062 1.062 0 01.311.739 1.156 1.156 0 01-.311.778 1.086 1.086 0 01-.778.311zm0 5.366a1.156 1.156 0 01-.778-.311 1.086 1.086 0 01-.311-.778 1.062 1.062 0 01.311-.739 1.086 1.086 0 01.778-.311h11.47a1.156 1.156 0 01.778.311 1.062 1.062 0 01.311.739 1.156 1.156 0 01-.311.778 1.086 1.086 0 01-.778.311zm0 5.366a1.156 1.156 0 01-.778-.311 1.062 1.062 0 01-.311-.739 1.156 1.156 0 01.311-.778 1.086 1.086 0 01.778-.311h5.366a1.156 1.156 0 01.778.311 1.086 1.086 0 01.311.778 1.062 1.062 0 01-.311.739 1.086 1.086 0 01-.778.311zm-6.882 7.66a4.936 4.936 0 001.205 3.655 4.8 4.8 0 003.577 1.205h15.747a4.741 4.741 0 003.577-1.205 5.1 5.1 0 001.205-3.655v-22.318a4.9 4.9 0 00-1.205-3.616 4.8 4.8 0 00-3.577-1.205h-15.747a4.741 4.741 0 00-3.577 1.205 5.065 5.065 0 00-1.205 3.616z\",\n fill: \"#fff\"\n }))));\n}\nexport default SvgDocuments;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgTrash(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 64,\n height: 64\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(-1182 -4920)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n \"data-name\": \"Ellipse 1163\",\n cx: 32,\n cy: 32,\n r: 32,\n transform: \"translate(1182 4920)\",\n fill: \"#f73c3c\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 8095\",\n d: \"M1207.156 4968h13.974a3.038 3.038 0 002.159-.72 2.872 2.872 0 00.833-2.121l.871-20.866h2.045a1.15 1.15 0 00.871-.379 1.3 1.3 0 00.379-.871 1.15 1.15 0 00-.379-.871 1.1 1.1 0 00-.871-.379h-25.827a1.074 1.074 0 00-.833.379 1.151 1.151 0 00-.379.871 1.151 1.151 0 00.379.871 1.131 1.131 0 00.833.379h2.083l.871 20.866a3.012 3.012 0 00.8 2.121 3.256 3.256 0 002.191.72zm2.348-4.166a.943.943 0 01-.72-.265 1.139 1.139 0 01-.3-.72l-.417-15.527a.859.859 0 01.265-.682 1.031 1.031 0 01.757-.265 1 1 0 01.72.265.969.969 0 01.3.72l.417 15.527a.859.859 0 01-.265.682 1.22 1.22 0 01-.757.265zm4.62 0a1.031 1.031 0 01-.757-.265.948.948 0 01-.3-.682v-15.527a.887.887 0 01.3-.682 1.031 1.031 0 01.757-.265 1.032 1.032 0 01.757.265.948.948 0 01.3.682v15.527a.887.887 0 01-.3.682 1.031 1.031 0 01-.757.265zm4.62 0a1.032 1.032 0 01-.757-.265.913.913 0 01-.265-.682l.417-15.527a.887.887 0 01.3-.682.943.943 0 01.72-.265 1.032 1.032 0 01.757.265.912.912 0 01.265.682l-.417 15.527a.97.97 0 01-.3.72 1.092 1.092 0 01-.719.227zm-11.285-21.548h3.03v-2.386a1.222 1.222 0 01.3-.8 1.179 1.179 0 01.833-.3h5a1.248 1.248 0 01.833.3 1.085 1.085 0 01.3.8v2.386h2.992v-2.575a3.567 3.567 0 00-1.06-2.727 3.972 3.972 0 00-2.878-.985h-5.415a3.98 3.98 0 00-2.84.985 3.567 3.567 0 00-1.06 2.727v2.575z\",\n fill: \"#fff\"\n }))));\n}\nexport default SvgTrash;","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgBusiness(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 64,\n height: 64\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(-1704 -4800)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n \"data-name\": \"Ellipse 1164\",\n cx: 32,\n cy: 32,\n r: 32,\n transform: \"translate(1704 4800)\",\n fill: \"#53d765\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 8100\",\n d: \"M1735.999 4830.786a51.7 51.7 0 005.473-.266 41.437 41.437 0 005.283-.913 35.111 35.111 0 005.245-1.712v-1.446a4.272 4.272 0 00-1.064-3.2 4.358 4.358 0 00-3.23-1.065h-4.37v-1.408a3.759 3.759 0 00-.988-2.853 4.139 4.139 0 00-2.85-.913h-6.8a4.1 4.1 0 00-2.812.913 3.632 3.632 0 00-1.026 2.853v1.408h-4.409a4.357 4.357 0 00-3.23 1.065 4.33 4.33 0 00-1.064 3.2v1.446a35.11 35.11 0 005.245 1.712 41.435 41.435 0 005.283.913 46.971 46.971 0 005.314.266zm-5.283-8.6v-1.522a1.613 1.613 0 01.494-1.293 1.821 1.821 0 011.33-.457h6.879a1.982 1.982 0 011.368.457 1.748 1.748 0 01.494 1.293v1.522zm-6.385 22.826h23.3a4.3 4.3 0 003.23-1.065 4.33 4.33 0 001.064-3.2v-10.69a41.8 41.8 0 01-6.157 1.712 54.091 54.091 0 01-6 .8v1.179a1.388 1.388 0 01-1.558 1.56h-4.485a1.388 1.388 0 01-1.558-1.56v-1.179a54.09 54.09 0 01-6-.8 39.373 39.373 0 01-6.157-1.712v10.69a4.214 4.214 0 001.064 3.2 4.687 4.687 0 003.258 1.067z\",\n fill: \"#fff\"\n }))));\n}\nexport default SvgBusiness;","import TwitterIcon from \"../../new_site/images/used_by_white/twitter.svg\";\nimport XIcon from \"../../new_site/images/used_by_white/x.svg\";\nimport AdidasIcon from \"../../new_site/images/used_by_white/adidas.svg\";\nimport InstagramIcon from \"../../new_site/images/used_by_white/instagram.svg\";\nimport InstagramIconLight from \"../../new_site/images/used_by_white/instagram_light.svg\";\nimport NikeIcon from \"../../new_site/images/used_by_white/nike.svg\";\nimport CocaColaIcon from \"../../new_site/images/used_by_white/coca-cola.svg\";\nimport UberlaIcon from \"../../new_site/images/used_by_white/uber.svg\";\nimport EtihadlaIcon from \"../../new_site/images/used_by_white/etihad.svg\";\nimport DdbIcon from \"../../new_site/images/used_by_white/ddb.svg\";\nimport PepsiIcon from \"../../new_site/images/used_by_white/pepsi.svg\";\nimport SnapIcon from \"../../new_site/images/used_by_white/snap.svg\";\nimport LinkedinIcon from \"../../new_site/images/used_by_white/linkedin.svg\";\nimport BmwIcon from \"../../new_site/images/used_by_white/bmw.svg\";\nimport ShellIcon from \"../../new_site/images/used_by_white/shell.svg\";\nimport StanfordIcon from \"../../new_site/images/used_by_white/stanford.svg\";\nimport RaiffeisenIcon from \"../../new_site/images/used_by_white/raiffeisen.svg\";\nimport SaatchiIcon from \"../../new_site/images/used_by_white/saatchi.svg\";\n//Roadmap images\nimport SafariRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/safari_extension.svg\";\nimport DocumentsRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/documents.svg\";\nimport TagsRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/tags.svg\";\nimport TrashRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/trash.svg\";\nimport BusinessRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/business.svg\";\nimport FamilyRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/family.svg\";\nimport SecureShareRoadMapIcon from \"../../new_site/images/pCloudPass/Pricing/secure-share.svg\";\n\nexport const colorLogos = [\n {\n retina: \"/images/used_by_color/twitter@2x.png\",\n image: \"/images/used_by_color/twitter.png\",\n },\n {\n retina: \"/images/used_by_color/adidas@2x.png\",\n image: \"/images/used_by_color/adidas.png\",\n },\n {\n retina: \"/images/used_by_color/instagram@2x.png\",\n image: \"/images/used_by_color/instagram.png\",\n },\n {\n retina: \"/images/used_by_color/nike@2x.png\",\n image: \"/images/used_by_color/nike.png\",\n },\n {\n retina: \"/images/used_by_color/coca-cola@2x.png\",\n image: \"/images/used_by_color/coca-cola.png\",\n },\n {\n retina: \"/images/used_by_color/uber@2x.png\",\n image: \"/images/used_by_color/uber.png\",\n },\n {\n retina: \"/images/used_by_color/etihad@2x.png\",\n image: \"/images/used_by_color/etihad.png\",\n },\n {\n retina: \"/images/used_by_color/ddb@2x.png\",\n image: \"/images/used_by_color/ddb.png\",\n },\n {\n retina: \"/images/used_by_color/pepsi@2x.png\",\n image: \"/images/used_by_color/pepsi.png\",\n },\n {\n retina: \"/images/used_by_color/snapchat@2x.png\",\n image: \"/images/used_by_color/snapchat.png\",\n },\n {\n retina: \"/images/used_by_color/linkedin@2x.png\",\n image: \"/images/used_by_color/linkedin.png\",\n },\n {\n retina: \"/images/used_by_color/bmw@2x.png\",\n image: \"/images/used_by_color/bmw.png\",\n },\n {\n retina: \"/images/used_by_color/shell@2x.png\",\n image: \"/images/used_by_color/shell.png\",\n },\n {\n retina: \"/images/used_by_color/stanford@2x.png\",\n image: \"/images/used_by_color/stanford.png\",\n },\n {\n retina: \"/images/used_by_color/raiffaisen@2x.png\",\n image: \"/images/used_by_color/raiffaisen.png\",\n },\n {\n retina: \"/images/used_by_color/saatchi@2x.png\",\n image: \"/images/used_by_color/saatchi.png\",\n },\n]\n\nexport const customLogos = [\n {\n image: XIcon,\n },\n {\n image: AdidasIcon,\n },\n {\n image: InstagramIcon,\n },\n {\n image: NikeIcon,\n },\n {\n image: CocaColaIcon,\n },\n {\n image: UberlaIcon,\n },\n {\n image: EtihadlaIcon,\n },\n {\n image: DdbIcon,\n },\n {\n image: PepsiIcon,\n },\n {\n image: SnapIcon,\n },\n {\n image: LinkedinIcon,\n },\n {\n image: BmwIcon,\n },\n {\n image: ShellIcon,\n },\n {\n image: StanfordIcon,\n },\n {\n image: RaiffeisenIcon,\n },\n {\n image: SaatchiIcon,\n },\n];\n\nexport const barLogos = [\n {\n image: InstagramIconLight,\n },\n {\n image: NikeIcon,\n },\n {\n image: CocaColaIcon,\n },\n {\n image: XIcon,\n },\n {\n image: UberlaIcon,\n },\n {\n image: AdidasIcon,\n },\n {\n image: PepsiIcon,\n },\n {\n image: DdbIcon,\n },\n {\n image: RaiffeisenIcon,\n },\n {\n image: SnapIcon,\n },\n {\n image: StanfordIcon,\n },\n {\n image: ShellIcon,\n },\n {\n image: EtihadlaIcon,\n },\n {\n image: BmwIcon,\n },\n {\n image: LinkedinIcon,\n }\n];\n\nexport const darkLogos = [\n {\n retina: \"/images/used_by_dark/twitter@2x.png\",\n image: \"/images/used_by_dark/twitter.png\",\n },\n {\n retina: \"/images/used_by_dark/adidas@2x.png\",\n image: \"/images/used_by_dark/adidas.png\",\n },\n {\n retina: \"/images/used_by_dark/instagram@2x.png\",\n image: \"/images/used_by_dark/instagram.png\",\n },\n {\n retina: \"/images/used_by_dark/nike@2x.png\",\n image: \"/images/used_by_dark/nike.png\",\n },\n {\n retina: \"/images/used_by_dark/coca-cola@2x.png\",\n image: \"/images/used_by_dark/coca-cola.png\",\n },\n {\n retina: \"/images/used_by_dark/uber@2x.png\",\n image: \"/images/used_by_dark/uber.png\",\n },\n {\n retina: \"/images/used_by_dark/etihad@2x.png\",\n image: \"/images/used_by_dark/etihad.png\",\n },\n {\n retina: \"/images/used_by_dark/ddb@2x.png\",\n image: \"/images/used_by_dark/ddb.png\",\n },\n {\n retina: \"/images/used_by_dark/pepsi@2x.png\",\n image: \"/images/used_by_dark/pepsi.png\",\n },\n {\n retina: \"/images/used_by_dark/snap@2x.png\",\n image: \"/images/used_by_dark/snap.png\",\n },\n {\n retina: \"/images/used_by_dark/linkedin@2x.png\",\n image: \"/images/used_by_dark/linkedin.png\",\n },\n {\n retina: \"/images/used_by_dark/bmw@2x.png\",\n image: \"/images/used_by_dark/bmw.png\",\n },\n {\n retina: \"/images/used_by_dark/shell@2x.png\",\n image: \"/images/used_by_dark/shell.png\",\n },\n {\n retina: \"/images/used_by_dark/stanford@2x.png\",\n image: \"/images/used_by_dark/stanford.png\",\n },\n {\n retina: \"/images/used_by_dark/raiffeisen@2x.png\",\n image: \"/images/used_by_dark/raiffeisen.png\",\n },\n {\n retina: \"/images/used_by_dark/saatchi@2x.png\",\n image: \"/images/used_by_dark/saatchi.png\",\n },\n]\n\nexport const roadmap = [\n // \"en\": [\n {\n title: \"roadmap_ppass_head_bin\",\n icon: TrashRoadMapIcon,\n description: \"roadmap_ppass_body_bin\"\n },\n { \n title: \"roadmap_ppass_head_image\",\n icon: DocumentsRoadMapIcon,\n description: \"roadmap_ppass_body_image\"\n },\n { \n title: \"roadmap_ppass_head_business\",\n icon: BusinessRoadMapIcon,\n description: \"roadmap_ppass_body_business\"\n }\n // ]\n ];\n\nexport const testimonials = {\n \"en\": [\n {\n title: \"Alan MacLeod\",\n href: \"https://www.trustpilot.com/users/61853559afe9fd00120b259e\",\n quote: \"Very happy with pCloud\",\n text: \"I've been using pCloud for a number of years, first as a free user, now as a lifetime, 2TB user. I use Windows, Mac, Linux (both GUI and CLI), and Android clients and all have been excellent. Knowing my data is secure and transparently accessible for all of the OSes I use are must-have features for me.\",\n },\n {\n title: \"Éamonn Herlihy\",\n href: \"https://www.trustpilot.com/users/588e45130000ff000a71a038\",\n quote: \"In praise of pCloud\",\n text: \"I was attracted both by the many features of their service and also because, at the time, they were one of the few providers offering a lifetime enrolment option. I have never regretted my decision. Based on my personal experience, I would have absolutely no hesitation in recommending them to anyone needing good, reliable, online storage of important files and equally reliable support whenever needed.\",\n },\n {\n title: \"François Gouin\",\n href: \"https://www.trustpilot.com/reviews/61968094f23cf7242d9c4d70\",\n quote: \"2 years on PCloud and would not change.\",\n text: \"Cheap, efficient and the custumer service is really great and quick to answer. One lifetime fee and you have one of the best could on the market.\",\n },\n {\n title: \"Danny B.\",\n quote: \"\\\"pCloud is the All-Around Best Cloud File Sharing/Backup Service!\\\"\",\n text: \"I share folders with clients. With pCloud, they don't need an account and the amount of space I have (4 TBs) is the only thing affected by any folder I share with them.Also, it's usable across my Windows, Android, and iOS devices. I can see all my saved files no matter what device I'm using.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4928733\"\n },\n {\n title: \"Tessa B.\",\n quote: \"\\\"pCloud keeping our business documents in line and our team on the same page.\\\"\",\n text: \"The fact that it updates as soon as you drop something in to the pCloud and instantly everyone with access can see what you're seeing. It's a great way to stay organized on any computer from anywhere. It's easy to organize as your team has full control of how you want to set up your pCloud system. And you can easily share a link to the pCloud with others who may not have access but you want them to see a certain folder of assets or videos.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4706011\"\n },\n {\n title: \"Travis J.\",\n quote: \"\\\"Better solution than Google Drive.\\\"\",\n text: \"It's like google drive but easier to use - easier to send people \\\"upload links\\\" and share folders between people.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-5098225\"\n },\n {\n title: \"Julia P.\",\n quote: \"\\\"Accessing files was never this easy\\\"\",\n text: \"pCloud works very robustly to create a place to store all my files. My favorite feature from this software is the synchronization tool, as I can access my files from multiple devices.I also like that pCloud is very easy to use, as a team and as a singular employee, since it’s easy to access folders that are related to the project I’m working on at the moment, and work faster since I have access to the files. The access features are amazing, and always as customizable as possible, with multiple options of sharing, and with options to customize what users can see and modify.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4227210\"\n },\n {\n title: \"Amit B.\",\n quote: \"\\\"The Best Cloud Service Available with Lifetime Deal\\\"\",\n text: \"- Ease of use- Exceptional customer support- Smooth syncing of data- A public folder that enables you to share files and folders with others- End to end encryption- Another layer of encryption\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4259164\"\n },\n {\n title: \"Dustin S.\",\n quote: \"\\\"The best storage in the cloud!\\\"\",\n text: \"Due to its simple interface, it can use your data in the cloud as if saved on your local hard disk, but without taking space. With PCloud, you can create download and load connections, which can provide anyone for sharing files, is simple to use, simply submit an invite through mail and once users approve your invitation, can use their files in compliance with permissions granted them, you can filter your files via their formats.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3885958\"\n },\n {\n title: \"Nelkis V.\",\n quote: \"\\\"Security and encryption, speed, and excellent price. That is pCloud.\\\"\",\n text: \"In the case of pCloud, it is a modern, simple, and secure tool. pCloud offers a series of features that allow it to stand out from many of its competitors. Offers compatible options with; Windows, Mac, Linux, iOS and Android, also has a website.The communication between the pCloud platform and the users' devices is encrypted. It also has functions to share information with friends and colleagues, through links, where they are granted permission to edit or just view the information, among other security aspects.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3155572\"\n },\n {\n title: \"L. Somasundaram\",\n quote: \"pCloud is a really fantastic…\",\n text: \"pCloud is a really fantastic product/service. It is so easy and intuitive to use. My productivity has improved greatly since I bought the 500 GB lifetime plan. I recently bought another 2 TB. I would like to commend the great customer service. pCloud is way ahead of its competitors. It is expensive but it is definitely worth it. Thanks pCloud!\",\n href: \"https://www.trustpilot.com/users/618cf9abc99e8c0012516383\"\n },\n {\n title: \"Earl Brown\",\n quote: \"Wonderful operation and so easy to use\",\n text: \"Wonderful operation and so easy to use. I like their site format and their excellent customer support. I've got all my stuff stored with them so I can rest easy knowing if my house burns down I still have all my stuff on a secure storage site!\",\n href: \"https://www.trustpilot.com/users/617481a106f68c0012b33b97\"\n },\n {\n title: \"Ed, USA\",\n quote: \"pCloud Knows How to Communicate\",\n text: \"I recently learned about pcloud, downloaded a trial and liked the features. I had some questions about plans and additional capabilities causing me to reach out to their support on two occasions via email.\\n\\nI received a prompt reply on both occasions. In particular, Andrey provided personal, clear, and helpful answers and follow up that addressed my remaining questions, resulting in my purchase.\\n\\nI help technical people to improve their communication skills and appreciate a company that puts a capable technologist and communicator upfront to help consumers. Powerful combination. Kudos pcloud, keep up the good work.\",\n href: \"https://www.trustpilot.com/users/619cda89547f870012d8f625\"\n },\n {\n title: \"François Gouin, Canada\",\n quote: \"2 years on PCloud and would not change.\",\n text: \"Cheap, efficient and the custumer service is really great and quick to answer. One lifetime fee and you have one of the best could on the market\",\n href: \"https://www.trustpilot.com/reviews/61968094f23cf7242d9c4d70\"\n },\n {\n title: \"J.Michael Palka\",\n quote: \"pCloud Drive is Awesome!\",\n text: \"PCloud Drive is something I had wished for, for a long time. Then I discovered it. WOW! I really needed to move a large amount of files (hundreds of GBs) off my harddrive as it was getting full. And the \\\"BEST\\\" solution is pCloud Drive. It is a virtual drive that sits on my desktop and I can just drop folders/files into it. But at all times I can open the drive and see what is there without logging in to some site. I can download any files I might need again. It has a function if you delete a file it is saved in trash for 30 days or you can purchase the function to have it save your deletes for 1 year. Simple, Easy, Effective and Productive.\",\n href: \"https://www.trustpilot.com/users/5bb2cf3c4de5666d34246ecc\"\n },\n {\n title: \"Martin, Germany\",\n quote: \"Recommended!\",\n text: \"I have been using pCloud for about 6 months for my business. It was vital for us to find a partner in Europe, due to GDPR reasons. pCloud has not disappointed and I have been very happy with it from day one.\\n\\nThe customer service is great and consistent (always the same contact person), the menus are intuitive, and it offers a safe and simple way to manage your data - also across systems (Linux, Mac, Windows).\\n\\nThe Crypto option, ensuring extra encryption and safety for important documents, also works very well and is easy to manage.\\n\\nThe shared user/team access could be a bit more intuitive for new users, but once you get the hang of it these options are also easy to manage. I highly recommend pCloud!\",\n href: \"https://www.trustpilot.com/users/615da0591c8cd100128e37a0\"\n },\n {\n title: \"Zereshk, Austria\",\n quote: \"Fast, easy and reliable! Great service.\",\n text: \"I am very well satisfied!\\nWindows and Linux drive clients install fast and work like a charm.\\nSame is true for Android. I can share all necessary files fast, easily and without any hassle.\\nInterfaces are clear and for anyone with some experience in devices and computers very easy to use. Support is responsive, fast and reliable.\",\n href: \"https://www.trustpilot.com/users/6138959854b3900013bee03d\"\n },\n {\n title: \"Egor U.\",\n quote: \"\\\"Just what I was looking for!\\\"\",\n text: \"The pCloud lets you synch, backup, store files with en ease. You get your virtual drive in the Finder and it acts like another folder on your computer. You can purchase military-grade encryption for the Crypto folder. The file synch between you your computer and pCloud online account is SUPER fast! Almost as fast as my Mac! It doesn't feel like cloud storage at all! Has a great iPhone app and a built-in scanner!I now removed Dropbox, Google drives, OneDrive from my Mac, backed them up with pCloud, and doing so also made my RAM usage much less now!\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-5239585\"\n },\n {\n title: \"Tricia B.\",\n quote: \"\\\"Pcloud Is Saving Me From Needing to Upgrade my 2014 Computer!\\\"\",\n text: \"The vast amount of storage room is greatly appreciated! I store all my images, files, and videos with room to spare & I've been using PCloud for years. PCloud was by far the best price for the massive amount of storage offered. I also like the easy file sharing feature!\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-5144244\"\n },\n {\n title: \"Kimberly B.\",\n quote: \"\\\"So much storage!!!\\\"\",\n text: \"I like that PCloud gives plenty of storage. I needed more storage for my photos and videos that students submitted after events, and I knew that a cloud solution would work best. When I found PCloud, I liked that there was a tiered system for storage levels because it is like a competition to get higher and higher tiers. First, I used different email accounts to get higher level tiers so that I could have more storage space. Then, I used the link feature to share the link with all of my students. They uploaded photos and videos from a leadership retreat we took, and I still use those photos for marketing and social media for showing off student involvement.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4705488\"\n },\n {\n title: \"Vince C.\",\n quote: \"\\\"pCloud is a better alternative to DropBox\\\"\",\n text: \"Pcloud is very simple to use. It has an excellent UX that is clear and simple. The system generates links for sharing but it also generates short links. You can also set passwords and blocks on links.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4822995\"\n },\n {\n title: \"User in Non-Profit Organization\",\n quote: \"\\\"Peace of Mind, stay for ever\\\"\",\n text: \"Very reliable cloud storage, you paid the space you need life time and can upgarde when you need.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4868094\"\n },\n {\n title: \"Yasmina E.\",\n quote: \"\\\"Best tool for save and share\\\"\",\n text: \"I like it because you can share it with your team by email, and you can find what they have saved for you!\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4705590\"\n },\n {\n title: \"Lucas G.\",\n quote: \"\\\"Good to improve organization\\\"\",\n text: \"pCloud offers a thousand tools to get started with cloud storage. I think the thing I like most is the multiple sharing options that come with this software, as it allows me to decide whether I want to share files with coworkers or not. It's also a software that comes with organization tools, and everyone in the team can have their own folder that can be personalized according to their work. It's also worth mentioning that pCloud offers a wide accessibility to the cloud in multiple devices, making it easier for our team to share files during work hours, through any device and with the same effectiveness.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-4011019\"\n },\n {\n title: \"Ana A.\",\n quote: \"\\\"This tool is very useful to securely backup\\\"\",\n text: \"The best choice to back up all the necessary cloud records has the free option from which we are able to try the service forever and get 20 GB of storage hastes, It has customers for Windows, Linux and Mac, Ios, iPhone and soon Blackberry and Windows Phone. And its unique feature is backup data on online social networks. PCloud provides various and enticing possibilities, including something which users have always been very concerned about: great security.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3934457\"\n },\n {\n title: \"Bruno D.\",\n quote: \"\\\"pCloud, amazing way to save files in the cloud\\\"\",\n text: \"pCloud allows me to share download links, also provide great security when managing files that are stored in the cloud, also offers an accessible payment plan, has a digital asset management that is very useful, the great advantage of this Software is that you can easily save important files and documents, pCloud also offers an easy-to-use interface, you can also add pCloud as a hard drive that is displayed on my computer.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3478013\"\n },\n {\n title: \"Daichi K.\",\n quote: \"\\\"Store your files securely and easily through the cloud.\\\"\",\n text: \"pCloud Drive is a desktop application that allows us to have a secure virtual drive on our computer, which we can use to easily store, access and work with our files through the cloud. With this smart desktop application it allows us to work with our files as if we were on our computer, but without taking up space on the local disk. It works as a virtual drive, which can expand the available space on the device with up to 2TB.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3820456\"\n },\n {\n title: \"Ana María A.\",\n quote: \"\\\"Easily store all your files in the Pcloud cloud.\\\"\",\n text: \"Today there are many companies that offer collaborative document editing and storage services in the cloud, however, there is one company that offers the best service at the best price, and that is Pcloud. With Pcloud you can store any document regardless of the format in the cloud, in turn you can edit documents simultaneously, this option is ideal for work teams and offices that require changing documents between several workers. Thanks to this software I can save documents in the cloud, and from my office computer, or my smartphone I can review and edit different documents and thus fulfill my work assignments. Pcloud's security is one of the most unbreakable that exists today, and unlike most cloud storage software that offers 1TB of storage, Pcloud offers 2TB of storage. Pcloud is a software that as time goes by is perfected and giving its customers a quality service.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3022550\"\n },\n {\n title: \"Miguel Alberto Z\",\n quote: \"\\\"The best option for storing information in the cloud. \\\"\",\n text: \"Backing up the information issued by our company is one of the most important tasks I have as a programmer in the company where I work. To achieve this I use several software, but, the most important of this group of software I use is PCLOUD, since its characteristics of information storage in the cloud, with great support for multiple types of file formats, its security, expressed in two-step authentication codes and encryption of the information you host in the cloud, and its extensions to link files hosted in social network accounts and emails make it one of the most competitive software currently on the market. Quickly and easily you can create your session in Pcloud, and start using this software with 10 gb free, or paid version, where you will have various plans, including 500 gb and 2 tb. The customer service is at your disposal 24 hours a day, and always answer any questions or problems that arise when using this software\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-2955439\"\n },\n {\n title: \"Emre Demir\",\n quote: \"Good service for reasonable pricing!\",\n text: \"I have been using pcloud for over a year and overall I am very happy with their service and support.\\nEven after reading all the bad reviews, I start to appreciate more and more what pcloud is providing as a service to all of its users.\\nLike a Lifetime package for couple of hundred bucks? I don't trust it by myself and rather pay year after year. Gives me a better feeling and I will keep pcloud supporting to maintain the apps et cetera. The support is fast in general and until today, I never experienced any major issue like data loss or something else.\\nI have used MEGA, Google Drive, One Drive and Dropbox before and as a IT-business owner I honestly believe pcloud is doing good. They provide a lot of features that others don't have like link branding.\\nFor all the bad reviewers: Don't cry too much. You guys even get offered full refund after months which no company does and still write a bad review. This is really childish and low for an adult to do.\\nTo pCloud: I am very happy with everything and thanks for everything until now. Hope to stay with you guys for couple of years more!\",\n href: \"https://www.trustpilot.com/users/6200b900a1f7570012f3f41b\"\n },\n {\n title: \"Peter Bogert\",\n quote: \"Best of the Bunch for Cloud Services\",\n text: \"I've used four or five other services over the years, including the more popular ones, and pCloud beats them all. One service cost a mint, another has privacy concerns, and a third ended up ruining some documents and making them unreadable. pCloud allows me to simply sync my home MacBook Air to my office Mac mini so that I have all my documents in both places when I need them. No problems at all after a several months of use.\",\n href: \"https://www.trustpilot.com/users/61fc5e5af3524900120737ed\"\n },\n {\n title: \"Alrasheed or Virginia\",\n quote: \"I've always had great experiences with…\",\n text: \"I've always had great experiences with using pCloud as cloud technology storage for my study. The most fascinating thing is, last week, I had strong feeling that this file called Volume System Information was a virus and I decided to delete my account. But I had to contact pCloud Team to explain what this file does because I'm suspicious about it and I need some answers. One of the great pCloud team members her name Sherry, so her clarification and elucidation gave me peace more than ever. As you know these days there are so many malicious activities but I like the way how pCloud works. It has comprehensive security layers that prevent from accessing the account such as two factors authentications. And also you can logout of your pCloud drive in your pc as to keep your data safe.\",\n href: \"https://www.trustpilot.com/users/61fbb82de2c7c20012680852\"\n },\n {\n title: \"Inconnu\",\n quote: \"Pcloud is well working on OS\",\n text: \"Pcloud is well working on many OS I have been using for many weeks including linux, Windows and Android.\",\n href: \"https://www.trustpilot.com/users/61aad22fd70d4700125e5985\"\n },\n {\n title: \"Arend Melissant\",\n quote: \"I have tried many cloud storage…\",\n text: \"I have tried many cloud storage providers, but pcloud is by far the best. Fast, reliable, very good software, cost effective, I could go on and on\\nI use it on Windows, and the ease of using the P drive is so much better than anything the competetion has to offer, try it, I'm sure you will not regret it.\",\n href: \"https://www.trustpilot.com/users/61f83a73afedc20013d849f7\"\n },\n {\n title: \"Andrew\",\n quote: \"I wanted to transfer away from Google…\",\n text: \"I wanted to transfer away from Google Drive, due to Google having access to all my files and costing 12 euro a month!\\n\\nI took a lifetime family subscription with pCloud and could not to be happier. I have had no need at all to contact support, everything just works great on ios/android/windows 10.\\n\\nThe automatic photo upload works just fine on both ios and android. I was able to share folders just fine.\\n\\nPersonally I don't trust the Sync feature. I am sure its fine, but I use a free tool \\\"FreeFileSync\\\" instead so I can see what will be synced.\\n\\nGreat product. Thank you very much!\",\n href: \"https://www.trustpilot.com/users/61f7fa40cd80d90012fa77cf\"\n },\n {\n title: \"Jerome B.\",\n quote: \"Very satisfied for my use.\",\n text: \"I have been a customer of pCloud since 2018. I purchased the 500GB lifetime licence, which I upgraded to 2TB in 2021. Since I purchased the bigger package, I guess you can work out that things have been going well for me.\\nMy usage is pretty basic: just backup of my personal data on my home PC: photos, vidéos, software installers, Microsoft office files etc.\\nI do share occasionally folders with friends, and the process is pretty easy.\\nI wanted a \\\"permanent personal folder\\\" online, so I do not have to pay a yearly subscription like Dropbox etc. I mean for the price of 3 years subscription with Dropbox, you get lifetime with pCloud.\\n(I do use Dropbox too, but my work pays for it).\\nI do not use the crypto folder etc, as I do not really have use for it.\\nI have never had any issue with the product, so I cannot comment on customer support.\",\n href: \"https://www.trustpilot.com/users/53f6118b000064000185f9bd\"\n },\n {\n title: \"LONGLIVEWISDOM\",\n quote: \"pCloud Rocks!!\",\n text: \"Thank you pCloud. I am a pCloud user and very happy with the service provided. I have lots of lifetime storage and use it to store photos and videos which I capture from my Samsung Galaxy Smartphone, photos of flowers, animals, places and people :-).\\nThe truth is a reliable cloud storage provider is always better than simply buying an external storage. The amount of functionality and usability along with reliability and security is unmatched.\\nAnd in this regard pCloud is second to none. In my experience. pCloud is the best cloud storage provider one can buy. Really. The merits are too many to count. Almost everything about pCloud is good, all aspects are fully covered and well executed.\\nI would recommend to try it out first and then gradually subscribe to monthly, then yearly, and as per your need you can even subscribe to lifetime storage options.\\nI don't use it for collaboration or anything of that sort but for personal use only. pCloud overall, considering security, functionality, privacy and quality of service and support is better than all other providers including OneDrive, Google Drive, Dropbox and so on. pCloud is what a cloud storage service should be like.\\nNow I am thinking to buy pCloud crypto, to store my marks sheets and Government IDs although pCloud is already so secure I am not sure if that is needed at all. pCloud own all their servers.\\n\\nThank you pCloud, and thanks for reading,\\nAll the best,\\nWisdom (My virtual name as a good privacy practice)\",\n href: \"https://www.trustpilot.com/users/5e22d61e616781259d837ef2\"\n },\n {\n title: \"Mirko Schieder\",\n quote: \"Excellent and very responsive supportllent\",\n text: \"Quick to respond. And very open to suggestion.\\nA pleasure\",\n href: \"https://www.trustpilot.com/users/61af76413b28030012ca4c37\"\n },\n {\n title: \"Per Asbeck\",\n quote: \"Pcloud good product and good support\",\n text: \"Pcloud has very good products. I have a 2TB/life time now. Until recently I used a free plan for years that work well too.\\nI have experienced very goos support when I accdently got the wrong product. So very happy with company\",\n href: \"https://www.trustpilot.com/users/543395cb00006400018ea96c\"\n },\n {\n title: \"Vineet Singhal\",\n quote: \"Very supportive organization\",\n text: \"Very supportive organization with an excellent product and a wonderful customer service\",\n href: \"https://www.trustpilot.com/users/61aa8eaf34258d00125ad715\"\n },\n {\n title: \"Narek Musakhanyan\",\n quote: \"Just bought 2TB on the Black Friday…\",\n text: \"Just bought 2TB on the Black Friday sale\\nAmazed at the features they provide and how useful and convenient it is, especially requesting files and file/folder sharing.\",\n href: \"https://www.trustpilot.com/reviews/61a63d2861218815444e7a46\"\n },\n {\n title: \"Olivier Lebreton\",\n quote: \"Very efficient and reactive support\",\n text: \"Very efficient and reactive support\\nAfter a problem from my fault, Pcloud support was very reactive and efficient to resolve my error.\\nIn few minutes, after only 2 mails, all was ok, it was perfect.\",\n href: \"https://www.trustpilot.com/reviews/61a634c861218815444e6cda\"\n },\n {\n title: \"Mohammed Ali\",\n quote: \"amazing\",\n text: \"reliable service, awesome speed and good price. bought 2TB lifetime on this black friday.\",\n href: \"https://www.trustpilot.com/reviews/61a3f8a6bd63dda48268127a\"\n },\n {\n title: \"Etam\",\n quote: \"This is a an excellent and all supported product.\",\n text: \"This is a great product. I keep adding terabytes because it solves so many problems to have the cloud storage right there on the desktop.\",\n href: \"https://www.trustpilot.com/users/61a130d631cc4f00126c2ae0\"\n },\n {\n title: \"Nihar Behera\",\n quote: \"Very happy with the purchase\",\n text: \"Very happy with the purchase, Felix from the support team highly recommended, Felix answered all the queries and help with 4TB lifetime storage plan purchase.\",\n href: \"https://www.trustpilot.com/users/5cf7e61bd27f4d80c781be59\"\n },\n {\n title: \"George\",\n quote: \"Fantastic Customer Service!\",\n text: \"I am new to pCloud and am impressed with both the customer service and the pCloud drive functionality. Regarding the customer service, I accidentally purchased the wrong plan and wrote to pCloud to try to resolve it. I received a reply almost immediately and the customer service representative was friendly, helpful, and helped me get the plan I wanted. He even followed up to make sure everything was working as expected. As far as my experience with the pCloud drive goes, I am very happy with how easy it is to use. I have a mac, and it works just like any other local drive, so take no time to get right to work. I was mostly impressed with how fast it was when I worked with a large file in photoshop stored on the drive. While I have not been using pCloud very long, I am quite impressed so far and would recommend it to my friends.\",\n href: \"https://www.trustpilot.com/users/61a0be684d9eb7001264db09\"\n },\n {\n title: \"Pavel Lordov\",\n quote: \"I use pcloud for 3 months\",\n text: \"I use pcloud for 3 months. I like it all. Especially I can view file in pcloud area. And also I want to say about speed load files on pcloud, wery fast working. I recommend.\",\n href: \"https://www.trustpilot.com/users/619d4de0516fc90012477e6e\"\n },\n {\n title: \"François Gouin\",\n quote: \"2 years on PCloud and would not change.\",\n text: \"Cheap, efficient and the custumer service is really great and quick to answer. One lifetime fee and you have one of the best could on the market\",\n href: \"https://www.trustpilot.com/users/5da7c70c501cc23d25af2aec\"\n },\n {\n title: \"L. Somasundaram\",\n quote: \"pCloud is a really fantastic…\",\n text: \"pCloud is a really fantastic product/service. It is so easy and intuitive to use. My productivity has improved greatly since I bought the 500 GB lifetime plan. I recently bought another 2 TB. I would like to commend the great customer service. pCloud is way ahead of its competitors. It is expensive but it is definitely worth it. Thanks pCloud!\",\n href: \"https://www.trustpilot.com/users/618cf9abc99e8c0012516383\"\n },\n {\n title: \"Earl Brown\",\n quote: \"Wonderful operation and so easy to use\",\n text: \"Wonderful operation and so easy to use. I like their site format and their excellent customer support. I've got all my stuff stored with them so I can rest easy knowing if my house burns down I still have all my stuff on a secure storage site!\",\n href: \"https://www.trustpilot.com/users/617481a106f68c0012b33b97\"\n },\n {\n title: \"Victor\",\n quote: \"Always with customer oriented mind\",\n text: \"pCloud not only provides a reliable and secured cloud storage services, but also work anything to solve my problem. When I tell them I cannot download their app from my App Store, they provide apk file in their website. As I explain to them I have difficulty in payment for premium service, their staff acts quickly to provide an alternative method to facilitate my settlement. They always have customer oriented mind. Wonderful work!\",\n href: \"https://www.trustpilot.com/review/pcloud.com?page=2&stars=5\"\n },\n {\n title: \"J.Michael Palka\",\n quote: \"pCloud Drive is Awesome!\",\n text: \"PCloud Drive is something I had wished for, for a long time. Then I discovered it. WOW! I really needed to move a large amount of files (hundreds of GBs) off my harddrive as it was getting full. And the \\\"BEST\\\" solution is pCloud Drive. It is a virtual drive that sits on my desktop and I can just drop folders/files into it. But at all times I can open the drive and see what is there without logging in to some site. I can download any files I might need again. It has a function if you delete a file it is saved in trash for 30 days or you can purchase the function to have it save your deletes for 1 year. And there are other addons depending on your neeeds. Simple, Easy, Effective, Productive. When it comes to my files there are now 3 apps I cannot do without and pCloud Drive is one of them. Once you try it (there is a free version to try it out) you will embrace it as one of your priority apps. Now go check it out immediately.\",\n href: \"https://www.trustpilot.com/users/5bb2cf3c4de5666d34246ecc\"\n },\n {\n title: \"Praveen Gautam\",\n quote: \"Recommend using it\",\n text: \"pCloud is the best cloud service ever. I've started using it recently I got to know about it from ayusanimation youtube\\n\\nIts clearly better than any other cloud service\\nTheir application takes the lowest amount of RAM and works well\\nLastly I can sync my minecraft world :)\",\n href: \"https://www.trustpilot.com/users/61685155cae80900131d4247\"\n }\n ],\n \"fr\": [\n {\n title: \"Olivier\",\n href: \"https://www.trustpilot.com/reviews/612374626e38167b798df0e4\",\n quote: \"Un outil facile d'utilisation !\",\n text: \"Un outil facile d'utilisation. Chaque demande, qu'elle soit avant ou après vente, est traitée et la réponse pertinente. Juste simple et top !\",\n },\n {\n title: \"Mr. Joachim Debarge\",\n href: \"https://fr.trustpilot.com/users/56a1cfeb0000ff0001feb8cf\",\n quote: \"Pour moi, le meilleur produit en rapport qualité/prix\",\n text: \"Le meilleur rapport qualité/prix que j'ai trouvé jusqu'à maintenant.De manière globale, je suis très content de ce service. Personnellement je recommande.\",\n },\n {\n title: \"Alain\",\n href: \"https://www.trustpilot.com/users/60dc359c15e6f90011161377\",\n quote: \"Excellente réactivité support pcloud pour paramétrage région\",\n text: \"J'ai fait l'acquisition de la version pCloud lifetime pour la sauvegarde de mes fichiers.\",\n },\n {\n title: \"JMR\",\n quote: \"Enfin, un cloud sérieux et efficace !\",\n text: \"Bonjour,\\nAprès quelques temps de test, j’ai finalement opté pour un forfait payant.\\nAyant contacté le service client pour diverses informations, je peux confirmer que le service est très réactif et que la personne ayant géré mon dossier a été très courtoise et efficace.\\nCe cloud me semble très pratique et très intuitif.\\nUn véritable plus pour sauvegarder son ordinateur, et cerise sur le gâteau, il est accessible depuis une tablette ou un smartphone.\\nLa synchronisation est hyper rapide.\\nEnfin, les données sont hébergées en Europe, ce qui est rassurant côté confidentialité.\\nDonc, selon moi, la réputation de pCloud est amplement méritée.\\nMerci aux développeurs.\\nBien cordialement.\\nJMR\",\n href: \"https://www.trustpilot.com/users/62004e98eb4e5a00120c652e\"\n },\n {\n title: \"Pascal\",\n quote: \"Nouvel adhérent - Content\",\n text: \"Nouvel adhérent, je suis très content du suivi qui a été donné à mon dossier lorsque j'ai rencontré des difficultés de connexion. Réactivité et excellents conseils, j'ai apprécié et je recommande vivement.\",\n href: \"https://fr.trustpilot.com/users/61928c71d2f5a70012deab95\"\n },\n {\n title: \"Gerard\",\n quote: \"Le sav est très réactif\",\n text: \"Le sav est très réactif, le produit fonctionne correctement et de façon fiable.\\nPour ces raisons je recommande ce fournisseur.\",\n href: \"https://fr.trustpilot.com/users/55e4408f0000ff0001d812b9\"\n },\n {\n title: \"Denis\",\n quote: \"Service en tous points performant et de…\",\n text: \"Service en tous points performant et de bonne qualité. Très bon rapport qualité/prix. Le service client est au rendez-vous. Aucun problème pour avoir un retour rapide à nos questions.\\nLes débits sont très corrects et la disponibilité très bonne.\\nJe conseille vraiment.\",\n href: \"https://www.trustpilot.com/users/61f9a90ff74ca800120d5680\"\n },\n {\n title: \"Alain Chappuis\",\n quote: \"Super stockage rapide\",\n text: \"Hello,\\nvoilà je suis un utilisateur depuis presque un an avec pCloud. Serte j'ai eu des problèmes de synchronisation qui se sont réglés par l'intermédiaire du SAV par email, j'ai utilisé leur logiciel de mise au point pour voir ou le problème était présent. Après une mise à jour de la version pCloud, tout fonctionne.\\nJe travaille entre deux pays; la Suisse et la France avec deux FAI différents, j'ai toujours sous la main une copie exacte de tous mes fichiers que j'ai décider de partager dans leur espace, ce qui est vraiment super. J'ai pris un ABT à vie de 500Go ce qui me suffit pour le volume de mes données, j'ai énormément de programmes PHP puis des photos. Les délais de récupération des données et très rapides, sauf pour la France ou j'ai que 5000bps mais ça fonctionne.\\nDonc en règle générale, je recommande vivement pCloud pour avoir ses fichiers sous la main avec PC, téléphone portable, tablette.\\nBonne journée à tous!\",\n href: \"https://www.trustpilot.com/users/5bfe78845483f4b8a967cb87\"\n },\n {\n title: \"Soufian\",\n quote: \"Great support\",\n text: \"Super Cloud avec un service apres vente excelent et reatif\",\n href: \"https://www.trustpilot.com/users/61f2bb9cb41a7e0013a98547\"\n },\n {\n title: \"Erik\",\n quote: \"très bon service après vente\",\n text: \"très bon service après vente, même les fin de semaine ils m'ont répondu rapidement.\\nPour moi, le transfert est bien soit à 250 Ko/ sec. mon serveur est au USA.\",\n href: \"https://www.trustpilot.com/users/61e728139637ea0012d58e8b\"\n },\n {\n title: \"Ludovic\",\n quote: \"Au top\",\n text: \"Au top.\\nMerci pour votre patience.\\nAu bout de quelques jours le problème est résolu.\\nContinuez comme ça.\",\n href: \"https://www.trustpilot.com/users/61e5406a4eeecd0012a64f3d\"\n },\n {\n title: \"Casa Davy\",\n quote: \"Au top l'équipe..\",\n text: \"Au top l'équipe...\\nSav niquel et rapide\",\n href: \"https://www.trustpilot.com/users/61e19a7b65c2820013acead2\"\n },\n {\n title: \"Jerome Goralczyk\",\n quote: \"PCloud est une excellente solution…\",\n text: \"PCloud est une excellente solution alternative aux autres solutions Cloud moins regardantes sur le respect de la vie privée que j'utilise depuis 1 an. Avec des fonctionnalités qui n'ont rien à envier à ces derniers ! J'ai eu recours à l'assistance suite à une évolution vers Big Sur. J'ai pu avoir une réponse rapide et permettre à PCloud de tourner sous mon nouvel environnement Mac. Merci à l'équipe et bonne continuation pour la suite.\",\n href: \"https://www.trustpilot.com/users/5c607a2bdd5dea15cd650218\"\n },\n {\n title: \"Bellier Didier\",\n quote: \"Très bonne expérience et rapport…\",\n text: \"Très bonne expérience et rapport qualité prix excellent. Sauvegarde en temps réel, restauration très rapide, synchronisation de plusieurs postes en miroir, le tout sécurisé et un service Crypto pour y mettre ses fichiers sensibles. De plus, les photos de mon téléphone sont automatiquement sauvegardées dans un répertoire dédié sur Pcloud, et je peux transférer des fichiers de mon téléphone vers mon PC et vice et versa. Les mises à jour et améliorations sont régulières. Je test ce service depuis plusieurs mois et ai finalement pris un abonnement à vie. Je suis pleinement satisfait !\",\n href: \"https://www.trustpilot.com/users/5edb502238d5460851f0a9c3\"\n },\n {\n title: \"Denis Cazaux\",\n quote: \"J'étais un peu méfiant en rejoignant…\",\n text: \"J'étais un peu méfiant en rejoignant PCloud... j'avais des doutes sur la fiabilité dans le temps... et au bout de 4 ans de pratique je ne peux que me réjouir de faire partie de votre famille...\\nJe ne suis pas un expert en informatique et l'usage de Pcloud est accessible à tout le monde...\\nJe résiste encore pour augmenter mes parts chez Pcloud ... mais jusqu'à quand ? Denis Cazaux\",\n href: \"https://www.trustpilot.com/users/61d7641ee79b5b0012be0a1e\"\n },\n {\n title: \"Henrion Yannis\",\n quote: \"Excellent service le meilleur du Net\",\n text: \"Excellent service le meilleur du Net\\nDe vrais professionnels et d’une correction à toute épreuve\",\n href: \"https://www.trustpilot.com/users/600e0e0e6bf5d70019ed3509\"\n },\n {\n title: \"Yves Guillermo Serpo\",\n quote: \"Professionnel !\",\n text: \"J'ai eu un pb après la mise à jour 'une version et mon pcloud avait disparu sur un de mes ordinateurs ... impossible de réinstaller, toujours un code erreur, je tournais en rond ... le SAV m'a répondu rapidement, on a travaillé sur plusieurs pistes, et enfin on a réglé le pb ! Ils ont été très professionnels, sympas et rassurants, avec en prime des conseils en français ! Bref, je recommande\",\n href: \"https://www.trustpilot.com/users/5c6d4df858082a4baaf7b1a0\"\n },\n {\n title: \"Camille Ferrari\",\n quote: \"Support technique très réactif et…\",\n text: \"Support technique très réactif et soucieux de résoudre les problèmes rencontrés. Bonne communication et bon suivi. Merci pour votre implication et la qualité des vos réponses.\",\n href: \"https://www.trustpilot.com/users/61cb155cddbd960012ad6f7a\"\n },\n {\n title: \"Vincent\",\n quote: \"Gestion des données respectant la vie…\",\n text: \"Gestion des données respectant la vie privée et le droit européen. Bande passante fluide et une offre « à vie » très intéressante\",\n href: \"https://www.trustpilot.com/users/61ca3396c3cd0800125aa7e6\"\n },\n {\n title: \"Pierre\",\n quote: \"Pb de synchronisation\",\n text: \"J'ai contacté le support suite à un problème de synchronisation. Réponse très rapide et très précise. Plusieurs échanges dans la journée jusqu'à la résolution de mon problème. C'est top. Merci\",\n href: \"https://www.trustpilot.com/reviews/61ba2c739f60695a25f5d5cc\"\n },\n {\n title: \"Cedric A.\",\n quote: \"Excellent produit\",\n text: \"Excellent produit, tres fiable et flexible. Un support client qui repond tres rapidement, a l'ecoute et efficace.\\nJe suis utilisateur pCloud depuis maintenant 2 ans et je confirme en etre totalement satisfait.\",\n href: \"https://www.trustpilot.com/reviews/61b855b40b7cbbcbfe0bdf00\"\n },\n {\n title: \"Stéphane\",\n quote: \"Un SAV à l'écoute et actif pour aider au mieux\",\n text: \"Lorsque j'ai eu un problème avec une fonction de pCloud, j'ai eu recours au SAV qui à posé des questions pertinentes et qui m'a proposé des solutions pour résoudre le problème. Au final le problème s'est réglé de lui-même avant l'intervention du SAV. Bref, je suis très satisfait de mon échange, tout comme pCloud en général !\",\n href: \"https://www.trustpilot.com/users/61561119f7f9fc0012da1803\"\n },\n {\n title: \"Nogueira Jean-Louis\",\n quote: \"It’s a very good product\",\n text: \"C’est un très bon produit. L’équipe de support est très efficace et compétente. Je ne regrette pas mon choix d’utiliser ce produit.\",\n href: \"https://www.trustpilot.com/users/6192ab12b1ff8300121a8088\"\n },\n {\n title: \"Christian M.\",\n quote: \"Excellent SAV\",\n text: \"Excellent SAV, très bonne communication, professionnalisme des développeurs… suite à une mauvaise manipulation de ma part - une suppression pour ainsi dire - le problème a rapidement été résolu et mes données récupérées. Je ne peux dès lors que féliciter de tout cœur, toute l’équipe de pCloud qui pendant presque une semaine a travaillé pour récupérer mes données; qui plus est pour une faute commise par négligence par moi-même.\\nJe tiens également à exprimer toute ma gratitude à Pauline, la personne qui a échangé par mail avec moi pendant cette semaine, pour son calme et professionnalisme; cela va de soi que je garderai un très bon souvenir.\\nÀ l’approche des fêtes de fin d’année, je souhaite à toute l’équipe pCloud, de très joyeuses fêtes et une merveilleuse année prochaine pleine de succès.\",\n href: \"https://www.trustpilot.com/users/61acf66bfbeadc00129087bb\"\n },\n {\n title: \"Joseph PIERQUIN\",\n quote: \"Simple & intuitif\",\n text: \"Les interfaces (web & applicative Windows) sont très simples et très intuitives, de quoi vous convaincre définitivement de pas utiliser un NAS chez soi.\\n\\nPas mal de fonctionnalités intéressantes (sauvegarde réseaux sociaux, partage de fichiers/screenshot, espace public etc.) et simple d'utilisation.\\n\\nSupport client par e-mail réactif au final (quand l'email fonctionne - un tchat serait un plus).\\n\\nL'investissement \\\"Lifetime\\\" est normalement vite rentabilisé lorsque l'on compare à la concurrence.\\n\\nDeux points clé à bien comprendre optimiser vos copies: la différence entre pCloud Drive et pCloud Sync et la gestion du cache.\",\n href: \"https://www.trustpilot.com/users/5cd82999083ba95384b4a8a3\"\n },\n {\n title: \"Keneda\",\n quote: \"Ravis des services et du SAV!\",\n text: \"Nous sommes ravis de l'utilisation de Pcloud depuis 2018. Cela nous permet de synchroniser nos travaux au sein d'une petite équipe, c'est vraiment génial et partager des fichiers lourds avec qui nous le souhaitons. Les rares fois où un problème est survenu (arrêt des synchronisations) nous avons reçu une réponse immédiate, en Français, dans un langage compréhensible ce qui n'est pas pour déplaire. Les réponses ont été rapides jusqu'à trouver la solution et résoudre le problème. Pour les familles et les télétravailleurs de petites structures associatives, c'est parfait!\",\n href: \"https://www.trustpilot.com/users/61a543e996193b0012cfe4b3\"\n },\n {\n title: \"Bertrand Barcat\",\n quote: \"Il est un peu tôt pour moi pour évaluer…\",\n text: \"Il est un peu tôt pour moi pour évaluer l'entièreté du service fourni par pCloud car j'ai opté récemment pour pCloud payant. Utilisateur jusqu'alors de Dropbox pour la synchro entre appareils et de Backblaze pour la sauvegarde je peux d'ores et déjà faire le retour suivant :\\n– Sauvegarde efficace et facile à utiliser ;\\n– Pour la synchro et l'utilisation de fichiers et dossiers sur plusieurs ordis, j'ai eu beaucoup plus de mal à comprendre comment faire ;\\n– Mes premiers jours ont été pollués par de très nombreux bugs de mon ordi principal et de pCloud, probablement augmentés par le fait que j'avais toujours une sauvegarde Backblaze active ;\\n– J'ai attendu que toutes mes données soient sauvegardées pour contacter le support, qui a répondu quelques heures plus tard par mail : les instructions étaient simples, bien rédigées et tout est rentré dans l'ordre instantanément, tant du côté de pCloud, qui fonctionne maintenant fluidement, que du côté de mon ordi principal, qui ne bugge plus.\\nJe suis très satisfait.\",\n href: \"https://www.trustpilot.com/users/61a215b1e4fd2d0012f9c0f0\"\n },\n {\n title: \"Mr. Joachim Debarge\",\n quote: \"Pour moi, le meilleur produit en rapport qualité/prix\",\n text: \"Le meilleur rapport qualité/prix que j'ai trouvé jusqu'à maintenant.\\nJ'ai eu dernièrement un problème suite à une réinitialisation de mon PC. Le support a été très réactif, courtois et très clair dans les explications. De manière globale, je suis très content de ce service.\\nPersonnellement je recommande ++\",\n href: \"https://www.trustpilot.com/users/56a1cfeb0000ff0001feb8cf\"\n },\n {\n title: \"Françoise de Domont\",\n quote: \"Satisfaction totale\",\n text: \"Bonjour, j'avais un problème de blocage par mon ordi pour ré-ouvrir le lien que mon fils m'avait envoyé pour voir ses photos. Ce problème a été pris \\\"immédiatement\\\" en charge par vos services, plusieurs contacts toujours positifs et vous m'avez donné la solution = je remercie la rapidité des réponses et la cordialité des messages. MERCI+++ Cordialement\",\n href: \"https://www.trustpilot.com/users/4f4e2f0900006400011513c7\"\n },\n {\n title: \"Jean Picq\",\n quote: \"Cloud performant et SAV réactif\",\n text: \"J'utilise pCloud depuis plus d'un an et j'en suis très content. Un souci de synchronisation cette semaine. Le SAV a été très réactif (malgré le fait que je sois encore en version gratuite) et leur réponse m'a permis de régler le problème rapidement. Aucune donnée perdue. Merci !\",\n href: \"https://www.trustpilot.com/users/618ccfd2b5ebaf0012d3d6e7\"\n },\n {\n title: \"Dominique N\",\n quote: \"Pratique et confortable\",\n text: \"Après 6 mois d'utilisation je suis plus que ravi. J'ai mes données partout ou je vais et plus de souci de sauvegarde. Convivial et bien pensé. Indispensable.\",\n href: \"https://www.trustpilot.com/users/51bd799f00006400013ff762\"\n },\n {\n title: \"Blanes Isabelle\",\n quote: \"Professionnels\",\n text: \"Une bonne écoute, rapides pour la réponse, professionnels, je suis plus que satisfaite du produit et du SAV, je recommande Pcloud souvent, et je recommencerai!\\nMerci!\",\n href: \"https://www.trustpilot.com/users/5b5b1a594de5666d343cb3c9\"\n },\n {\n title: \"Gerard\",\n quote: \"Le sav est très réactif\",\n text: \"Le sav est très réactif, le produit fonctionne correctement et de façon fiable.\\nPour ces raisons je recommande ce fournisseur.\",\n href: \"https://www.trustpilot.com/users/55e4408f0000ff0001d812b9\"\n },\n {\n title: \"Jean-Michel\",\n quote: \"Très satisfait sur tous les aspects\",\n text: \"J'utilise tous les jours mon espace pCloud avec grande satisfaction. Mes données sont toujours disponibles et les outils d'accès efficaces. Le SAV est hyper réactif et très courtois, ce qui est très très appréciable. Je ne regrette pas du tout l'investissement initial pour l'achat de mon espace plutôt que la location mensuelle des autres fournisseurs.\\nContinuez ainsi !\",\n href: \"https://www.trustpilot.com/users/615c575be400e200121e6531\"\n },\n {\n title: \"Silvia Stagnaro\",\n quote: \"Extrême courtoisie e soin\",\n text: \"Grâce à l'extrême courtoisie, au soin et à l'efficacité du support pcloud, j'ai pu surmonter les difficultés liées au paiement d'un produit, dues au blocage de la carte de crédit en raison de la législation anti-fraude italienne... vraiment merci beaucoup\",\n href: \"https://www.trustpilot.com/users/614c607f9ac9e700120bb2fa\"\n },\n {\n title: \"Dominique Orecchioni\",\n quote: \"J'utilise pcloud depuis plusieur et je…\",\n text: \"J'utilise pcloud depuis plusieur et je m'en félicite tous les jours. Quand il y a eu quelques problèmes j'ai eu un contact efficace et de grande qualité car les solutions sont arrivées rapidement.\\nDès lors je recommande ce logiciel à mon entourage mes amis ma famille je n'ai que des retours positifs. J'espère que tout va continuer sur cette ligne là en tout cas c'est ce que je souhaite.\",\n href: \"https://www.trustpilot.com/users/6143df09abbb0f0012dbb793\"\n },\n {\n title: \"Blanc\",\n quote: \"Rien a dire a part que c esf un super…\",\n text: \"Rien a dire a part que c esf un super produit.\\nJamais eu besoin du sav!!\",\n href: \"https://www.trustpilot.com/users/613a22fa8b60e5001215ad57\"\n },\n {\n title: \"Olivier\",\n quote: \"Un outil facile d'utilisation !\",\n text: \"Un outil facile d'utilisation. Chaque demande, qu'elle soit avant ou après vente, est traitée et la réponse pertinente.\\nJuste simple et top !\",\n href: \"https://www.trustpilot.com/reviews/612374626e38167b798df0e4\"\n },\n {\n title: \"Claude Gobez\",\n quote: \"Un pc pCloud la mise en service sans…\",\n text: \"Un pc pCloud la mise en service sans problème.\\nun deuxième pc avec la même adresse mail et le même mot de passe que le premier pc. Le deuxième pc pas reconnu.\\nPourtant dans les explications cela devait fonctionné.\\nAprès une demande en fin de soirée au service technique. Le lendemain matin les deux pc était OK.\\nRapide, efficace, sans demande divers qui font perdre du temps et parfois trop technique pour amateur informatique.\\nMerci à l'équipe technique\",\n href: \"https://www.trustpilot.com/users/610a9538d393de0012ea45e0\"\n },\n {\n title: \"FootSkiLLs\",\n quote: \"Meilleur plateform Cloud Photos !!! 10/10\",\n text: \"L'application est TOP , beaucoup de possibilité, on voit que l’équipe cherche toujours à l’amélioré et aussi a écouter les clients avec leur support qui est super réactif.\\n\\nJe recommande les yeux fermé\",\n href: \"https://www.trustpilot.com/users/60f7b08e5380fe0012a2c7c5\"\n },\n {\n title: \"Julchris Wzk\",\n quote: \"Service et Assistance au top!\",\n text: \"Service et Assistance au top!\\n\\nLe fonctionnement est très simple et j'ai pu très facilement réaliser les sauvegardes que je souhaitais.\\nJ'ai également eu ) faire avec le service technique pour un petit soucis qui a été d'une très grande efficacité!!\",\n href: \"https://www.trustpilot.com/users/60f6779e90d8e0001127fd1d\"\n },\n {\n title: \"Eric Jomtien, Thailand\",\n quote: \"Prix incroyable et synchro hyper rapide...\",\n text: \"j ai acheté la license à vie 500 GO après un petit essai gratuit...et je me suis décidé d'abandonner Google drive... la synchro avec Pcloud est bien plus rapide que la synchro de google drive...et google drive est à 20 euros par an pour seulement 100 GO... Cette idée d abonnement à vie est vraiment incroyable... en espérant que Pcloud ne fermera pas dans quelques années pour cause de faillite... becoz si tout le monde prend l abonnement à vie, je sais pas comment ils vont avoir assez de rentrée d argent chaque année pour l entretien des serveurs... mais bon, longue vie à Pcloud!!! et merci pour votre offre :)\",\n href: \"https://www.trustpilot.com/users/60ed9680c841470011cbd86b\"\n },\n {\n title: \"Romain Habouzit\",\n quote: \"Des fonctionnalités et une prestation globale exemplaire et sûr. BRAVO !\",\n text: \"Plusieurs mails envoyés au support pCloud sur plusieurs jours, des réponses rapides et efficaces à chaque fois pour solutionner plusieurs problèmes différents. Les réponses sont claires, précises, ciblées sur la demande et surtout accessibles.\\nPCloud est aujourd'hui l'un des meilleurs prestataires de Cloud par les fonctionnalités de son service et la sécurité apportées au transit et stockage des données, et l'un des meilleurs par son support client.\\nJe recommande fortement pCloud et suis très satisfait par sa prestation d'une manière globale.\",\n href: \"https://www.trustpilot.com/users/60e40e7269b57a00114a981a\"\n },\n {\n title: \"Julien Bouchard\",\n quote: \"Excellent même avec une version gratuite\",\n text: \"Même avec une version gratuite, leur SAV est tout simplement excellent !\",\n href: \"https://www.trustpilot.com/users/60d46a16edb34f0014bc8b4a\"\n },\n {\n title: \"Jérôme Lesur\",\n quote: \"pCloud sans doute le meilleur service…\",\n text: \"pCloud sans doute le meilleur service du marché.\\nSimple, efficace et sécurisé.\\nTrès bon service client, personnalisé et qui répond même le dimanche !\\nA recommander +++\",\n href: \"https://www.trustpilot.com/users/60866c9409d2ea001985e9c4\"\n },\n {\n title: \"Clément\",\n quote: \"Le produit fonctionne très bien et le…\",\n text: \"Le produit fonctionne très bien et le service client est réactif et sympathique.\",\n href: \"https://www.trustpilot.com/users/606d72040f5ae6001bea3962\"\n },\n {\n title: \"Laurline\",\n quote: \"Tout était parfait\",\n text: \"Tout était parfait, ma demande a été très rapidement traitée, ce moyen d'avoir un espace de stockage sur soi sans qu'il prenne de place sur le pc, est vraiment pratique. Merci! Laurline.\",\n href: \"https://www.trustpilot.com/users/6050f9180e9601001ab477cf\"\n },\n {\n title: \"Rémy T.\",\n quote: \"Un service de qualité\",\n text: \"Bonjour,\\n\\nSuite à un comparatif, j'ai découvert pCloud.\\nTout indiqué que l'on s'intéresse à lui.\\nPersonnellement, j'en suis ravi et même très content.\\n+ Accès aux données à l'identique d'un lecteur interne\\n+ Capacité de stockage en ligne 2To\\n+ Paiement à vie (99ans)\\n+ Cross plateformes\\n- Sur Android, je ne trouve pas l'application encore très intuitif...merci viendra avec le temps\\n\\nMerci au SAV, très agréable et très réactif\\nN'hésitez surtout pas 😉\",\n href: \"https://www.trustpilot.com/users/603dd4f74de76c001a19a93b\"\n },\n {\n title: \"Frédéric\",\n quote: \"j'utilise pcloud depuis quelques années…\",\n text: \"j'utilise pcloud depuis quelques années (licence à vie 2 To+crypto)\\nj'en suis satisfait et je l'ai recommandé à mes clients dont certains ont un abonnement à vie\\nje n'ai eu recours qu'une fois au service clients (pour rapatriement de mes données en Europe) et le nécessaire a été fait\\nje n'ai qu'un seul souci : avoir la certitude de la permanence du service pcloud au fil des années\",\n href: \"https://www.trustpilot.com/users/602688eafc7261001a7a8b6c\"\n },\n {\n title: \"Aristide\",\n quote: \"Excellent service...\",\n text: \"Excellent service, disponibilité maximale, rien à redire. Je recommande sans hésitation !!!! Juste Top!!!\",\n href: \"https://www.trustpilot.com/reviews/601da9e7679d9708d82712e0\"\n },\n {\n title: \"Olivier\",\n quote: \"Retour d'expérience\",\n text: \"Après plusieurs déboires avec dropbox (données supprimées intempestivement par eux, sans espoir de les récupérer), j'utilise maintenant pCloud depuis plus d'un an sur plusieurs postes et je suis TRÉS satisfait de ce service.\\nL'utilisation est simple, complète et transparente.\\nL'aide est complète et claire\",\n href: \"https://www.trustpilot.com/users/60195eebcd1f21001ae54334\"\n },\n {\n title: \"M Brice Ducruix\",\n quote: \"Je recommande\",\n text: \"Je recommande. Cloud provenant d'une société suisse et bon rapport qualité-prix surtout lors de l'achat à vie. Petit bémol, il y a une demande à faire afin que les fichiers soient stockés en Europe et non aux États-Unis par défaut.\",\n href: \"https://www.trustpilot.com/users/5b1853c64de5666d345510d3\"\n }\n ],\n \"de\": [\n {\n title: \"Harald Heinisch\",\n href: \"https://de.trustpilot.com/users/6192ce68badf6d0013a21fbc\",\n quote: \"Alles was man braucht!!\",\n text: \"Vertrauenswürdiger Cloudspeicher aus der Schweiz, somit viel empfehlenswerter puncto Datenschutz als die ganzen amerikanischen Anbieter!\",\n },\n {\n title: \"Michael O.\",\n href: \"https://www.trustpilot.com/users/61a3d661b9f9f50012b3986d\",\n quote: \"Attraktive Preise und schneller Support\",\n text: \"pCloud lockt mit attraktiven Preisen bei den Lifetime-Angeboten. Bisher läuft die Technik zuverlässig. Der Support reagiert sehr schnell und antwortet innerhalb weniger Stunden. Sehr vorteilhaft ist, dass pCloud ein Schweizer Unternehmen ist und die Daten in der EU gehostet werden können.\",\n },\n {\n title: \"Yoko\",\n href: \"https://de.trustpilot.com/users/5c07acd1b37e1f6b229a2ba5\",\n quote: \"Ausgezeichnete Cluod, guter Service\",\n text: \"Lebenslanges Konto ist ja schon was außergewöhnliches! Habe in der Zwischenzeit meine Daten synchronisiert um mir das Leben mit der Datensicherung leichter zu machen. Bis jetzt ist alles Ausgezeichnet. pCloud kann ich momentan sehr empfehlen.\",\n },\n {\n title: \"Wolfgang Siebeck, Thailand\",\n quote: \"Hervorragender Support\",\n text: \"Seit Anfang 2019 bin ich zufriedener Nutzer von Pcloud. Der Service ist unschlagbar. Die Unterstützung von den verschiedensten Plattformen ist genial, ich nutze Pcloud unter Linux, Android und Windows zur vollsten Zufriedenheit.\",\n href: \"https://de.trustpilot.com/users/60f59bb333ff06001154846c\"\n },\n {\n title: \"Viktor Bajenov, Deutschland\",\n quote: \"Mega gut\",\n text: \"Sehr stabile, sichere App, freundliche, selbsterklärende Benutzeroberfläche, sehr gute, nette Service. Danke!\",\n href: \"https://de.trustpilot.com/users/605ceb69a42b24001a4d1e8f\"\n },\n {\n title: \"Dietmar K.\",\n quote: \"Toller Support und bester Service\",\n text: \"Toller Support und bester Service, sehr kundenfreundlich. Vorbildlich !!!\",\n href: \"https://www.trustpilot.com/users/5b4cf99f4de5666d3445e9c3\"\n },\n {\n title: \"Joseph\",\n quote: \"Sehr guter Cloudspeicher\",\n text: \"Seid einigen Jahren verwende ich pCloud um von verschiedenen Geräten auf meine Daten zugreifen zu können. Ich verwende Linux Mint, MacOS und IOS. Seid kurzem verwende ich die Backupfunktion von pCloud. Die Synchronisation erfolgt immer schnell und zuverlässig.\\nVor kurzem benötigte ich technische Unterstützung von pCloud. Die Antwortzeit per E-Mail erfolgte innerhalb von 24 Stunden. Die Hilfsmaßnahmen waren ausführlich beschrieben und waren sofort erfolgreich.\",\n href: \"https://www.trustpilot.com/users/5d85e63a07d952c267f783f8\"\n },\n {\n title: \"Saskia John\",\n quote: \"Sehr schnelle und hilfreiche Antwort…\",\n text: \"Sehr schnelle und hilfreiche Antwort auf meine Fragen! Das ist super und ich empfehle pCloud sehr gerne weiter.\",\n href: \"https://www.trustpilot.com/users/5f3a6d0b37f3e885d4639d7a\"\n },\n {\n title: \"Daniel Hä\",\n quote: \"Super und vor allem sehr schneller…\",\n text: \"Super und vor allem sehr schneller Service. Kann ich nur empfehlen. Meine Daten sind und bleiben sicher gespeichert.\",\n href: \"https://www.trustpilot.com/users/6157106b5880c30012e731c3\"\n },\n {\n title: \"André Pahud\",\n quote: \"Ein Support, wie man ihn sich wünscht\",\n text: \"Problem: Zugriff auf Daten auf war nicht mehr möglich, somit potenzieller Datenverlust befürchtet.\\nLösung: Dank rascher und effektiver Unterstützung funktioniert das Backup nun wieder einwandfrei. Sehr gute Erfahrung mit dem zuvorkommenden und hilfreichen Support gemacht.\",\n href: \"https://www.trustpilot.com/users/610cd33b80d5610012782e20\"\n },\n {\n title: \"Man Farang\",\n quote: \"ich bin SEHR zufrieden...\",\n text: \"ich kann mich nur meinem Vorredner Wolfgang Siebeck (der mich für pcloud geworben hat :-)) anschließen:\\nich bin SEHR zufrieden mit meinem LifeTime Abo...\\nAndroid, Windows, Linux...\",\n href: \"https://www.trustpilot.com/users/61000fcc5c510000121a39a1\"\n },\n {\n title: \"Rupert Mohr\",\n quote: \"Seit geraumer Zeit benutze ich pCloud…\",\n text: \"Seit geraumer Zeit benutze ich pCloud zu meiner vollen Zufriedenheit. Das Fehlen merkwürdiger Einschränkungen, die Unterstützung der unterschiedlichen Betriebssystem, der übersichtliche Aufbau des Dateisystems, sowie die verschiedenen Möglichkeiten die Daten zu speichern (Synchronisierung oder Cloud) macht pCloud flexibel. Erweiterung ist kostengünstig möglich und habe ich natürlich gerne wahrgenommen.\",\n href: \"https://www.trustpilot.com/users/60ffc675f54aad0012de91e7\"\n },\n {\n title: \"Wolfgang Siebeck\",\n quote: \"Hervorragender Support\",\n text: \"Seit Anfang 2019 bin ich zufriedener Nutzer von Pcloud. Der Service ist unschlagbar, anfangs gab es kleine Probleme bei Softwareupdates, aber der Support konnte sehr schnell helfen. Die Unterstützung von den verschiedensten Plattformen ist genial, ich nutze Pcloud unter Linux, Android und Windows zur vollsten Zufriedenheit.\",\n href: \"https://www.trustpilot.com/users/60f59bb333ff06001154846c\"\n },\n {\n title: \"Theo Noetzli\",\n quote: \"kunde wird ernst genommen\",\n text: \"schnelle, sehr detaillierte antworten, man hat sich engagiert um mein problem gekümmert und verschiedene gangbare lösungswege vorgeschlagen. freundliche und der situation angepasste korrekte wortwahl. ich hatte über die ganze problemlösungsperiode eine einzige person als ansprechpartner und nicht jedesmal jemand anders. der kunde wird ernst genommen.\",\n href: \"https://www.trustpilot.com/users/570fdd940000ff000a1774da\"\n },\n {\n title: \"C. H.\",\n quote: \"Ganz toller Support!!!\",\n text: \"Ganz toller Support. Ich war sehr zufrieden mit der Lösung und der Hartnäckigkeit vom Support-Team! Ich kann pCloud nur empfehlen.\\n\\nNach diversen anderen Clouds, mit denen ich nicht zufrieden war, fühle ich mich endlich gut aufgehoben :-)\",\n href: \"https://www.trustpilot.com/users/58402b5d0000ff000a5cedc1\"\n },\n {\n title: \"Erich\",\n quote: \"Bin sehr zufrieden.\",\n text: \"Ich bin nach den ersten Tagen der Nutzung von pCloud sehr zufrieden. Würde sogar sagen, begeistert.\\n\\nDer Plan, mein Archiv - grosse Fotomengen - in die Cloud zu legen ist voll aufgegangen. Technisch gab es überhaupt keine Probleme. Auch mit grösseren Datenmengen. Ich habe noch etliche GB-Daten die ich transferieren werde.\\n\\nAber auch sensible Daten habe ich hochgeladen und mittels dem angebotenen Crypo-Zusatz bearbeitet.\\n\\nMit dem Support habe ausschliesslich gute Erfahrungen gemacht. Etwa 3 Mal hatte ich kontakt, da ich Fragen - keine Probleme - hatte. Selbst während den Osterfeiertagen erhielt ich eine Antwort.\\n\\nIch betrachte mich als \\\"normalen Nutzer\\\" der am liebsten mit Standard Apps und Einrichtungen arbeitet. Aus dieser Sicht kann ich pCloud uneingeschränkt empfehlen. Ob allenfalls IT-Spezialisten höhere/andere Anforderungen haben, kann ich nicht beurteilen.\\n\\nNoch einen Blick auf die Kosten. Ich habe vom Osterangebot Gebrauch gemacht. 2-TB für 400 Euro, Liftime. Bei einem realistischen Szenario von 5 Jahren betragen die Kosten gerade mal 80 Euro p.a. für 2-TB inkl. Crypto-Funktion. Das scheint mit angemessen zu sein. Bei 10 Jahren Nutzung, was bei mir nicht unüblich ist, ist der Preis noch besser.\\n\\nIch bin rundum zufrieden.\",\n href: \"https://www.trustpilot.com/users/606e8a14c61786001b8183d6\"\n },\n {\n title: \"Rafael Studer\",\n quote: \"Hervorragender Service\",\n text: \"Sehr zufrieden.\\nIch hatte eine Tiefpreis-Aktion um einen Tag verpasst. Auf meine E-Mail-Nachfrage, ob da nicht etwas zu machen sei, bekam ich nach wenigen Stunden die Rückmeldung, dass sie mir diese Option auch aktivieren würden. Hervorragender Service - kulant und schnell\",\n href: \"https://www.trustpilot.com/users/5de692db741d5fc31532e484\"\n }\n ],\n \"es\": [\n {\n title: \"Natalia C.\",\n quote: \"\\\"pCloud la mas alta calidad y garantía que existe\\\"\",\n text: \"pCloud es el mejor software que existe cuando se trata de guardar o almacenar archivos de distintas clases en nube, de manera fácil y segura, una de sus virtudes es que el programa no depende completamente de Internet para poder disfrutarlo, lo mejor de esta herramienta es que es de muy fácil uso, y permite guardar información de gran tamaño y de manera eficiente, ademas pCloud cuenta con un sistema de seguridad muy eficiente para evitar cualquier ataque de algún virus, su plataforma de uso es bastante sencilla y completa permitiendo a los usuarios garantizar sus trabajo.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3289191\"\n },\n {\n title: \"Marbán, México\",\n quote: \"Insuperable el mejor\",\n text: \"pCloud es el mejor servicio que he usado, ya que el servicio y la atención son de calidad.\\nEl costo beneficio no tiene rival, estoy muy satisfecho!\",\n href: \"https://es.trustpilot.com/users/60f579cc90d8e0001127866c\"\n },\n {\n title: \"Antonio, España\",\n quote: \"Funciona perfectamente, muy buen solución\",\n text: \"Funciona perfectamente tanto en Mac como en W10. Hasta el momento ninguna queja. El servicio de soporte es rápido y eficaz por lo menos respecto a lo que me toca.\",\n href: \"https://es.trustpilot.com/users/5ba27c564de5666d34cb8063\"\n },\n {\n title: \"Consultant in Accounting\",\n quote: \"\\\"recomendado como mejor web para compartir archivos en linea\\\"\",\n text: \"es un extraordinario sistema para estar conectado en cualquier pc o dispositivo y en cualquier parte. si colocas o subes algo en pcloud, al instante, todos los que estan conectados pueden verlo.\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-5120761\"\n },\n {\n title: \"Juana C.\",\n quote: \"\\\"Almacenamiento para toda la vida\\\"\",\n text: \"pCloud la mejor alternativa para almacenamiento en la nube ya que no se necesita espacio en nuestro computador para sincronizarse en la nube, por lo que tenemos acceso conveniente a los datos en ese \\\"disco en la nube\\\", pero a diferencia de las unidades de red que ya no están disponibles una vez que estamos fuera de la conexión, la unidad pCloud se instala como si fuera una unidad USB e incluso si no tenemos una conexión, aún podemos usar la información debido a su protección de caché\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3703834\"\n },\n {\n title: \"Adrián Meza G., Costa Rica\",\n quote: \"Excelente servicio, seguridad y dedicado servicio al cliente\",\n text: \"El servicio y sus posibilidades son excelentes. Tras adquirirlo tengo seguridad de que mis archivos están bien resguardados y, en lo que respecta a imágenes, con la calidad original intacta, además de tener un respaldo sincronizado de mis carpetas esenciales de trabajo. Lo recomiendo abiertamente.\",\n href: \"https://es.trustpilot.com/users/60f8af8b5380fe0012a35ba8\"\n },\n {\n title: \"Juana C\",\n quote: \"\\\"Almacenamiento para toda la vida\\\"\",\n text: \"pCloud la mejor alternativa para almacenamiento en la nube ya que no se necesita espacio en nuestro computador para sincronizarse en la nube, por lo que tenemos acceso conveniente a los datos en ese \\\"disco en la nube\\\", pero a diferencia de las unidades de red que ya no están disponibles una vez que estamos fuera de la conexión, la unidad pCloud se instala como si fuera una unidad USB e incluso si no tenemos una conexión, aún podemos usar la información debido a su protección de caché\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3703834\"\n },\n {\n title: \"Elena Elizabeth D\",\n quote: \"\\\"El poder del almacenamiento en la nube\\\"\",\n text: \"pCloud es un gran servicio de almacenamiento en la nube que se encargará de a asegurar sus mejores medidas de seguridad que están disponibles para que toda su información esté resguardada y recopilada proporciona acceso a todo su contenido multimedia, incluidas audio, imágenes, documentos, video, copias de seguridad y más, en cualquier lugar, en cualquier momento, en cualquier dispositivo. Ofrece una interfaz muy intuitiva y sencilla de usar, puedes almacenar gran cantidad de información que van desde los 10GB en de forma gratuita (que pueden llegar hasta 20 GB haciendo tareas sencillas como invitar a amigos, compartir la página en las redes sociales etc), el plan de por vida es muy económico en comparación con otras plataformas pudiendo obtener hasta 500 TB de\",\n href: \"https://www.g2.com/products/pcloud/reviews/pcloud-review-3453644\"\n },\n {\n title: \"Cesar H\",\n quote: \"De las mejores en Cloud Storage\",\n text: \"Es una excelente herramienta de almacenamiento en la nube. Te permite streaming de tus videos\",\n href: \"https://www.trustpilot.com/users/61320b9022f3570012127667\"\n },\n ],\n \"ru\": [\n {\n title: \"Dmitriy Kucher, Румыния\",\n quote: \"Лучший сервис\",\n text: \"Лучший сервис, простой и удобный в использовани.\\nРекомендую!!!\",\n href: \"https://trustpilot.com/users/609a3b29845ded00190e6032\"\n },\n {\n title: \"Andrew, Россия\",\n quote: \"Стабильное хранение данных\",\n text: \"Стабильное хранение данных\",\n href: \"https://trustpilot.com/users/615c0a31e400e200121e2c6c\"\n },\n {\n title: \"Емил, Болгария\",\n quote: \"Супер простой в использовании и очень надежный\",\n text: \"Пользуюсь pCloud последние 2 года. Я и моя семья всегда будем благодарны этой замечательной услуге!По сей день мы делаем резервные копии и делимся нашими файлами без особых усилий, и все наши воспоминания доступны где угодно!\",\n href: \"https://trustpilot.com/users/61a5e5bd9004ca0012167154\"\n }\n\n ],\n \"it\": [\n {\n title: \"Blumax78\",\n quote: \"Ottimo servizio\",\n text: \"Ottimo servizio. Veloce e semplice da usare. Lo sto utilizzando da oltre un anno e per ora non ho avuto alcun problema.\",\n href: \"https://it.trustpilot.com/users/5dd45dcd6bc2c816285ac45d\"\n },\n {\n title: \"Alce84\",\n quote: \"Fatto l'abbonamento a vita…\",\n text: \"Fatto l'abbonamento a vita 2tb...semplice, funziona bene e lo consiglio vivamente a tutti.\",\n href: \"https://it.trustpilot.com/users/57d3eee40000ff000a431a98\"\n },\n {\n title: \"Shingi Hyakugei\",\n quote: \"Problema risolto, ottimo servizio cloud\",\n text: \"Dopo aver subito un furto della mia mail gmail, e dopo che mi hanno rubato l'account cloud, facendomelo bloccare non si sa come, l'assistenza eccellente della pcloud ha risolto il problema in 4 giorni, che dire, un servizio da sogno, ve lo consiglio proprio.\",\n href: \"https://it.trustpilot.com/users/5f5fd54b14844e5892a06f5c\"\n },\n {\n title: \"Cliente\",\n quote: \"Ottimo servizio cloud\",\n text: \"Ottimo servizio cloud, ho fatto l'abbonamento a vita da 2T molto conveniente. Ho dovuto rivolgermi all'assistenza per un problema di sincronizzazione delle cartelle con l'app su W10, il tutto è stato risolto in tempi discretamente rapidi molto soddisfatto.\",\n href: \"https://www.trustpilot.com/users/60c303635e8b8c0019ab605d\"\n },\n {\n title: \"Vincenzo Maiello\",\n quote: \"ho installato pcloud su windows7\",\n text: \"ho installato pcloud su windows7. ho un abbonamento a vita. pero' dopo l installazione, il programma non si apre e si richiude automaticamente.\",\n href: \"https://www.trustpilot.com/users/60649a3a4fac64001ad8d667\"\n },\n {\n title: \"Matteo Lanzillo\",\n quote: \"Più che consigliato\",\n text: \"Più che consigliato, telefono arrivato imballato ottimamente e al miglior prezzo sul mercato. Non avevo mai acquistato, prima, uno smartphone su internet perché non mi fidavo, ma Tecnosell è garanzia di qualità\",\n href: \"https://www.trustpilot.com/users/5fbe9d4906deb5001b6dfc1f\"\n },\n ],\n \"pt\": [\n {\n title: \"Francisco\",\n quote: \"Fácil e Intuitivo de usar\",\n text: \"O pCloud é um produto/serviço realmente fantástico. É tão fácil e intuitivo de usar. Minha produtividade melhorou muito desde que comprei o plano de vida de 500 GB.\",\n },\n {\n title: \"Rita\",\n quote: \"Muito feliz com o pCloud\",\n text: \"pCloud não só oferece serviços de armazenamento em nuvem confiáveis e seguros. Eles têm sempre uma mente orientada para o cliente. Bom trabalho!\",\n },\n {\n title: \"António\",\n quote: \"2 anos no pCloud e muito contente\",\n text: \"O pCloud é o melhor serviço de armazenamento em nuvem de todos os tempos. É claramente melhor do que qualquer outro serviço cloud. Sua aplicação utiliza a menor quantidade de RAM e funciona perfeitamente. Finalmente, posso sincronizar meu mundo Minecraft\",\n },\n ],\n \"nl\": [\n {\n title: \"Alan MacLeod\",\n quote: \"Erg blij met pCloud\",\n text: \"Ik gebruik pCloud al een aantal jaren, eerst als gratis gebruiker, nu als levenslange gebruiker van 2TB. Ik gebruik Windows, Mac, Linux (zowel GUI als CLI) en Android-clients en ze zijn allemaal uitstekend. Wetend dat mijn gegevens veilig en transparant toegankelijk zijn voor alle besturingssystemen die ik gebruik, is voor mij een onmisbare functie.\",\n href: \"https://www.trustpilot.com/users/61853559afe9fd00120b259e\"\n },\n {\n title: \"Éamonn Herlihy\",\n quote: \"Niets dan lof voor pCloud\",\n text: \" Ik werd aangetrokken door zowel de vele functies van hun service als ook het feit dat ze destijds een van de weinige providers waren die een levenslange abonnementsvorm boden. Ik heb nooit spijt gehad van mijn beslissing. Op basis van mijn persoonlijke ervaring zou ik absoluut niet aarzelen om ze aan iedereen aan te bevelen die goede, betrouwbare, online opslag van belangrijke bestanden en even betrouwbare ondersteuning nodig heeft wanneer dat nodig is.\",\n href: \"https://www.trustpilot.com/users/588e45130000ff000a71a038\"\n },\n {\n title: \"François Gouin\",\n quote: \"2 jaar PCloud en wil niet anders\",\n text: \"Goedkoop, efficiënt en de klantenservice is echt geweldig en snel met antwoorden. Eén levenslange betaling en je hebt één van de beste oplossingen in de markt.\",\n href: \"https://www.trustpilot.com/reviews/61968094f23cf7242d9c4d70\"\n },\n ],\n \"ja\": [\n {\n title: \"スズキイッセイ\",\n quote: \"\",\n text: \"pCloud、いろいろ遊んでみましたが、かなりいいですね。同期と非同期の切り分けがはっきりしてて、思うように動いてくれるので、全然ストレスがないです。同期も比較的サクサク動くので、メインPCのドキュメントフォルダをバックアップ指定して同期して、出張ではサブPCでpCloud上のものを編集する、なんて使い方もありですね。使い勝手の点では100点だと思いました。\",\n // href: \"#\"\n },\n {\n title: \"ゆうママ\",\n quote: \"\",\n text: \"こどもがいる家庭にぴったりのサービスだと思います。写真整理が簡単なのと遠方の両親とも共有できるのがありがたいです。ストレージの容量に悩むことも、月々の支払いを考えるストレスもなくなりました。以前より子どもを撮ることが増えたと思います。いつか、子どもが大きくなったときに一緒に振り返るのが楽しみです。買ってよかったです。\",\n // href: \"#\"\n },\n {\n title: \"隅田真人\",\n quote: \"\",\n text: \"Premium Plus 2TBを買い切りで購入しました。以前は他社の月額のプランに加入していましたが、買い切りプランがあるpCloudを選択。月額は終わりのない支払ですから、なるべく変更したかったです。必要な音源が出社時間を活用し聴くことができます。PCでも端末でも利用可能なのでとても重宝しています。\",\n // href: \"#\"\n },\n ],\n \"zh\": [\n {\n title: \"張永言\",\n quote: \"我是超過3年的pCloud用戶。\",\n text: \"我是超過3年的pCloud用戶。已經擁有兩個賬戶:家用版以及商務版的。我可以隨時隨地在兩個帳戶之間共享文件夾,一切都在我的手中。pCloud的加密功能特別好用, 可以加密私人文件並且使用密碼保護我的文檔。\",\n // href: \"#\"\n },\n {\n title: \"夢呤雪\",\n quote: \"pCloud 提供良好的客戶服務以及很多高效的功能。\",\n text: \"就pCloud而言,是現代的、簡易使用的而且很安全的雲儲存的工具。pCloud提供一系列能從衆多競爭對手中脫穎而出的功能。可以在Windows、Mac、Linux、iOS和Android的平臺使用,而且也可以使用網頁版本。\",\n // href: \"#\"\n },\n {\n title: \"柳聆韻\",\n quote: \"我推薦使用pCloud的軟件!\",\n text: \"我已經爲我的業務大約6個月使用了pCloud的服務。由於GDPR的原因,我們在歐洲找到合作伙伴至關重要。客戶服務很棒而且都有解決問題的一貫方法,方案很易懂的。pCloud提供安全簡單的方式來管理您的數據, 而且也可以在不同的操作系統使用(Linux、Mac、Windows)。\",\n // href: \"#\"\n },\n {\n title: \"雲高輝\",\n quote: \"比Google Drive更好的雲儲存軟件。\",\n text: \"價格便宜,效率高,客戶服務非常好,快速回答問題。只要一次付終身費用,就可以擁有市場上最好用的雲儲存app之一。\",\n // href: \"#\"\n },\n {\n title: \"林子祥\",\n quote: \"我推薦使用pCloud的軟件!\",\n text: \"此工具與google drive相似,但pCloud更易於使用,可以簡單地向用戶發送“上傳鏈接”以及在用戶之間共享文件夾。\",\n // href: \"#\"\n },\n {\n title: \"林海月\",\n quote: \"安全性、加密文檔功能、實惠的價格,這就是pCloud。\",\n text: \"應用特點強調易用性-優秀的客戶服務-平穩的數據同步-通過共資料夾可以與他人分享文檔和文件夾。 端到端加密,就是高層的加密功能。\",\n // href: \"#\"\n },\n {\n title: \"程銘文\",\n quote: \"pCloud爲新手提供易於使用,用戶友好的界面。\",\n text: \"由於簡單的界面,它可以像保存在本地硬盤上一樣在雲存儲空間中保存數據,但不佔用設備的空間。\",\n // href: \"#\"\n },\n {\n title: \"趙景幹\",\n quote: \"最好的儲存數據的工具。\",\n text: \"通過pCloud可以同步、備份並簡單地存儲您所有的數據。您可以在訪達中查看虛擬磁盤,它就像你電腦上的另一個文件夾。\",\n // href: \"#\"\n },\n ],\n}","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nconst TestimonialCard = ({\n item,\n background = '#fff',\n titleColor = '#000',\n textColor = '#333333',\n rateColor = '#ffa200',\n}) => {\n\n const [text, setText] = useState(item.text.substr(0, 200));\n useEffect(() => {\n if (item.text.length > 200) {\n // let s = item.text.substr(0,300);\n let matches = item.text.match(/^.{1,200}[.!?]/);\n if (matches != null) {\n if (matches[0].length > 100) {\n setText(matches[0]);\n }\n else {\n setText(item.text.substr(0, 197) + `...`);\n }\n\n }\n else {\n setText(item.text.substr(0, 197) + `...`);\n }\n }\n else {\n setText(item.text);\n }\n }, [])\n\n\n return (\n \n {item != null ?\n \n\n {item.href ?\n {item.title}\n :\n
{item.title}
\n }\n\n
\n \n \n \n \n \n
\n {item.quote ?
{item.quote}
: null}\n
\n
\n {text}\n
\n
\n
\n :\n null\n }\n
\n )\n\n\n}\n\nexport default TestimonialCard;\n\nconst TestimonialWrap = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n min-height: 100%;\n`;\n\nconst Box = styled.div`\n position: relative;\n width: 100%;\n border: none;\n border-radius: 19px;\n margin: 0 10px;\n text-align: center;\n padding: 40px;\n cursor: default;\n box-shadow: 2.1px 2.1px 5px 0 rgb(0 0 0 / 1%);\n background: ${props => props.background};\n white-space: normal;\n\n @media (max-width:768px){\n padding: 40px 20px 0 20px;\n margin: 0 10px;\n }\n\n .monial_name{\n text-decoration: none;\n color: ${props => props.titleColor};\n font-size: 20px;\n font-weight: bold;\n line-height: 1.1;\n }\n\n .monial_quote{\n white-space: normal;\n margin-top: 30px;\n color: ${props => props.textColor};\n font-weight: bold;\n font-size: 20px;\n min-height: 20px;\n display: flex;\n display: -ms-flexbox;\n display: -webkit-flex;\n align-items: center;\n justify-content: center;\n -ms-flex-pack: center;\n @media (max-width:768px){\n margin-top: 20px;\n }\n \n }\n\n .monial_text {\n color: ${props => props.textColor};\n }\n\n .monial_country {\n color: #8b8d8e;\n font-size: 13px;\n /* font-family: Roboto, sans-serif; */\n }\n\n .monial_rate {\n display: table;\n margin: 20px auto 0 auto;\n \n i {\n font-size: 20px;\n line-height: 16px;\n float: left;\n cursor: default;\n font-style: normal;\n letter-spacing: 0px;\n\n &.b-s {\n color: ${props => props.rateColor};\n }\n &.g-s {\n color: ${props => props.rateColor};\n }\n }\n }\n \n .monial_text_wrap {\n padding: 0 20px;\n opacity: 0.5;\n display: block;\n margin: 30px 0 0 0;\n /* font-family: Inter, Roboto; */\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.19;\n letter-spacing: normal;\n text-align: center;\n color: ${props => props.textColor};\n white-space: normal;\n @media (max-width:768px){\n padding: 0 20px;\n }\n\n @media (max-width:425px){\n padding: 0 20px;\n padding-bottom: 10px;\n }\n }\n\n \n`","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { __ } from \"@pcloud/web-utilities/dist/lib/langManager\";\n\nconst RoadmapCard = ({\n item,\n background = '#fff',\n titleColor = '#000',\n textColor = '#333333',\n}) => {\n const [text, setText] = useState(item.description.substr(0, 200));\n\n useEffect(() => {\n if (item.description.length > 200) {\n // let s = item.text.substr(0,300);\n let matches = item.description.match(/^.{1,200}[.!?]/);\n if (matches != null) {\n if (matches[0].length > 100) {\n setText(matches[0]);\n } else {\n setText(item.description.substr(0, 197) + `...`);\n }\n } else {\n setText(item.description.substr(0, 197) + `...`);\n }\n } else {\n setText(item.description);\n }\n }, []);\n\n const Icon = item.icon;\n\n return (\n \n {item ? (\n \n \n {__(item.title)}\n {__(text)}\n \n ) : null }\n \n )\n}\n\nexport default RoadmapCard;\n\nconst RoadmapWrapper = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n min-height: 100%;\n padding: 0px 16px;\n box-sizing: border-box;\n`;\n\nconst Box = styled.div`\n position: relative;\n width: 100%;\n border: none;\n border-radius: 19px;\n text-align: left;\n cursor: default;\n box-shadow: 2.1px 2.1px 5px 0 rgb(0 0 0 / 1%);\n background: ${props => props.background};\n white-space: normal;\n`\n\nconst Title = styled.div`\n text-decoration: none;\n color: ${props => props.titleColor};\n font-size: 20px;\n font-weight: bold;\n line-height: 1.1;\n margin-top: 15px;\n`;\n\nconst Description = styled.div`\n display: block;\n margin: 18px 0 0 0;\n font-family: \"Roboto\", sans-serif;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n line-height: 1.19;\n letter-spacing: normal;\n text-align: left;\n color: ${props => props.textColor};\n white-space: normal;\n`;","var _style, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgRightIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"right-icon_svg__Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n x: 0,\n y: 0,\n viewBox: \"0 0 15.5 26\",\n xmlSpace: \"preserve\"\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \".right-icon_svg__st0{fill:none;stroke:#17bed0;stroke-width:4;stroke-linecap:round;stroke-miterlimit:10}\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"right-icon_svg__st0\",\n d: \"M13.5 13L2 2M2 24l11.5-11\"\n })));\n}\nexport default SvgRightIcon;","var _style, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgLeftIcon(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"left-icon_svg__Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n x: 0,\n y: 0,\n viewBox: \"0 0 15.5 26\",\n xmlSpace: \"preserve\"\n }, props), _style || (_style = /*#__PURE__*/React.createElement(\"style\", null, \".left-icon_svg__st0{fill:none;stroke:#17bed0;stroke-width:4;stroke-linecap:round;stroke-miterlimit:10}\")), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"left-icon_svg__st0\",\n d: \"M2 13L13.5 2M13.5 24L2 13\"\n })));\n}\nexport default SvgLeftIcon;","//@flow\n\nimport {\n DiscountType,\n Userinfo,\n PlanIDType,\n Subscription\n} from \"../lib/types/dataTypes.components\";\n\n// import {\n// ADD_STORAGE_1COUNT_PLAN_ID, \n// ADD_STORAGE_4COUNT_PLAN_ID,\n// MB_PER_STORAGE_COUNT\n// } from \"./plansInfo\";\n\nimport {\n rcookie,\n setcookie,\n hrefSearch\n} from \"@pcloud/web-utilities/dist/lib/utils\";\nimport { __ } from \"@pcloud/web-utilities/dist/lib/langManager\";\nimport { renderQuota } from \"@pcloud/web-utilities/dist/plans/utils.plans\";\n\nimport {\n PREMIUM_PLAN_ID,\n PREMIUM_PLUS_PLAN_ID,\n CUSTOM4TB_PLAN_ID,\n FAMILY2TB_PLAN_ID,\n FAMILY_CUSTOM_PLAN_ID,\n FAMILY_CUSTOM_2COUNT_PLAN_ID,\n FAMILY_CUSTOM_5COUNT_PLAN_ID,\n FAMILY_ADD_1COUNT_PLAN_ID,\n FAMILY_ADD_2COUNT_PLAN_ID,\n FAMILY_ADD_5COUNT_PLAN_ID,\n CUSTOM_PLAN_ID,\n ADD_STORAGE_1COUNT_PLAN_ID,\n ADD_STORAGE_4COUNT_PLAN_ID,\n ADD_STORAGE_8COUNT_PLAN_ID,\n ADD_STORAGE_12COUNT_PLAN_ID,\n ADD_STORAGE_20COUNT_PLAN_ID,\n CUSTOM_20COUNT_PLAN_ID,\n CRYPTO_PLAN_ID,\n EFH_PLAN_ID,\n ADDITIONAL_TRAFFIC_ID,\n MAX_CUSTOM_STORAGE_COUNT,\n MAX_FAMILY_STORAGE_COUNT,\n PASS_PREMIUM_PLAN_ID,\n PASS_FAMILY_PLAN_ID,\n} from \"@pcloud/web-utilities/dist/plans/constants.plans\";\n\nexport {\n rcookie,\n setcookie,\n hrefSearch,\n __,\n renderQuota\n};\n\nexport const removeHrefSearch = (params: Array, forceRefresh?: boolean) => {\n if (params && typeof params == 'string') {\n params = [params];\n }\n\n if (params && params.length && location.search.length) {\n var currentQueriesArr = location.search.substring(1).split('&');\n var currentQueriesMap = {};\n var finalQueriesArr = [];\n var finalURL;\n\n // Create object map with all current search queries\n for (var i in currentQueriesArr) {\n currentQueriesMap[currentQueriesArr[i].split('=').shift()] = currentQueriesArr[i].split('=').pop();\n }\n\n // Delete requested queries\n for (var i in params) {\n if (params[i].split('=').shift() in currentQueriesMap) {\n delete currentQueriesMap[params[i].split('=').shift()];\n }\n }\n\n if (Object.keys(currentQueriesMap).length) {\n for (var i in currentQueriesMap) {\n finalQueriesArr.push(i + '=' + currentQueriesMap[i]);\n }\n\n finalURL = location.origin + location.pathname + '?' + finalQueriesArr.join('&');\n } else {\n finalURL = location.origin + location.pathname;\n }\n\n if (forceRefresh) {\n location = finalURL;\n } else {\n window.history.pushState({}, null, finalURL);\n }\n }\n};\n\nexport const addHrefSearch = (params: Array | string, forceRefresh: boolean, newLocationUrl?: string) => {\n if (!params) {\n return;\n }\n\n let finalURL;\n\n if (typeof params == 'string') {\n params = [params];\n }\n\n if (location.search.length) {\n let oldQueriesArr = location.search.substring(1).split('&');\n let oldQueriesMap = {};\n let givenQueriesMap = {};\n let finalQueriesMap = {};\n let finalQueriesArr = [];\n\n // Create object map with all current search queries\n for (let i in oldQueriesArr) {\n oldQueriesMap[oldQueriesArr[i].split('=').shift()] = oldQueriesArr[i].split('=').pop();\n }\n\n for (let i in params) {\n givenQueriesMap[params[i].split('=').shift()] = params[i].split('=').pop();\n\n // Delete queries which will be duplicated in the end and remove them\n if (params[i].split('=').shift() in oldQueriesMap) {\n delete oldQueriesMap[params[i].split('=').shift()];\n }\n }\n\n finalQueriesMap = Object.assign(oldQueriesMap, givenQueriesMap);\n\n for (let i in finalQueriesMap) {\n finalQueriesArr.push(i + '=' + finalQueriesMap[i]);\n }\n\n finalURL = (newLocationUrl ? newLocationUrl : (location.origin + location.pathname)) + '?' + finalQueriesArr.join('&');\n\n } else {\n // Directly append newly provided params\n finalURL = (newLocationUrl ? newLocationUrl : location.href) + '?' + params.join('&');\n }\n\n if (forceRefresh) {\n location = finalURL;\n } else {\n if (!window.history.state || window.history.state.page != finalURL) {\n window.history.pushState({ \"page\": finalURL }, null, finalURL);\n }\n }\n};\n\nexport const saveToSessionstorage = (label: string, value: any) => {\n if (\n typeof Storage === \"undefined\" ||\n typeof sessionStorage === \"undefined\" ||\n sessionStorage === null\n ) {\n setcookie(label, value, 0);\n } else {\n sessionStorage.setItem(label, value);\n }\n};\n\nexport const signToCurrency = {\n \"$\": \"USD\",\n \"€\": \"EUR\",\n \"₤\": \"GBP\",\n \"BGN\": \"BGN\"\n};\n\nexport const currencyMap = {\n 'USD': '$',\n 'EUR': '€',\n 'GBP': '₤',\n // Used for Vivacom plans only\n 'BGN': 'BGN'\n};\n\nconst _repl = (str: string, repl: {} = {}) => {\n str = _properSpaces(str);\n\n if (!obLength(repl)) {\n return str;\n }\n\n for (var n in repl) {\n str = str.replace(new RegExp(\"%\" + n + \"%\", \"g\"), repl[n]);\n }\n\n return str;\n};\n\nconst _properSpaces = str => {\n return str.split(String.fromCharCode(160)).join(\" \");\n};\n\nexport const obLength = (obj: {}) => {\n var size = 0,\n key;\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n size++;\n }\n }\n return size;\n};\n\ntype getDisabledPlanReasonParams = {\n user: Userinfo,\n forPlan: PlanIDType,\n forPeriod: \"trial\" | \"month\" | \"year\" | \"lifetime\",\n downgradeAllowed?: boolean,\n add500GBAllowed?: boolean,\n trafficCount?: number,\n maxCustomStorageCount?: number\n};\n\nexport const getDisabledPlanReason = ({\n user = {},\n forPlan,\n forPeriod,\n downgradeAllowed,\n add500GBAllowed,\n trafficCount,\n canAddStorage,\n maxCustomStorageCount = MAX_CUSTOM_STORAGE_COUNT,\n maxFamilyStorageCount = MAX_FAMILY_STORAGE_COUNT\n}: getDisabledPlanReasonParams) => {\n if (!user || !forPlan || !forPeriod) {\n return \"\";\n }\n\n const {\n business,\n lastsubscription,\n cryptolifetime,\n plan,\n premium,\n premiumlifetime,\n premiumexpires,\n cryptosubscription,\n efh,\n planparams,\n additionaltraffic,\n additionaltrafficlifetime,\n family,\n passmanagerdata,\n usepassmanagertrial: isfreetrialused\n } = user;\n\n const hasUserInfo = Object.keys(user).length > 0\n let islifetime;\n let isfreetrialactive;\n let passplan;\n let passpremiumexpire;\n let passFamily;\n\n if (passmanagerdata) {\n islifetime = passmanagerdata.islifetime\n isfreetrialactive = passmanagerdata.isfreetrialactive;\n passplan = passmanagerdata.plan;\n passpremiumexpire = passmanagerdata.premiumexpires;\n passFamily = passmanagerdata.family;\n }\n\n if (hasUserInfo) {\n // const {\n // islifetime,\n // istrial: isfreetrialactive,\n // plan: passplan,\n // planexpires: passpremiumexpire\n // } = passmanagerdata\n\n if (business) {\n return (\"business\");\n } else {\n let hasStorageSubscription = premium && !premiumlifetime;\n let hasCryptoSubscription = cryptosubscription;\n let hasSubscriptionPeriod = false;\n let isCanceled = lastsubscription && lastsubscription.status === \"canceled\";\n let incStorage = 0;\n if (!isCanceled && lastsubscription) {\n hasSubscriptionPeriod = lastsubscription.period;\n }\n\n const isCustomPlanId = forPlan === ADD_STORAGE_1COUNT_PLAN_ID || forPlan === ADD_STORAGE_4COUNT_PLAN_ID || forPlan === ADD_STORAGE_8COUNT_PLAN_ID || forPlan === ADD_STORAGE_12COUNT_PLAN_ID || forPlan === ADD_STORAGE_20COUNT_PLAN_ID || forPlan === CUSTOM_20COUNT_PLAN_ID;\n const isFamilyPlanId = forPlan === FAMILY_ADD_1COUNT_PLAN_ID || forPlan === FAMILY_ADD_2COUNT_PLAN_ID || forPlan === FAMILY_ADD_5COUNT_PLAN_ID || forPlan === FAMILY_CUSTOM_2COUNT_PLAN_ID || forPlan === FAMILY_CUSTOM_5COUNT_PLAN_ID;\n\n if (isCustomPlanId || isFamilyPlanId) {\n const parts = forPlan.split(\"_\");\n incStorage = Number(parts[1]);\n forPlan = Number(parts[0]);\n }\n\n if ((!lastsubscription || (hasSubscriptionPeriod && lastsubscription.products.indexOf(forPlan) === -1) && !downgradeAllowed) && forPeriod != \"lifetime\") {\n if (hasStorageSubscription && plan) {\n if (plan == forPlan && hasStorageSubscription == forPeriod) {\n return (\"current_plan\");\n } else if (plan > forPlan) {\n return (\"lower_plan\");\n }\n } else if (efh && forPlan === EFH_PLAN_ID) {\n return (\"current_plan\");\n } else if (additionaltraffic && forPlan == ADDITIONAL_TRAFFIC_ID) {\n if (!additionaltrafficlifetime && planparams.additionaltraffic == trafficCount) {\n return (\"current_plan\");\n } else if (planparams.additionaltraffic > trafficCount) {\n return (\"traffic_downgrade_restriction\");\n }\n }\n } else if (!lastsubscription && forPeriod === \"lifetime\" && hasStorageSubscription && plan && plan > forPlan) {\n return (\"lower_plan\");\n } else if (plan && hasStorageSubscription && hasSubscriptionPeriod && lastsubscription.products.indexOf(plan) === -1 && forPeriod != \"lifetime\" && !downgradeAllowed) {\n if (forPlan == plan) {\n return (\"current_plan\");\n } else if (plan > forPlan) {\n return (\"lower_plan\");\n }\n }\n\n // Buying Crypto\n if (forPlan == CRYPTO_PLAN_ID) {\n if (cryptolifetime) {\n return (\"crypto_lifetime\");\n } else if (hasSubscriptionPeriod && !hasCryptoSubscription) {\n if (hasCryptoSubscription == \"month\" && forPeriod == \"month\") {\n return (\"current_plan\");\n } else if (hasSubscriptionPeriod == \"year\" && forPeriod == \"month\") {\n return (\"lower_period\");\n }\n } else if (\n hasCryptoSubscription &&\n hasSubscriptionPeriod &&\n isCanceled == false\n ) {\n if (hasSubscriptionPeriod == \"month\" && forPeriod == \"month\") {\n return (\"current_plan\");\n } else if (hasSubscriptionPeriod == \"year\") {\n if (forPeriod == \"month\") {\n return (\"lower_period\");\n } else if (forPeriod == \"year\") {\n return (\"current_plan\");\n }\n }\n }\n } else if (forPlan == EFH_PLAN_ID) {\n if (efh) {\n if (hasSubscriptionPeriod == forPeriod) {\n return (\"current_plan\");\n } else if (hasSubscriptionPeriod == \"year\") {\n if (forPeriod == \"month\") {\n return (\"lower_period\");\n }\n }\n }\n // Buying Traffic\n } else if (forPlan == ADDITIONAL_TRAFFIC_ID) {\n if (plan === CUSTOM4TB_PLAN_ID) {\n return (\"custom_subscription\");\n } else if (forPeriod === \"lifetime\" && !premiumlifetime) {\n return \"traffic_lifetime_restriction\";\n } else if (plan == FAMILY2TB_PLAN_ID || plan == FAMILY_CUSTOM_PLAN_ID) {\n return \"custom_subscription\";\n } else if (forPeriod !== \"lifetime\" && additionaltrafficlifetime) {\n return \"traffic_lifetime_restriction_subs\";\n } else if (forPeriod === \"month\" && hasSubscriptionPeriod == \"year\" && (!downgradeAllowed || lastsubscription.billingprovider === 11)) {\n return (\"traffic_downgrade_restriction\");\n } else if (additionaltraffic && !additionaltrafficlifetime && (forPeriod === \"month\" || forPeriod === \"year\") && planparams.additionaltraffic == trafficCount && forPeriod === hasSubscriptionPeriod) {\n return (\"current_plan\");\n } else if (additionaltrafficlifetime && forPeriod === \"lifetime\" && planparams.additionaltraffic == trafficCount) {\n return (\"current_plan\");\n } else if (additionaltraffic && planparams.additionaltraffic > trafficCount && ((forPeriod === hasSubscriptionPeriod && !downgradeAllowed) || (forPeriod === \"lifetime\" && additionaltrafficlifetime))) {\n return (\"traffic_lifetime_restriction_subs\");\n }\n // Buying Pass\n } else if (forPlan == PASS_PREMIUM_PLAN_ID) {\n if ((isfreetrialactive && forPeriod === \"trial\") || (islifetime && forPeriod === \"lifetime\" && passplan === 1)) {\n return (\"current_plan\");\n } else if (passmanagerdata && forPeriod === \"free\") {\n return (\"current_active_plan\");\n } else if (isfreetrialused && forPeriod === 'trial') {\n return \"plan_upgrade_restrictions\";\n } else if ((islifetime && forPeriod != \"lifetime\") || passplan === 2) {\n return (\"custom_subscription\");\n // } else if (!emailverified) {\n // return (\"verify_email\")\n } else if (lastsubscription && !isCanceled) {\n if (lastsubscription.planid) {\n let activePlanId = lastsubscription.planid;\n let activePlanPeriod = lastsubscription.period;\n if (activePlanId === forPlan) {\n if (activePlanPeriod === forPeriod) {\n return \"current_plan\";\n } else if (activePlanPeriod === 'month' && (forPeriod === 'trial' || forPeriod === 'free')) {\n return \"plan_upgrade_restrictions\";\n } else if (activePlanPeriod === 'year' && (forPeriod === 'trial' || forPeriod === 'free' || forPeriod === 'month')) {\n return \"plan_upgrade_restrictions\";\n }\n }\n\n } else if (lastsubscription.products) {\n let products = lastsubscription.products;\n let activePlanPeriod = lastsubscription.period;\n if (products.indexOf(PASS_PREMIUM_PLAN_ID) !== -1) {\n if (activePlanPeriod === forPeriod) {\n return \"current_plan\";\n } else if (activePlanPeriod === 'month' && (forPeriod === 'trial' || forPeriod === 'free')) {\n return \"plan_upgrade_restrictions\";\n } else if (activePlanPeriod === 'year' && (forPeriod === 'trial' || forPeriod === 'free' || forPeriod === 'month')) {\n return \"plan_upgrade_restrictions\";\n }\n }\n }\n } else if ((!lastsubscription || (lastsubscription && isCanceled)) && passplan == 1 && !isfreetrialactive) {\n if (islifetime || (!islifetime && forPeriod != \"lifetime\")) {\n return \"plan_upgrade_restrictions\";\n }\n }\n\n // Active Pass Lifetime plan = disable any other Pass Plans.\n if (!isfreetrialactive && (passplan === 1 || passplan === 2) && islifetime) {\n return \"plan_upgrade_restrictions\";\n }\n } else if (forPlan == PASS_FAMILY_PLAN_ID) {\n if (passplan === 2 && passFamily && !passFamily.owner) {\n return \"custom_subscription\";\n };\n\n if ((isfreetrialactive && forPeriod === \"trial\") || (islifetime && forPeriod === \"lifetime\" && passplan === 2)) {\n return \"current_plan\";\n }\n\n if (lastsubscription && !isCanceled) {\n let activePlanPeriod = lastsubscription.period;\n\n if (activePlanPeriod === 'year' && forPeriod === 'month') {\n return \"plan_upgrade_restrictions\";\n }\n\n if (lastsubscription.planid) {\n let activePlanId = lastsubscription.planid;\n\n if (activePlanId === forPlan && activePlanPeriod === forPeriod) {\n return \"current_plan\";\n }\n } else if (lastsubscription.products) {\n let products = lastsubscription.products;\n\n if (products.indexOf(forPlan) !== -1 && activePlanPeriod === forPeriod) {\n return \"current_plan\";\n }\n }\n }\n\n // Active Pass Lifetime plan = disable any other Pass Plans.\n if (!isfreetrialactive && (passplan === 1 || passplan === 2) && islifetime) {\n return \"plan_upgrade_restrictions\";\n }\n\n // Buying Storage\n } else {\n if (plan == PREMIUM_PLAN_ID || plan == PREMIUM_PLUS_PLAN_ID || plan == CUSTOM4TB_PLAN_ID) {\n if (premiumlifetime) {\n if (plan == CUSTOM4TB_PLAN_ID && typeof planparams != 'undefined' && planparams.storage > 1 && canAddStorage) {\n return (\"custom_plan_upgrade_exceeded\");\n } else if (forPlan == CUSTOM_PLAN_ID && canAddStorage) {\n if ((incStorage == maxCustomStorageCount && (plan == PREMIUM_PLAN_ID || plan == CUSTOM4TB_PLAN_ID)) || (incStorage > maxCustomStorageCount && plan == PREMIUM_PLAN_ID)) {\n return (\"plan_upgrade_restrictions\");\n } else if (incStorage == 1 && !add500GBAllowed) {\n return ((plan == PREMIUM_PLUS_PLAN_ID || plan == CUSTOM4TB_PLAN_ID) ? \"plan_upgrade_restrictions\" : \"custom_plan_upgrade_restrictions\");\n }\n } else if (forPlan <= plan || forPlan == FAMILY2TB_PLAN_ID || forPlan == FAMILY_CUSTOM_PLAN_ID || (forPlan == CUSTOM_PLAN_ID && !canAddStorage)) {\n return (\"storage_lifetime\");\n }\n } else if (hasSubscriptionPeriod && isCanceled == false) {\n if (forPeriod == \"lifetime\") {\n if (forPlan < plan) {\n return (\"lower_plan\");\n }\n } else if (hasSubscriptionPeriod == \"month\") {\n if (forPeriod == \"month\") {\n if (forPlan < plan && !downgradeAllowed) {\n return (\"lower_plan\");\n } else if (forPlan == plan) {\n return (\"current_plan\");\n }\n } else if (\n (forPeriod == \"year\" && forPlan < plan) ||\n (forPlan < plan && premiumexpires)\n ) {\n return (\"lower_plan\");\n }\n } else if (hasSubscriptionPeriod == \"year\") {\n if (forPeriod == \"month\" && !downgradeAllowed) {\n return (\"lower_period\");\n } else {\n if (forPlan < plan && !downgradeAllowed) {\n return (\"lower_plan\");\n } else if (forPlan == plan) {\n if (!downgradeAllowed || hasSubscriptionPeriod == forPeriod) {\n return (\"current_plan\");\n }\n }\n }\n }\n } else if (isCanceled == false) {\n if (forPlan < plan) {\n return (\"lower_plan\");\n } else if (forPlan <= plan && premiumexpires) {\n let now = new Date();\n let expires = new Date(premiumexpires);\n //Get 1 day in milliseconds\n let oneDay = 1000 * 60 * 60 * 24;\n let daysLeft = Number(expires) - Number(now) / oneDay;\n\n let monthlyTabisActive = forPeriod === \"month\";\n let annualTabisActive = forPeriod === \"year\";\n\n if (daysLeft > 10 && (annualTabisActive || monthlyTabisActive)) {\n return (\"lower_period\");\n }\n }\n }\n } else if (plan == CUSTOM_PLAN_ID) {\n if (typeof planparams != 'undefined' && planparams.storage >= maxCustomStorageCount && forPlan == CUSTOM_PLAN_ID && canAddStorage) {\n return (\"custom_plan_upgrade_exceeded\");\n } else if (typeof planparams != 'undefined' && ((planparams.storage + incStorage) > maxCustomStorageCount) && forPlan == CUSTOM_PLAN_ID && canAddStorage) {\n return (\"plan_upgrade_restrictions\");\n } else if (forPlan == CUSTOM_PLAN_ID && incStorage == 1 && !add500GBAllowed) {\n if (typeof planparams != 'undefined' && planparams.storage <= 3) {\n return (\"custom_plan_upgrade_restrictions\");\n } else {\n return (\"plan_upgrade_restrictions\");\n }\n } else if (forPlan < plan || (!canAddStorage && forPlan == CUSTOM_PLAN_ID)) {\n return (\"storage_lifetime\");\n } else if (forPeriod === \"year\" || forPeriod === \"month\") {\n return (\"storage_lifetime\");\n }\n } else if ((plan == FAMILY2TB_PLAN_ID || plan == FAMILY_CUSTOM_PLAN_ID) && forPlan !== FAMILY_CUSTOM_PLAN_ID) {\n return (\"family\");\n } else if (forPlan == FAMILY_CUSTOM_PLAN_ID || forPlan == FAMILY2TB_PLAN_ID) {\n if ((plan == FAMILY_CUSTOM_PLAN_ID || plan == FAMILY2TB_PLAN_ID) && family && !family.owner) {\n return \"family\";\n } else if (plan == FAMILY_CUSTOM_PLAN_ID && typeof planparams != 'undefined') {\n if (planparams.storage >= maxFamilyStorageCount && canAddStorage) {\n return (\"custom_plan_upgrade_exceeded\");\n } else if (((planparams.storage + incStorage) > maxFamilyStorageCount) && canAddStorage) {\n return (\"plan_upgrade_restrictions\");\n }\n }\n } else {\n if (forPlan == CUSTOM_PLAN_ID && incStorage > maxCustomStorageCount) {\n return (\"plan_upgrade_restrictions\");\n }\n }\n }\n }\n }\n};\n\nexport const preventEnteringNumbers = (event) => {\n const key = event.which || event.keyCode || event.charCode;\n const pressedCharacter = String.fromCharCode(key);\n\n if (!(/[a-zA-Z '-]/).test(pressedCharacter)) {\n event.preventDefault();\n }\n}\n\ntype creditCardValidation = {\n name: string,\n range: string,\n valid_length: Array\n}\n\nexport const findCardType = (cardNumber: string): creditCardValidation => {\n const creditCardValidations = [\n {\n name: \"amex\",\n range: \"34, 37\",\n valid_length: [\"15\"]\n },\n {\n name: \"diners\",\n range: \"301, 302, 303, 304, 305, 36\",\n valid_length: [\"16\"]\n },\n {\n name: \"jcb\",\n range: \"352, 353, 354, 355, 356, 357, 358\",\n valid_length: [\"16\"]\n },\n {\n name: \"visa\",\n range: \"4\",\n valid_length: [\"19\", \"18\", \"17\", \"16\", \"15\", \"14\", \"13\"]\n },\n {\n name: \"mastercard\",\n range: \"50, 51, 52, 53, 54, 55, 222\",\n valid_length: [\"16\"]\n },\n {\n name: \"discover\",\n range: \"6011, 622, 644, 645, 646, 647, 648, 649\",\n valid_length: [\"16\"]\n }\n ];\n\n return creditCardValidations.find((cardTemplate: creditCardValidation): (creditCardValidation | false) => {\n let isThereAMatch = cardTemplate.range.split(\", \").some((range: string) => {\n const rangeLength = range.length;\n return range === cardNumber.slice(0, rangeLength);\n });\n return isThereAMatch;\n });\n}\n\nexport const getExpiryDatePeriod = (expiryDate: string, period: string): string => {\n const periods = {\n month: Number(expiryDate.split(\"/\")[0]),\n year: Number(expiryDate.split(\"/\")[1])\n }\n\n if (periods.year > 2000 && periods.year < 2100) {\n periods.year -= 2000;\n }\n\n return periods[period];\n}\n\nexport const validateExpiryDate = (expiryDate: string): boolean => {\n const month = getExpiryDatePeriod(expiryDate, \"month\");\n const year = getExpiryDatePeriod(expiryDate, \"year\");\n const currentYear = new Date().getFullYear() - 2000;\n const currentMonth = new Date().getMonth() + 1;\n\n const validateExpression =\n month <= 12 &&\n ((month > 0 && year > currentYear) || (month >= currentMonth && year == currentYear)) &&\n year <= 40;\n\n return validateExpression;\n};\n\n\nexport const getDeviceID = () => {\n if (!window.localStorage.getItem(\"deviceid\") && !rcookie(\"deviceid\")) {\n return rcookie(\"deviceid\");\n } else if (rcookie(\"deviceid\")) {\n if (window.localStorage.getItem(\"deviceid\")) {\n window.localStorage.removeItem(\"deviceid\");\n }\n return rcookie(\"deviceid\");\n } else if (window.localStorage.getItem(\"deviceid\")) {\n setcookie(\"deviceid\", window.localStorage.getItem(\"deviceid\"), 365);\n window.localStorage.removeItem(\"deviceid\");\n return rcookie(\"deviceid\");\n }\n};\n\nexport const getCurrency = ({ auth, callback = () => { } }: { auth: string, callback: () => void }) => {\n const params = {};\n let getCurrencyTries = 0;\n\n if (getCurrencyTries >= 5) {\n onSuccess(\"$\");\n return;\n }\n\n if (auth) {\n params[\"auth\"] = $.cookie(\"pcauth\");\n }\n\n if (rcookie(\"forcecurrency\")) {\n params[\"currency\"] = $.cookie(\"forcecurrency\");\n }\n\n if (rcookie(\"forcecountry\")) {\n params[\"country\"] = $.cookie(\"forcecountry\");\n }\n\n const onSuccess = (currency) => {\n if (typeof Storage !== \"undefined\" && currencyMap[currency]) {\n sessionStorage.setItem(\"pclCurrency\", currencyMap[currency]);\n }\n\n callback(currency);\n };\n\n const getCurrencyApiCall = () => {\n getCurrencyTries++;\n const onError = () => {\n setTimeout(() => {\n getCurrencyApiCall();\n }, 300);\n };\n\n pCloudGlobals.apiMethod && pCloudGlobals.apiMethod(\n \"getcurrency\",\n params,\n (data) => {\n if (data.currency) {\n onSuccess(data.currency);\n } else {\n onError();\n }\n },\n {\n errorCallback: onError\n }\n );\n };\n\n getCurrencyApiCall();\n};\n\nexport const areArraysEqual = (array1: Array, array2: Array): boolean => {\n if (!array1 || !array2) {\n return false;\n }\n\n if (array1.length !== array2.length) {\n return false;\n }\n\n for (let index1 = 0; index1 < array1.length; index1++) {\n const e1 = array1[index1];\n const e2 = array2[index1];\n\n if (Array.isArray(e1) && Array.isArray(e2)) {\n compareArrays(e1, e2);\n } else if (e1 !== e2) {\n return false;\n }\n }\n\n return true;\n}\n\nexport const formatMS = (milliseconds: number, type: \"day\" | \"hour\" | \"minute\" | \"second\"): number => {\n const typeMap = {\n \"day\": { \"divider\": 86400000, \"modulo\": milliseconds + 1 },\n \"hour\": { \"divider\": 3600000, \"modulo\": 24 },\n \"minute\": { \"divider\": 60000, \"modulo\": 60 },\n \"second\": { \"divider\": 1000, \"modulo\": 60 }\n };\n\n if (!(type in typeMap)) {\n console.error(\"Invalid duration type: \" + type);\n\n return 0;\n }\n\n return parseInt((milliseconds / typeMap[type].divider) % typeMap[type].modulo);\n};\n\nexport const msToTime = (duration: number, showHours = true): string => {\n let seconds = parseInt((duration / 1000) % 60);\n let minutes = parseInt((duration / 60000) % 60);\n let hours = parseInt((duration / 3600000) % 24);\n\n hours = hours < 10 ? '0' + hours : hours;\n minutes = minutes < 10 ? '0' + minutes : minutes;\n seconds = seconds < 10 ? '0' + seconds : seconds;\n\n return (showHours ? hours + ':' : '') + minutes + ':' + seconds;\n};\n\nexport const cleanFloat = (number: number): number => {\n let value = Number(number);\n let decimal = value % 1 == 0 ? 0 : 2;\n let result = Number(value.toFixed(decimal));\n\n if (result % 1 == 0) {\n decimal = 0;\n }\n\n return Number(value.toFixed(decimal));\n};\n\nexport const browserVersion = (userAgent, regex) => {\n return userAgent.match(regex) ? userAgent.match(regex)[2] : null;\n}\n\nexport const detectBrowser = (version) => {\n const userAgent = navigator.userAgent;\n let browser = \"unkown\";\n // Detect browser name\n browser = (/ucbrowser/i).test(userAgent) ? 'UCBrowser' : browser;\n browser = (/edg/i).test(userAgent) ? 'Edge' : browser;\n browser = (/googlebot/i).test(userAgent) ? 'GoogleBot' : browser;\n browser = (/chromium/i).test(userAgent) ? 'Chromium' : browser;\n browser = (/firefox|fxios/i).test(userAgent) && !(/seamonkey/i).test(userAgent) ? 'Firefox' : browser;\n browser = (/; msie|trident/i).test(userAgent) && !(/ucbrowser/i).test(userAgent) ? 'IE' : browser;\n browser = (/chrome|crios/i).test(userAgent) && !(/opr|opera|chromium|edg|ucbrowser|googlebot/i).test(userAgent) ? 'Chrome' : browser;;\n browser = (/safari/i).test(userAgent) && !(/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i).test(userAgent) ? 'Safari' : browser;\n browser = (/opr|opera/i).test(userAgent) ? 'Opera' : browser;\n browser = navigator.brave ? \"Brave\" : browser;\n\n if (version) {\n switch (browser) {\n case 'UCBrowser': return `${browser}/${browserVersion(userAgent, /(ucbrowser)\\/([\\d\\.]+)/i)}`;\n case 'Edge': return `${browser}/${browserVersion(userAgent, /(edge|edga|edgios|edg)\\/([\\d\\.]+)/i)}`;\n case 'GoogleBot': return `${browser}/${browserVersion(userAgent, /(googlebot)\\/([\\d\\.]+)/i)}`;\n case 'Chromium': return `${browser}/${browserVersion(userAgent, /(chromium)\\/([\\d\\.]+)/i)}`;\n case 'Firefox': return `${browser}/${browserVersion(userAgent, /(firefox|fxios)\\/([\\d\\.]+)/i)}`;\n case 'Chrome': return `${browser}/${browserVersion(userAgent, /(chrome|crios)\\/([\\d\\.]+)/i)}`;\n case 'Safari': return `${browser}/${browserVersion(userAgent, /(safari)\\/([\\d\\.]+)/i)}`;\n case 'Opera': return `${browser}/${browserVersion(userAgent, /(opera|opr)\\/([\\d\\.]+)/i)}`;\n case 'IE': const version = browserVersion(userAgent, /(trident)\\/([\\d\\.]+)/i);\n // IE version is mapped using trident version \n // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0\n return version ? `${browser}/${parseFloat(version) + 4.0}` : `${browser}/7.0`;\n default: return `unknown/0.0.0.0`;\n }\n }\n\n return browser;\n}\n\nexport const isValidEmailAddress = (email: string): boolean => {\n const pattern = new RegExp(/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\t\".+\\\"))@((\\[[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,}))$/);\n return pattern.test(email);\n};\n\nexport const apiCall = (method, params, onSuccess, onError, opts) => {\n const dfd = jQuery.Deferred();\n opts = {\n errorCallback: (data) => {\n dfd.reject(data);\n if (typeof onError === 'function') {\n onError(data);\n }\n },\n ...opts\n }\n\n pCloudGlobals.apiMethod(\n method,\n params,\n (data) => {\n if (typeof onSuccess === 'function') {\n onSuccess(data);\n }\n dfd.resolve(data);\n },\n opts\n );\n\n return dfd.promise();\n};\n\nexport const apiCallPost = (method, params, onSuccess, onError, opts) => {\n const dfd = jQuery.Deferred();\n opts = {\n type: \"POST\",\n errorCallback: (data) => {\n dfd.reject(data);\n if (typeof onError === 'function') {\n onError(data);\n }\n },\n ...opts\n }\n\n pCloudGlobals.apiMethod(\n method,\n params,\n (data) => {\n dfd.resolve(data);\n if (typeof onSuccess === 'function') {\n onSuccess(data);\n }\n },\n opts\n );\n\n return dfd.promise();\n};\n\nexport const detectIsMobile = () => {\n return /Mobile|mini|Fennec|Android|iP(od|hone)/.test(navigator.appVersion);\n};\n\nexport const onMouseOut = (event, callback) => {\n const e = event ? event : window.event;\n // If this is an autocomplete element.\n if (e.target && e.target.tagName && e.target.tagName.toLowerCase() == \"input\") {\n return;\n }\n\n // Get the current viewport width.\n const vpWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\n // If the current mouse X position is within 50px of the right edge of the viewport, return.\n if (e.clientX >= (vpWidth - 50)) {\n return;\n }\n\n // If the current mouse Y position is not within 50px of the top edge of the viewport, return.\n if (e.clientY >= 50) {\n return;\n }\n\n // Fixes mozila problem where event is getting triggered on rigth click. -83 seems to be a constant value for clientY in that case.\n if (e.clientY === -83) {\n return;\n }\n\n // Reliable, works on mouse exiting window and user switching active program\n const from = e.relatedTarget || e.toElement;\n\n // User is exiting window\n if (!from && callback) {\n callback();\n }\n}\n\nexport const isInternetExplorer = () => {\n return !!document.documentMode;\n}\n\nexport const scrollToTop = () => {\n window.scrollTo(0);\n};\n\nexport const bytesToSize = (bytes) => {\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n if (bytes == 0) return null;\n const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\n if (i == 0) return bytes + ' ' + sizes[i];\n return (bytes / Math.pow(1024, i)).toFixed(0) + ' ' + sizes[i];\n};\n\nexport const setTitleByCodeUrl = (codeUrl, setTitle, setRegisterTitle, setLoginTitle) => {\n if (codeUrl) {\n if (codeUrl == 'DROPBOX2PCLOUD') {\n setTitle('Special for Dropbox users - press submit and enjoy 3 months of Premium 500 GB for Free');\n } else if (codeUrl == 'HUBIC2PCLOUD') {\n setTitle('Special for hubiC users - press submit and enjoy 3 months of Premium 500 GB for Free');\n } else if (codeUrl == 'APPO') {\n setTitle('Special for\"APPO\" members - register now and enjoy 3 months of Premium 500 GB for Free');\n } else if (codeUrl == 'BIRTHDAY4U') {\n setTitle(__(\"PromoPage_birthday_text\"));\n } else if (codeUrl == 'PCLOUDMUSIC') {\n setTitle(__(\"pCloud_Music_coupon_submit\").replace(\"%url_promo%\", codeUrl));\n setRegisterTitle(__(\"pCloud_Music_coupon_register\").replace(\"%url_promo%\", codeUrl));\n setLoginTitle(__(\"pCloud_Music_coupon_login\").replace(\"%url_promo%\", codeUrl));\n } else if (codeUrl == 'BDAY3MONTHS') {\n setTitle(__(\"pm_coupon_submit\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 3));\n setRegisterTitle(__(\"pm_coupon_register\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 3));\n setLoginTitle(__(\"pm_coupon_login\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 3));\n } else if (codeUrl == 'PM6MONTHS' || codeUrl == \"INT6MONTHS\"|| codeUrl == \"LFS6MONTHS\") {\n setTitle(__(\"pm_coupon_submit\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 6));\n setRegisterTitle(__(\"pm_coupon_register\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 6));\n setLoginTitle(__(\"pm_coupon_login\").replace(\"%url_promo%\", codeUrl).replace(\"%months%\", 6));\n } else {\n setTitle(__(\"promo_submit_with_url\").replace(\"%url_promo%\", codeUrl));\n setRegisterTitle(__(\"Register for Free and enter your promo code. It will become effective immediately!\"));\n setLoginTitle(__(\"Enter your promo code upon Login and it will become effective immediately.\"));\n }\n }\n else {\n setTitle(__('Have a promo code? Enter it below.'));\n setRegisterTitle(__(\"Register for Free and enter your promo code. It will become effective immediately!\"));\n setLoginTitle(__(\"Enter your promo code upon Login and it will become effective immediately.\"));\n }\n};\n\nexport const getMonthsFromCode = (code) => {\n if (!code) {\n return \"\"\n };\n\n const indexPosition = code.indexOf(\"MONTHS\");\n let monthsCountIndex;\n\n if (indexPosition === -1) {\n return \"\";\n }\n\n if (indexPosition > 0) {\n monthsCountIndex = indexPosition - 1;\n } else {\n monthsCountIndex = indexPosition + 7;\n }\n\n if (!isNaN(code[monthsCountIndex])) {\n return code[monthsCountIndex]\n }\n\n return \"\";\n};\n\nexport const getLanguage = () => {\n return currentLang || $.cookie('set_lang') || $.cookie('lang') || 'en'\n}\n\nexport const countriesInEuropeList = {\n \"AT\": \"Austria\",\n \"BE\": \"Belgium\",\n \"BG\": \"Bulgaria\",\n \"HR\": \"Croatia\",\n \"CY\": \"Cyprus\",\n \"CZ\": \"Czech Republic\",\n \"DK\": \"Denmark\",\n \"EE\": \"Estonia\",\n \"FI\": \"Finland\",\n \"FR\": \"France\",\n \"DE\": \"Germany\",\n \"GR\": \"Greece\",\n \"HU\": \"Hungary\",\n \"IE\": \"Ireland\",\n \"IT\": \"Italy\",\n \"LV\": \"Latvia\",\n \"LT\": \"Lithuania\",\n \"LU\": \"Luxembourg\",\n \"MT\": \"Malta\",\n \"NL\": \"Netherlands\",\n \"PL\": \"Poland\",\n \"PT\": \"Portugal\",\n \"RO\": \"Romania\",\n \"SK\": \"Slovakia\",\n \"SI\": \"Slovenia\",\n \"ES\": \"Spain\",\n \"SE\": \"Sweden\",\n \"CH\": \"Switzerland\",\n \"GB\": \"United Kingdom\",\n \"AL\": \"Albania\",\n \"AD\": \"Andorra\",\n \"AM\": \"Armenia\",\n \"BY\": \"Belarus\",\n \"BA\": \"Bosnia and Herzegovina\",\n \"FO\": \"Faroe Islands\",\n \"GE\": \"Georgia\",\n \"GI\": \"Gibraltar\",\n \"IS\": \"Iceland\",\n \"IM\": \"Isle of Man\",\n \"XK\": \"Kosovo\",\n \"LI\": \"Liechtenstein\",\n \"MK\": \"Macedonia\",\n \"MD\": \"Moldova\",\n \"MC\": \"Monaco\",\n \"ME\": \"Montenegro\",\n \"NO\": \"Norway\",\n \"RU\": \"Russian Federation\",\n \"SM\": \"San Marino\",\n \"RS\": \"Serbia\",\n \"CH\": \"Switzerland\",\n \"TR\": \"Turkey\",\n \"UA\": \"Ukraine\",\n \"GB\": \"United Kingdom\",\n \"VA\": \"Vatican City State\"\n};\n\nexport const isCountryInEurope = (countryCodeToNameMap, country) => {\n return countryCodeToNameMap[country];\n};\n\nexport const encodeQueryData = (data) => {\n const ret = [];\n\n for (let d in data) {\n ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));\n }\n\n return ret.join('&');\n};\n\nexport const calculateDiscountPercent = (price, oldPrice) => Math.floor((1 - (price/oldPrice)) * 100);\n\nexport const convertDateToDDMMMYY = (date: string, shortMonthName = true, dayMonthSeparator = \" \", monthYearSeparator = \" \") => {\n const monthNames = [\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\"\n ];\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const month = monthNames[dateObj.getMonth()];\n const monthKey = \"month_\" + (!shortMonthName ? \"full_\" : \"\") + month;\n const year = dateObj.getFullYear();\n\n return day + dayMonthSeparator + __(monthKey) + monthYearSeparator + year;\n};\n\nexport const daysDiff = (dateTo: string, dateFrom: string = null) => {\n const dateFromObj = dateFrom !== null && dateFrom !== \"\" ? new Date(dateFrom) : new Date();\n const dateToObj = new Date(dateTo);\n\n // Change hours and minutes to be from the start of the day.\n dateFromObj.setHours(0,0,0,0);\n dateToObj.setHours(0,0,0,0);\n return (dateToObj.getTime() - dateFromObj.getTime() + ((dateFromObj.getTimezoneOffset() - dateToObj.getTimezoneOffset()) * 60 * 1000)) / (1000 * 3600 * 24);\n};","import React, { useState, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\n\nimport { testimonials, roadmap } from '../../lib/constants';\nimport TestimonialCard from './TestimonialCard/TestimonialCard';\nimport RoadmapCard from './RoadmapCard/RoadMapCard';\n\nimport RigthArrow from \"./images/right-icon.svg\";\nimport LeftArrow from \"./images/left-icon.svg\";\nimport { detectIsMobile } from '../../lib/utils';\n\ntype CarouselProps = {\n slides: any,\n slidesToShow?: Number,\n slidesToScroll?: Number,\n autoplay?: Boolean,\n autoPaused?: Boolean,\n autoplaySpeed?: Number,\n infinite?: Boolean,\n displayComponentType: \"testimonial\",\n adaptiveHeight?: Boolean,\n swipeable?: Boolean,\n language: String,\n};\n\nconst Carousel = ({\n slides,\n slidesToShow = 2,\n slidesToScroll = slidesToShow,\n autoplay = true,\n autoplayPaused = true,\n autoplaySpeed = 5000,\n infinite = true,\n displayComponentType = \"testimonial\",\n adaptiveHeight = true,\n swipeable = true,\n language,\n itemBackground = \"#fff\",\n itemTitleColor = \"#000\",\n itemTextColor = \"#000\",\n itemRateColor = \"#ffa200\",\n arrowIconFill = \"#17bed0\",\n arrowBgrColor = \"#fff\",\n gap\n}: CarouselProps) => {\n const trackRef = useRef(null);\n const itemsRefs = useRef([]);\n itemsRefs.current = [];\n const minSwipeDistance = 50\n\n const [slidesCount, setSlidesCount] = useState(slidesToShow);\n const [isMobile, setIsMobile] = useState(detectIsMobile());\n const [itemWidth, setItemWidth] = useState(100 / slidesCount);\n const [activeIndex, setActiveIndex] = useState(0);\n const [paused, setPaused] = useState(false);\n const [playing, setPlaying] = useState(autoplay && !autoplayPaused);\n const [items, setItems] = useState([]);\n const [itemHeight, setItemHeight] = useState(null);\n const [touchStart, setTouchStart] = useState(null)\n const [touchEnd, setTouchEnd] = useState(null)\n const [leftVisible, setLeftVisible] = useState(\"flex\");\n const [rightVisible, setRightVisible] = useState(\"flex\");\n\n useEffect(() => {\n if (activeIndex == 0) {\n setLeftVisible(\"none\");\n setRightVisible(\"flex\");\n }\n else if (activeIndex + slidesCount >= items.length) {\n setLeftVisible(\"flex\");\n setRightVisible(\"none\");\n }\n else {\n setLeftVisible(\"flex\");\n setRightVisible(\"flex\");\n }\n\n }, [activeIndex]);\n\n useEffect(() => {\n switch (displayComponentType) {\n case \"testimonial\":\n setItems(testimonials[language] || testimonials[\"en\"]);\n break;\n case \"roadmap\":\n // setItems(roadmap[language] || roadmap[\"en\"]);\n setItems(roadmap);\n break;\n }\n\n addEventListeners();\n initCarousel();\n\n if (autoplay && playing && !isMobile) {\n const interval = setInterval(() => {\n if (!paused) {\n updateIndex(activeIndex + slidesToScroll);\n }\n }, autoplaySpeed)\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n }\n }\n }, [])\n\n useEffect(() => {\n changeItemHeight();\n }, [itemsRefs.current])\n\n const onTouchStart = (e) => {\n e.stopPropagation();\n setTouchEnd(null) // otherwise the swipe is fired even with usual touch events\n setTouchStart(e.targetTouches[0].clientX)\n }\n\n const onTouchMove = (e) => setTouchEnd(e.targetTouches[0].clientX)\n\n const onTouchEnd = (e) => {\n e.stopPropagation();\n\n if (!touchStart || !touchEnd) {\n return\n }\n\n const distance = touchStart - touchEnd\n const isLeftSwipe = distance > minSwipeDistance\n const isRightSwipe = distance < -minSwipeDistance\n\n if (isLeftSwipe) {\n swipeLeft(e);\n } else if (isRightSwipe) {\n swipeRight(e);\n }\n }\n\n const swipeLeft = (e) => {\n e.preventDefault();\n e.stopPropagation();\n updateIndex(activeIndex + slidesToScroll);\n };\n\n const swipeRight = (e) => {\n e.preventDefault();\n e.stopPropagation();\n updateIndex(activeIndex - slidesToScroll);\n }\n\n\n const setAutoplay = () => {\n if (isInViewport(trackRef)) {\n setPlaying(true);\n } else {\n setPlaying(false);\n }\n }\n\n const isInViewport = (el) => {\n if (el) {\n const h = el.current.clientHeight;\n const top = el.current.getBoundingClientRect().top;\n\n if (top - h <= h && top - h > 0 - h) {\n return true;\n } else if (top - h <= 0 - h) {\n return false;\n } else {\n return false;\n }\n }\n }\n\n const changeItemHeight = () => {\n if (itemsRefs.current.length == items.length) {\n setItemHeight(null);\n const h = Math.max(...itemsRefs.current.map(el => el.clientHeight));\n setItemHeight(h);\n }\n }\n\n const addEventListeners = () => {\n window.addEventListener(\"resize\", initCarousel);\n window.addEventListener(\"resize\", changeItemHeight);\n\n if (autoplay && autoplayPaused) {\n window.addEventListener(\"scroll\", setAutoplay);\n }\n }\n\n const initCarousel = () => {\n if (window.innerWidth <= 768) {\n setItemWidth(100);\n setSlidesCount(1);\n setActiveIndex(0);\n } else if (window.innerWidth <= 1000) {\n setItemWidth(50);\n setSlidesCount(2);\n } else {\n setItemWidth(100 / slidesToShow);\n setSlidesCount(slidesToShow);\n }\n }\n\n const updateIndex = (newIndex) => {\n if (newIndex + slidesCount - 1 >= items.length) {\n if (infinite) {\n newIndex = 0;\n } else {\n newIndex = items.length - slidesCount;\n }\n } else if (newIndex < 0) {\n if (infinite) {\n newIndex = items.length - slidesCount;\n } else {\n newIndex = 0;\n }\n }\n\n setActiveIndex(newIndex);\n }\n\n const addToRefs = (el) => {\n if (el && itemsRefs.current.indexOf(el) === -1) {\n itemsRefs.current.push(el);\n }\n }\n\n return (\n \n {items.length > slidesCount ? (\n \n updateIndex(activeIndex - slidesToScroll)} bgrColor={arrowBgrColor} arrowIconFill={arrowIconFill}>\n \n \n \n ) : null}\n setPaused(true)} onMouseLeave={() => setPaused(false)}>\n \n {items.map((item, index) => {\n switch (displayComponentType) {\n case \"testimonial\":\n return (\n \n \n \n )\n break;\n case \"roadmap\":\n return (\n \n \n \n ) \n break;\n }\n })}\n\n \n \n { items.length > slidesCount ? (\n \n updateIndex(activeIndex + slidesToScroll)} bgrColor={arrowBgrColor} arrowIconFill={arrowIconFill}>\n \n \n \n ) : null }\n \n )\n}\n\nexport default Carousel;\nconst CarouselBody = styled.div`\n display: flex;\n position: relative;\n`;\n\nconst CarouselWrapper = styled.div`\noverflow: hidden;\n\n`;\n\nconst ButtonWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n height: 100%;\n width: 34px;\n`;\n\nconst ButtonWrapperLeft = styled(ButtonWrapper)`\n left: 0px;\n\n @media (max-width: 768px) {\n left: -8px;\n }\n`;\n\nconst ButtonWrapperRight = styled(ButtonWrapper)`\n right: 0px;\n\n @media (max-width: 768px) {\n right: -8px;\n }\n`;\n\nconst IndicatorButton = styled.button`\n width: 34px;\n height: 34px;\n padding: 10px;\n border: none;\n border-radius: 50%;\n z-index: 9;\n cursor: pointer;\n background-color: ${({bgrColor}) => bgrColor};\n font-size: 18px;\n align-self: center;\n top: calc(50% - 25px);\n justify-content: center;\n align-items: center;\n\n svg path {\n stroke: ${({arrowIconFill}) => arrowIconFill};\n }\n \n &.prev{\n display: ${props => props.visible};\n }\n\n &.next{\n display: ${props => props.visible};\n }\n`;\n\nconst Track = styled.div`\n white-space: nowrap;\n transition: transform 0.8s;\n z-index: 2;\n`;\n\nconst CarouselItem = styled.div`\n display: inline-block;\n min-height: 100%;\n overflow: hidden;\n transition: max-height 0.5s ease-out;\n max-height: 800px;\n height: ${props => props.itemHeight ? `${props.itemHeight}px` : '100%'};\n width:${({itemWidth}) => itemWidth}%;\n padding: ${({ gap }) => gap && \"0px \" + gap};\n box-sizing: border-box;\n\n &:first-of-type {\n padding-left: 0px;\n }\n\n &:last-of-type {\n padding-right: 0px;\n }\n`;\n","import React from \"react\";\n\nimport _move from \"../lib/move\";\nimport componentMount from \"../lib/componentMount\"\nimport Carousel from \"../components/Carousel\";\n\nconst _attachList = [\n {\n attach: self,\n list: [\n //components\n \"Carousel\"\n ]\n }\n]\n\nconst prepComponents = {\n Carousel: componentMount(props => )\n};\n\n_move(prepComponents, _attachList);","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t30: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpcloud_site\"] = self[\"webpackChunkpcloud_site\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [0], () => (__webpack_require__(47223)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","obj","_attachList","n","hasOwnProperty","k","length","list","indexOf","attach","usedReactRoots","getExistingOrNewRoot","element","reactRootId","dataset","Math","random","toString","slice","root","createRoot","render","props","_getExistingOrNewRoot","unmount","Object","assign","bind","target","i","arguments","source","key","prototype","call","apply","this","roadmap","title","icon","xmlns","width","height","transform","cx","cy","r","fill","d","description","testimonials","href","quote","text","_ref","item","_ref$background","background","_ref$titleColor","titleColor","_ref$textColor","textColor","_ref$rateColor","rateColor","_useState2","_slicedToArray","useState","substr","setText","useEffect","matches","match","React","TestimonialWrap","Box","className","styled","div","withConfig","displayName","componentId","Icon","RoadmapWrapper","Title","__","Description","_style","id","x","y","viewBox","xmlSpace","_defineProperty","_countriesInEuropeLis","slides","_ref$slidesToShow","slidesToShow","_ref$slidesToScroll","slidesToScroll","_ref$autoplay","autoplay","_ref$autoplayPaused","autoplayPaused","_ref$autoplaySpeed","autoplaySpeed","_ref$infinite","infinite","_ref$displayComponent","displayComponentType","_ref$swipeable","adaptiveHeight","swipeable","language","_ref$itemBackground","itemBackground","_ref$itemTitleColor","itemTitleColor","_ref$itemTextColor","itemTextColor","_ref$arrowIconFill","itemRateColor","arrowIconFill","_ref$arrowBgrColor","arrowBgrColor","gap","trackRef","useRef","itemsRefs","current","slidesCount","setSlidesCount","_useState4","test","navigator","appVersion","isMobile","_useState6","itemWidth","setItemWidth","_useState8","activeIndex","setActiveIndex","_useState10","paused","setPaused","_useState12","playing","setPlaying","_useState14","items","setItems","_useState16","itemHeight","setItemHeight","_useState18","touchStart","setTouchStart","_useState20","touchEnd","setTouchEnd","_useState22","leftVisible","setLeftVisible","_useState24","rightVisible","setRightVisible","addEventListeners","initCarousel","interval","setInterval","updateIndex","clearInterval","changeItemHeight","swipeLeft","e","preventDefault","stopPropagation","swipeRight","setAutoplay","isInViewport","el","h","clientHeight","top","getBoundingClientRect","max","_toConsumableArray","map","window","addEventListener","innerWidth","newIndex","addToRefs","push","CarouselBody","ref","onTouchStart","targetTouches","clientX","onTouchMove","onTouchEnd","distance","isRightSwipe","ButtonWrapperLeft","IndicatorButton","visible","onClick","bgrColor","LeftArrow","CarouselWrapper","onMouseEnter","onMouseLeave","Track","style","concat","index","CarouselItem","TestimonialCard","RoadmapCard","ButtonWrapperRight","RigthArrow","ButtonWrapper","button","_ref2","_ref3","_ref4","_ref5","self","_move","Carousel","componentMount","t","f","Array","isArray","clsx","module","exports","objA","objB","compare","compareContext","ret","keysA","keys","keysB","bHasOwnProperty","idx","valueA","valueB","__assign","s","p","create","__spreadArray","to","from","pack","ar","l","SuppressedError","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","m","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","getter","__esModule","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","prop","Symbol","toStringTag","value","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","forEach","nc","__webpack_exports__"],"sourceRoot":""}