CINXE.COM
Cobertura Fibra: teste a sua morada - Vodafone Portugal
<!DOCTYPE HTML> <html lang="pt" class="js"> <head> <link rel="apple-touch-icon" sizes="180x180" href="https://www.vodafone.pt/content/dam/favicon/apple-touch-icon.png"/> <link rel="icon" type="image/png" sizes="32x32" href="https://www.vodafone.pt/content/dam/favicon/favicon-32x32.png"/> <link rel="icon" type="image/png" sizes="16x16" href="https://www.vodafone.pt/content/dam/favicon/favicon-16x16.png"/> <link rel="icon" type="image/png" sizes="48x48" href="https://www.vodafone.pt/content/dam/favicon/favicon-48x48.png"/> <link rel="icon" type="image/png" sizes="96x96" href="https://www.vodafone.pt/content/dam/favicon/favicon-96x96.png"/> <link rel="icon" type="image/svg+xml" href="https://www.vodafone.pt/content/dam/favicon/favicon.svg"/> <link rel="manifest" href="https://www.vodafone.pt/content/dam/favicon/site.webmanifest"/> <meta name="msapplication-TileColor" content="#da532c"/> <meta name="theme-color" content="#ffffff"/> <title>Cobertura Fibra: teste a sua morada - Vodafone Portugal</title> <meta name="description" content="Teste a sua cobertura e saiba se a rede de fibra da Vodafone j谩 chegou a sua casa."/> <meta name="template" content="content-page"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta http-equiv="x-ua-compatible" content="ie=edge"/> <meta name="robots" content="index, follow"/> <meta name="facebook-domain-verification" content="mlc10vfgj9nqugld6evszm4l2rkzwc"/> <link rel="canonical"/> <link rel="amphtml"/> <meta property="og:title" content="Cobertura Fibra: teste a sua morada"/> <meta property="og:description" content="Teste a sua cobertura e saiba se a rede de fibra da Vodafone j谩 chegou a sua casa."/> <meta property="og:type" content="website"/> <meta property="og:site_name" content="Vodafone Portugal"/> <meta property="og:locale" content="pt_PT"/> <meta property="og:image" content="https://www.vodafone.pt/content/dam/digital-sites/outros/vodafone-social-media-card-1200x630.jpg"/> <meta property="twitter:card" content="summary"/> <meta property="twitter:title" content="Cobertura Fibra: teste a sua morada"/> <meta property="twitter:description" content="Teste a sua cobertura e saiba se a rede de fibra da Vodafone j谩 chegou a sua casa."/> <meta property="twitter:image" content="https://www.vodafone.pt/content/dam/digital-sites/outros/vodafone-social-media-card-1200x630.jpg"/> <script>var pagePath="/content/digital-sites/pt/particulares/pacotes/cobertura";var canonicalUrl="";var canonicalPath='https://www.vodafone.pt';var eshopPath='https://loja.vodafone.pt';var imageTumbPath='https://www.vodafone.pt';if(pagePath.indexOf('digital-sites')>-1){if(pagePath.indexOf('particulares')>-1){if(pagePath.split('particulares')[1].length>1){canonicalPath+=pagePath.split("content/digital-sites/pt/particulares")[1]+'.html';imageTumbPath+=pagePath.split("content/digital-sites/pt/particulares")[1]+'.thumb.800.480.png';}else{imageTumbPath+='/particulares.thumb.800.480.png';}}else if(pagePath.indexOf('default')>-1){if(pagePath.split('default')[1].length>1){canonicalPath+=pagePath.split("content/digital-sites/pt/default")[1]+'.html';imageTumbPath+=pagePath.split("content/digital-sites/pt/default")[1]+'.thumb.800.480.png';}else{imageTumbPath+='/default.thumb.800.480.png';}}else if(pagePath.indexOf('ajuda/artigosTopico')>-1){var pagePathVanity=window.location.pathname;canonicalPath+=pagePathVanity.trim();if(pagePathVanity.indexOf('.html')>-1){imageTumbPath+=pagePathVanity.split('.html')[0].trim()+'.thumb.800.480.png';}else{imageTumbPath+=pagePathVanity+'.thumb.800.480.png';}}else if(pagePath.split('content/digital-sites/pt')[1]&&pagePath.split('content/digital-sites/pt')[1].length>1){canonicalPath+=pagePath.split("content/digital-sites/pt")[1]+'.html';imageTumbPath+=pagePath.split("content/digital-sites/pt")[1]+'.thumb.800.480.png';}}else if(pagePath.indexOf('digital-myvodafone')>-1){var van="";canonicalPath=van;imageTumbPath="";}else{canonicalPath+='/'+pagePath.split("/pt/")[1]+'.html';imageTumbPath+='/'+pagePath.split("/pt/")[1]+'.thumb.800.480.png';}document.querySelector("link[rel='canonical']").setAttribute('href',canonicalPath);if(document.querySelector("meta[property='og:url']")!=null&&document.querySelector("meta[property='og:url']").getAttribute('content')=="url_default"){document.querySelector("meta[property='og:url']").setAttribute('content',canonicalPath);document.querySelector("meta[property='og:url']").setAttribute('id','metaUrlId');}else if(document.querySelector("meta[property='og:url']")!=null){document.querySelector("meta[property='og:url']").setAttribute('id','metaUrlId');}if(document.querySelector("meta[property='og:image']")!=null&&document.querySelector("meta[property='og:image']").getAttribute('content')=="image_default"){document.querySelector("meta[property='og:image']").setAttribute('content',imageTumbPath);}if(canonicalUrl){document.querySelector("link[rel='canonical']").setAttribute('href',canonicalUrl);}</script> <link rel="preload" as="font" type="font/woff2" href="/apps/digital-commons/clientlibs/clientlib-site/resources/fonts/vodafone-light.woff2" crossorigin="anonymous"/> <link rel="preload" as="font" type="font/woff2" href="/apps/digital-commons/clientlibs/clientlib-site/resources/fonts/vodafone-regular.woff2" crossorigin="anonymous"/> <link rel="preload" as="font" type="font/woff2" href="/apps/digital-commons/clientlibs/clientlib-site/resources/fonts/vodafone-bold.woff2" crossorigin="anonymous"/> <link rel="stylesheet" href="/apps/digital-commons/clientlib-all-css.min.d71503dab270d79a4dbb06aa9628a1a7.css" type="text/css"> <script src="/etc.clientlibs/digital-commons/clientlibs/vendor/bodymovin.min.js"></script> <script src="/etc.clientlibs/clientlibs/granite/jquery.min.js"></script> <script src="/etc.clientlibs/digital-commons/clientlibs/vendor/crypto-js.min.js"></script> <script src="/apps/digital-commons/clientlib-all.min.js"></script> <script src="/etc.clientlibs/digital-commons/clientlibs/common/stores/basketStore.min.js"></script> <script src="/etc.clientlibs/digital-commons/clientlibs/common/stores/siteContextStore.min.js"></script> <script src="/etc.clientlibs/digital-commons/clientlibs/common/stores/navigationStore.min.js"></script> <!-- fix $CQ AEM 6.5 dependencies issue --> <script src="/etc.clientlibs/foundation/clientlibs/jquery.min.js"></script> <script src="/etc.clientlibs/foundation/clientlibs/shared.min.js"></script> <!-- fix $CQ AEM 6.5 dependencies issue --> <!--/ BYSIDE /--> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_byside/clientlibs.min.js"></script> <script type="text/javascript">(function(){window.ContextHub=window.ContextHub||{};ContextHub.Paths=ContextHub.Paths||{};ContextHub.Paths.CONTEXTHUB_PATH="/etc/cloudsettings/default/contexthub";ContextHub.Paths.RESOURCE_PATH="\/content\/digital\u002Dsites\/pt\/particulares\/pacotes\/cobertura\/_jcr_content\/contexthub";ContextHub.Paths.SEGMENTATION_PATH="\/etc\/segmentation\/contexthub";ContextHub.Paths.CQ_CONTEXT_PATH="";ContextHub.Constants=ContextHub.Constants||{};ContextHub.Constants.ANONYMOUS_HOME="/home/users/D/De1Z7OJIIkUlKU0STVqF";ContextHub.Constants.MODE="no-ui";}());</script><script src="/etc/cloudsettings/default/contexthub.kernel.js" type="text/javascript"></script> <script src="https://tags.vodafone.pt/pt-universal/prod/utag.sync.js" defer></script> <!--SP-WIDGET--> <script src="https://cdn.sp-selfservice.com/cs/embed/107/sp-content-widget.js" type="text/javascript"></script> <script>var propertiesPath="/content/digital-sites/pt/particulares/pacotes/cobertura";var tealiumBus=new Vue();var utag_data={page_name:this.navigation.methods.getAnalyticsPage(),page_section:this.navigation.methods.getAnalyticsSection()};var siteContext="default";var globalEnvironment="PRD";var isNotLocalEnvironment=globalEnvironment!=='LOCAL';</script> <div id="svgHtml"></div> <script src="/etc.clientlibs/digital-commons/clientlibs/vendor/svg-html.min.js"></script> </head> <body class="mouse-active preload window-scroll" data-js="_preload, _mouseActive, _docs, _windowScroll, _fixed"> <a href="#content" class="jumper">Skip to content</a> <!-- Click to Call Experience Fragment --> <div class="content" id="content"> <script src="/apps/digital-commons/clientlib-nvcmp.min.js"></script> <script src="/apps/digital-commons/clientlib-vcmp.min.js"></script> <!--<sly data-sly-resource="cookie"></sly>--> <div class="root responsivegrid"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="vf_experienceFragment aem-GridColumn aem-GridColumn--default--12"> <div class="xfpage page basicpage"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="vf_navigation aem-GridColumn aem-GridColumn--default--12"> <script>pageTitle="Cobertura Fibra: teste a sua morada";</script> <div class="vf"> <nav class="header"> <div class="section section--mine-shaft flush--top flush--bottom"> <div class="spring"> <ul id="navigationLevelZero" class="menu-navigation__top no-gutter--all"> <input type="hidden" id="zeroLevelInput" data-zero="[{"text":"Particulares","linkURL":"","target":"","paramOnClick":"","selected":true,"subEntries":false,"zeroLevelSubEntries":[]},{"text":"Business","linkURL":"https://www.vodafone.pt/business.html","target":"","paramOnClick":"","selected":false,"subEntries":false,"zeroLevelSubEntries":[{"text":"Profissionais","linkURL":"_","target":"","paramOnClick":"","context":"","selected":false},{"text":"PME's","linkURL":"/content/digital-sites/pt/repositorio/evangelispl/NAVIGATION-WS10/business-ws10.html","target":"","paramOnClick":"","context":"","selected":false},{"text":"Corporate","linkURL":"_","target":"","paramOnClick":"","context":"","selected":false}]},{"text":"A Vodafone","linkURL":"https://www.vodafone.pt/a-vodafone.html","target":"","paramOnClick":"","selected":false,"subEntries":false,"zeroLevelSubEntries":[]}]" data-first="{"text":"Estado da Rede","linkURL":"https://www.vodafone.pt/info/estado-da-rede.html","target":"","paramOnClick":""}" data-second="{"text":"Condi莽玫es de Oferta de Servi莽os","linkURL":"https://www.vodafone.pt/info/termos-condicoes.html","target":"","paramOnClick":""}"/> <template v-for="(zero, z) in zeroLevel"> <li class="hide--sm hide--md" v-if="zero.text"> <a :href="zero.linkURL ? zero.linkURL : null" :target="zero.target ? zero.target : null" :onclick="zero.paramOnClick ? zero.paramOnClick : null" @click="headerTealiumRequest(upperLevelMenuActionId, zero.text)" class="menu-navigation__link--slim" :class="{'navigation__site--active': zero.selected}"> {{zero.text}} </a> <template v-if="zero.subEntries"> <template v-for="sub in zero.zeroLevelSubEntries"> <span class="menu-navigation__top--display"> <a :href="sub.linkURL ? sub.linkURL : null" :target="sub.target ? sub.target : null" :onclick="sub.paramOnClick ? sub.paramOnClick : null" @click="(toggleSubEntry(sub), headerTealiumRequest(upperLevelMenuActionId, sub.text))" class="menu-navigation__top--block" :class="{'menu-navigation__top--block-active': isSelected(sub) }"> {{sub.text}} </a> </span> </template> </template> </li> </template> <template v-if="firstEntry.text"> <li class="menu-navigation__context"> <span class="menu-navigation__top--section-right"> <svg focusable="false" aria-hidden="true" class="icon icon--extra-small icon--white"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-network"> </use> </svg> <a role="button" :aria-label="firstEntry.text" :href="firstEntry.linkURL ? firstEntry.linkURL : null" :target="firstEntry.target ? firstEntry.target : null" :onclick="firstEntry.paramOnClick ? firstEntry.paramOnClick : null" @click="headerTealiumRequest(rightSideMenuActionId, firstEntry.text)"> {{firstEntry.text}} </a> </span> </li> </template> <template v-if="secondEntry.text"> <li class="hide--sm hide--md"> <span class="menu-navigation__top--section-right"> <svg viewBox="0 0 192 192" class="icon icon--extra-small"> <line id="afa0dea2-fdb5-4188-b127-0390bcfc2413" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="124" y1="84" x2="92" y2="84"></line> <line id="fca2dd7d-8243-463f-9694-d76870f6b696" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="76" y1="84" x2="68" y2="84"></line> <line id="c0f6faeb-1130-48f3-b62a-bcd83c3abeaf" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="124" y1="108" x2="92" y2="108"></line> <line id="_x39_f9d3ac1-3527-469f-b7cc-d7b4a8af09e5" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="76" y1="108" x2="68" y2="108"></line> <line id="_x30_e845ff5-6eb9-4522-9631-9073c7db3199" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="124" y1="132" x2="92" y2="132"></line> <line id="_x39_0b7f6c8-8095-43f3-848c-53ffec273712" fill="none" stroke="#ffffff" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="76" y1="132" x2="68" y2="132"></line> <path fill="none" stroke="#ffffff" stroke-width="8" stroke-linejoin="round" d="M148,52l-32-32H56c-6.627,0-12,5.373-12,12v128 c0,6.627,5.373,12,12,12h80c6.627,0,12-5.373,12-12V52z"> </path> <polyline fill="none" stroke="#ffffff" stroke-width="8" stroke-linejoin="round" points="116,20.23 116,52 148,52 "></polyline> </svg> <a role="button" :aria-label="secondEntry.text" :href="secondEntry.linkURL ? secondEntry.linkURL : null" :target="secondEntry.target ? secondEntry.target : null" :onclick="secondEntry.paramOnClick ? secondEntry.paramOnClick : null" @click="headerTealiumRequest(rightSideMenuActionId, secondEntry.text)"> {{secondEntry.text}} </a> </span> </li> </template> </ul> </div> </div> <div class="js-navigation-static navigation-static" style="height: 0px;"> </div> <div id="headerMenu" class="menu-navigation" data-js="_navigation"> <div class="spring menu-navigation__white"> <nav role="navigation"> <ul class="menu-navigation__list menu-navigation__spring"> <li class="menu-navigation__item menu-navigation__item--brand"> <div class="brand brand__logo"> <a role="button" href="https://www.vodafone.pt/" target="_self"> <span class="icon icon--fill icon--large " style="width: 48px; height: 48px;"> <svg id="e52eb7e4-d5c9-48ac-9673-45b02cdb0493" data-name="55671e39-cefa-46bf-b0c9-8ca4a8831d80" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 192"><circle id="e59f7850-209c-49b6-932b-d92b9ddb2e2b" data-name="3b6eeea0-d9a3-4e8f-8337-993d6a52ca63" cx="96" cy="96" r="96" fill="#e60000"/><path id="b738ebc5-5ac0-4e37-a8a8-f1f8eceedf02" data-name="79849975-131f-4aec-9367-219fecbac6d4" d="M96.74,149.53c-26.37.1-53.82-22.37-53.93-58.57,0-23.91,12.83-46.92,29.32-60.59C88.22,17.1,110.24,8.51,130.22,8.44a23.94,23.94,0,0,1,6.9.77c-17.46,3.63-31.37,19.88-31.31,38.32a10.38,10.38,0,0,0,.12,1.57c29.24,7.06,42.5,24.73,42.58,49.16S129.33,149.43,96.74,149.53Z" fill="#fff"/></svg> </span> <span class="visually-hidden"></span> </a> </div> </li> <div id="navigation" class="menu-navigation__labels"> <navigation-menu json="/content/dam/digital-sites/ws10/navigation-ws10/particulares.json" zero-level="[{"text":"Particulares","linkURL":"","target":"","paramOnClick":"","selected":true,"subEntries":false,"zeroLevelSubEntries":[]},{"text":"Business","linkURL":"https://www.vodafone.pt/business.html","target":"","paramOnClick":"","selected":false,"subEntries":false,"zeroLevelSubEntries":[{"text":"Profissionais","linkURL":"_","target":"","paramOnClick":"","context":"","selected":false},{"text":"PME's","linkURL":"/content/digital-sites/pt/repositorio/evangelispl/NAVIGATION-WS10/business-ws10.html","target":"","paramOnClick":"","context":"","selected":false},{"text":"Corporate","linkURL":"_","target":"","paramOnClick":"","context":"","selected":false}]},{"text":"A Vodafone","linkURL":"https://www.vodafone.pt/a-vodafone.html","target":"","paramOnClick":"","selected":false,"subEntries":false,"zeroLevelSubEntries":[]}]" second-entry="{"text":"Condi莽玫es de Oferta de Servi莽os","linkURL":"https://www.vodafone.pt/info/termos-condicoes.html","target":"","paramOnClick":""}"> </navigation-menu> </div> <div class="menu-navigation__context"> <template> <div> The current path is: {{ currentPath }} </div> </template> <div id="login--header" class="menu-navigation__context" v-cloak> <div class="menu-navigation__context" style="display: inline-flex;"> <li class="menu-navigation__context--action mini-basket" :class="{'mini-basket--active': miniBasketVisible}"> <a v-if="showBasketIcon" class="menu-navigation__link menu-navigation__link--icon" :class="{'mini-basket__link': miniBasketVisible}" @click="(goToShoppingBasket(), headerTealiumRequest('Event Click Header Right Utility Menu', 'Carrinho'))"> <span class="visually-hidden">Carrinho de compras</span> <span class="menu-navigation__basket" v-if="showItems"> {{counter ? counter : itemsNumber}} <span class="visually-hidden">items</span> </span> <svg focusable="false" aria-hidden="true" class="icon icon--small menu-navigation__icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-shopping-trolley"></use> </svg> </a> <a v-else id="basket-loading" class="menu-navigation__link menu-navigation__link--icon"></a> <small v-if="showBasketIcon" class="menu-navigation__context--label" @click="(goToShoppingBasket(), headerTealiumRequest('Event Click Header Right Utility Menu', 'Carrinho'))">Carrinho</small> <mini-basket v-if="isDigitalSites" ref="miniBasket" :visible="miniBasketVisible" :close="closeMiniBasketEvent" :set-items-number="setItemsNumber" :toggle-mini-basket="toggleMiniBasket"></mini-basket> <div :ref="CONSTANTS.NOTIFICATION_BASKET" class="mini-basket__prompt mini-basket__prompt--reminder hide"> <div class="mini-basket__header"> <div class="grid"> <div class="grid__item grid__item--1/6"> <a class="position--relative cursor__auto"> <span class="visually-hidden">Carrinho de compras</span> <span class="navigation__basket"> <span class="visually-hidden">produto</span> </span> <svg focusable="false" aria-hidden="true" class="icon icon--small navigation__icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-shopping-trolley"></use> </svg> </a> </div> <div class="grid__item grid__item--5/6"> <div class="heading heading--5 heading--bold heading--trailing heading--leading"> <span class="mini-basket__notification--description align--middle"> {{i18nLabels.basketNotEmpty}} </span> </div> <p>{{i18nLabels.reminderDescription}}</p> <div class="cart__tooltip"> <a v-on:click="redirectNotEmptyBasket" class="button button--primary button--small mini-basket__footer__button no-gutter--bottom">{{i18nLabels.goToCart}}</a> </div> </div> </div> <div class="mini-basket__header__close"> <svg v-on:click="closeNotification()" focusable="false" aria-hidden="true" class="icon icon--extra-extra-small mini-basket__header__close--icon"> <use xlink:href="#icon-close"></use> </svg> </div> </div> </div> </li> <li class="menu-navigation__context--action"> <a class="menu-navigation__link menu-navigation__link--icon " @click="(openDialog(), headerTealiumRequest('Event Click Header Right Utility Menu', 'Pesquisa'))"> <span class="visually-hidden">Pesquisar</span> <svg focusable="false" aria-hidden="true" class="icon icon--small menu-navigation__icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-search"></use> </svg> </a> <small class="menu-navigation__context--label" @click="(openDialog(), headerTealiumRequest('Event Click Header Right Utility Menu', 'Pesquisa'))">Pesquisa</small> <!--TODO:meter o link no context(ficheiros xml)--> </li> <li v-if="ativeLogin && typeof userFavorite === 'undefined'" class="menu-navigation__context--action login-nudge " :class="{'login-nudge--active' : showNudge && !hasInteractions && !scrolled}" v-click-outside="closeEvent"> <a atf_id="click--icon" class="menu-navigation__link menu-navigation__link--icon login-nudge__link" @click="(openLoginDialog(), headerTealiumRequest('Event Click Header Right Utility Menu', 'Login'))"> <span class="visually-hidden">My Vodafone Menu</span> <svg focusable="false" aria-hidden="true" class="icon icon--small menu-navigation__icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-my-vodafone"/> </svg> </a> <small class="menu-navigation__context--label" @click="(openLoginDialog(), headerTealiumRequest('Event Click Header Right Utility Menu', 'Login'))">Login</small> <div v-if="showNudge" class="js-login-nudge-prompt login-nudge__prompt" :class="{'login-nudge--hide' : showNudge && (hasInteractions || scrolled)}"> <a class="button button--primary button--full-width login-nudge__login no-gutter--sm-bottom" @click="sayYes">{{i18nLabels.loginButton}}</a> <a class="link link--body small" @click="notOpenAgain">{{i18nLabels.notOpenAgainButton}}</a> </div> </li> <logged-user-menu v-if="!ativeLogin" ref="loggedUserMenu" links="{"linkTitle":"Homepage My Vodafone", "pathURL":"/home.html", "newTab":"false", "linkId":"homepage"},{"linkTitle":"Extratos e Consumos","pathURL":"/extratos-consumos.html","newTab":"false","newTab@Delete":"false","linkId":"extract-consumptions","linkSegments":"profile-extract-consumptions"},{"linkTitle":"Saldo e Carregamentos","pathURL":"/saldo-movimentos.html","newTab":"false","newTab@Delete":"false","linkId":"billing-prepaid","linkSegments":"profile-prepaid"},{"linkTitle":"Faturas e Pagamentos","pathURL":"/faturacao.html","newTab":"false","newTab@Delete":"false","linkId":"billing","linkSegments":"profile-pospaid"},{"linkTitle":"Meus Produtos e Servi莽os","pathURL":"/produtos-servicos.html","newTab":"false","newTab@Delete":"false","linkId":"my-products-and-services","linkSegments":""},{"linkTitle":"Gerir Cart茫o SIM","pathURL":"/definicoes/gerir-sim.html","newTab":"false","newTab@Delete":"false","linkId":"SIM","linkSegments":""},{"linkTitle":"Clube Viva","pathURL":"/content/digital-sites/pt/loja/clube-viva","newTab":"true","newTab@Delete":"","linkId":"ClubViva","linkSegments":"profile-consumer"},{"linkTitle":"Tarif谩rios e Servi莽os","pathURL":"/tarifarios-servicos.html","newTab":"false","newTab@Delete":"false","linkId":"offers-and-extras","linkSegments":""},{"linkTitle":"Servi莽os Empresariais","pathURL":"/servicos-empresariais.html","newTab":"false","newTab@Delete":"false","linkId":"business-services","linkSegments":"profile-business-services"},{"linkTitle":"Relat贸rios","pathURL":"/my/relatorios","newTab":"true","newTab@Delete":"true","linkId":"download-center","linkSegments":"profile-account|profile-business|profile-consumer"},{"linkTitle":"Gest茫o de Acessos","pathURL":"/my/gestao-acessos","newTab":"true","newTab@Delete":"","linkId":"gestao-acessos","linkSegments":"profile-account"},{"linkTitle":"Defini莽玫es","pathURL":"/definicoes.html","newTab":"false","newTab@Delete":"false","linkId":"Settings","linkSegments":""},{"linkTitle":"Logout", "pathURL":"/logout.html", "newTab":"false", "linkId":"logout"}" :user-favorite="userFavorite" :close-menu="closeMenu"></logged-user-menu> <generic-toaster-component></generic-toaster-component> </div> </div> <script id="miniBasket" type="text/x-template" xmlns:v-on="http://www.w3.org/1999/xhtml"> <div> <transition name="mini-basket__slide"> <div class="mini-basket__prompt" :class="[counter>=2 ? 'mini-basket__two-or-more': '', successProductAdded ? '' : 'mini-basket__resume']" v-if="visible"> <div class="mini-basket__header"> <div class="mini-basket__notification"> <div class="mini-basket__notification--content"> <span class="half-gutter--right align--middle mini-basket__notification--icon"> <svg height="25px" viewBox="0 0 196 196"> <circle stroke-width="8" stroke-linejoin="round" stroke-linecap="round" stroke="none" fill="#428600" r="92" cy="96" cx="96"></circle> <polyline points="133.46 73.45 84.91 122 60 97.09" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="8"></polyline> </svg> </span> <span class="align--middle mini-basket__notification--description">{{ successProductAdded ? i18n.productAddedToCart : i18n.notEmptyBasketTitle}}</span> </div> </div> <div @click="closeMiniBasket" class="mini-basket__header__close"> <svg focusable="false" aria-hidden="true" class="icon icon--extra-small mini-basket__header__close--icon"> <use xlink:href="#icon-close"></use> </svg> </div> </div> <template v-if="isLoading"> <loading-spinner :small="true" /> </template> <div v-else> <div class="mini-basket__content"> <div class="mini-basket__content__empty" v-if="counter<=0"> <svg class="icon mini-basket__content__empty--icon" viewBox="0 0 192 192"> <symbol id="_x30_6979d89-d591-4b28-b7b6-a4fa49a13fc3" viewBox="-96 -96 192 192"><circle id="_x32_5a071e1-a24e-48d3-8ad1-944920ba0020_2_" fill="none" stroke="#E60000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" cx="-8" cy="56" r="14"></circle><circle id="_x30_2280ee8-828f-4b27-8a31-3a4aa9e52c22_2_" fill="none" stroke="#E60000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" cx="40" cy="56" r="14"></circle><polyline fill="none" stroke="#666666" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" points="-78,-70 -52,-70 -20,22 52,22 78,-50 -45.04,-50 "></polyline></symbol> <use xlink:href="#_x30_6979d89-d591-4b28-b7b6-a4fa49a13fc3" width="192" height="192" id="ffef29f4-6a23-451b-ac33-9ea1df639421" x="-96" y="-96" transform="matrix(1 0 0 1 96 96)" overflow="visible"></use> </svg> <div class="mini-basket__content__empty--big-label"> {{i18n.emptyBasketPrimaryMessage}} </div> <div class="mini-basket__content__empty--small-label"> {{i18n.emptyBasketSecondaryMessage}} </div> </div> <div class="scrollbar__gray" :class="[(basket.cartItems && basket.cartItems.length) > 2 ? 'mini-basket__scrollbar' : 'no-scrollbar']"> <div class="force-overflow"> <template v-if="product.eshopProductDTO" v-for="(product, index) in basket.cartItems"> <ul class="mini-basket__items"> <li :id="'item-'+product.id" class="mini-basket__item"> <div :id="'item-'+product.id+'-content'"> <a v-if="isAnyShippingMethodAvailable" class="mini-basket__item__delete half-gutter--left" @click="removeProductFromBasket(product)"> <svg focusable="false" aria-hidden="true" class="icon icon--extra-small mini-basket__item__delete--icon"> <use xlink:href="#icon-delete"></use> </svg> </a> <div class="mini-basket__item__content" :style="checkHasInsurance(product) ? 'border-bottom: none' : ''"> <a :href="product.eshopProductDTO.variants[0].pageLink" class="mini-basket__item__photo-wrapper"> <img v-if="product.eshopProductDTO.variants[0].imageSrc" :src="setRendition(product.eshopProductDTO.variants[0].imageSrc, CONSTANTS.IMG_RENDITION_140x100)" :alt="product.eshopProductDTO.variants[0].name" class="mini-basket__item__photo"> </a> <div class="mini-basket__item__inner-content"> <a :href="product.eshopProductDTO.variants[0].pageLink" class="mini-basket__item__title" v-html="getProductName(product.eshopProductDTO)"> </a> <ul class="mini-basket__item__specs"> <li class="mini-basket__item__spec" v-if="product.eshopProductDTO.variants[0].color && product.eshopProductDTO.variants[0].color!==''"> <div class="mini-basket__item__spec__title"> {{i18n.notEmptyBasketColor}} </div> <div class="mini-basket__item__spec__value"> {{product.eshopProductDTO.variants[0].color}} </div> </li> <li class="mini-basket__item__spec" v-if="product.eshopProductDTO.variants[0].storage && product.eshopProductDTO.variants[0].storage!==''"> <div class="mini-basket__item__spec__title"> {{i18n.notEmptyBasketStorage}} </div> <div class="mini-basket__item__spec__value"> {{product.eshopProductDTO.variants[0].storage}} </div> </li> <li class="mini-basket__item__spec"> <div class="mini-basket__item__spec__title"> {{i18n.notEmptyBasketQuantity}} </div> <div class="mini-basket__item__spec__value"> {{product.quantity}} </div> </li> </ul> </div> </div> </div> </li> <div v-if="checkHasInsurance(product)" class="mini-basket__item"> <a v-if="isAnyShippingMethodAvailable" class="mini-basket__item__delete half-gutter--left" @click="removeInsuranceFromBasket(product)"> <svg focusable="false" aria-hidden="true" class="icon icon--extra-small mini-basket__item__delete--icon"> <use xlink:href="#icon-delete"></use> </svg> </a> <div class="mini-basket__item__content"> <a class="mini-basket__item__photo-wrapper"> <svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M20.4 39.35L20.1885 38.8967L20.1764 38.9028L20.4 39.35ZM19.4 39.35L19.6237 38.9026L19.6114 38.8969L19.4 39.35ZM19.2 1.55L19.4616 1.97609L19.4696 1.9712L19.4774 1.96603L19.2 1.55ZM21 1.55L21.2833 1.13794L21.2773 1.13397L21 1.55ZM32 5.35L31.975 5.84938L31.9875 5.85H32V5.35ZM39 5.35H39.5V4.85H39V5.35ZM13.1536 17.7964C12.9583 17.6012 12.6417 17.6012 12.4464 17.7964C12.2512 17.9917 12.2512 18.3083 12.4464 18.5036L13.1536 17.7964ZM18.2 23.55L17.8464 23.9036C17.9402 23.9973 18.0674 24.05 18.2 24.05C18.3326 24.05 18.4598 23.9973 18.5536 23.9036L18.2 23.55ZM28.9536 13.5036C29.1488 13.3083 29.1488 12.9917 28.9536 12.7964C28.7583 12.6012 28.4417 12.6012 28.2464 12.7964L28.9536 13.5036ZM38.5 6.15C38.5 18.1318 34.6418 25.9683 30.4418 30.9788C26.235 35.9974 21.661 38.2098 20.1886 38.8969L20.6114 39.8031C22.139 39.0902 26.865 36.8026 31.2082 31.6212C35.5582 26.4317 39.5 18.3682 39.5 6.15H38.5ZM20.1764 38.9028C19.9992 38.9914 19.9332 39 19.9 39C19.8668 39 19.8008 38.9914 19.6236 38.9028L19.1764 39.7972C19.3992 39.9086 19.6332 40 19.9 40C20.1668 40 20.4008 39.9086 20.6236 39.7972L20.1764 38.9028ZM19.6114 38.8969C18.1413 38.2108 13.6172 35.9991 9.46004 30.981C5.3094 25.9708 1.5 18.1336 1.5 6.15H0.5C0.5 18.3664 4.3906 26.4292 8.68996 31.619C12.9828 36.8009 17.6587 39.0892 19.1886 39.8031L19.6114 38.8969ZM1.5 6.15C1.5 5.77171 1.589 5.6335 1.65544 5.57155C1.73601 5.49642 1.90286 5.41994 2.27312 5.39582C2.63699 5.37212 3.10545 5.40314 3.70887 5.45628C4.30002 5.50833 5.00529 5.57988 5.79704 5.62422C8.99634 5.80338 13.654 5.54216 19.4616 1.97609L18.9384 1.12391C13.346 4.55784 8.90366 4.79662 5.85296 4.62578C5.08221 4.58262 4.4031 4.51354 3.7966 4.46013C3.20236 4.4078 2.65988 4.36851 2.20813 4.39793C1.76277 4.42694 1.3093 4.52702 0.973465 4.84017C0.623504 5.1665 0.5 5.62829 0.5 6.15H1.5ZM19.4774 1.96603C19.712 1.80957 19.9172 1.75 20.1 1.75C20.2828 1.75 20.488 1.80957 20.7227 1.96603L21.2773 1.13397C20.912 0.890431 20.5172 0.75 20.1 0.75C19.6828 0.75 19.288 0.890431 18.9227 1.13397L19.4774 1.96603ZM20.7167 1.96202C23.9862 4.2098 27.8745 5.64435 31.975 5.84938L32.025 4.85062C28.1255 4.65565 24.4138 3.2902 21.2833 1.13798L20.7167 1.96202ZM32 5.85H39V4.85H32V5.85ZM38.5 5.35V6.15H39.5V5.35H38.5ZM12.4464 18.5036L17.8464 23.9036L18.5536 23.1964L13.1536 17.7964L12.4464 18.5036ZM18.5536 23.9036L28.9536 13.5036L28.2464 12.7964L17.8464 23.1964L18.5536 23.9036Z" fill="#0D0D0D"/> </svg> </a> <div class="mini-basket__item__inner-content"> <a class="mini-basket__item__title" v-html="insuranceProperty(product, 'name')"> </a> <ul class="mini-basket__item__specs"> <li class="mini-basket__item__spec"> <div class="mini-basket__item__spec__title"> {{i18n.notEmptyBasketQuantity}} </div> <div class="mini-basket__item__spec__value"> {{insuranceProperty(product, 'quantity')}} </div> </li> </ul> </div> </div> </div> </ul> </template> </div> </div> </div> <div class="mini-basket__footer" @click=""> <div v-if="counter>0"> <div class="mini-basket__footer__total-price"> <div class="grid"> <div class="grid__item grid__item--1/2"> <span class="heading heading--6 heading--regular no-gutter--top"> <b>{{i18n.notEmptyBasketTotal}}</b>{{CONSTANTS.SPACE + i18n.notEmptyBasketTotalComplement}} <label v-if="isBusinessContext" class="small">{{i18n.excludeVAT}}</label><br> <span class="small">{{counter}} <label v-if="counter === 1">{{i18n.notEmptyBasketProduct}}</label> <label v-else>{{i18n.notEmptyBasketProducts}}</label> </span> </span> </div> <label class="grid__item grid__item--1/2 align--right"> <span class="heading heading--6 heading--regular no-gutter--top"> <b>{{formatPrice(getCartTotalEURValueBasedOnSiteContext(basket.cartTotalPrice, isBusinessContext))}}</b> <label v-if="isCVBasket"> <br><b>{{i18n.notEmptyBasketPlus + CONSTANTS.SPACE}}{{getCartTotalPOINTSValue(basket.cartTotalPrice)}}</b> {{CONSTANTS.SPACE + i18n.notEmptyBasketPoints}} </label> </span> </label> </div> </div> <div class="cart__tooltip"> <!--div class="cart__tooltip--message"> Mensagem edit谩vel </div--> <a v-on:click="redirectNotEmptyBasket" class="button button--primary button--full-width mini-basket__footer__button" :class="{'button--disabled': !isAnyShippingMethodAvailable}"> {{i18n.notEmptyBasketButton}} </a> </div> <div class="grid half-gutter--top" v-if="!isAnyShippingMethodAvailable"> <div class="grid__item grid__item--1/11"> <span class="icon icon--fill icon--small"> <svg viewBox="0 0 192 192"><symbol id="ab60b1d0-e126-40d6-8297-93da8c0b8b6d" viewBox="-96 -96 192 192"><path id="ee1f5584-8941-4af1-9904-60ee2b8edcdf_2_" fill="none" stroke="#666666" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" d=" M74.34,41.49C82.92,56.7,75.9,70,58.74,70H-58.73c-17.16,0-24.19-13.3-15.6-28.51L-15.6-66.64c8.55-14.75,22.53-15.53,31.21,0 L74.34,41.49z"></path><line id="f0d8af6f-07b5-4e3d-ba5f-e8cb77db5008_2_" fill="none" stroke="#E60000" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" x1="0" y1="-38" x2="0" y2="22"></line><circle fill="none" stroke="#E60000" stroke-width="4" stroke-miterlimit="10" cx="0" cy="40" r="2"></circle></symbol><use xlink:href="#ab60b1d0-e126-40d6-8297-93da8c0b8b6d" width="192" height="192" id="ad8b8c14-7e84-4c26-b1d0-9131d9b15ca7" x="-96" y="-96" transform="matrix(1 0 0 1 96 96)" overflow="visible"></use></svg> </span> </div> <div class="grid__item grid__item--10/11 grid__item--gutter small"> <small>Estamos a melhorar a Loja Online. De momento n茫o 茅 poss铆vel continuar com a sua comprar, tente novamente mais tarde.</small> </div> </div> </div> <a v-else class="button button--primary button--full-width mini-basket__footer__button" v-on:click="redirectEmptyBasket">{{i18n.emptyBasketButton}}</a> </div> </div> </div> </transition> </div> </script> <script src="/etc.clientlibs/digital-eshop/components/content/commerce/vf_miniBasket/clientlibs.min.js"></script> <script id="loadingSpinner" type="text/x-template"> <div :class="['loading__spinner', {'loading__spinner--wide': wide, 'loading__spinner--mdwind': mdwind, 'loading__spinner--file-upload-container': fucont, 'loading__spinner--calendar-container': calcont}]"> <img :class="['loading__spinner--image', {'loading__spinner--small': small, 'loading__spinner--medium': medium, 'loading__spinner--tiny': tiny, 'loading__spinner--extra-tiny': exttiny, 'loading__spinner--tiny-center': tinyc, 'loading__spinner--comparator': comparator}]" src="/content/dam/digital-commons/loading-spinner.svg" /> </div> </script> <style scoped>.loading__spinner{height:300px;position:relative;width:300px}.loading__spinner--wide{width:100%}.loading__spinner--image{width:300px;height:300px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.loading__spinner--small{transform:scale(.8,.8);top:0;left:0}.loading__spinner--medium{transform:scale(.8,.8);top:0;left:70%}.loading__spinner--mdwind{height:192px;transform:translate(0,-23%)}.loading__spinner--tiny{transform:scale(.5,.5);top:0;left:70%}.loading__spinner--file-upload-container{height:74px;transform:translate(-50%,-164%)}.loading__spinner--extra-tiny{transform:scale(.17,.17);height:260px}.loading__spinner--tiny-center{transform:scale(.5,.5);top:0;left:0}.loading__spinner--calendar-container{height:100px;transform:translate(0,-100%)}.loading__spinner--comparator{transform:translate(-50%,-50%) scale(.5,.5);top:50%;left:50%;max-width:unset}</style> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_loadingSpinner/clientlibs.min.js"></script> <script id="genericToasterCmp" type="text/x-template"> <div class="toaster alert-toaster" :class="toasterShow?'toaster--show':''"> <div class="spring"> <div style="position: relative"> <div class="alert validation__warning alert-toaster__warning" :class="toasterCssType"> <div class="alert-toaster__caption"> <span class="caption__media caption__media--top alert__media"> <svg focusable="false" aria-hidden="true" class="icon icon--small toaster__icon--small"> <use xmlns:xlink="http://www.w3.org/1999/xlink" v-bind="{'xlink:href':'#'+toasterIconType}"></use> </svg> </span> <span class="caption__text caption__text--top alert__text"> <p class="no-gutter--top"><strong class="validation__details js-validation-details">{{toasterTitle}}</strong></p> </span> <span class="alert-toaster__caption--close align--right" @click="closeToaster()"> <svg height="35px" id="close" data-name="ICON" viewBox="0 0 192 192"><line id="91c3244b-a44b-4462-ad78-3b291975bc24" data-name="<Pfad>" x1="48" y1="144" x2="144" y2="48" fill="none" stroke="#ffffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="8"></line><line id="dcc09f5c-b82c-4d96-b38b-0540c6362512" data-name="<Pfad>" x1="144" y1="144" x2="48" y2="48" fill="none" stroke="#ffffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="8"></line></svg> </span> <div class="alert-toaster__description" v-html="toasterMsg"></div> </div> </div> </div> </div> </div> </script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_genericToaster/clientlibs.min.js"></script> <script id="LoggedUserMenuCmp" type="text/x-template"> <li atf_id="portal_navigation" @click="goToMyAccount" class="menu-navigation__context--action user-menu"> <a id="logged--user--menu--photo" class="menu-navigation__link menu-navigation__link--icon"></a> <a v-if="userPhoto !== ''" class="menu-navigation__link menu-navigation__link--icon" aria-haspopup="true"> <span class="visually-hidden">My Vodafone Menu</span> <div v-if="!hasUserPhoto && !isMenuOpen && !isMenuPopUp && userPhoto !== ''" class="user-menu__image user-menu__image--icon"> <svg focusable="false" aria-hidden="true" class="icon icon--small"> <use v-bind="{'xlink:href':'#'+userPhoto}"/> </svg> </div> <!--Change to new classes--> <div v-if="hasUserPhoto && !isMenuOpen && !isMenuPopUp && userPhoto !== ''" class="navigation__icon navigation__toggle" > <img :src="'data:image/png;base64,' + userPhoto" class="user-menu__image"> </div> <div v-if="isMenuOpen || isMenuPopUp" class="navigation__icon--active navigation__user--close"> <svg focusable="false" aria-hidden="true" class="icon icon--small navigation__icon"> <use xlink:href="#icon-close"></use> </svg> </div> </a> <small v-if="userPhoto !== '' && !isMenuOpen && !isMenuPopUp" class="menu-navigation__context--label">A minha conta</small> </li> </script> <div id="search--overlay" class="js-dialog dialog js-dialog-display" :class="{ 'dialog--display': dialogSearch }"> <div class="spring dialog__close-spring"> <a role="button" aria-label="Close search dialog" class="js-dialog-close dialog__close" @click="dialogSearchClose"> <svg focusable="false" aria-hidden="true" class="icon icon--small dialog__icon"> <use xlink:href="#icon-close"></use> </svg> <span class="visually-hidden">Close dialog</span> </a> </div> <div class="js-dialog-content dialog__content" style="display: block;"> <div id="ajax" class="ajax"> <div class="section section--mine-shaft"> <p class="heading heading--4 heading--light heading--center heading--trailing"> {{searchOverlayHeading}} </p> <div class="search-snack"> <div action="" data-js="_sayt, _validation" class="align-center space--bottom sayt validation form js-dynamic-content-listener" novalidate="novalidate"> <div class="spring"> <div id="search-overlay"> <div class="col-md-12"> <div id="cludo-search-content-form" class="search-snack__input" role="search"> <div class="search-form-inner"> <div class="search-form-input"> <input name="searchrequest" id="cludo-search-content-form-input" type="search" :placeholder="searchOverlayMessage" value="" title="Type search term" autocomplete="off" aria-autocomplete="list" aria-haspopup="true" v-on:keydown.capture.enter="pressedEnter()"/> <button type="button" v-on:click.capture="clickSearch" title="Search" class="button button--primary button--primary--dark"> <label class="cludo-sr-only">Procurar</label> <img alt="Lupa de Pesquisa" src="https://customer.cludo.com/assets/1977/10229/img/icons/main_icn_Search.svg"/> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <script src="/etc.clientlibs/digital-commons/components/content/structure/vf_search/clientlibs.min.js"></script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_captcha/clientlibs.min.js"></script> <div id="recaptchaV3Component"> <div id="recapctchaComponent" v-show="isLoaded" class="g-recaptcha" data-callback="onSubmit" data-size="invisible"></div> </div> <div id="login--login"> <div id="login--overlay" class="dialog" :class="{'dialog--display': dialogDisplayed}"> <div class="spring dialog__close-spring"> <a role="button" :aria-label="login_close_dialog_aria_label" class="dialog__close" @click="closeDialog"> <svg focusable="false" aria-hidden="true" class="icon icon--small dialog__icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-close"></use> </svg> <span class="visually-hidden">{{login_close_dialog_span}}</span> </a> </div> <div class="dialog__content" style="display: block;"> <div id="ajax" class="ajax"> <h2 class="heading heading--light heading--2 heading--center">{{login_page_title}}</h2> <!-- TABS SECTION --> <div class="tabs tabs--dark tabs--full"> <div class="tabs__navigation-wrapper"> <nav class="tabs__navigation tabs__navigation--fixed" role="tablist"> <a @click="changeTab(1)" ref="loginTab" class="tabs__tab" :class="{'tabs__tab--active' : activeTab === 1}" role="tab">{{login_navigation_title}} </a> <a @click="changeTab(2)" ref="registerTab" class="tabs__tab" :class="{'tabs__tab--active' : activeTab === 2}" role="tab">{{register_navigation_title}} </a> </nav> </div> <div v-if="activeTab === 1" id="login-register-login" class="tabs__content"> <div class="spring spring--sm"> <div> <div class="login__framer"> <ul id="login-register-login-list" ref="loginComponentForm" class="list list--reset login__frames" :class="{'login__frames--first': recoverDisplayed,'login__frames--last': isInactiveEmail || lockedMessageDisplayed}"> <!-- Forgot your password --> <li class="login__frame login__frame--first"> <form role="form" class="form validation" :class="{'hide': formSubmitDisplayed}"> <fieldset> <legend class="heading heading--3 no-gutter--all"> {{forgot_password_question}} </legend> <p class="login__text" v-html="forgot_password_message"></p> <label class="form__row" for="login__name--reset"> <span class="form__label">{{login_name_reset_number}}</span> <alert-msg-component arrow="true" v-show="invalidUserRecoverName && !isRecoveryPhoneNumber" :error-messages="[login_form_invalid_username_msg]"></alert-msg-component> <alert-msg-component v-show="invalidUnavailableServices" :error-messages="[login_form_unavailable_services_msg1, login_form_unavailable_services_msg2]"></alert-msg-component> <alert-msg-component arrow="true" v-show="invalidSubmitEmptyRecover" :error-messages="[login_form_invalid_username_recover_empty_msg]"></alert-msg-component> <alert-msg-component arrow="true" v-show="isRecoveryPhoneNumber" :use-html="true" :error-messages="[forgot_password_alert_sms]"></alert-msg-component> <input type="text" id="login__name--reset" name="login__name" v-model="user.usernamerecover" @focusOut="validateInput('username-recover')" @input="validateFieldChange" :placeholder="login_name_reset_number_placeholder" class="form__input" :class="{'form__input--error': borderUsernameRecoverField}"/> </label> <div class="form__row form__row--medium"> <button-with-loader type="submit" button-id="recover--password--button" class="button button--primary button--primary--dark button--full-width" @click="handlerSubmitRecoverLogin" :button-text="forgot_password_next" :disabled="user.usernamerecover.length === 0 || invalidSubmitEmptyRecover" :loading="recoverPasswordButtonLoading"> </button-with-loader> </div> <div class="form__row form__row--slim"> <button type="reset" class="button button--secondary button--secondary--dark button--full-width" @click="handlerCancelRecoverLogin"> {{forgot_password_cancel}} </button> </div> </fieldset> </form> <!-- Recover Password Success --> <form role="form" class="form validation" :class="{'hide': formSuccessDisplayed}"> <fieldset> <legend class="heading heading--3 no-gutter--all"> {{forgot_password_second_title}} </legend> <p class="login__text" v-show="SMS">{{forgot_password_second_text_sms}}</p> <p class="login__text" v-show="EMAIL">{{forgot_password_second_text_email}}</p> <div class="form__row form__row--medium"> <button class="button button--primary button--primary--dark button--full-width" @click="recoverSuccessLogin">{{forgot_password_next}} </button> </div> </fieldset> </form> </li> <!-- Login --> <li class="login__frame"> <form method="post" role="form" class="form validation"> <fieldset> <legend class="visually-hidden">{{login_label}}</legend> <alert-msg-component v-show="isActivation && isSuccessfulActivation" :message-type="'alert--success'" :icon-type="'icon-tick-outline-light'" :error-title="login_form_activation_success_title_msg" :error-messages="[login_form_activation_success_content_msg]"></alert-msg-component> <alert-msg-component v-show="isResendActivation" :message-type="'alert--success'" :icon-type="'icon-tick-outline-light'" :error-title="login_form_resend_email_title_msg" :error-messages="[login_form_resend_email_content_msg]"></alert-msg-component> <alert-msg-component v-show="resetSuccessful" :message-type="'alert--success'" :icon-type="'icon-tick-outline-light'" :error-title="login_form_reset_success_title_msg" :error-messages="[login_form_reset_success_msg]"></alert-msg-component> <alert-msg-component v-show="invalidSubmit" :error-messages="[login_form_invalid_login_msg1, login_form_invalid_login_msg2]"></alert-msg-component> <alert-msg-component v-show="invalidUnavailableServices || decryptError" :error-messages="[login_form_unavailable_services_msg1, login_form_unavailable_services_msg2]"></alert-msg-component> <alert-msg-component v-show="invalidLinkChangeEmail" :error-messages="[login_form_reset_error_email_msg, login_form_reset_error_three_msg]"></alert-msg-component> <div v-show="!invalidLinkChangeEmail"> <label class="form__row form__row--leading" for="login__name"> <span class="form__label">{{login_form_name_label}}</span> <alert-msg-component arrow="true" v-show="invalidUserName" :error-messages="[login_form_invalid_username_msg]"></alert-msg-component> <input type="text" ref="formLoginName" id="login__name" name="login__name" v-model="user.username" @focusOut="validateInput('username')" @input="validateFieldChange" :placeholder="login_form_name_placeholder" required="" class="form__input" :class="{'form__input--error': borderUsernameField}"/> </label> <label class="form__row" for="login__password"> <span class="form__label">{{login_form_password_label}}</span> <alert-msg-component arrow="true" v-show="invalidPassword" :error-messages="[login_form_invalid_password_msg]"></alert-msg-component> <input type="password" ref="formLoginPassword" id="login__password" name="login__password" v-model="user.password" @focusOut="validateInput('password')" @input="validateFieldChange" :placeholder="login_form_password_placeholder" required="" class="form__input" :class="{'form__input--error': borderPasswordField}"/> </label> <div> <label class="form__row" for="login__remember-me" style="display:inline-block"/> <input type="checkbox" id="login__remember-me" v-model="checked" name="login__remember-me" class="form__checkbox"/> <span class="form__label form__label--checkable form__label--checkable--ruled">{{login_form_remember_me}}</span> </div> <div class="form__row form__row--medium gutter--bottom"> <button-with-loader type="submit" button-id="login--button" class="button button--primary button--primary--dark button--full-width" @click="clickLogin" :button-text="login_form_submit" :disabled="invalidUserNameField || !user.username || (!user.password && user.password.length < 1)" :loading="loginButtonLoading"> </button-with-loader> </div> <div class="login__controls"> <div class="align--center"> <a id="login-register-recover-button" role="button" :aria-label="login_form_recover_button_aria_label" class="link link--body link--body--dark" @click="recoverLogin">{{login_form_recover_button}} </a> <a ref="loginRegisterBlockButton" role="button" class="link link--body link--body--dark"></a> </div> </div> </div> <div v-show="invalidLinkChangeEmail"> <div class="form__row form__row--medium gutter--bottom"> <button type="submit" class="button button--secondary button--secondary--dark button--full-width" @click="backToLogin">{{login_form_back_to_login_button}} </button> </div> </div> </fieldset> </form> </li> <!-- Recover your password --> <li class="login__frame login__frame--last"> <div v-show="isInactiveEmail"> <form role="form" method="post" class="form validation"> <fieldset> <!-- Validation Message --> <alert-msg-component v-show="isFailedResend" :error-title="login_form_resend_email_failure_title_msg" :error-messages="[login_form_resend_email_failure_content_msg]"></alert-msg-component> <alert-msg-component v-show="!isFailedResend" :error-title="login_form_inactive_email_title_msg" :message-type="'alert--info'" :icon-type="'icon-info-circle-light'" :error-messages="[login_form_inactive_email_content_msg]"></alert-msg-component> <!-- END Validation Message --> <div class="form__row form__row--medium"> <button-with-loader type="reset" button-id="resend--inactive--email--button" class="button button--primary button--primary--dark button--full-width" @click="handleResendFromInactiveEmail" :button-text="login_form_activation_resend_button" :loading="resendInactiveEmailButtonLoading"> </button-with-loader> </div> <div class="form__row form__row--slim"> <button @click="handleBackToLoginFromInactiveEmail" type="reset" class="button button--secondary button--secondary--dark button--full-width"> {{login_form_activation_back_to_login_button}} </button> </div> </fieldset> </form> </div> <div v-show="!isInactiveEmail && lockedMessageDisplayed"> <form role="form" class="form validation"> <fieldset> <alert-msg-component :error-title="login_user_blocked_msg_title" :error-messages="[login_user_blocked_msg1, login_user_blocked_msg2]"></alert-msg-component> <div class="form__row"> <button class="button button--primary button--primary--dark button--full-width" @click="recoverLogin">{{login_recover_password}} </button> </div> </fieldset> </form> </div> </li> </ul> </div> </div> </div> </div> <div v-if="activeTab === 2" id="login-register-register" class="tabs__content"> <div class="spring spring--sm"> <div class="login__framer"> <ul class="list list--reset login__frames" :class="{'login__frames--first': !(isActivation && isFailedActivation) && !preventLoading, 'login__frames--last':register.onCreate}"> <li class="login__frame login__frame--first"> <form class="form validation"> <alert-msg-component v-show="!register.validEmail" :error-title="login_form_resend_email_failure_title_msg" :error-messages="[login_form_create_email_already_exists]"></alert-msg-component> <fieldset> <div class="form__row form__row--leading" atf_id="new--register--name"> <span class="form__label form__label--required">{{login_form_create_user_name}}</span> <div class="grid grid--half-gutter"> <div class="grid__item grid__item--half-gutter grid__item--1/2"> <input type="text" :placeholder="login_form_create_user_first_name" maxlength="50" @change="runCreateValidations" v-model="register.firstName" class="form__input"/> </div> <div class="grid__item grid__item--half-gutter grid__item--1/2"> <input type="text" :placeholder="login_form_create_user_last_name" maxlength="50" @change="runCreateValidations" v-model="register.lastName" class="form__input"/> </div> </div> </div> <div class="form__row" atf_id="new--register--date"> <date-component :initial-date="initialDate" v-model="register.birthDate" :years-options="yearsOptions" :allow-future-dates="false" :allow-today-dates="false" :label-description="edit_profile_birthday_day"></date-component> </div> <div class="form__row" atf_id="new--register--email"> <span class="form__label form__label--required">{{login_form_create_user_email}}</span> <alert-msg-component arrow="true" v-show="register.invalidEmail" :error-messages="[edit_profile_invalid_email]"></alert-msg-component> <input type="text" :placeholder="login_form_create_user_email_placehold" @change="runEmailValidation" class="form__input" v-model="register.email" :disabled="preRegister" :class="{'disabled' : preRegister}"/> <small>{{login_form_create_email_login_text}}</small> </div> <div v-if="!register.invalidEmail && register.validEmail && register.email.length > 0 && !preRegister" class="form__row" atf_id="new--register--email2"> <span class="form__label form__label--required">{{login_form_create_user_email_confirmation}}</span> <alert-msg-component arrow="true" v-show="register.invalidEmailConfirmation" :error-messages="[edit_profile_invalid_email_confirmation]"></alert-msg-component> <input type="text" :placeholder="login_form_create_user_email_confirmation_placehold" @change="runEmailConfirmationValidation" class="form__input" v-model="register.emailConfirmation"/> </div> <div class="form__row" atf_id="new--register--phone"> <span class="form__label form__label--required">{{login_form_create_user_phone_number}}</span> <alert-msg-component arrow="true" v-show="register.invalidServiceId" :error-messages="[login_form_create_serviceId_invalid_msg]"></alert-msg-component> <alert-msg-component arrow="true" v-show="register.unauthorizedService" :error-messages="[login_form_create_unauthorized_service_msg]"></alert-msg-component> <alert-msg-component arrow="true" v-show="register.notValidService" :error-messages="[login_form_create_not_valid_service_msg]"></alert-msg-component> <input :placeholder="login_form_create_user_phone_number_placehold" v-model="register.serviceId" @change="runServiceNumberValidation" maxlength="9" onkeypress='return ( event.charCode == 0 ) || ( event.charCode >= 48 && event.charCode <= 57)' class="form__input"/> </div> <div class="form__row" atf_id='new--register--password'> <span class="form__label form__label--required">{{login_form_create_user_password}}</span> <alert-msg-component arrow="true" v-show="register.invalidNewPassword" :error-messages="[login_form_reset_error_validate_field_invalid_char_msg]"></alert-msg-component> <alert-msg-component arrow="true" v-show="register.passwordToShort" :error-messages="[login_form_create_password_to_short]"></alert-msg-component> <input type="password" :placeholder="login_form_create_user_password_placehold" v-model="register.password" @change="matchPasswordOnCreate" class="form__input"/> <password-strenght-component :on-invalid-new-password="onInvalidNewPassword" :message-level-one="register.passwordLabelOne" :new-password="register.password"></password-strenght-component> </div> <div class="form__row" atf_id='new--register--password2'> <span class="form__label form__label--required">{{login_form_create_user_confirm_password}}</span> <alert-msg-component arrow="true" v-show="register.invalidConfirmationNewPassword" :error-messages="[login_form_create_password_match]"></alert-msg-component> <input type="password" :placeholder="login_form_create_user_confirm_password_placehold" v-model="register.passwordConfirmation" @change="matchPasswordOnCreate" class="form__input"/> </div> <div class="form__row"> {{login_form_create_user_confirm_label}} <a target="_blank" href="https://www.vodafone.pt/info/termos-condicoes/my-vodafone-no-pc.html"><u> {{login_form_create_user_terms_conditions}}</u> </a> {{login_form_create_user_vigentes}} </div> <div class="form__row" atf_id='new--register--confirm'> <button-with-loader type="submit" button-id="create--user--button" class="button button--primary button--primary--dark button--full-width" @click="createUser" :button-text="login_form_create_user_confirm_btn" :disabled="!readyToSearch" :loading="createUserButtonLoading"> </button-with-loader> </div> </fieldset> </form> </li> <li class="login__frame"> <form role="form" method="post" class="form validation"> <fieldset> <!-- Validation Message --> <alert-msg-component v-show="isFailedResend" :error-title="login_form_resend_email_failure_title_msg" :error-messages="[login_form_resend_email_failure_content_msg]"></alert-msg-component> <alert-msg-component v-show="!isFailedResend" :error-title="login_form_activation_failure_title_msg" :error-messages="[login_form_activation_failure_content_msg]"></alert-msg-component> <!-- Register User--> <alert-msg-component v-show="register.creationError" :error-title="login_form_activation_failure_title_msg" :error-messages="preRegister? [login_form_create_error_msg_preRegister] : [login_form_create_error_msg]"></alert-msg-component> <alert-msg-component v-show="register.creationSuccess" :error-title="login_form_create_success_title" :error-messages="[login_form_create_success_msg]"></alert-msg-component> <!-- END Validation Message --> <div class="form__row form__row--medium"> <button-with-loader type="reset" button-id="resend--activation--button" class="button button--primary button--primary--dark button--full-width" @click="handleResendFromActivationFailure" :button-text="login_form_activation_resend_button" :loading="resendActivationButtonLoading"> </button-with-loader> </div> <div class="form__row form__row--slim"> <button @click="handleBackToLoginFromActivationFailure" type="reset" class="button button--secondary button--secondary--dark button--full-width"> {{login_form_activation_back_to_login_button}} </button> </div> </fieldset> </form> </li> <li class="login__frame login__frame--last"> <form role="form" method="post" class="form validation"> <fieldset> <!-- Register User--> <alert-msg-component v-show="register.creationError" :error-title="login_form_activation_failure_title_msg" :error-messages="preRegister ? [login_form_create_error_msg_preRegister] : [login_form_create_error_msg]"></alert-msg-component> <alert-msg-component v-if="register.creationSuccess" :message-type="'alert--success'" :icon-type="'icon-tick-outline-light'" :error-title="login_form_create_success_title" :error-messages="[register.created_success]"></alert-msg-component> <alert-msg-component v-if="register.creationSuccessWithPorfolio" :message-type="'alert--success'" :icon-type="'icon-tick-outline-light'" :error-title="login_form_create_success_title" :error-messages="[register.created_success_with_portfolio]"></alert-msg-component> <!-- END Validation Message --> <div class="form__row form__row--slim"> <button @click="handleContinueOnCreate" type="reset" class="button button--primary button--primary--dark button--full-width"> {{login_form_create_continue_button}} </button> </div> </fieldset> </form> </li> </ul> </div> </div> </div> </div> </div> </div> </div> <!-- MyVodafone change password page --> <div class="dialog" :class="{'dialog--display': dialogResetDisplayed}"> <div class="spring dialog__close-spring"> <a role="button" :aria-label="login_close_dialog_aria_label" class="dialog__close" @click="closeResetDialog" :class="{'hide': resetButtonHidden}"> <svg focusable="false" aria-hidden="true" class="icon icon--small dialog__icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-close"></use> </svg> <span class="visually-hidden">{{login_close_dialog_span}}</span> </a> </div> <div class="dialog__content"> <h2 class="heading heading--light heading--2 heading--center">{{login_form_reset_title}}</h2> <div class="dialog__change-pass"> <div class="spring spring--sm"> <form role="form" class="form validation" :class="{'hide': formResetHidden}"> <fieldset> <label class="form__row form__row--leading"> <alert-msg-component v-show="equalLastThree" :error-messages="[login_form_reset_information_one_msg]"></alert-msg-component> <span class="form__label">{{login_form_reset_first_field}}</span> <alert-msg-component arrow="true" v-show="invalidNewPassword" :error-messages="[login_form_reset_error_validate_field_invalid_char_msg]"></alert-msg-component> <input type="password" id="change-pass-password" name="change-pass-password" v-model="user.newpassword" @focusOut="matchPassword" class="form__input"/> <password-strenght-component :on-invalid-new-password="onInvalidNewPasswordReset" :new-password="user.newpassword"></password-strenght-component> </label> <label class="form__row"> <span class="form__label">{{login_form_reset_second_field}}</span> <alert-msg-component arrow="true" v-show="invalidConfirmNewPassword" :error-messages="[login_form_reset_error_match_msg]"></alert-msg-component> <input type="password" id="change-pass-confirm" name="change-pass-confirm" v-model="user.newconfirmpassword" @focusOut="matchPassword" class="form__input"/> </label> <div class="form__row form__row--medium gutter--bottom"> <button-with-loader type="submit" button-id="reset--password--continue--button" class="button button--primary button--primary--dark button--full-width" @click="resetPasswordFromBackoffice ? resetPasswordBackOffice($event) : resetPassword($event)" :button-text="login_form_reset_continue_button" :loading="resetPasswordContinueButtonLoading" :disabled="!(this.user.newpassword && this.user.newpassword.length >= 8 && this.user.newconfirmpassword && this.user.newconfirmpassword.length >= 8)"> </button-with-loader> </div> </fieldset> </form> <fieldset :class="{'hide': errorResetHidden}"> <label class="form__row" for="login__name--reset"> <alert-msg-component :error-title="login_form_reset_error_validate_field_invalid_email_key_msg_title" :error-messages="[login_form_reset_error_validate_field_invalid_email_key_msg_one, login_form_reset_error_validate_field_invalid_email_key_msg_two]"></alert-msg-component> </label> <div class="form__row form__row--medium"> <button type="submit" class="button button--primary button--primary--dark button--full-width" @click="toRecoverLogin"> {{login_form_reset_error_validate_field_invalid_key_recover_button}} </button> </div> <div class="form__row form__row--slim"> <button class="button button--secondary button--secondary--dark button--full-width" @click="toLogin">{{login_form_reset_error_validate_field_invalid_key_to_login_button}} </button> </div> </fieldset> </div> </div> </div> </div> </div> <script id="alertMessagesCmp" type="text/x-template"> <div role="alert" class="alert" :class="[{ 'alert--arrow': arrow }, defaultAlertClass]"> <div class="caption"> <div :class="'caption__media caption__media--'+iconPosition+' alert__media'"> <svg :class="'icon icon--small icon--'+iconColor"> <use xmlns:xlink="http://www.w3.org/1999/xlink" v-bind="{'xlink:href':'#'+iconType}"></use> </svg> </div> <div :class="'caption__text caption__text--'+textPosition+' alert__text'"> <p v-if="!notUsingTitle" class="validation__details js-validation-details heading heading--5 heading--bold heading--no-gutter"> {{defaultErrorTitle}} </p> <slot></slot> <div v-if="!defaultSlot"> <ul class="js-validation-listing list list--reset validation__listing" > <li class="list__item" v-for="msg in defaultErrorMessages">{{msg}}</li> </ul> </div> </div> </div> </div> </script> <!-- Define Template --> <script id="passwordStrenghtCmp" type="text/x-template"> <div class="password-checker" v-bind:class="passwordChecker"> {{messages.login_form_reset_security_field}} <div class="password-checker__bars"> <div class="password-checker__bar password-checker__bar--l0"></div> <div class="password-checker__bar password-checker__bar--l1"></div> <div class="password-checker__bar password-checker__bar--l2"></div> <div class="password-checker__bar password-checker__bar--l3"></div> <div class="password-checker__bar password-checker__bar--l4"></div> </div> {{messages.login_form_reset_information_one_msg}} {{messages.login_form_reset_information_two_msg}} </div> </script> <!-- Define Template --> <script id="date-component-template" type="text/x-template"> <div class="form__row form__label"> <span class="form__label">{{dateLabels.title}}</span> <alert-msg-component :background="alertMessageColor" arrow="true" v-show="!isValidDate" :error-messages="[dateLabels.invalidDateMessage]"></alert-msg-component> <div class="grid grid--half-gutter"> <div class="grid__item grid__item--half-gutter grid__item--1/3"> <days-autocomplete v-model="daySelected" :orderBy="'id'" :options="days" :label="'value'" :max-height="'300px'" :placeholder="'Dia'"></days-autocomplete> </div> <div class="grid__item grid__item--half-gutter grid__item--1/3"> <months-autocomplete v-model="monthSelected" :orderBy="'id'" :options="months" :label="'value'" :max-height="'300px'" :placeholder="'M锚s'"></months-autocomplete> </div> <div class="grid__item grid__item--half-gutter grid__item--1/3"> <years-autocomplete v-model="yearSelected" :orderBy="'id'" :options="years" :label="'value'" :max-height="'300px'" :placeholder="'Ano'"></years-autocomplete> </div> </div> <small v-if="smallMessage !== ''">{{smallMessage}}</small> </div> </script> <!-- Define Template --> <script id="days-autocomplete-template" type="text/x-template"> <div :dir="dir" class="v-dropdown v-select" :class="dropdownClasses"> <div ref="toggle" @mousedown.prevent="toggleDropdown" :class="['dropdown-toggle', 'clearfix']"> <slot v-for="option in valueAsArray" name="selected-option-container" :option="option" :deselect="deselect" :multiple="multiple" :disabled="disabled"> <span class="selected-tag" :key="option.index"> <slot name="selected-option" v-bind="option">{{getOptionLabel(option)}}</slot> <button v-if="multiple" :disabled="disabled" @click="deselect(option)" type="button" class="close" aria-label="Remove option"> <span aria-hidden="true">×</span> </button> </span> </slot> <input ref="search" v-model="search" @keydown.delete="maybeDeleteValue" @keyup.esc="onEscape" @keydown.up.prevent="typeAheadUp" @keydown.down.prevent="typeAheadDown" @keydown.enter.prevent="onSearchBlur" @blur="onSearchBlur" @focus="onSearchFocus" type="search" class="form-control" autocomplete="false" :disabled="disabled" :placeholder="searchPlaceholder" :tabindex="tabindex" :readonly="!searchable" :style="{ width: isValueEmpty ? '100%' : 'auto' }" :id="inputId" aria-label="Search for option"> <i v-if="!noDrop" ref="openIndicator" role="presentation" class="open-indicator"></i> <slot name="spinner"> <div class="spinner" v-show="mutableLoading">Loading...</div> </slot> </div> <transition :name="transition"> <ul ref="dropdownMenu" v-if="dropdownOpen" class="dropdown-menu" :style="{ 'max-height': maxHeight }"> <li v-for="(option, index) in filteredOptions" :key="index" :class="{ active: isOptionSelected(option), highlight: index === typeAheadPointer }" @mouseover="typeAheadPointer = index"> <a @mousedown.prevent="select(option)"> <slot name="option" v-bind="option"> {{ getOptionLabel(option) }} </slot> </a> </li> </ul> </transition> </div> </script> <!-- Define Template --> <script id="months-autocomplete-template" type="text/x-template"> <div :dir="dir" class="v-dropdown v-select" :class="dropdownClasses"> <div ref="toggle" @mousedown.prevent="toggleDropdown" :class="['dropdown-toggle', 'clearfix']"> <slot v-for="option in valueAsArray" name="selected-option-container" :option="option" :deselect="deselect" :multiple="multiple" :disabled="disabled"> <span class="selected-tag" :key="option.index"> <slot name="selected-option" v-bind="option">{{getOptionLabel(option)}}</slot> <button v-if="multiple" :disabled="disabled" @click="deselect(option)" type="button" class="close" aria-label="Remove option"> <span aria-hidden="true">×</span> </button> </span> </slot> <input ref="search" v-model="search" @keydown.delete="maybeDeleteValue" @keyup.esc="onEscape" @keydown.up.prevent="typeAheadUp" @keydown.down.prevent="typeAheadDown" @keydown.enter.prevent="onSearchBlur" @blur="onSearchBlur" @focus="onSearchFocus" type="search" class="form-control" autocomplete="false" :disabled="disabled" :placeholder="searchPlaceholder" :tabindex="tabindex" :readonly="!searchable" :style="{ width: isValueEmpty ? '100%' : 'auto' }" :id="inputId" aria-label="Search for option"> <i v-if="!noDrop" ref="openIndicator" role="presentation" class="open-indicator"></i> <slot name="spinner"> <div class="spinner" v-show="mutableLoading">Loading...</div> </slot> </div> <transition :name="transition"> <ul ref="dropdownMenu" v-if="dropdownOpen" class="dropdown-menu" :style="{ 'max-height': maxHeight }"> <li v-for="(option, index) in filteredOptions" :key="index" :class="{ active: isOptionSelected(option), highlight: index === typeAheadPointer }" @mouseover="typeAheadPointer = index"> <a @mousedown.prevent="select(option)"> <slot name="option" v-bind="option"> {{ getOptionLabel(option) }} </slot> </a> </li> </ul> </transition> </div> </script> <!-- Define Template --> <script id="years-autocomplete-template" type="text/x-template"> <div :dir="dir" class="v-dropdown v-select" :class="dropdownClasses"> <div ref="toggle" @mousedown.prevent="toggleDropdown" :class="['dropdown-toggle', 'clearfix']"> <slot v-for="option in valueAsArray" name="selected-option-container" :option="option" :deselect="deselect" :multiple="multiple" :disabled="disabled"> <span class="selected-tag" :key="option.index"> <slot name="selected-option" v-bind="option">{{getOptionLabel(option)}}</slot> <button v-if="multiple" :disabled="disabled" @click="deselect(option)" type="button" class="close" aria-label="Remove option"> <span aria-hidden="true">×</span> </button> </span> </slot> <input ref="search" v-model="search" @keydown.delete="maybeDeleteValue" @keyup.esc="onEscape" @keydown.up.prevent="typeAheadUp" @keydown.down.prevent="typeAheadDown" @keydown.enter.prevent="onSearchBlur" @blur="onSearchBlur" @focus="onSearchFocus" type="search" class="form-control" autocomplete="false" :disabled="disabled" :placeholder="searchPlaceholder" :tabindex="tabindex" :readonly="!searchable" :style="{ width: isValueEmpty ? '100%' : 'auto' }" :id="inputId" aria-label="Search for option"> <i v-if="!noDrop" ref="openIndicator" role="presentation" class="open-indicator"></i> <slot name="spinner"> <div class="spinner" v-show="mutableLoading">Loading...</div> </slot> </div> <transition :name="transition"> <ul ref="dropdownMenu" v-if="dropdownOpen" class="dropdown-menu" :style="{ 'max-height': maxHeight }"> <li v-for="(option, index) in filteredOptions" :key="index" :class="{ active: isOptionSelected(option), highlight: index === typeAheadPointer }" @mouseover="typeAheadPointer = index"> <a @mousedown.prevent="select(option)"> <slot name="option" v-bind="option"> {{ getOptionLabel(option) }} </slot> </a> </li> </ul> </transition> </div> </script> <script id="buttonWithLoaderCmp" type="text/x-template"> <button v-if="e2eVbu" :id="innerButtonId" class="button" type="button" @click="$emit('click', $event)" :class="[{'button--loading': loading},{'button-disabled': disabled}, classes]" :disabled="disabled"> <span :class="{'no-visible': loading}">{{ buttonText }}</span> <slot></slot> </button> <button v-else :id="innerButtonId" class="button" type="button" @click="$emit('click', $event)" :class="[{'button--loading': loading},{'button--disabled': disabled}, classes]" :disabled="disabled"> <span :class="{'no-visible': loading}">{{ buttonText }}</span> <slot></slot> </button> </script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_buttonWithLoader/clientlibs.min.js"></script> <div id="choose-basket" class="dialog" xmlns:v-on="http://www.w3.org/1999/xhtml"> <div class="dialog__close dialog__content" v-if="visible" v-cloak> <div class="dialog dialog--flexible-transparency dialog--fadeIn"> <div class="spring dialog--position"> <div class="section section--white card--border"> <div class="spring dialog__close-spring"> <div v-on:click="closeDialog" class="js-tooltip-close tooltip--pop-up dialog__close cart-persistency__close"> <svg class="icon icon--small dialog__icon"> <use xlink:href="#icon-close"></use> </svg> <span class="visually-hidden">{{i18n.closeDialog}}</span> </div> </div> <div class="card__content"> <div class="network__content"> <h2 class="heading heading--2 align--center gutter--top"> <b>{{i18n.youHaveTwoCarts}}</b> </h2> <h3 class="heading heading--3 align--center gutter--top"> {{i18n.chooseOne}} </h3> <div class="spring cart-persistency__content"> <div class="grid"> <div class="grid__item grid__item--1/2 grid__item--sm-1/1 grid__item--gutter half-gutter--bottom" v-for="(basket, index) in data"> <div class="align--center"> <div class="cart-persistency section--wild-sand"> <div v-for="item in basket.cartItems"> <!-- PACK --> <div class="grid half-gutter--top" v-if="isPackItem(item)"> <div class="grid__item grid__item--1/1 align--left"> <span class="font-color--dusty-gray half-gutter--right">{{item.quantity}}{{CONSTANTS.TIMES}}</span> <span class="display--inline-block choose-basket-prod-name" v-html="item.eshopProductDTO.name ? item.eshopProductDTO.name : item.eshopProductDTO.title"></span> </div> <div v-for="product in item.eshopProductDTO.variants[0].packProducts"> <div class="grid__item grid__item--1/1 align--left"> <span class="cart-persistency__item--pack">{{product.name}}</span> </div> <div class="grid__item grid__item--4/7 align--left"> <span class="cart-persistency__item--characteristics" v-if="product.color">{{i18n.color}} {{CONSTANTS.SPACE}} {{product.color}}</span><br/> <span class="cart-persistency__item--characteristics" v-if="product.storage">{{i18n.storage}} {{CONSTANTS.SPACE}} {{product.storage}}</span> </div> <div class="grid__item grid__item--3/7 align--right"> <span class="cart-persistency__item--points">{{i18n.included}}</span> </div> </div> <div class="grid__item grid__item--1/1 align--right" v-if="isCVItem(item)"> <span class="cart-persistency__item--price">{{formatPrice(getItemEURValue(item))}}</span> {{CONSTANTS.SPACE}} {{CONSTANTS.PLUS}} {{CONSTANTS.SPACE}} {{getItemPOINTSValue(item)}} {{CONSTANTS.SPACE}} <span class="cart-persistency__item--points">{{CONSTANTS.SPACE}}{{i18n.points}}</span> </div> <div class="grid__item grid__item--1/1 align--right" v-else> <span class="cart-persistency__item--price">{{checkIfFreePrice(getItemEURValue(item),item.eshopProductDTO.variants[0].packProducts[0].productType)}}</span> </div> </div> <!-- ITEM --> <div class="grid half-gutter--top" v-else> <div class="grid__item grid__item--1/1 align--left"> <span class="font-color--dusty-gray half-gutter--right">{{item.quantity}}{{CONSTANTS.TIMES}}</span> <span class="display--inline-block choose-basket-prod-name" v-html="item.eshopProductDTO.name ? item.eshopProductDTO.name : item.eshopProductDTO.title"></span> </div> <div class="grid__item grid__item--3/7 align--left"> <span class="cart-persistency__item--characteristics" v-if="item.eshopProductDTO.variants[0].color"> {{i18n.color}} {{CONSTANTS.SPACE}} {{item.eshopProductDTO.variants[0].color}} </span><br/> <span class="cart-persistency__item--characteristics" v-if="item.eshopProductDTO.variants[0].storage"> {{i18n.storage}} {{CONSTANTS.SPACE}} {{item.eshopProductDTO.variants[0].storage}} </span> </div> <div class="grid__item grid__item--4/7 align--right" v-if="isCVItem(item)"> <span class="cart-persistency__item--price">{{formatPrice(getItemEURValue(item))}}</span> {{CONSTANTS.SPACE}} {{CONSTANTS.PLUS}} {{CONSTANTS.SPACE}} {{getItemPOINTSValue(item)}} {{CONSTANTS.SPACE}} <span class="cart-persistency__item--points">{{CONSTANTS.SPACE}}{{i18n.points}}</span> </div> <div class="grid__item grid__item--4/7 align--right" v-else> <span class="cart-persistency__item--price">{{checkIfFreePrice(getItemEURValue(item),item.eshopProductDTO.productType)}}</span> </div> </div> </div> <div class="grid gutter--top"> <button-with-loader :button-id="'chooseBtn'+index" class="button button--primary" @click="selectBasket(basket.id)" :button-text="i18n.selectCart" :loading="basket.isLoading"> </button-with-loader> </div> </div> </div> </div> </div> </div> <div class="spring align--center half-gutter--top cart-persistency__item--characteristics"> {{i18n.afterSelectionDesc}} </div> </div> </div> </div> </div> </div> </div> </div> <script id="buttonWithLoaderCmp" type="text/x-template"> <button v-if="e2eVbu" :id="innerButtonId" class="button" type="button" @click="$emit('click', $event)" :class="[{'button--loading': loading},{'button-disabled': disabled}, classes]" :disabled="disabled"> <span :class="{'no-visible': loading}">{{ buttonText }}</span> <slot></slot> </button> <button v-else :id="innerButtonId" class="button" type="button" @click="$emit('click', $event)" :class="[{'button--loading': loading},{'button--disabled': disabled}, classes]" :disabled="disabled"> <span :class="{'no-visible': loading}">{{ buttonText }}</span> <slot></slot> </button> </script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_chooseBasket/clientlibs.min.js"></script> </div> </ul> </nav> </div> </div> </nav> </div> <template id="navigationMenu"> <div> <div class="display--flex hide--sm hide--md position--relative" v-cloak> <template v-for="(first, i) in array"> <li class="menu-navigation__item--conditions align"> <div :class="{'menu-navigation__item--section' : first.beginNewSection}"></div> <a class="menu-navigation__link first-level" :class="{'menu-navigation__link--active': active.desktop.first === i}" aria-haspopup="true" :onclick="first.paramOnClick ? first.paramOnClick : null" @click="first.secondLevel ? openSecondLevel(i, first.text) : headerTealiumRequest(openSecondLevelActionId, first.text)" :href="first.linkTo && !first.secondLevel ? first.linkTo : null" :target="first.target && !first.secondLevel ? first.target : null" :title="first.title"> {{first.text}} <span class="visually-hidden">{{first.text}}</span> </a> </li> </template> <transition name="slide-fade"> <div v-if="active.desktop.first > -1" class="menu-navigation__level--second" :data-level="active.desktop.second != -1 ? 'menu-tertiary' : ''"> <template v-for="(first, i) in array"> <template v-if="active.desktop.first === i"> <ul class="menu-navigation__list menu-navigation__scrollable menu-navigation__container" role="navigation" v-if="first.secondLevel"> <li> <template v-for="(second, j) in first.secondLevel"> <a class="menu-navigation__level--second-content" v-if="validRule(second)" :onclick="performSecondOnClick(second)" @click="onAnchorClickHandler(second, 'linkTo', () => { second.thirdLevel ? openThirdLevel(j, second.text) : headerTealiumRequest(openThirdLevelActionId, second.text); },!second.thirdLevel)" :title="second.title"> <span class="menu-navigation__link" :class="{'menu-navigation__link--active': active.desktop.second === j}">{{second.text}}</span> <span class="visually-hidden">{{second.text}}</span> <svg v-if="second.thirdLevel && second.linkTo || second.rule" focusable="false" aria-hidden="true" class="icon icon--extra-small icon--mine-shaft"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-right"> </use> </svg> </a> </template> </li> </ul> <transition name="slide-fade"> <div v-if="active.desktop.second > -1" class="menu-navigation__level--third menu-navigation__scrollable menu-navigation__scrollable--third menu-navigation__level--third-active"> <nav v-for="(second, j) in first.secondLevel"> <ul class="list--reset" v-if="second.thirdLevel && active.desktop.second === j"> <li class="half-gutter--bottom" v-if="second.TextForLinkOnThirdLevel"> <a :onclick="second.paramOnClick ? second.paramOnClick : null" @click="onAnchorClickHandler(second, 'linkTo', () => { headerTealiumRequest(thirdLevelActionId, second.TextForLinkOnThirdLevel); })" :title="second.title" class="font-color--red">{{second.TextForLinkOnThirdLevel}}</a> </li> <li v-for="(third, k) in second.thirdLevel" :class="{'flush--top flush--bottom': third.backgroundImagePath, 'border--bottom-silver': !third.backgroundImagePath && (k === second.thirdLevel.length - 1 || (second.thirdLevel.length > k+1 && !second.thirdLevel[k+1].backgroundImagePath))}"> <a :onclick="third.paramOnClick ? third.paramOnClick : null" @click="onAnchorClickHandler(third, 'linkTo', () => { this.headerTealiumRequest(openThirdLevelActionId, !third.backgroundImagePath ? third.text : `\:Highlight`); })" :title="third.title"> <template v-if="!third.backgroundImagePath"> <span v-html="third.text"></span> </template> <template v-else> <div class="hero menu-navigation__level--third-image"> <div class="background background--cover hero__background hero__background--no-tint"> <picture> <source :data-srcset="third.backgroundImagePath" :srcset="third.backgroundImagePath"/> <img :data-srcset="third.backgroundImagePath" alt="Image description" :srcset="third.backgroundImagePath" :src="third.backgroundImagePath" class="lazyloaded"/> </picture> <noscript> <img :src="third.backgroundImagePath" alt=""/> </noscript> </div> <div class="hero__band"> <h6 class="heading heading--6 heading--light hero__heading align--left gutter--left" v-html="third.text"> </h6> </div> </div> </template> </a> </li> </ul> </nav> </div> </transition> <a class="menu-navigation__level--second-closed" @click="closeAll()"> <svg focusable="false" aria-hidden="true" class="icon icon--white icon--extra-small icon--thick"> <use xlink:href="#icon-close"></use> </svg> <span class="visually-hidden">Close Menu</span> </a> </template> </template> <div class="menu-navigation__overlay" @click="closeAll()"></div> </div> </transition> </div> <li data-layout-type="mobile-menu" class="no-gutter--left menu-navigation__item hide--lg"> <a class="menu-navigation__link menu-navigation__link--nav" :class="{'menu-navigation__link--active': active.mobile.zero === 1}" @click="openHamburger()" aria-haspopup="true"> <svg focusable="false" aria-hidden="true" class="icon icon--small"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-menu"></use> </svg> <small class="half-gutter--left align--middle">Menu</small> </a> <div class="mobile-menu" v-show="active.mobile.zero != -1"> <div class="menu-navigation__level--second" :class="{'menu-navigation__level--second-close': active.mobile.zero === 0}"> <nav> <ul class="menu-navigation__scrollable"> <div v-if="zeroLevelArrayActive" class="business-tabs__menu"> <li v-for="sub in zeroLevelArrayActive"> <a :onclick="sub.paramOnClick ? sub.paramOnClick : null" @click="onAnchorClickHandler(sub, 'linkURL', () => { toggleSubEntry(sub); headerLevelZeroTealiumRequest(upperLevelMenuActionId, sub.text); })" :class="selectedJson === sub.context ? 'business-tabs__menu active' : null"> {{sub.text}} </a> </li> </div> <template v-for="(first, i) in array"> <li class="menu-navigation__item"> <a class="menu-navigation__link" :onclick="first.paramOnClick ? first.paramOnClick : null" @click="onAnchorClickHandler(first, 'linkTo', () => { first.secondLevel ? openSecondLevelMobile(i, first.text) : headerTealiumRequest(openSecondLevelActionId, first.text) }, !first.secondLevel)" :title="first.title" :class="{'menu-navigation__link--subnav': first.linkTo}" aria-expanded="false" aria-selected="false" tabindex="0" role="tab" aria-haspopup="false">{{first.text}} <span class="visually-hidden">{{first.text}}</span> <svg v-if="first.secondLevel && first.linkTo" focusable="false" aria-hidden="true" class="icon icon--extra-small icon--red icon--thick float--right"> <use xlink:href="#icon-chevron-right"></use> </svg> </a> <section v-if="first.secondLevel" class="menu-navigation__level--third" :class="{'menu-navigation__level--third-active': active.mobile.first === i}"> <nav> <ul class="menu-navigation__scrollable"> <li> <a @click="returnTo(1)"> <svg focusable="false" aria-hidden="true" class="icon icon--small icon--thick"> <use xlink:href="#icon-arrow-left"></use> </svg> <span class="half-gutter--left align--middle">{{first.text}}</span> </a> </li> <template v-for="(second, j) in first.secondLevel"> <li v-if="validRule(second)"> <a :onclick="performSecondOnClick(second)" @click="onAnchorClickHandler(second, 'linkTo', () => { second.thirdLevel ? openThirdLevelMobile(j, second.text) : headerTealiumRequest(openThirdLevelActionId, second.text) }, !second.thirdLevel)" :title="second.title"> {{second.text}} <svg v-if="second.thirdLevel && second.linkTo || second.rule" focusable="false" aria-hidden="true" class="icon icon--extra-small icon--red icon--thick float--right"> <use xlink:href="#icon-chevron-right"></use> </svg> </a> <section v-if="second.thirdLevel && active.mobile.second === j" class="menu-navigation__level--fourth menu-navigation__level--fourth-active"> <nav> <ul class="list--reset"> <li> <a @click="returnTo(2)"> <svg focusable="false" aria-hidden="true" class="icon icon--small icon--thick"> <use xlink:href="#icon-arrow-left"></use> </svg> <span class="half-gutter--left align--middle">{{second.text}}</span> </a> </li> <li v-if="second.TextForLinkOnThirdLevel"> <a :onclick="second.paramOnClick ? second.paramOnClick : null" @click="onAnchorClickHandler(second, 'linkTo', () => { headerTealiumRequest(thirdLevelActionId, second.TextForLinkOnThirdLevel) })" :title="second.title" class="font-color--red">{{second.TextForLinkOnThirdLevel}}</a> </li> <li v-for="(third, k) in second.thirdLevel" :class="{'flush--top flush--bottom': third.backgroundImagePath, 'border--bottom-silver': !third.backgroundImagePath && (k === second.thirdLevel.length - 1 || (second.thirdLevel.length > k+1 && !second.thirdLevel[k+1].backgroundImagePath))}"> <a :onclick="third.paramOnClick ? third.paramOnClick : null" @click="onAnchorClickHandler(third, 'linkTo', () => { headerTealiumRequest(thirdLevelActionId, third.text) })" :title="third.title"> <template v-if="!third.backgroundImagePath"> <span v-html="third.text"></span> </template> <template v-else> <div class="hero menu-navigation__level--fourth-image"> <div class="background background--cover hero__background hero__background--no-tint"> <picture> <source v-if="third.backgroundImagePath" :data-srcset="third.backgroundImagePath" :srcset="third.backgroundImagePath" media="(min-width: 970px)"/> <source v-if="third.backgroundImagePathTablet" :data-srcset="third.backgroundImagePathTablet" :srcset="third.backgroundImagePathTablet" media="(min-width: 640px)"/> <source v-if="third.backgroundImagePathMobile" :data-srcset="third.backgroundImagePathMobile" :srcset="third.backgroundImagePathMobile"/> <img :data-srcset="third.backgroundImagePath" alt="Image description" :src="third.backgroundImagePath" class="lazyloaded width--100"/> </picture> <noscript> <img :src="third.backgroundImagePath" alt=""/> </noscript> </div> <div class="hero__band"> <h6 class="heading heading--6 heading--light hero__heading align--left gutter--left" v-html="third.text"> </h6> </div> </div> </template> </a> </li> </ul> </nav> </section> </li> </template> </ul> </nav> </section> </li> </template> <template v-for="(zero, z) in zeroLevelArrayInactive"> <li class="menu-navigation__global--options" :class="{'gutter--top': z === 0, 'border--bottom-silver': z === zeroLevelArrayInactive.length - 1}"> <a :onclick="zero.paramOnClick ? zero.paramOnClick : null" @click="onAnchorClickHandler(zero, 'linkURL', () => { headerLevelZeroTealiumRequest(upperLevelMenuActionId, zero.text) })"> Ir para {{zero.text}} </a> </li> </template> <li class="half-gutter--top"> <div> <svg viewBox="0 0 192 192" class="icon icon--small icon--sub menu-navigation__global--icon"> <line id="afa0dea2-fdb5-4188-b127-0390bcfc2413" fill="none" stroke="#333333" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="124" y1="84" x2="92" y2="84"></line> <line id="fca2dd7d-8243-463f-9694-d76870f6b696" fill="none" stroke="#333333" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="76" y1="84" x2="68" y2="84"></line> <line id="c0f6faeb-1130-48f3-b62a-bcd83c3abeaf" fill="none" stroke="#333333" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="124" y1="108" x2="92" y2="108"></line> <line id="_x39_f9d3ac1-3527-469f-b7cc-d7b4a8af09e5" fill="none" stroke="#333333" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="76" y1="108" x2="68" y2="108"></line> <line id="_x30_e845ff5-6eb9-4522-9631-9073c7db3199" fill="none" stroke="#333333" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="124" y1="132" x2="92" y2="132"></line> <line id="_x39_0b7f6c8-8095-43f3-848c-53ffec273712" fill="none" stroke="#333333" stroke-width="8" stroke-linecap="round" stroke-miterlimit="10" x1="76" y1="132" x2="68" y2="132"></line> <path fill="none" stroke="#333333" stroke-width="8" stroke-linejoin="round" d="M148,52l-32-32H56c-6.627,0-12,5.373-12,12v128 c0,6.627,5.373,12,12,12h80c6.627,0,12-5.373,12-12V52z"> </path> <polyline fill="none" stroke="#333333" stroke-width="8" stroke-linejoin="round" points="116,20.23 116,52 148,52 "></polyline> </svg> <a class="menu-navigation__global--sub" :onclick="secondEntryObject.paramOnClick ? secondEntryObject.paramOnClick : null" @click="onAnchorClickHandler(secondEntryObject, 'linkURL', () => { headerLevelZeroTealiumRequest(rightSideMenuActionId, secondEntryObject.text) })" role="button" :aria-label="secondEntryObject.text"> {{secondEntryObject.text}} </a> </div> </li> </ul> </nav> <a @click="closeAllMobile()" class="menu-navigation__level--second-closed"> <svg focusable="false" aria-hidden="true" class="icon icon--white icon--extra-small icon--thick"> <use xlink:href="#icon-close"></use> </svg> <span class="visually-hidden">Close Menu</span> </a> <div class="menu-navigation__overlay" @click="closeAllMobile()"></div> </div> </div> </li> </div> </template> <script src="/etc.clientlibs/digital-commons/components/content/structure/ws10/vf_navigation/vf_headerMenu/clientlibs.min.js"></script> <script src="/etc.clientlibs/digital-commons/components/content/structure/ws10/vf_navigation/clientlibs.min.js"></script> </div> </div> </div></div> </div> <div class="responsivegrid aem-GridColumn--default--none aem-GridColumn aem-GridColumn--default--12 aem-GridColumn--offset--default--0"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="vf_heroBanner parbase aem-GridColumn aem-GridColumn--default--12"> <div class="hello "> <div class="background background--cover hello__background--static"> <div class="background__image lazyload" data-bgset="/content/dam/digital-sites/outros/outros-padrao-generico-6-hbm3.png [(max-width: 640px)] | /content/dam/digital-sites/outros/outros-padrao-generico-6-hbm3.png [(max-width: 320px)]| /content/dam/digital-sites/outros/outros-padrao-generico-6-hb3.png/jcr:content/renditions/cq5dam.web.1920.1000.png"> </div> <noscript> <div class="background__image" style="background-image: url(/content/digital-sites/pt/particulares/pacotes/cobertura/jcr:content/root/responsivegrid/vf_herobanner/desktop.img.png/1627314378560.png)"></div> </noscript> </div> <div class="hello__band hello__band--static "> <div class="section section__level--three"> <div class="spring"> <div class="vf_heading vf_parent_component"> <div class="section section__flush flush--half " style="background-color: ; color : #FFFFFF; border-radius: px;"> <div class="spring grid__item--align-center "> <h1 class="heading heading--1 heading--light no-gutter--all" style="color : ;"> <span class="chevron chevron--inline chevron--inline--wrap"> <span class="chevron__text"> Cobertura </span> </span> </h1> </div> </div> <script src="/etc.clientlibs/digital-myvodafone/components/content/authored/vf_parent_component/clientlibs.min.js"></script> <script src="/etc.clientlibs/digital-commons/components/content/vf_parent_component/clientlibs.min.js"></script> </div> </div> </div> </div> </div> </div> <div class="vf_breadcrumb aem-GridColumn aem-GridColumn--default--12"><div id="breadcrumb"> <nav class="breadcrumbs breadcrumbs--dark breadcrumbs_borders "> <div class="spring"> <p class="visually-hidden">Breadcrumbs</p> <ol class="breadcrumbs__list hide--sm hide--md"> <li class="breadcrumbs__item"> <a href="/" role="button" aria-label="In铆cio" class="breadcrumbs__crumb breadcrumbs__crumb--first"> In铆cio </a> <svg focusable="false" aria-hidden="true" class="icon icon--extra-extra-small" v-if="!isLast('0','3')"> <use xlink:href="#icon-chevron-right"/> </svg> </li> <li class="breadcrumbs__item"> <a href="/pacotes.html" role="button" aria-label="Pacotes" class="breadcrumbs__crumb breadcrumbs__crumb--first"> Pacotes </a> <svg focusable="false" aria-hidden="true" class="icon icon--extra-extra-small" v-if="!isLast('1','3')"> <use xlink:href="#icon-chevron-right"/> </svg> </li> <li class="breadcrumbs__item"> Cobertura </li> </ol> <ul class="breadcrumbs__list hide--lg" v-cloak> <li v-if="isPreviousToLast('0','3')"> <div> <a href="/" class="breadcrumbs__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small"> <use xlink:href="#icon-chevron-right"/> </svg> </a> <a href="/" class="breadcrumbs__crumb"> In铆cio </a> </div> </li> <li v-if="isPreviousToLast('1','3')"> <div> <a href="/pacotes.html" class="breadcrumbs__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small"> <use xlink:href="#icon-chevron-right"/> </svg> </a> <a href="/pacotes.html" class="breadcrumbs__crumb"> Pacotes </a> </div> </li> <li v-if="isPreviousToLast('2','3')"> <div> <a href="/pacotes/cobertura.html" class="breadcrumbs__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small"> <use xlink:href="#icon-chevron-right"/> </svg> </a> <a href="/pacotes/cobertura.html" class="breadcrumbs__crumb"> Cobertura </a> </div> </li> </ul> </div> </nav> </div> <div> <script src="/etc.clientlibs/digital-commons/components/content/structure/vf_breadcrumb/clientlibs.min.js"></script> </div></div> <div class="vf_grid vf_parent_component aem-GridColumn aem-GridColumn--default--12"> <div class="section section__flush flush--half-bottom " style="border-radius: px;"> <div class="grid "> <div class="grid__item grid__item--top grid__item--align-left grid__item--sm-1/1 grid__item--md-1/1 grid__item--1/1"> <div class="vf_heading vf_parent_component"> <div class="section section__flush flush--top flush--bottom " style="border-radius: px;"> <div class="spring grid__item--align-center " style="color : #333333;"> <h3 class="heading heading--3 heading--light no-gutter--all" style="color : ;"> <span class="chevron chevron--inline chevron--inline--wrap"> <span class="chevron__text"> Teste a cobertura na sua morada e descubra as<br class="hide--sm"/> ofertas exclusivas que temos para si </span> </span> </h3> </div> </div> </div> <div class="vf_checkFiber vf_parent_component"> <div class="section section__flush flush--top flush--bottom " style="border-radius: px;"> <div class="spring " style="color : #333333;"> <div id="checkFiber"> <check-fiber-cmp parent-id="checkFiber" results-path="/content/digital-sites/pt/particulares/resultados-cobertura.html" :area-limit="{margin: 200, strokeColor: 'rgb(203,0,0)', strokeWeight: 2}" component-loader-style="/content/dam/digital-commons/vodafone-spinner.json" search-button-loader-style="/content/dam/digital-commons/red_30px_stroke_15.json" results-button-loader-color="/content/dam/digital-commons/white_30px_stroke_15.json" css-label-initial="font-color--dove-gray" css-label-result="font-color--white" error-color-picker-result="font-color--red-tech" error-color-picker-initial="font-color--red-tech" asterisk-color-required-initial="editable-color__required--red" asterisk-color-required-result="editable-color__required--red" combo-loader-style="/content/dam/digital-commons/white_30px_stroke_15.json" user-profile="PARTICULAR" type-cmp="FULL"> </check-fiber-cmp> </div> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_captchav3/clientlibs.min.js"></script> <template id="checkFiberCmp" class="hide" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml"> <div> <div v-if="isLoading" class="section gutter--top section__gutter--bottom"> <div class="spring spring--flex"> <h6 class="heading heading--center heading--light heading--6"> {{i18nLabels[typeCmp].loadingMessage}} </h6> <div class="align--center" data-arrows="true" data-dots="false" tabindex="0"> <div id="check-coverage-loader-availability"></div> </div> </div> </div> <section v-show="!isLoading"> <div class="section section__gutter--bottom"> <div class="spring spring--md check-fiber flush--left flush--right"> <div class="grid grid--gutter" :class="{'check-fiber__light half-gutter--top': !isTypeFull, 'check-fiber__light--content': resultsRedirect.status == null}"> <!-- Client choices - Light Mode --> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1"> <div class="grid" v-if="!isTypeFull && (form.secondPart || noStreetErrorMessage)"> <div class="grid__item grid__item--gutter flush--sm-bottom grid__item--7/10"> <template v-if="!noStreetErrorMessage"> {{clientChoice}} </template> </div> <div class="grid__item grid__item--gutter grid__item--3/10 grid__item--align-left grid__item--sm-align-right position--relative flush--left"> <svg @click="resetAll(true)" class="icon icon--extra-small icon--thick icon--link icon--white" v-if="!isTypeFull && (form.secondPart || noStreetErrorMessage) || resultsRedirect.status == resultsRedirect.GENERIC_ERROR" focusable="false" aria-hidden="true"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-refresh"></use> </svg> </div> </div> </div> <template v-if="isTypeFull || (!form.secondPart && resultsRedirect.status == null)"> <form-input :input="{ id: 'phone-number', name: 'phoneNumber', inputClass: [showErrorLabels.phoneNumber ? colorSelectedForErrorInitial : 'form__input--subscriptions--dark', 'form__input form__input--border-bottom editable-color__dove--gray'], autocomplete: 'tel' }" field-type="cellPhone" length="9" v-model="form.phoneNumber" ref="phoneRef" :disable="form.isInputDisabled && !noStreetErrorMessage" @input="checkPhoneFieldCompletion" v-on:keypress='checkKeyPressed' v-on:keyup="goToPostalCode" :error="{ showError: showErrorLabels.phoneNumber, text: i18nLabels[typeCmp].phoneNumberErrorLabel, errorClass: 'font-color--red-tech form__label--validation' }" @change="runPhoneValidation" :label="{ text: i18nLabels[typeCmp].phoneNumberLabel, labelClass: textLabelInitialAttributes.styleLabel.class, labelFocus: textLabelInitialAttributes.styleLabelFocus.class }" :main-class="['grid__item grid__item--gutter grid__item--sm-1/1 grid__item--bottom position--relative', isTypeFull ? 'grid__item--2/5 form__row--middle': 'grid__item--1/3 form__row--slim position--relative']"></form-input> <form-input :input="{ id: 'postalCode', name: 'postalCode', inputClass: [showErrorLabels.postalCode ? colorSelectedForErrorInitial : 'form__input--subscriptions--dark', 'form__input form__input--border-bottom editable-color__dove--gray'], autocomplete: 'postal-code' }" field-type="postalCode" length="8" v-model="form.cp7" ref="cp7Ref" :disable="form.isInputDisabled && !noStreetErrorMessage" :error="{ showError: showErrorLabels.postalCode, text: i18nLabels[typeCmp].postalCodeErrorLabel, errorClass: 'font-color--red-tech form__label--validation' }" @change="validateCp" :label="{ text: i18nLabels[typeCmp].postalCodeLabel, labelClass: textLabelInitialAttributes.styleLabel.class, labelFocus: textLabelInitialAttributes.styleLabelFocus.class }" :main-class="['grid__item grid__item--gutter grid__item--sm-1/1 grid__item--bottom position--relative', isTypeFull ? 'grid__item--2/5 form__row--middle': 'grid__item--1/3 form__row--slim position--relative']"></form-input> </template> <!-- Street, Door and Floor - Light Mode --> <template v-if="!isTypeFull && resultsRedirect.status == null"> <template v-if="form.secondPart"> <!-- STREET --> <div :class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.streetCss]" id="streetCombo" key="streetCombo" v-if="isTypeFull || !form.showDoorAndFloor"> <combobox-with-line :class-var="CONSTANTS.SUBSCRIPTIONS" :container-css="showErrorLabels.street ? colorSelectedForErrorResult : 'form__input--subscriptions--dark'" :dark="false" :disabled="options.streets.hasOnlyOneResult || !options.streets.isLoaded" :label="i18nLabels[typeCmp].addressStreetLabel" :label-text="i18nLabels[typeCmp].addressStreetLabel" :loader-config="loaderConf" :loading-id="CONSTANTS.COMBO_STREET" :option-name="comboBoxs.optionName" :option-value="comboBoxs.optionValue" :options="options.streets.results" :ref="CONSTANTS.COMBO_STREET" :required="true" :sayt="true" :show-label="true" @change="onStreetSelect" class="grid__item grid__item--1/1" icon-css="icon icon--small form__input--subscriptions__selection--icon form__input--subscriptions__selection--icon-white" input-css="form__input--subscriptions__selection--text-white" label-css="font-color--white editable-color__required--red" v-model="options.streets.selectedId"> </combobox-with-line> <small class="font-color--red-tech form__label--validation" id="streetComboErrorMessage" v-if="showErrorLabels.street"> {{i18nLabels[typeCmp].streetErrorLabel}} </small> </div> <!-- DOOR NUMBER / NORMAL FLOW--> <div :class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.doorCss]" id="doorCombo" key="doorCombo" v-if="!form.hasNoDoorResult && form.showDoorAndFloor"> <combobox-with-line :class-var="CONSTANTS.SUBSCRIPTIONS" :container-css="showErrorLabels.door ? colorSelectedForErrorResult : 'form__input--subscriptions--dark'" :dark="false" :disabled="!options.doors.isLoaded || options.doors.results.length <= 1" :label="i18nLabels[typeCmp].doorLabel" :label-text="i18nLabels[typeCmp].addressDoorLabel" :loader-config="loaderConf" :loading-id="CONSTANTS.COMBO_DOOR" :option-name="comboBoxs.optionName" :option-value="comboBoxs.optionValue" :options="options.doors.results" :ref="CONSTANTS.COMBO_DOOR" :required="true" :sayt="true" :show-label="true" @change="onDoorSelect" class="grid__item grid__item--1/1" icon-css="icon icon--small form__input--subscriptions__selection--icon form__input--subscriptions__selection--icon-white" input-css="form__input--subscriptions__selection--text-white" label-css="font-color--white editable-color__required--red" v-model="options.doors.selectedId"> </combobox-with-line> <small class="font-color--red-tech form__label--validation" id="doorComboErrorMessage" v-if="showErrorLabels.door"> {{i18nLabels[typeCmp].doorErrorLabel}} </small> </div> <!-- Google Maps --> <div id="mapContainer" v-show="isMapVisible"> <div class="grid grid--gutter gutter--top"> <div class="grid__item grid__item--gutter grid__item--1/1"> <template v-if="map.showTitle"> <h5 class="heading heading--5 heading--center font-color--white" v-if="!map.draggablePinPoint"> {{i18nLabels[typeCmp].mapPinsMessage}} <a @click="placeDraggableMarker" class="underline" id="mapPinsLinkMessage"> {{i18nLabels[typeCmp].mapPinsLinkMessage}} </a> </h5> <h5 class="heading heading--5 heading--center font-color--white" v-else> {{i18nLabels[typeCmp].checkCoverageChooseLabel}} </h5> <alert-msg-component :error-messages="[i18nLabels[typeCmp].mapOutOfBoundsAlertMessage]" :error-title="i18nLabels[typeCmp].mapOutOfBoundsAlertTitle" background="alert--light" icon-position="middle" v-show="map.draggablePinPoint && map.showOutOfBoundAlert"> </alert-msg-component> </template> </div> </div> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1 form__row--slim"> <div :class="['network__map-container', {'network__map-container--validation' : showErrorLabels.map}]"> <div :id="map.mapId" class="map network__map network__map-container"> </div> </div> </div> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1 grid__item--align-center"> <small class="font-color--red-tech" id="mapErrorMessage" v-if="showErrorLabels.map"> {{i18nLabels[typeCmp].mapConfirmFieldsError}} </small> </div> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1"> <h5 class="heading heading--5 heading--center font-color--white" v-if="map.draggablePinPoint || !form.fiberZoneWithoutDoor"> {{i18nLabels[typeCmp].mapConfirmFieldsMessage}} </h5> </div> </div> <span> <!-- FLOOR NUMBER / NORMAL FLOW --> <div :class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.floorCss]" id="floorNormalFlow" key="floorNormalFlow" v-if="!form.fiberZoneWithoutDoor && form.showDoorAndFloor && !options.floors.hasOnlyOneResult"> <combobox-with-line :class-var="CONSTANTS.SUBSCRIPTIONS" :container-css="showErrorLabels.floor ? colorSelectedForErrorResult : 'form__input--subscriptions--dark'" :dark="false" :disabled="options.floors.hasOnlyOneResult || !options.floors.isLoaded" :label="i18nLabels[typeCmp].floorLabel" :label-text="i18nLabels[typeCmp].addressFloorLabel" :loader-config="loaderConf" :loading-id="CONSTANTS.COMBO_FLOOR" :option-name="comboBoxs.optionName" :option-value="comboBoxs.optionValue" :options="options.floors.results" :ref="CONSTANTS.COMBO_FLOOR" :required="true" :sayt="true" :show-label="true" @change="onFloorSelect" class="grid__item grid__item--1/1" icon-css="icon icon--small form__input--subscriptions__selection--icon form__input--subscriptions__selection--icon-white" input-css="form__input--subscriptions__selection--text-white" label-css="font-color--white editable-color__required--red" v-model="options.floors.selectedId"> </combobox-with-line> <small class="font-color--red-tech form__label--validation" id="floorNormalFlowErrorMessage" v-if="showErrorLabels.floor"> {{i18nLabels[typeCmp].floorErrorLabel}} </small> </div> <!-- OTHER DOOR --> <form-input :error="{ showError: showErrorLabels.otherDoor, text: i18nLabels[typeCmp].otherDoorErrorLabel, errorClass: 'font-color--red-tech form__label--validation' }" :input="{ id:'otherDoor', name:'otherDoor', inputClass: [showErrorLabels.otherDoor ? colorSelectedForErrorResult : 'form__input--subscriptions--dark', 'form__input form__input--border-bottom form__input--subscriptions__selection--text-white'] }" :label="{ text: i18nLabels[typeCmp].otherDoorLabel, labelClass: textLabelResultAttributes.styleLabel.class, labelFocus: textLabelResultAttributes.styleLabelFocus.class }" :main-class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.otherDoorCss]" @change="runOtherDoorValidation" field-type="address" length="10" ref="otherDoor" v-if="form.hasNoDoorResult || isMapVisible && map.draggablePinPoint" v-model="form.otherDoor"> </form-input> <!-- OTHER FLOOR / NO DOORS FLOW --> <form-input :error="{ showError: showErrorLabels.otherFloor, text: i18nLabels[typeCmp].floorErrorLabel, errorClass: 'font-color--red-tech form__label--validation' }" :input="{ id:'otherFloor', name:'otherFloor', inputClass: [showErrorLabels.otherFloor ? colorSelectedForErrorResult : 'form__input--subscriptions--dark', 'form__input form__input--border-bottom form__input--subscriptions__selection--text-white'] }" :label="{text: i18nLabels[typeCmp].otherDoorFloorLabel, labelClass: otherDoorLabelClass, labelFocus: otherDoorLabelClassFocus }" :main-class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 position--relative', form.otherFloorCss]" @change="runOtherFloorValidation" field-type="address" length="10" ref="otherFloor" v-if="form.hasNoDoorResult || form.otherFractionSelected || isMapVisible && map.draggablePinPoint" v-model="form.otherFloor"> </form-input> </span> </template> </template> <div :class="['grid__item grid__item--gutter grid__item--sm-1/1', isTypeFull ? 'grid__item--1/5 form__row--medium': 'grid__item--1/3 grid__item--align-left grid__item--bottom form__row--slim']" v-if="isTypeFull || (!form.secondPart && resultsRedirect.status == null)"> <button-with-loader class="no-gutter--sm-bottom button--primary" :loader-path="searchButtonLoaderStyle" :disabled="form.isInputDisabled && isTypeFull && !noStreetErrorMessage || disabledCoverageBtn" @click="verifyFieldsAndSearch" style="padding-left:px; padding-right:px" :button-id="CONSTANTS.POSTAL_CODE_BTN_ID" :loading="loaderConf.postalCode" :button-text="i18nLabels[typeCmp].buttonCheckFiberLabel"> </button-with-loader> </div> <!-- Check Coverage Btn - Light Mode --> <div :class="form.otherFractionSelected && !options.floors.hasOnlyOneResult ? 'grid__item grid__item--gutter grid__item--1/1 grid__item--bottom form__row--middle align--center' : 'grid__item grid__item--gutter grid__item--1/3 grid__item--sm-1/1 grid__item--align-left grid__item--bottom form__row--slim'" v-if="form.secondPart && !isTypeFull && resultsRedirect.status == null"> <div id="checkCoverageButtonLight"> <button-with-loader :loader-path="resultsButtonLoaderColor" class="no-gutter--sm-bottom button--primary" @click="checkCoverage" :button-id="CONSTANTS.CHECK_COVERAGE_BTN_ID" :loading="loaderConf.checkCLIGHT" :button-text="coverageButtonLabel"> </button-with-loader> </div> </div> </div> </div> <!-- Results - Light Mode--> <span id="resultsLight" v-show="!isTypeFull && (resultsRedirect.status != null || false)"> <!-- Cen谩rios de Sucesso --> <!-- Non Fiber --> <div> </div> <!-- Fiber --> <div> </div> <!-- No Date Fiber & Planned Fiber --> <div> </div> <!-- Cen谩rio de Erro --> <div> </div> <!-- Fiber ZE --> <div> </div> <!-- No Date Fiber ZE & Planned Fiber ZE --> <div> </div> <!-- Fiber ZE Zones --> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> <div> </div> </span> </div> <div class="network__panel network__panel--active network__panel" v-if="form.secondPart && isTypeFull && !noStreetErrorMessage"> <div class="spring spring--lg"> <div class="tabs tabs--dark tabs--secondary--dark"> <div class="tabs__content network__tabs-content flush--top"> <div class="network__form network__form--slim"> <button class="js-broadband-close button button--reset broadband-speed-checker__close flush--sm-all" v-on:click="resetAll"> <span class="visually-hidden">Close</span> <svg focusable="false" aria-hidden="true" class="icon icon--small gutter--sm-bottom icon--white"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-close"></use> </svg> </button> <form role="form" class="gutter--top" @submit.prevent> <div class="grid grid--gutter"> <!-- Street, Doors and Floors --> <template v-if="form.secondPart"> <!-- STREET --> <div :class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.streetCss]" id="streetCombo" key="streetCombo" v-if="isTypeFull || !form.showDoorAndFloor"> <combobox-with-line :class-var="CONSTANTS.SUBSCRIPTIONS" :container-css="showErrorLabels.street ? colorSelectedForErrorResult : 'form__input--subscriptions--dark'" :dark="false" :disabled="options.streets.hasOnlyOneResult || !options.streets.isLoaded" :label="i18nLabels[typeCmp].addressStreetLabel" :label-text="i18nLabels[typeCmp].addressStreetLabel" :loader-config="loaderConf" :loading-id="CONSTANTS.COMBO_STREET" :option-name="comboBoxs.optionName" :option-value="comboBoxs.optionValue" :options="options.streets.results" :ref="CONSTANTS.COMBO_STREET" :required="true" :sayt="true" :show-label="true" @change="onStreetSelect" class="grid__item grid__item--1/1" icon-css="icon icon--small form__input--subscriptions__selection--icon form__input--subscriptions__selection--icon-white" input-css="form__input--subscriptions__selection--text-white" label-css="font-color--white editable-color__required--red" v-model="options.streets.selectedId"> </combobox-with-line> <small class="font-color--red-tech form__label--validation" id="streetComboErrorMessage" v-if="showErrorLabels.street"> {{i18nLabels[typeCmp].streetErrorLabel}} </small> </div> <!-- DOOR NUMBER / NORMAL FLOW--> <div :class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.doorCss]" id="doorCombo" key="doorCombo" v-if="!form.hasNoDoorResult && form.showDoorAndFloor"> <combobox-with-line :class-var="CONSTANTS.SUBSCRIPTIONS" :container-css="showErrorLabels.door ? colorSelectedForErrorResult : 'form__input--subscriptions--dark'" :dark="false" :disabled="!options.doors.isLoaded || options.doors.results.length <= 1" :label="i18nLabels[typeCmp].doorLabel" :label-text="i18nLabels[typeCmp].addressDoorLabel" :loader-config="loaderConf" :loading-id="CONSTANTS.COMBO_DOOR" :option-name="comboBoxs.optionName" :option-value="comboBoxs.optionValue" :options="options.doors.results" :ref="CONSTANTS.COMBO_DOOR" :required="true" :sayt="true" :show-label="true" @change="onDoorSelect" class="grid__item grid__item--1/1" icon-css="icon icon--small form__input--subscriptions__selection--icon form__input--subscriptions__selection--icon-white" input-css="form__input--subscriptions__selection--text-white" label-css="font-color--white editable-color__required--red" v-model="options.doors.selectedId"> </combobox-with-line> <small class="font-color--red-tech form__label--validation" id="doorComboErrorMessage" v-if="showErrorLabels.door"> {{i18nLabels[typeCmp].doorErrorLabel}} </small> </div> <!-- Google Maps --> <div id="mapContainer" v-show="isMapVisible"> <div class="grid grid--gutter gutter--top"> <div class="grid__item grid__item--gutter grid__item--1/1"> <template v-if="map.showTitle"> <h5 class="heading heading--5 heading--center font-color--white" v-if="!map.draggablePinPoint"> {{i18nLabels[typeCmp].mapPinsMessage}} <a @click="placeDraggableMarker" class="underline" id="mapPinsLinkMessage"> {{i18nLabels[typeCmp].mapPinsLinkMessage}} </a> </h5> <h5 class="heading heading--5 heading--center font-color--white" v-else> {{i18nLabels[typeCmp].checkCoverageChooseLabel}} </h5> <alert-msg-component :error-messages="[i18nLabels[typeCmp].mapOutOfBoundsAlertMessage]" :error-title="i18nLabels[typeCmp].mapOutOfBoundsAlertTitle" background="alert--light" icon-position="middle" v-show="map.draggablePinPoint && map.showOutOfBoundAlert"> </alert-msg-component> </template> </div> </div> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1 form__row--slim"> <div :class="['network__map-container', {'network__map-container--validation' : showErrorLabels.map}]"> <div :id="map.mapId" class="map network__map network__map-container"> </div> </div> </div> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1 grid__item--align-center"> <small class="font-color--red-tech" id="mapErrorMessage" v-if="showErrorLabels.map"> {{i18nLabels[typeCmp].mapConfirmFieldsError}} </small> </div> <div class="grid__item grid__item--gutter grid__item--bottom grid__item--1/1"> <h5 class="heading heading--5 heading--center font-color--white" v-if="map.draggablePinPoint || !form.fiberZoneWithoutDoor"> {{i18nLabels[typeCmp].mapConfirmFieldsMessage}} </h5> </div> </div> <span> <!-- FLOOR NUMBER / NORMAL FLOW --> <div :class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.floorCss]" id="floorNormalFlow" key="floorNormalFlow" v-if="!form.fiberZoneWithoutDoor && form.showDoorAndFloor && !options.floors.hasOnlyOneResult"> <combobox-with-line :class-var="CONSTANTS.SUBSCRIPTIONS" :container-css="showErrorLabels.floor ? colorSelectedForErrorResult : 'form__input--subscriptions--dark'" :dark="false" :disabled="options.floors.hasOnlyOneResult || !options.floors.isLoaded" :label="i18nLabels[typeCmp].floorLabel" :label-text="i18nLabels[typeCmp].addressFloorLabel" :loader-config="loaderConf" :loading-id="CONSTANTS.COMBO_FLOOR" :option-name="comboBoxs.optionName" :option-value="comboBoxs.optionValue" :options="options.floors.results" :ref="CONSTANTS.COMBO_FLOOR" :required="true" :sayt="true" :show-label="true" @change="onFloorSelect" class="grid__item grid__item--1/1" icon-css="icon icon--small form__input--subscriptions__selection--icon form__input--subscriptions__selection--icon-white" input-css="form__input--subscriptions__selection--text-white" label-css="font-color--white editable-color__required--red" v-model="options.floors.selectedId"> </combobox-with-line> <small class="font-color--red-tech form__label--validation" id="floorNormalFlowErrorMessage" v-if="showErrorLabels.floor"> {{i18nLabels[typeCmp].floorErrorLabel}} </small> </div> <!-- OTHER DOOR --> <form-input :error="{ showError: showErrorLabels.otherDoor, text: i18nLabels[typeCmp].otherDoorErrorLabel, errorClass: 'font-color--red-tech form__label--validation' }" :input="{ id:'otherDoor', name:'otherDoor', inputClass: [showErrorLabels.otherDoor ? colorSelectedForErrorResult : 'form__input--subscriptions--dark', 'form__input form__input--border-bottom form__input--subscriptions__selection--text-white'] }" :label="{ text: i18nLabels[typeCmp].otherDoorLabel, labelClass: textLabelResultAttributes.styleLabel.class, labelFocus: textLabelResultAttributes.styleLabelFocus.class }" :main-class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 input-field position--relative', form.otherDoorCss]" @change="runOtherDoorValidation" field-type="address" length="10" ref="otherDoor" v-if="form.hasNoDoorResult || isMapVisible && map.draggablePinPoint" v-model="form.otherDoor"> </form-input> <!-- OTHER FLOOR / NO DOORS FLOW --> <form-input :error="{ showError: showErrorLabels.otherFloor, text: i18nLabels[typeCmp].floorErrorLabel, errorClass: 'font-color--red-tech form__label--validation' }" :input="{ id:'otherFloor', name:'otherFloor', inputClass: [showErrorLabels.otherFloor ? colorSelectedForErrorResult : 'form__input--subscriptions--dark', 'form__input form__input--border-bottom form__input--subscriptions__selection--text-white'] }" :label="{text: i18nLabels[typeCmp].otherDoorFloorLabel, labelClass: otherDoorLabelClass, labelFocus: otherDoorLabelClassFocus }" :main-class="['grid__item grid__item--gutter grid__item--bottom grid__item--sm-1/1 position--relative', form.otherFloorCss]" @change="runOtherFloorValidation" field-type="address" length="10" ref="otherFloor" v-if="form.hasNoDoorResult || form.otherFractionSelected || isMapVisible && map.draggablePinPoint" v-model="form.otherFloor"> </form-input> </span> </template> <!-- Check Coverage Button --> <div class="grid grid--gutter gutter--top"> <div id="checkCoverageButton" class="grid__item grid__item--gutter grid__item--align-center grid__item--1/1"> <button-with-loader class="button--primary" :loader-path="resultsButtonLoaderColor" @click="checkCoverage" :button-id="CONSTANTS.CHECK_COVERAGE_BTN_ID" :loading="loaderConf.checkCFULL" :button-text="i18nLabels[typeCmp].checkCoverageButtonLabel"> </button-with-loader> </div> </div> </div> </form> </div> </div> </div> </div> </div> </section> </div> </template> <script id="buttonWithLoaderCmp" type="text/x-template"> <button v-if="e2eVbu" :id="innerButtonId" class="button" type="button" @click="$emit('click', $event)" :class="[{'button--loading': loading},{'button-disabled': disabled}, classes]" :disabled="disabled"> <span :class="{'no-visible': loading}">{{ buttonText }}</span> <slot></slot> </button> <button v-else :id="innerButtonId" class="button" type="button" @click="$emit('click', $event)" :class="[{'button--loading': loading},{'button--disabled': disabled}, classes]" :disabled="disabled"> <span :class="{'no-visible': loading}">{{ buttonText }}</span> <slot></slot> </button> </script> <script id="formInput" type="text/x-template"> <div :class="[mainClass, 'input-field']"> <imask-input :disabled="disable ? disable : null" :required="required" :maxlength="length ? length : null" @keydown="$emit('keydown', $event)" @keyup="$emit('keyup', $event)" @keypress="$emit('keypress', $event)" @paste="$emit('paste', $event)" @blur="$emit('blur', $event)" @focus="$emit('focus', $event)" @change="$emit('change', $event)" @input="onInput" :placeholder="input.placeholderVBU" :autocomplete="input.autocomplete" :class="[cssClassValid, cssClassError, {'disabled': disable}, input.inputClass ? input.inputClass : 'form__input form__input--border-bottom form__input--border-bottom--dark' , disable ? 'disabled' : null]" :id="input.id" :mask="mask" :lazy="mask ? true : null" :name="input.name" :type="typeOfInput" v-model="inputVal" ref="input"> </imask-input> <label :for="input.id" :id="labelId" ref="inputLabel">{{label.text}}</label> <tooltip-component-ws10 v-if="tooltip.showTooltip" label="" :align="'R T'" :dialog-id="tooltipId" :text="parseText(tooltip.html, tooltip.message)" :mob-text="parseText(tooltip.html, tooltip.message)" :tooltip-class="tooltip.tooltipClass" :span-class="tooltip.tooltipSpanClass" :simple-tooltip="false" :close-tool-tip-on-click="true" ref="tooltipCmp"> </tooltip-component-ws10> <span v-if="filterType === 'PIN' || filterType === 'UNMASKED_PIN'" class="caption tooltip--top tooltip--active tooltip--input align--left cursor__pointer" @click="togglePinType(filterType)"> <svg class="icon icon--extra-small" viewBox="0 0 24 24"> <template v-if="filterType === 'PIN'"> <path style="fill:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:4;" d="M 96 148 C 44.5 148 21.21875 100 20.34375 97.78125 C 19.90625 96.5 19.90625 95.09375 20.34375 93.78125 C 21.21875 92 44.5 44 96 44 C 147.5 44 170.78125 92 171.65625 94.21875 C 172.09375 95.5 172.09375 96.90625 171.65625 98.21875 C 170.78125 100 147.5 148 96 148 Z M 96 148 " transform="matrix(0.125,0,0,0.125,0,0)"></path><path style="fill:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:4;" d="M 96 124 C 80.625 123.9375 68.21875 111.4375 68.25 96.0625 C 68.28125 80.6875 80.75 68.25 96.125 68.25 C 111.5 68.25 123.96875 80.6875 124 96.0625 C 124.03125 111.4375 111.625 123.9375 96.25 124 Z M 96 124 " transform="matrix(0.125,0,0,0.125,0,0)"></path><path style="fill:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:4;" d="M 160 32.25 L 32 160.25 " transform="matrix(0.125,0,0,0.125,0,0)"></path> </template> <template v-else> <path style="fill:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:4;" d="M 96 148 C 44.5 148 21.21875 100 20.34375 97.78125 C 19.90625 96.5 19.90625 95.09375 20.34375 93.78125 C 21.21875 92 44.5 44 96 44 C 147.5 44 170.78125 92 171.65625 94.21875 C 172.09375 95.5 172.09375 96.90625 171.65625 98.21875 C 170.78125 100 147.5 148 96 148 Z M 96 148 " transform="matrix(0.125,0,0,0.125,0,0)"></path><path style="fill:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(20%,20%,20%);stroke-opacity:1;stroke-miterlimit:4;" d="M 96 124 C 80.625 123.9375 68.21875 111.4375 68.25 96.0625 C 68.28125 80.6875 80.75 68.25 96.125 68.25 C 111.5 68.25 123.96875 80.6875 124 96.0625 C 124.03125 111.4375 111.625 123.9375 96.25 124 Z M 96 124 " transform="matrix(0.125,0,0,0.125,0,0)"></path> </template> </svg> </span> <div v-if="suggestion.showSuggestion"> <ul class="roaming__suggest"> <li @click="suggestionValues" @mouseleave="mouseOver = false" @mouseover="mouseOver = true" v-bind:class="isFocused || mouseOver ? 'roaming__suggest--list roaming__suggest--active' : 'roaming__suggest--list roaming__suggest--inactive'"> <span>{{suggestion.value}}</span> </li> </ul> </div> <small :class="error.errorClass ? error.errorClass : 'form__label--validation font-color--red-tech'" :id="errorId" v-if="error.showError"> <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" v-if="input.inputClass?.includes('e2e-input')"> <path d="M14.4225 11.3633L9.75587 2.72078C9.58369 2.40574 9.32989 2.14285 9.02109 1.95971C8.71229 1.77657 8.35989 1.67993 8.00087 1.67993C7.64185 1.67993 7.28945 1.77657 6.98065 1.95971C6.67185 2.14285 6.41805 2.40574 6.24587 2.72078L1.5792 11.3599C1.41257 11.6645 1.32808 12.0072 1.33403 12.3543C1.33999 12.7014 1.43619 13.0409 1.61318 13.3396C1.79017 13.6382 2.04184 13.8857 2.34345 14.0576C2.64506 14.2295 2.98622 14.3199 3.33337 14.3199H12.6667C13.0135 14.3199 13.3544 14.2296 13.6557 14.058C13.9571 13.8864 14.2087 13.6394 14.3858 13.3412C14.5629 13.043 14.6594 12.7038 14.6658 12.3571C14.6723 12.0103 14.5884 11.6678 14.4225 11.3633ZM7.6667 5.32161C7.6667 5.23321 7.70182 5.14842 7.76433 5.08591C7.82685 5.0234 7.91163 4.98828 8.00004 4.98828C8.08844 4.98828 8.17323 5.0234 8.23574 5.08591C8.29825 5.14842 8.33337 5.23321 8.33337 5.32161V10.0299C8.33337 10.1184 8.29825 10.2031 8.23574 10.2656C8.17323 10.3282 8.08844 10.3633 8.00004 10.3633C7.91163 10.3633 7.82685 10.3282 7.76433 10.2656C7.70182 10.2031 7.6667 10.1184 7.6667 10.0299V5.32161ZM8.00004 12.0716C7.91763 12.0716 7.83707 12.0472 7.76855 12.0014C7.70003 11.9556 7.64662 11.8905 7.61509 11.8144C7.58355 11.7383 7.5753 11.6545 7.59138 11.5737C7.60745 11.4928 7.64714 11.4186 7.70541 11.3603C7.76368 11.302 7.83792 11.2624 7.91875 11.2463C7.99958 11.2302 8.08335 11.2385 8.15949 11.27C8.23562 11.3015 8.3007 11.3549 8.34648 11.4235C8.39227 11.492 8.4167 11.5725 8.4167 11.6549C8.41604 11.765 8.37185 11.8704 8.29378 11.948C8.21572 12.0256 8.11011 12.0691 8.00004 12.0691V12.0716Z" fill="#BD0000"/> </svg> {{errorMessages}} </small> <small class="form__label--validation font-color--dove-gray" :id="placeholderId" v-if="input.placeholder"> {{input.placeholderText}} </small> <div v-if="loader.showLoader" :class="loader.loaderClass ? loader.loaderClass : 'loader__position half-gutter--right no-gutter--sm-right'" :id="loaderId"></div> </div> </script> <script id="tooltipCmpWS10" type="text/x-template"> <span :class="[tooltipContainerClass]"> <div class="hide--sm" :class="[cssClass, {'simple-tooltip__mouse-hover': isMouseHover, 'simple-tooltip': simpleTooltip}, tooltipClass != '' ? 'tooltip--' + tooltipClass : '']" :style="inlineStyle"> <!--TODO: REMOVE INLINE STYLE--> <div class="simple-tooltip__link"> <slot name="insideContent"></slot> <template v-if="!hasSlotDesktop"> <template v-if="showLabel && !labelAlignRight"> <b v-if="labelIsBold" :class="[labelClass, 'align--middle']">{{label}}</b> <span v-else :class="[labelClass, 'align--middle']">{{label}}</span> </template> <span @click="toggleInfo()" class="cursor__pointer" :class="{'half-gutter--left': !labelAlignRight}"> <svg focusable="false" aria-hidden="true" :class="['icon icon--extra-small', svgClass]"> <use xlink:href="#icon-info-circle"></use> </svg> </span> <template v-if="labelAlignRight"> <b v-if="labelIsBold" :class="[labelClass, 'align--middle']">{{label}}</b> <span v-else :class="[labelClass, 'align--middle']">{{label}}</span> </template> </template> </div> <div v-if="isMouseHover" class="simple-tooltip__content" v-html="text"> </div> <template v-else> <div @click.stop="toggleInfo(true)" v-if="infoVisible" class="simple-tooltip__content cursor__pointer" :class="[spanClass]" :id="dialogId" style="display: block !important;" v-html="text"> </div> </template> </div> <div class="hide--lg hide--md" :class="[mobCssClass, {'simple-tooltip': simpleTooltip}, tooltipClass != '' ? 'tooltip--' + tooltipClass : '']"> <div class="simple-tooltip__link"> <slot name="insideContentMobile"></slot> <template v-if="!hasSlotMobile"> <template v-if="showLabel && !labelAlignRight"> <b v-if="labelIsBold" :class="[labelClass, 'align--middle']">{{mobLabel}}</b> <span v-else :class="[labelClass, 'align--middle']">{{mobLabel}}</span> </template> <span @click="toggleInfo()" class="cursor__pointer" :class="{'half-gutter--left': !labelAlignRight}"> <svg focusable="false" aria-hidden="true" :class="['icon icon--extra-small', svgClass]"> <use xlink:href="#icon-info-circle"></use> </svg> </span> <template v-if="labelAlignRight"> <b v-if="labelIsBold" :class="[labelClass, 'align--middle']">{{mobLabel}}</b> <span v-else :class="[labelClass, 'align--middle']">{{mobLabel}}</span> </template> </template> </div> <div @click.stop="toggleInfo(true)" v-if="infoVisible" class="simple-tooltip__content cursor__pointer" :class="[spanClass]" :id="dialogId" style="display: block !important;" v-html="mobText"> </div> </div> </span> </script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_tooltipWS10/clientlibs.min.js"></script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_formInput/clientlibs.min.js"></script> <script id="comboboxWithLineCmp" type="text/x-template"> <span> <label v-if="label" :id="labelId" :class="[mainClassSelect ? mainClassSelect : 'form__label--fixed', {'form__label--required': required}, labelCss]">{{label}}</label> <span :id="loadingId" :class="['form__input', e2eVbu?'':'form__input--'+classVar, containerCss?containerCss:'', !disabled&&dropdownOpen?'form__input--'+ classVar +'--active':'', disabled ?'form__input--'+classVar+'--disabled':'' , dark?'form__input--'+classVar+'--dark':'', e2eVbuClasses ? e2eVbuClasses : '' , showErrorMessage?'form__input--'+classVar+'--invalid scroll-to-error':'' ]" @click="toggleDropdown" @keyup.esc="hide" @keyup.tab="myClick" :tabindex="disabled ? null : 0" @keydown.tab="hide" ref="containerSpan"> <div type="button" :class="['form__input--'+classVar+'__selection']" :disabled="disabled"> <div v-if="showDefaultLabel && !dropdownOpen"> <div :class="['form__input--'+classVar+'__selection--text', inputCss]" :required="required"> {{selectOneLabel}} </div> </div> <div v-else-if="(sayt && filter) || dataTreated.length > 0"> <div :class="['form__input--'+classVar+'__selection--text', inputCss]"> <div v-if="optionIcons && (!sayt || !dropdownOpen)" v-html="handleSelectedValueWithIcon(selectedValue)"></div> <template v-else-if="!sayt || !dropdownOpen"> {{selectedValue}} </template> <input ref="inputField" @click.stop="dropdownOpen=true" v-else @input="filterResults" v-model="filter" :class="['form__input--'+classVar+'__selection--text']" :required="required" @keyup.enter="select(dataTreated[focusedIndex])" @keydown.down="onFocusHandle(focusedIndex+1)" @keydown.up="onFocusHandle(focusedIndex-1)" style="background-color: transparent; border: 0; outline: none;" :disabled=inputDisabled> </div> </div> <svg v-if="showChevron" focusable="false" aria-hidden="true" :class="[iconCss ? iconCss : 'icon icon--small form__input--'+classVar+'__selection--icon']"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-down"></use> </svg> </div> <div v-if="dropdownOpen" :class="['form__input--'+classVar+'__options']" ref="dataOptions"> <div v-if="dataTreated.length===0" :class="['form__input--'+classVar+'__option', 'form__input--'+classVar+'--disabled']">{{i18n.noResults}}</div> <div :class="['form__input--'+classVar+'__option hide']">{{selectOneLabel}}</div> <template v-if="optionIcons"> <div v-for="(item, index) in dataTreated" v-html="handleSelectedValueWithIcon(item)" @click="select(item)" :class="[index===focusedIndex?'form__input--option-focus':'', 'form__input--'+classVar+'__option', item.selected?'form__input--'+classVar+'__option--selected':'', handleDisabledOption(item)? 'form__input--'+classVar+'__option--disabled':'']"></div> </template> <template v-else> <div v-for="(item, index) in dataTreated" @click="select(item)" :class="[index===focusedIndex?'form__input--option-focus':'', 'form__input--'+classVar+'__option', item.selected?'form__input--'+classVar+'__option--selected':'']"> {{optionName ? item[optionName] : item}}</div> </template> </div> </span> <small v-if="showErrorMessage" :id="errorMsgId" class="form__label--validation" :class="errorCss ? errorCss : 'font-color--red-tech'"> <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" v-if="e2eVbuClasses?.includes('e2e-input')"> <path d="M14.4225 11.3633L9.75587 2.72078C9.58369 2.40574 9.32989 2.14285 9.02109 1.95971C8.71229 1.77657 8.35989 1.67993 8.00087 1.67993C7.64185 1.67993 7.28945 1.77657 6.98065 1.95971C6.67185 2.14285 6.41805 2.40574 6.24587 2.72078L1.5792 11.3599C1.41257 11.6645 1.32808 12.0072 1.33403 12.3543C1.33999 12.7014 1.43619 13.0409 1.61318 13.3396C1.79017 13.6382 2.04184 13.8857 2.34345 14.0576C2.64506 14.2295 2.98622 14.3199 3.33337 14.3199H12.6667C13.0135 14.3199 13.3544 14.2296 13.6557 14.058C13.9571 13.8864 14.2087 13.6394 14.3858 13.3412C14.5629 13.043 14.6594 12.7038 14.6658 12.3571C14.6723 12.0103 14.5884 11.6678 14.4225 11.3633ZM7.6667 5.32161C7.6667 5.23321 7.70182 5.14842 7.76433 5.08591C7.82685 5.0234 7.91163 4.98828 8.00004 4.98828C8.08844 4.98828 8.17323 5.0234 8.23574 5.08591C8.29825 5.14842 8.33337 5.23321 8.33337 5.32161V10.0299C8.33337 10.1184 8.29825 10.2031 8.23574 10.2656C8.17323 10.3282 8.08844 10.3633 8.00004 10.3633C7.91163 10.3633 7.82685 10.3282 7.76433 10.2656C7.70182 10.2031 7.6667 10.1184 7.6667 10.0299V5.32161ZM8.00004 12.0716C7.91763 12.0716 7.83707 12.0472 7.76855 12.0014C7.70003 11.9556 7.64662 11.8905 7.61509 11.8144C7.58355 11.7383 7.5753 11.6545 7.59138 11.5737C7.60745 11.4928 7.64714 11.4186 7.70541 11.3603C7.76368 11.302 7.83792 11.2624 7.91875 11.2463C7.99958 11.2302 8.08335 11.2385 8.15949 11.27C8.23562 11.3015 8.3007 11.3549 8.34648 11.4235C8.39227 11.492 8.4167 11.5725 8.4167 11.6549C8.41604 11.765 8.37185 11.8704 8.29378 11.948C8.21572 12.0256 8.11011 12.0691 8.00004 12.0691V12.0716Z" fill="#BD0000"/> </svg> {{errorMessage}} </small> </span> </script> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_comboboxWithLine/clientlibs.min.js"></script> <script id="alertMessagesCmp" type="text/x-template"> <div role="alert" class="alert" :class="[{ 'alert--arrow': arrow }, defaultAlertClass]"> <div class="caption"> <div :class="'caption__media caption__media--'+iconPosition+' alert__media'"> <svg :class="'icon icon--small icon--'+iconColor"> <use xmlns:xlink="http://www.w3.org/1999/xlink" v-bind="{'xlink:href':'#'+iconType}"></use> </svg> </div> <div :class="'caption__text caption__text--'+textPosition+' alert__text'"> <p v-if="!notUsingTitle" class="validation__details js-validation-details heading heading--5 heading--bold heading--no-gutter"> {{defaultErrorTitle}} </p> <slot></slot> <div v-if="!defaultSlot"> <ul class="js-validation-listing list list--reset validation__listing" > <li class="list__item" v-for="msg in defaultErrorMessages">{{msg}}</li> </ul> </div> </div> </div> </div> </script> <script src="/etc.clientlibs/digital-commons/clientlibs/vendor/overlapping-markers.min.js"></script> <script src="/etc.clientlibs/digital-sites/components/content/hidden/vf_checkFiberCmp/clientlibs.min.js"></script> <script src="/etc.clientlibs/digital-sites/components/content/business/vf_checkFiber/clientlibs.min.js"></script> </div> </div> </div> </div> </div> </div> </div> <div class="vf_showMore vf_parent_component aem-GridColumn aem-GridColumn--default--12"> <div class="section section__flush flush--top flush--bottom section__gutter--half--bottom " style="border-radius: px;"> <div class="spring " style="color : #333333;"> <div class="js-accordion show-more" data-js="_accordion" data-classes="active=show-more__heading--active" xmlns:v-bind="http://www.w3.org/1999/xhtml"> <div class="js-accordion-content show-more__content show-more__content--collapse"> <div class="cmp cmp-text"> <div class="mobileText"> <p>Este formul谩rio destina-se 脿 recolha de dados necess谩rios para verificar se o servi莽o Fibra da Vodafone est谩 dispon铆vel para instala莽茫o na sua morada e para posterior contacto da Vodafone. Todos os dados solicitados neste formul谩rio s茫o obrigat贸rios e sem os quais, n茫o poderemos efetuar o tratamento do seu pedido. Estes dados s茫o guardados por um per铆odo m谩ximo de 2 anos, caso n茫o venha a celebrar contrato com a Vodafone. Para mais informa莽玫es, consulte a nossa Declara莽茫o de Privacidade clicando <a class="link link--body" href="https://www.vodafone.pt/portalprivacidade.html">aqui</a>.<br/> </p> </div> </div> </div> <button class="button button--reset js-accordion-heading show-more__heading " onclick="checkEqualHeightsShowM(this)"> <span class="show-more__heading-text"> <span class="show-more__heading-more" style="color:">Pol铆tica de tratamento de dados </span> <span class="show-more__heading-less" style="color:">Pol铆tica de tratamento de dados </span> </span> <span class="js-accordion-chevron show-more__heading-chevron"> <svg focusable="false" aria-labelledby="svg-title" aria-hidden="true" class="icon icon--small" style="color:font-color--red"> <title id="svg-title">Seta para baixo</title> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-down"></use> </svg> </span> </button> </div> </div> </div> </div> </div> </div> <div class="vf_publicationModification aem-GridColumn aem-GridColumn--default--12"></div> <div class="vf_experienceFragment aem-GridColumn aem-GridColumn--default--12"> <div class="xfpage page basicpage"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="vf_socialMedia vf_parent_component aem-GridColumn aem-GridColumn--default--12"> </div> </div> </div></div> </div> <div class="vf_experienceFragment aem-GridColumn aem-GridColumn--default--12"> <div class="xfpage page basicpage"> <div class="xf-content-height"> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <div class="vf_footer_ws10 aem-GridColumn aem-GridColumn--default--12"><div class="vf"> <footer> <div class="footer-ws10"> <div class="spring"> <div class="footer-ws10__navigation"> <div class="no-gutter--sm-bottom"> <div class="grid"> <div class="grid__item grid__item--1/4 grid__item--md-1/2 grid__item--sm-2/3"> <h2 class="visually-hidden">Follow us</h2> <span class="footer-ws10__title">Social</span> <ul class="list list--reset social__list"> <li class="footer-ws10__social"> <div> <a role="button" href="https://www.facebook.com/vodafonePT" target="_self" onclick="tealium_ws10_svg.methods.handleClickSVGEntry('Event Click Footer Social Media Menu','Facebook')"> <span class="icon icon--fill 13 " style="width: 23px; height: 23px;"> <svg viewBox="0 0 160 160"><path d="M128.17,11.18H31.83A20.71,20.71,0,0,0,11.18,31.83v96.34a20.71,20.71,0,0,0,20.65,20.65H84.3V91.18h-12V71.4h12V59.85c0-15.89,6.26-25.44,24.85-25.44h16.44V54.19h-9.67c-7.14,0-7.53,2.35-7.53,7.54V71.4H125l-2.09,19.78H108.39v57.64h19.78a20.71,20.71,0,0,0,20.65-20.65V31.83A20.71,20.71,0,0,0,128.17,11.18Z" fill="#ffffff" stroke="none"></path></svg> </span> <span class="visually-hidden"></span> </a> </div> </li> <li class="footer-ws10__social"> <div> <a role="button" href="https://twitter.com/vodafonept" target="_self" onclick="tealium_ws10_svg.methods.handleClickSVGEntry('Event Click Footer Social Media Menu','Twitter')"> <span class="icon icon--fill 13 " style="width: 23px; height: 23px;"> <svg width="20" height="20" viewBox="0 0 1200 1227" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z" fill="white"/> </svg> </span> <span class="visually-hidden"></span> </a> </div> </li> <li class="footer-ws10__social"> <div> <a role="button" href="https://www.youtube.com/vodafonept" target="_self"> <span class="icon icon--fill 11 " style="width: 23px; height: 23px;"> <svg viewBox="0 0 160.08 160"><path d="M158.14,46.55a20.59,20.59,0,0,0-17.9-18.1,468.12,468.12,0,0,0-120.6,0,20.49,20.49,0,0,0-17.8,18.1,299.31,299.31,0,0,0,0,66.9,20.49,20.49,0,0,0,17.8,18.1,469.15,469.15,0,0,0,60.4,3.9,467.72,467.72,0,0,0,60.3-3.9,20.51,20.51,0,0,0,17.8-18.1A290.74,290.74,0,0,0,160,80,289,289,0,0,0,158.14,46.55Zm-54.9,36.6-32.8,23.1a2.89,2.89,0,0,1-4-.7,2.58,2.58,0,0,1-.5-1.7V56a2.88,2.88,0,0,1,2.8-2.9,3.3,3.3,0,0,1,1.7.5l32.8,23.1a3.9,3.9,0,0,1,1,5.42l-.06.08A3.1,3.1,0,0,1,103.24,83.15Z" transform="translate(0.04)" fill="#ffffff" stroke="none"></path></svg> </span> <span class="visually-hidden"></span> </a> </div> </li> <li class="footer-ws10__social"> <div> <a role="button" href="https://www.instagram.com/vodafonept/?hl=pt" target="_self"> <span class="icon icon--fill 11 " style="width: 23px; height: 23px;"> <svg viewBox="0 0 192 192"><path d="M96,34.09c20.16,0,22.55.08,30.51.44,7.37.34,11.37,1.57,14,2.6a25,25,0,0,1,14.33,14.33c1,2.66,2.26,6.66,2.6,14,.36,8,.44,10.35.44,30.51s-.08,22.55-.44,30.51c-.34,7.37-1.57,11.37-2.6,14a25,25,0,0,1-14.33,14.33c-2.66,1-6.66,2.26-14,2.6-8,.36-10.35.44-30.51.44s-22.55-.08-30.51-.44c-7.37-.34-11.37-1.57-14-2.6a25,25,0,0,1-14.33-14.33c-1-2.66-2.26-6.66-2.6-14-.36-8-.44-10.35-.44-30.51s.08-22.55.44-30.51c.34-7.37,1.57-11.37,2.6-14A25,25,0,0,1,51.46,37.13c2.66-1,6.66-2.26,14-2.6,8-.36,10.35-.44,30.51-.44m0-13.61c-20.51,0-23.08.09-31.13.46s-13.53,1.64-18.34,3.51A38.64,38.64,0,0,0,24.45,46.53c-1.87,4.81-3.14,10.3-3.51,18.34S20.48,75.49,20.48,96s.09,23.08.46,31.13,1.64,13.53,3.51,18.34a38.64,38.64,0,0,0,22.08,22.08c4.81,1.87,10.3,3.14,18.34,3.51s10.62.46,31.13.46,23.08-.09,31.13-.46,13.53-1.64,18.34-3.51a38.64,38.64,0,0,0,22.08-22.08c1.87-4.81,3.14-10.3,3.51-18.34s.46-10.62.46-31.13-.09-23.08-.46-31.13-1.64-13.53-3.51-18.34a38.64,38.64,0,0,0-22.08-22.08c-4.81-1.87-10.3-3.14-18.34-3.51s-10.62-.46-31.13-.46Z" fill="#ffffff" stroke="none"></path><path d="M96,57.22A38.78,38.78,0,1,0,134.78,96,38.78,38.78,0,0,0,96,57.22Zm0,64A25.17,25.17,0,1,1,121.17,96,25.17,25.17,0,0,1,96,121.17Z" fill="#ffffff" stroke="none"></path><circle cx="136.31" cy="55.69" r="9.06" fill="#ffffff" stroke="none"></circle></svg> </span> <span class="visually-hidden"></span> </a> </div> </li> </ul> </div> <!-- Logo and bar if Mobile INIT --> <div class="hide--lg grid__item grid__item--md-1/2 grid__item--sm-1/3 footer-ws10__logo"> <div> <span class="icon icon--fill icon--extra-large " style="width: ; height: ;"> <svg viewBox="0 0 192 192"><path fill="#ffffff" stroke="none" stroke-width="8" stroke-linecap="round" stroke-linejoin="round" d="M128.52,26.92 c-13.77,3.06-24.7,15.92-24.7,30.53c-0.028,0.408,0.016,0.818,0.13,1.21c23.19,5.66,33.84,19.68,33.84,39.09 s-15.24,40.71-41.12,40.85c-21,0-42.86-17.93-43-46.64C53.67,73,63.92,54.61,77,43.7c12.81-10.52,30.33-17.39,46.24-17.39 c1.615-0.028,3.229,0.099,4.82,0.38C88.906,7.691,41.764,24.029,22.764,63.183s-2.661,86.296,36.493,105.296 s86.296,2.661,105.296-36.493c18.91-38.97,2.821-85.897-36.023-105.066H128.52z"></path></svg> </span> <span class="visually-hidden"></span> </div> </div> <hr class="hide--lg footer-ws10__hr"/> <!-- Logo and bar if Mobile END --> <div class="grid__item grid__item--2/3 grid__item--md-1/1 grid__item--sm-1/1"> <span class="footer-ws10__title">Contacte-nos</span> <div class="footer-ws10__community"> <div class="grid__item grid__item--1/5 grid__item--sm-1/3 footer-ws10__communitySection"> <div class="footer-ws10__chat"> <a role="button" href="https://api.whatsapp.com/send/?phone=351910070707&app_absent=0" target="_blank"> <span class="icon icon--fill icon--large " style="width: 32px; height: 32px;"> <svg viewBox="0 0 24 24"><path id="Whatsapp" fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M7.971,18.145l0.272,0.161 c1.144,0.676,2.455,1.033,3.791,1.033h0.003c4.105,0,7.448-3.326,7.449-7.414c0.001-1.981-0.774-3.844-2.18-5.245 S14.03,4.507,12.04,4.506c-4.109,0-7.45,3.326-7.452,7.413c-0.001,1.401,0.393,2.765,1.139,3.945l0.177,0.28l-0.753,2.736 L7.971,18.145z M3,21l1.271-4.622c-0.784-1.353-1.197-2.887-1.196-4.459C3.077,7.001,7.098,3,12.038,3 c2.397,0.001,4.648,0.93,6.34,2.616c1.692,1.686,2.623,3.927,2.623,6.31c-0.002,4.918-4.023,8.92-8.962,8.92l0,0h-0.004 c-1.5-0.001-2.974-0.375-4.283-1.086L3,21z M9.797,8.19C9.616,7.755,9.431,7.814,9.293,7.808C9.163,7.801,9.014,7.8,8.865,7.8 c-0.15,0-0.392,0.056-0.597,0.279C8.062,8.302,7.484,8.841,7.484,9.938s0.802,2.157,0.914,2.306c0.112,0.148,1.579,2.4,3.825,3.365 c0.535,0.229,0.952,0.367,1.277,0.47c0.536,0.169,1.024,0.146,1.41,0.088c0.431-0.064,1.325-0.539,1.511-1.06 c0.187-0.521,0.187-0.967,0.131-1.06c-0.056-0.093-0.206-0.149-0.429-0.26c-0.224-0.111-1.325-0.651-1.53-0.725 c-0.206-0.074-0.355-0.111-0.504,0.111c-0.149,0.223-0.579,0.725-0.709,0.874c-0.131,0.148-0.261,0.167-0.485,0.056 c-0.224-0.111-0.945-0.347-1.801-1.106c-0.666-0.591-1.115-1.321-1.246-1.543c-0.131-0.223-0.014-0.344,0.098-0.455 c0.101-0.1,0.224-0.26,0.336-0.39c0.112-0.13,0.149-0.223,0.224-0.372c0.075-0.149,0.037-0.279-0.019-0.39 C10.432,9.733,9.984,8.636,9.797,8.19"></path></svg> </span> <span class="visually-hidden"></span> </a> <a href="https://api.whatsapp.com/send/?phone=351910070707&app_absent=0" target="_blank"> <span class="footer-ws10__chat--text">TOBi WhatsApp</span> </a> </div> </div> <div class="grid__item grid__item--1/5 grid__item--sm-1/3 footer-ws10__communitySection"> <div class="footer-ws10__chat"> <a role="button" href="https://tobi.vodafone.pt/" target="_blank"> <span class="icon icon--fill icon--large " style="width: 32px; height: 32px;"> <svg viewBox="0 0 48 48"><g id="a3ad0527-d87d-4252-91a5-a23f0f9fd104" data-name="Icons+Indicators-/-TOBi-Emojis-/-default"><g id="aa4dbbc3-0d2a-4bb1-98d5-03a3a6805b7e" data-name="03-Component-/-Tobi-/-Expression-/-Template"><g id="b9273ff3-7632-49ea-a694-7e4ecfb8c627" data-name="Tobi/Template"><g id="e82050a6-6e54-4484-a7b3-6c3d1c671767" data-name="Group"><path id="a52c1791-a583-4b25-a431-129e60ebee52" data-name="Fill" d="M38.9,20.8h-.16l-.37.27A14.59,14.59,0,0,1,35,22.67a29.55,29.55,0,0,1-4.41,1.07,42,42,0,0,1-6.63.53,42,42,0,0,1-6.63-.53,19.39,19.39,0,0,1-8.13-3,2.4,2.4,0,0,0-1.93.91,3.91,3.91,0,0,0-.76,1.67v5.92c0,.31,0,.62,0,.91a17.46,17.46,0,0,0,34.81,0c0-.31,0-.6,0-.91v-5.9a5,5,0,0,0-.75-1.67A2.48,2.48,0,0,0,38.9,20.8Z" fill="#ebebeb" fill-rule="evenodd"></path><path id="ef6258c0-6fb7-4e4e-8024-fe3260b36eb8" data-name="Fill" d="M2.34,29.3h0A5.18,5.18,0,0,1,2,27.54V29.3a5.58,5.58,0,0,0,5.57,5.57,15.16,15.16,0,0,1-.65-2.21,5.09,5.09,0,0,1-4.6-3.36" fill="#900" fill-rule="evenodd"></path><path id="b5b39572-5bff-4b94-88e1-1a1b302ab2d0" data-name="Fill" d="M45.49,29.3h0A5.07,5.07,0,0,1,41,32.66a18.39,18.39,0,0,1-.64,2.21,5.54,5.54,0,0,0,5.5-5.57V27.54a4.74,4.74,0,0,1-.33,1.76" fill="#900" fill-rule="evenodd"></path><path id="fbe8bc78-1c10-4e5b-a7ca-18a3a7bec325" data-name="Fill" d="M2,23.09c0,.14,0,.25,0,.38v4.1a5.12,5.12,0,0,0,4.9,5.11,18.21,18.21,0,0,1-.38-2.44c0-.31,0-.6,0-.92a1.51,1.51,0,0,1,0-.48V23.41a4.08,4.08,0,0,1,.75-1.67,2.35,2.35,0,0,1,1.94-.92,19.62,19.62,0,0,0,8.12,3,40.81,40.81,0,0,0,6.63.54,40.9,40.9,0,0,0,6.63-.54,29.57,29.57,0,0,0,4.39-1.06,14.62,14.62,0,0,0,3.36-1.61c.13-.09.27-.17.38-.26h.15a2.32,2.32,0,0,1,1.78.91,3.91,3.91,0,0,1,.76,1.67v5.92c0,.31,0,.62,0,.91A18.35,18.35,0,0,1,41,32.71a5.17,5.17,0,0,0,4.56-3.34,5.23,5.23,0,0,0,.31-1.74V25.21a13,13,0,0,0,0-1.43A21.93,21.93,0,0,0,2,23.09Z" fill="#e60000" fill-rule="evenodd"></path><path id="bb2e5e74-6879-4dde-a8b8-193a7e669475" data-name="Fill" d="M28.44,15.59a4.46,4.46,0,0,1-1.31,1.58,4.93,4.93,0,0,1-4.41.85,5.24,5.24,0,0,1-2.91-2.18,5.74,5.74,0,0,1-.67-1.47s0-.07,0-.11a4,4,0,0,1-.16-.89,7.34,7.34,0,0,1,0-.94v-.09a6.38,6.38,0,0,1,.2-1.31A7.9,7.9,0,0,1,21.7,6.94a8.44,8.44,0,0,1,2.49-1.47c.25-.09.51-.18.76-.25l.46-.13a8.78,8.78,0,0,1,1.16-.2,4.5,4.5,0,0,1,1.16,0,.48.48,0,0,1,.18,0,3.76,3.76,0,0,0-3,3.65V8.7a5.79,5.79,0,0,1,1.93.73,4.41,4.41,0,0,1,1.27,1.16l.07.11a4.26,4.26,0,0,1,.55,1.18A5.3,5.3,0,0,1,29,13.19v.18a5.28,5.28,0,0,1-.56,2.22M24,4a9.13,9.13,0,1,0,9.12,9.13A9.13,9.13,0,0,0,24,4" fill="#fff" fill-rule="evenodd"></path></g></g></g><g id="ab7553bc-3ad2-4546-bba5-f1487e8311fb" data-name="Mouth"><path id="f9f20c66-550d-48d7-b912-b9dca9046d0e" data-name="Fill" d="M33.52,36.87a.83.83,0,0,0-1.2,0,11.77,11.77,0,0,1-16.83,0,.83.83,0,0,0-1.2,0,.88.88,0,0,0,0,1.22l0,0a13.46,13.46,0,0,0,19.23,0,.9.9,0,0,0,0-1.24" fill="#4a4d4e" fill-rule="evenodd"></path></g><g id="a303a073-6090-4810-be93-9117ab65d604" data-name="Eyes"><path id="f7bc4ef8-9e67-4b6f-b050-23f39478a749" data-name="Fill" d="M14.13,29.62h0a2.74,2.74,0,1,0,0-1.37,4.08,4.08,0,0,0-.09.69v0a3.29,3.29,0,0,0,.09.64" fill="#4a4d4e" fill-rule="evenodd"></path><path id="e0e19617-5e7c-4cd3-b4bd-fadc98b4df93" data-name="Fill" d="M28.42,29.64a2.74,2.74,0,0,0,5.3,0,1.63,1.63,0,0,0,.07-.5V29a2.75,2.75,0,0,0-5.49-.09,2.22,2.22,0,0,0,.12.77" fill="#4a4d4e" fill-rule="evenodd"></path></g></g></svg> </span> <span class="visually-hidden"></span> </a> <a href="https://tobi.vodafone.pt/" target="_blank"> <span class="footer-ws10__chat--text">TOBi Chat</span> </a> </div> </div> <div class="grid__item grid__item--1/5 grid__item--sm-1/3 footer-ws10__communitySection"> <div class="footer-ws10__chat"> <a role="button" href="https://www.vodafone.pt/fale-connosco.html" target="_self"> <span class="icon icon--fill icon--large " style="width: 32px; height: 32px;"> <svg viewBox="0 0 24 24"><path style="fill: none; stroke-width: 8; stroke-linecap: round; stroke-linejoin: miter; stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-miterlimit: 4;" d="M 94.09375 42.5625 C 94.0625 38.9375 97 36 100.625 36 L 166.625 36 L 166.625 72.28125 C 166.65625 73.9375 166 75.5625 164.8125 76.75 C 163.65625 77.96875 162.0625 78.65625 160.375 78.65625 L 123.96875 78.65625 " transform="matrix(0.125,0,0,0.125,0,0)"></path><path style="fill: none; stroke-width: 8; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-miterlimit: 4;" d="M 123.9375 78.65625 L 106.875 95.71875 L 106.875 78.65625 L 100.46875 78.65625 C 97 78.71875 94.125 75.90625 94.09375 72.40625 L 94.09375 42.5625 " transform="matrix(0.125,0,0,0.125,0,0)"></path><path style="fill: none; stroke-width: 8; stroke-linecap: round; stroke-linejoin: round; stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-miterlimit: 4;" d="M 25.40625 156 C 29.21875 138.21875 42.625 125.125 58.5625 125.125 C 74.53125 125.125 87.9375 138.21875 91.71875 156 " transform="matrix(0.125,0,0,0.125,0,0)"></path><path style="fill: none; stroke-width: 8; stroke-linecap: butt; stroke-linejoin: miter; stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-miterlimit: 4;" d="M 77.875 103.875 C 77.875 114.5625 69.25 123.1875 58.5625 123.1875 C 47.90625 123.1875 39.25 114.5625 39.25 103.875 C 39.25 93.21875 47.90625 84.5625 58.5625 84.5625 L 77.875 84.5625 Z M 77.875 103.875 " transform="matrix(0.125,0,0,0.125,0,0)"></path></svg> </span> <span class="visually-hidden"></span> </a> <a href="https://www.vodafone.pt/fale-connosco.html"> <span class="footer-ws10__chat--text">Fale connosco</span> </a> </div> </div> <div class="grid__item grid__item--1/5 grid__item--sm-1/3 footer-ws10__communitySection"> <div class="footer-ws10__chat"> <a role="button" href="https://www.livroreclamacoes.pt/inicio" target="_self" onclick="var visitor_login_status = 'Logged In' || 'Logged Out'; utag.link({ 'event_action' : 'Footer Click', 'event_category' : 'Footer', 'event' : ['event_instance'], 'event_label' : 'Livro de Reclama莽玫es', 'event_value' : '1', 'page_name_next' : 'Livro de Reclama莽玫es', 'visitor_login_status' : visitor_login_status });"> <span class="icon icon--fill 10 " style="width: ; height: ;"> <svg viewBox="0 0 161.9 68.5" enable-background="new 0 0 161.9 68.5" xml:space="preserve" height="32px"> <g> <circle fill="#FFFFFF" cx="33.8" cy="33.6" r="32.9"></circle> <g> <g> <path fill="#333333" d="M6.6,28h1.3v9h4.3v1.1H6.6V28z"></path> <path fill="#333333" d="M15,28v10.1h-1.3V28H15z"></path> <path fill="#333333" d="M19.5,38.1L16.2,28h1.4l1.6,5c0.4,1.4,0.8,2.6,1.1,3.8h0c0.3-1.2,0.7-2.4,1.2-3.8l1.7-5h1.4l-3.6,10.1 H19.5z"></path> <path fill="#333333" d="M25.6,28.1c0.7-0.1,1.6-0.2,2.5-0.2c1.4,0,2.3,0.3,2.9,0.8c0.5,0.4,0.8,1.1,0.8,1.9 c0,1.3-0.8,2.2-1.9,2.6v0c0.8,0.3,1.2,1,1.5,2c0.3,1.4,0.6,2.4,0.8,2.8h-1.3c-0.2-0.3-0.4-1.2-0.7-2.4c-0.3-1.4-0.8-1.9-2-2h-1.2 v4.4h-1.3V28.1z M26.9,32.7h1.3c1.4,0,2.3-0.8,2.3-1.9c0-1.3-0.9-1.9-2.3-1.9c-0.6,0-1.1,0.1-1.3,0.1V32.7z"></path> <path fill="#333333" d="M42.4,33c0,3.5-2.1,5.3-4.7,5.3c-2.7,0-4.5-2.1-4.5-5.1c0-3.2,2-5.3,4.7-5.3C40.6,27.8,42.4,30,42.4,33z M34.5,33.1c0,2.2,1.2,4.1,3.2,4.1c2.1,0,3.2-1.9,3.2-4.2c0-2-1-4.1-3.2-4.1C35.6,28.9,34.5,30.9,34.5,33.1z"></path> <path fill="#333333" d="M47.2,28.1C48,28,49,27.9,50,27.9c1.9,0,3.2,0.4,4.1,1.3c0.9,0.8,1.4,2,1.4,3.6c0,1.6-0.5,3-1.5,3.9 c-0.9,0.9-2.5,1.5-4.5,1.5c-0.9,0-1.7,0-2.4-0.1V28.1z M48.5,37.1c0.3,0.1,0.8,0.1,1.3,0.1c2.8,0,4.3-1.6,4.3-4.3 c0-2.4-1.3-3.9-4.1-3.9c-0.7,0-1.2,0.1-1.5,0.1V37.1z"></path> <path fill="#333333" d="M62.4,33.4h-3.9V37h4.4v1.1h-5.7V28h5.5v1.1h-4.1v3.2h3.9V33.4z"></path> <path fill="#FFFFFF" d="M67.8,28.1c0.7-0.1,1.6-0.2,2.5-0.2c1.4,0,2.3,0.3,2.9,0.8c0.5,0.4,0.8,1.1,0.8,1.9 c0,1.3-0.8,2.2-1.9,2.6v0c0.8,0.3,1.2,1,1.5,2c0.3,1.4,0.6,2.4,0.8,2.8H73c-0.2-0.3-0.4-1.2-0.7-2.4c-0.3-1.4-0.8-1.9-2-2h-1.2 v4.4h-1.3V28.1z M69.1,32.7h1.3c1.4,0,2.3-0.8,2.3-1.9c0-1.3-0.9-1.9-2.3-1.9c-0.6,0-1.1,0.1-1.3,0.1V32.7z"></path> <path fill="#FFFFFF" d="M81,33.4h-3.9V37h4.4v1.1h-5.7V28h5.5v1.1h-4.1v3.2H81V33.4z"></path> <path fill="#FFFFFF" d="M90.2,37.8c-0.5,0.2-1.4,0.5-2.7,0.5c-2.8,0-5-1.8-5-5.1c0-3.2,2.1-5.3,5.3-5.3c1.3,0,2.1,0.3,2.4,0.4 l-0.3,1.1c-0.5-0.2-1.2-0.4-2-0.4c-2.4,0-3.9,1.5-3.9,4.2c0,2.5,1.4,4.1,3.9,4.1c0.8,0,1.6-0.2,2.1-0.4L90.2,37.8z"></path> <path fill="#FFFFFF" d="M91.9,28h1.3v9h4.3v1.1h-5.6V28z"></path> <path fill="#FFFFFF" d="M100.6,34.9l-1,3.2h-1.3l3.4-10.1h1.6l3.4,10.1h-1.4l-1.1-3.2H100.6z M103.9,33.9l-1-2.9 c-0.2-0.7-0.4-1.3-0.5-1.8h0c-0.1,0.6-0.3,1.2-0.5,1.8l-1,2.9H103.9z"></path> <path fill="#FFFFFF" d="M116.6,33.7c-0.1-1.4-0.2-3.1-0.1-4.4h0c-0.3,1.2-0.8,2.4-1.3,3.8l-1.8,4.9h-1l-1.6-4.8 c-0.5-1.4-0.9-2.7-1.2-3.9h0c0,1.3-0.1,2.9-0.2,4.5l-0.3,4.3h-1.2l0.7-10.1h1.7l1.7,4.9c0.4,1.2,0.8,2.4,1,3.4h0 c0.3-1,0.6-2.1,1.1-3.4l1.8-4.9h1.7l0.6,10.1h-1.3L116.6,33.7z"></path> <path fill="#FFFFFF" d="M121.6,34.9l-1,3.2h-1.3l3.4-10.1h1.6l3.4,10.1h-1.4l-1.1-3.2H121.6z M124.9,33.9l-1-2.9 c-0.2-0.7-0.4-1.3-0.5-1.8h0c-0.1,0.6-0.3,1.2-0.5,1.8l-1,2.9H124.9z"></path> <path fill="#FFFFFF" d="M135.9,37.8c-0.5,0.2-1.4,0.5-2.7,0.5l-0.3,0.6c0.6,0.1,1,0.5,1,1.1c0,0.9-0.8,1.2-1.5,1.2 c-0.4,0-0.8-0.1-1.1-0.3l0.2-0.7c0.2,0.1,0.5,0.2,0.8,0.2c0.3,0,0.6-0.1,0.6-0.5c0-0.4-0.5-0.6-1.2-0.6l0.6-1.2 c-2.5-0.3-4.2-2.1-4.2-5.1c0-3.2,2.1-5.3,5.3-5.3c1.3,0,2.1,0.3,2.4,0.4l-0.3,1.1c-0.5-0.2-1.2-0.4-2-0.4c-2.4,0-3.9,1.5-3.9,4.2 c0,2.5,1.4,4.1,3.9,4.1c0.8,0,1.6-0.2,2.1-0.4L135.9,37.8z"></path> <path fill="#FFFFFF" d="M145.9,33c0,3.5-2.1,5.3-4.7,5.3c-2.7,0-4.5-2.1-4.5-5.1c0-3.2,2-5.3,4.7-5.3 C144.1,27.8,145.9,30,145.9,33z M138.1,33.1c0,2.2,1.2,4.1,3.2,4.1c2.1,0,3.2-1.9,3.2-4.2c0-2-1-4.1-3.2-4.1 C139.1,28.9,138.1,30.9,138.1,33.1z M139.4,27.4c0-0.9,0.4-1.5,1-1.5c0.3,0,0.6,0.1,0.9,0.3c0.2,0.1,0.5,0.3,0.7,0.3 c0.2,0,0.4-0.1,0.4-0.6h0.7c0,0.9-0.3,1.5-1,1.5c-0.3,0-0.6-0.1-0.9-0.3c-0.3-0.1-0.5-0.3-0.7-0.3c-0.2,0-0.4,0.3-0.4,0.7H139.4z "></path> <path fill="#FFFFFF" d="M152.8,33.4h-3.9V37h4.4v1.1h-5.7V28h5.5v1.1h-4.1v3.2h3.9V33.4z"></path> <path fill="#FFFFFF" d="M154.8,36.5c0.6,0.4,1.4,0.7,2.3,0.7c1.3,0,2.1-0.7,2.1-1.7c0-0.9-0.5-1.5-1.9-2 c-1.6-0.6-2.7-1.4-2.7-2.9c0-1.6,1.3-2.7,3.3-2.7c1,0,1.8,0.2,2.2,0.5l-0.4,1.1c-0.3-0.2-1-0.5-1.9-0.5c-1.4,0-1.9,0.8-1.9,1.5 c0,0.9,0.6,1.4,2,1.9c1.7,0.7,2.6,1.5,2.6,3c0,1.6-1.2,2.9-3.5,2.9c-1,0-2-0.3-2.6-0.6L154.8,36.5z"></path> </g> </g> </g> </svg> </span> <span class="visually-hidden"></span> </a> </div> </div> </div> </div> <div class="grid__item grid__item--2/6 footer-ws10__logo hide--md hide--sm"> <div> <span class="icon icon--fill icon--extra-large " style="width: ; height: ;"> <svg viewBox="0 0 192 192"><path fill="#ffffff" stroke="none" stroke-width="8" stroke-linecap="round" stroke-linejoin="round" d="M128.52,26.92 c-13.77,3.06-24.7,15.92-24.7,30.53c-0.028,0.408,0.016,0.818,0.13,1.21c23.19,5.66,33.84,19.68,33.84,39.09 s-15.24,40.71-41.12,40.85c-21,0-42.86-17.93-43-46.64C53.67,73,63.92,54.61,77,43.7c12.81-10.52,30.33-17.39,46.24-17.39 c1.615-0.028,3.229,0.099,4.82,0.38C88.906,7.691,41.764,24.029,22.764,63.183s-2.661,86.296,36.493,105.296 s86.296,2.661,105.296-36.493c18.91-38.97,2.821-85.897-36.023-105.066H128.52z"></path></svg> </span> <span class="visually-hidden"></span> </div> </div> <hr class="footer-ws10__hr hide--md hide--sm"/> <h2 class="visually-hidden">Site map</h2> <div class="grid__item grid__item--1/1 hide--sm hide--md footer-ws10__sitemap"> <ul class="grid heading--leading heading--trailing"> <li class="grid__item grid__item--1/4"> <div> <span class="footer-ws10__title " onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os')"> Produtos e Servi莽os </span> <ul class="list--reset"> <li class="list__item footer-ws10__item footer-ws10__item-first"> <a href="https://www.vodafone.pt/pacotes.html" onclick=";footerTealiumRequest('Pacotes fibra',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Pacotes fibra')"> Pacotes fibra </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/telemoveis.html" onclick=";footerTealiumRequest('Tarif谩rios m贸veis',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Tarif谩rios m贸veis')"> Tarif谩rios m贸veis </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes/cobertura.html" onclick=";footerTealiumRequest('Verificar Cobertura',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Verificar Cobertura')"> Verificar Cobertura </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/internet-movel/tsi.html" onclick=";footerTealiumRequest('Tarifa Social Internet',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Tarifa Social de Internet')"> Tarifa Social de Internet </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/loja/telemoveis.html" onclick=";footerTealiumRequest('Smartphones',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Smartphones')"> Smartphones </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/internet-movel.html" onclick=";footerTealiumRequest('Internet M贸vel',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Internet M贸vel')"> Internet M贸vel </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/en/esim-portugal.html" onclick=";footerTealiumRequest('Vodafone Travellers',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:eSIM Portugal & Europe')"> eSIM Portugal & Europe </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes/televisao/tv-box/vodafone-tv-play.html" onclick=";footerTealiumRequest('Vodafone TV PLAY',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Produtos e Servi莽os:Vodafone TV PLAY')"> Vodafone TV PLAY </a> </li> </ul> </div> </li> <li class="grid__item grid__item--1/4"> <div> <span class="footer-ws10__title " onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques')"> Destaques </span> <ul class="list--reset"> <li class="list__item footer-ws10__item footer-ws10__item-first"> <a href="https://www.vodafone.pt/pacotes/internet/rede-fibra-vodafone/fiber-to-the-room.html" onclick=";footerTealiumRequest('Vodafone Fiber to the Room',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Vodafone Fiber to the Room')"> Vodafone Fiber to the Room </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/promocoes.html" onclick=";footerTealiumRequest('Boost Internet em casa',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Novidades e Promo莽玫es')"> Novidades e Promo莽玫es </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes/televisao/em-todos-ecras.html" onclick=";footerTealiumRequest('Tv em todos os ecr茫s',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Tv em todos os ecr茫s')"> Tv em todos os ecr茫s </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/portabilidade.html" onclick=";footerTealiumRequest('Portabilidade',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Portabilidade')"> Portabilidade </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafonesolutions.pt/" onclick=";footerTealiumRequest('Vodafone Solutions',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Vodafone Solutions')"> Vodafone Solutions </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/loja/clube-viva.html" onclick=";footerTealiumRequest('Clube Viva',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Clube Viva')"> Clube Viva </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/premios-distincoes.html" onclick=";footerTealiumRequest('Pr茅mios e distin莽玫es',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Pr茅mios e distin莽玫es')"> Pr茅mios e distin莽玫es </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/telemoveis/esim.html" onclick=";footerTealiumRequest('Vodafone eSIM',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Vodafone eSIM')"> Vodafone eSIM </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/black-friday.html" onclick=";footerTealiumRequest('Black Friday 2024',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Destaques:Black Friday 2024')"> Black Friday 2024 </a> </li> </ul> </div> </li> <li class="grid__item grid__item--1/4"> <div> <a href="https://www.vodafone.pt/a-vodafone.html" class="footer-ws10__title footer-ws10__title-underline" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone')"> Sobre a Vodafone </a> <ul class="list--reset"> <li class="list__item footer-ws10__item footer-ws10__item-first"> <a href="https://www.vodafone.pt/a-vodafone.html" onclick=";footerTealiumRequest('A Vodafone',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:A Vodafone')"> A Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/5g.html" onclick=";footerTealiumRequest('Rede 5G',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Rede 5G')"> Rede 5G </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/press-releases.html" onclick=";footerTealiumRequest('Press Releases',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Press Releases')"> Press Releases </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/sustentabilidade.html" onclick=";footerTealiumRequest('Sustentabilidade',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Sustentabilidade')"> Sustentabilidade </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/projetos-financiados.html" onclick=";footerTealiumRequest('Projetos Financiados',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Projetos Financiados')"> Projetos Financiados </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/recrutamento.html" onclick=";footerTealiumRequest('Trabalhar na Vodafone',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Trabalhar na Vodafone')"> Trabalhar na Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/powerlab.html" onclick=";footerTealiumRequest('Vodafone Power Lab',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Vodafone Power Lab')"> Vodafone Power Lab </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/telemoveis/rede-movel-vodafone/descontinuacao-3g.html" onclick=";footerTealiumRequest('Descontinua莽茫o 3G',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Descontinua莽茫o 3G')"> Descontinua莽茫o 3G </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/fundacao.html" onclick=";footerTealiumRequest('Funda莽茫o Vodafone',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Funda莽茫o Vodafone')"> Funda莽茫o Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="mailto:fundacao.pt@vodafone.com" onclick=";footerTealiumRequest('Contactar Funda莽茫o',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Sobre a Vodafone:Contactar Funda莽茫o')"> Contactar Funda莽茫o </a> </li> </ul> </div> </li> <li class="grid__item grid__item--1/4"> <div> <a href="https://www.vodafone.pt/ajuda.html" class="footer-ws10__title footer-ws10__title-underline" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte')"> Suporte </a> <ul class="list--reset"> <li class="list__item footer-ws10__item footer-ws10__item-first"> <a href="https://www.vodafone.pt/ajuda.html" onclick=";footerTealiumRequest('Ajuda',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Ajuda')"> Ajuda </a> </li> <li class="list__item footer-ws10__item "> <a href="https://my.vodafone.pt/fatura.html" onclick=";footerTealiumRequest('Ver Fatura',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Ver Fatura')"> Ver Fatura </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/lojas.html" onclick=";footerTealiumRequest('Lojas',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Lojas')"> Lojas </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/content/digitalhelp/pt/ajuda/contactos.html?passo=1" onclick=";footerTealiumRequest('Contactos ',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Contactos')"> Contactos </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/contactos-institucionais.html" onclick=";footerTealiumRequest('Contactos Institucionais',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Contactos Institucionais')"> Contactos Institucionais </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/downloads.html" onclick=";footerTealiumRequest('Download Centre',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Download Centre')"> Download Centre </a> </li> <li class="list__item footer-ws10__item "> <a href="https://forum.vodafone.pt/" onclick=";footerTealiumRequest('F贸rum',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Comunidade Vodafone')"> Comunidade Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/loja/estado-encomenda.html" onclick=";footerTealiumRequest('Estado da encomenda',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Estado da encomenda')"> Estado da encomenda </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/alertas-e-seguranca.html" onclick=";footerTealiumRequest('Alertas e Seguran莽a',''); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu', 'Suporte:Alertas e Seguran莽a')"> Alertas e Seguran莽a </a> </li> </ul> </div> </li> </ul> </div> <div class="hide--lg"> <div class="js-accordion footer-ws10__accordion" data-js="_accordion" style="letter-spacing: normal;"> <div class="js-accordion-item footer-ws10-accordion__item " onClick="tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu Dropdown', 'Produtos e Servi莽os')"> <h3 class="js-accordion-heading footer-ws10-accordion__heading footer-ws10-accordion__heading--active"> <span class="chevron"> <span class="chevron__text">Produtos e Servi莽os</span> <span class="js-accordion-chevron chevron__container accordion__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small chevron__icon chevron__icon--white"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-down"></use> </svg> </span> </span> </h3> <div class="js-accordion-content footer-ws10-accordion__content footer-ws10-accordion__content--collapse"> <ul class="list list--reset"> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Pacotes fibra');"> Pacotes fibra </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/telemoveis.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Tarif谩rios m贸veis');"> Tarif谩rios m贸veis </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes/cobertura.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Verificar Cobertura');"> Verificar Cobertura </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/internet-movel/tsi.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Tarifa Social de Internet');"> Tarifa Social de Internet </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/loja/telemoveis.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Smartphones');"> Smartphones </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/internet-movel.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Internet M贸vel');"> Internet M贸vel </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/en/esim-portugal.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:eSIM Portugal & Europe');"> eSIM Portugal & Europe </a> </li> <li class="list__item footer-ws10__item footer-ws10__item-last"> <a href="https://www.vodafone.pt/pacotes/televisao/tv-box/vodafone-tv-play.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Produtos e Servi莽os:Vodafone TV PLAY');"> Vodafone TV PLAY </a> </li> </ul> </div> </div> <div class="js-accordion-item footer-ws10-accordion__item " onClick="tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu Dropdown', 'Destaques')"> <h3 class="js-accordion-heading footer-ws10-accordion__heading footer-ws10-accordion__heading--active"> <span class="chevron"> <span class="chevron__text">Destaques</span> <span class="js-accordion-chevron chevron__container accordion__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small chevron__icon chevron__icon--white"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-down"></use> </svg> </span> </span> </h3> <div class="js-accordion-content footer-ws10-accordion__content footer-ws10-accordion__content--collapse"> <ul class="list list--reset"> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes/internet/rede-fibra-vodafone/fiber-to-the-room.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Vodafone Fiber to the Room');"> Vodafone Fiber to the Room </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/promocoes.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Novidades e Promo莽玫es');"> Novidades e Promo莽玫es </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/pacotes/televisao/em-todos-ecras.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Tv em todos os ecr茫s');"> Tv em todos os ecr茫s </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/portabilidade.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Portabilidade');"> Portabilidade </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafonesolutions.pt/" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Vodafone Solutions');"> Vodafone Solutions </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/loja/clube-viva.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Clube Viva');"> Clube Viva </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/premios-distincoes.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Pr茅mios e distin莽玫es');"> Pr茅mios e distin莽玫es </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/telemoveis/esim.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Vodafone eSIM');"> Vodafone eSIM </a> </li> <li class="list__item footer-ws10__item footer-ws10__item-last"> <a href="https://www.vodafone.pt/black-friday.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Destaques:Black Friday 2024');"> Black Friday 2024 </a> </li> </ul> </div> </div> <div class="js-accordion-item footer-ws10-accordion__item " onClick="tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu Dropdown', 'Suporte')"> <h3 class="js-accordion-heading footer-ws10-accordion__heading footer-ws10-accordion__heading--active"> <span class="chevron"> <span class="chevron__text">Suporte</span> <span class="js-accordion-chevron chevron__container accordion__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small chevron__icon chevron__icon--white"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-down"></use> </svg> </span> </span> </h3> <div class="js-accordion-content footer-ws10-accordion__content footer-ws10-accordion__content--collapse"> <ul class="list list--reset"> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/ajuda.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Ajuda');"> Ajuda </a> </li> <li class="list__item footer-ws10__item "> <a href="https://my.vodafone.pt/fatura.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Ver Fatura');"> Ver Fatura </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/lojas.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Lojas');"> Lojas </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/content/digitalhelp/pt/ajuda/contactos.html?passo=1" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Contactos');"> Contactos </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/contactos-institucionais.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Contactos Institucionais');"> Contactos Institucionais </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/downloads.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Download Centre');"> Download Centre </a> </li> <li class="list__item footer-ws10__item "> <a href="https://forum.vodafone.pt/" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Comunidade Vodafone');"> Comunidade Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/loja/estado-encomenda.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Estado da encomenda');"> Estado da encomenda </a> </li> <li class="list__item footer-ws10__item footer-ws10__item-last"> <a href="https://www.vodafone.pt/alertas-e-seguranca.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Suporte:Alertas e Seguran莽a');"> Alertas e Seguran莽a </a> </li> </ul> </div> </div> <div class="js-accordion-item footer-ws10-accordion__item footer__heading--last" onClick="tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu Dropdown', 'Sobre a Vodafone')"> <h3 class="js-accordion-heading footer-ws10-accordion__heading footer-ws10-accordion__heading--active"> <span class="chevron"> <span class="chevron__text">Sobre a Vodafone</span> <span class="js-accordion-chevron chevron__container accordion__chevron"> <svg focusable="false" aria-hidden="true" class="icon icon--small chevron__icon chevron__icon--white"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-chevron-down"></use> </svg> </span> </span> </h3> <div class="js-accordion-content footer-ws10-accordion__content footer-ws10-accordion__content--collapse"> <ul class="list list--reset"> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:A Vodafone');"> A Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/5g.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Rede 5G');"> Rede 5G </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/press-releases.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Press Releases');"> Press Releases </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/sustentabilidade.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Sustentabilidade');"> Sustentabilidade </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/projetos-financiados.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Projetos Financiados');"> Projetos Financiados </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/recrutamento.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Trabalhar na Vodafone');"> Trabalhar na Vodafone </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/powerlab.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Vodafone Power Lab');"> Vodafone Power Lab </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/telemoveis/rede-movel-vodafone/descontinuacao-3g.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Descontinua莽茫o 3G');"> Descontinua莽茫o 3G </a> </li> <li class="list__item footer-ws10__item "> <a href="https://www.vodafone.pt/a-vodafone/fundacao.html" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Funda莽茫o Vodafone');"> Funda莽茫o Vodafone </a> </li> <li class="list__item footer-ws10__item footer-ws10__item-last"> <a href="mailto:fundacao.pt@vodafone.com" onclick="event.stopPropagation(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Main Menu','Sobre a Vodafone:Contactar Funda莽茫o');"> Contactar Funda莽茫o </a> </li> </ul> </div> </div> </div> </div> <script src="/etc.clientlibs/digital-commons/components/content/structure/vf_footer_ws10/vf_footer_ws10_siteMap/clientlibs.min.js"></script> <div> <div class="footer-ws10__aside grid__item--md-1/1"> <div> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract footer-ws10__contract--first"> <a href="https://www.vodafone.pt/portalprivacidade.html" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Privacidade')"> Privacidade </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="https://www.vodafone.pt/beneficios.html" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Benef铆cios Vodafone')"> Benef铆cios Vodafone </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="https://www.vodafone.pt/info/termos-condicoes/servicosdigitais.html" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Servi莽os Digitais')"> Servi莽os Digitais </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="https://www.vodafone.pt/politica-anticorrupcao.html" target="_blank" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Pol铆tica Anticorrup莽茫o')"> Pol铆tica Anticorrup莽茫o </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="#" target="_self" onclick="window.vfptShowDialog(); tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Configura莽茫o de Cookies')"> Configura莽茫o de Cookies </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="#" target="_self" onclick="setTimeout(function(){typeof KAMPYLE_ONSITE_SDK !== 'undefined' && KAMPYLE_ONSITE_SDK.showForm('16738');}, 200);; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Feedback')"> Feedback </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="https://www.vodafone.pt/business/wholesale.html" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'Ofertas Wholesale')"> Ofertas Wholesale </a> </li> </ul> <ul class="list list--reset no-gutter--md-bottom no-gutter--lg-bottom footer-ws10__contracts grid__item"> <li class="list__item footer-ws10__contract "> <a href="https://www.vodafone.pt/en/about-us.html" onclick="; tealium_footerWS10.methods.handleFooterWS10Click('Event Click Footer Legal Menu', 'English')"> English </a> </li> </ul> </div> <div id="getYear" class="footer-ws10__copyright grid__item">漏 {{year}} {{footerText}}</div> </div></div> </div> </div> </div> </div> </div> </footer> </div> <script src="/etc.clientlibs/digital-commons/components/content/structure/vf_footer_ws10/clientlibs.min.js"></script> </div> </div> </div></div> </div> </div> </div> <div id="ttc" class="tooltip__main" xmlns:v-if="http://www.w3.org/1999/xhtml" style="display:none"> <span> <div v-if="defaultSide" class="caption"> <div class="caption__media caption__media--top tooltip__main--media tooltip__main--right"> <svg class="icon icon--small alert__icon" style=""> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-info-circle-light"></use> </svg> </div> <div class="caption__text caption__text--top alert__text tooltip__main--text tooltip__main--left" style="max-width: 320px;" id="tooltip_text"> {{title}} </div> </div> <div v-else class="caption"> <div class="caption__text caption__text--top alert__text tooltip__main--text tooltip__main--right" style="max-width: 320px;"> {{title}} </div> <div class="caption__media caption__media--top tooltip__main--media tooltip__main--left" style=""> <svg class="icon icon--small alert__icon" style="tooltipComponent"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-info-circle-light"></use> </svg> </div> </div> </span> </div> <script src="/etc.clientlibs/digital-commons/components/content/hidden/vf_tooltip/clientlibs.min.js"></script> </div> <script src="/etc.clientlibs/digital-commons/clientlibs/clientlib-site.min.js"></script> <!--[if lte IE 9]> <script src="https://api.cludo.com/scripts/xdomain.js" slave="https://api.cludo.com/proxy.html"></script> <![endif]--> <script type="text/javascript" src="https://customer.cludo.com/scripts/bundles/search-script.min.js"></script> <script type="text/javascript" src="https://customer.cludo.com/assets/1977/10229/cludo-search.min.js"></script> <script src="/etc.clientlibs/digital-commons/clientlibs/vendor/cludo.min.js"></script> <script type="text/javascript" defer>(function(a,b,c,d){a='https://tags.vodafone.pt/pt-universal/prod/utag.js';b=document;c='script';d=b.createElement(c);d.src=a;d.type='text/java'+c;d.async=true;d.addEventListener('load',function(){tealiumBus.$emit('utag-loaded')},false);a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a);})();</script> <script>if(propertiesPath.indexOf('digital-sites')>-1){var hasBreadcrumb=window.breadcrumb!=null&&window.breadcrumb!=undefined;if(hasBreadcrumb){var pagePathArray="";if(breadcrumb.$el&&breadcrumb.$el.children[0]&&breadcrumb.$el.children[0].children[0]){if(breadcrumb.$el.children[0].children[0].className==="visually-hidden")pagePathArray=breadcrumb.$el.children[0].children[1]?breadcrumb.$el.children[0].children[1].children:"";else if(breadcrumb.$el.children[0].children[0].className==="spring")pagePathArray=breadcrumb.$el.children[0].children[0].children[1]?breadcrumb.$el.children[0].children[0].children[1].children:"";}var pagePath="";var i;for(i=0;i<pagePathArray.length;i++){var innerText=pagePathArray[i].innerText.trim();if(i!=pagePathArray.length-1||(innerText!="Cobertura"&&innerText!=document.title&&innerText!="")){pagePath+=innerText+":";}}pagePath=pagePath.slice(0,-1);}var pageName="Check Coverage";var pageSection="";var pagePropsEvent=""?"":"page_view";var productName="";const actionId="";var productCategory="";utag_data.event=pagePropsEvent.replace(/\s/g,'').split(',');utag_data.page_name=pageName?pageName:document.title;utag_data.page_section=pageSection?pageSection:hasBreadcrumb?pagePath:"";if(actionId){utag_data.action_id=actionId;delete utag_data.page_name;delete utag_data.page_section;}if(productName)utag_data.product_name=productName;if(productCategory)utag_data.product_category=productCategory;if(utag_data.product_name&&utag_data.product_category){if(!utag_data.event){utag_data.event=[];}utag_data.event.push("product_view");}utils.methods.sessionUtils().isLoggedIn();if(urlUtils.methods.isEshop()||urlUtils.methods.isHelpAndSupport()){if(SFUrl){SFUrl.sru=window.location.href;}}}</script> <!--<sly data-sly-include="/apps/digital-local/clientlibs/clientlib-local/svg/sprite.html"></sly>--> <div id="mask"></div> <script type="text/javascript" src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=1&cb=1871151420" async></script></body> </html>