The following has evaluated to null or missing:
==> cur_cardGroup.cardIcon.getAttribute('alt') [in template "776318#776366#PP_NEW_MODAL_HEADER" at line 47, column 77]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${cur_cardGroup.cardIcon.getAttribute... [in template "776318#776366#PP_NEW_MODAL_HEADER" at line 47, column 75]
----
1<div class="c-calc-modal">
2 <div class="container-fluid c-calc-header__container">
3 <div class="container">
4 <header class="c-calc-header">
5 <a href="/" class="c-calc-header__logo">
6 <#if headerLogo?? && headerLogo.getData()?? && headerLogo.getData() != "">
7 <img alt="${headerLogo.getAttribute('alt')}" data-fileentryid="${headerLogo.getAttribute('fileEntryId')}" src="${headerLogo.getData()}" />
8 </#if>
9 </a>
10 <#if closeButtonText?? && closeButtonText.getData()?? && closeButtonText.getData() != "">
11 <a href="#" class="c-calc-header__close js-close-header"> <span class="icon-arrow-right"></span> ${htmlUtil.unescape(closeButtonText.getData())}</a>
12 </#if>
13 </header>
14 </div>
15 </div>
16
17
18 <div class="section-wrapper">
19 <div class="c-buttons-text c-buttons-text--seg section-wrapper">
20 <#if title?? && title.getData()?? && title.getData() != "">
21
22 <p class="c-buttons-text__title c-buttons-text__title--insuranceCard">
23 ${htmlUtil.unescape(title.getData())}
24 </p>
25 </#if>
26 <p class="c-buttons-text__subtitle c-buttons-text__subtitle--insuranceCard">
27 <#if subtitle?? && subtitle.getData()?? && subtitle.getData() != "">
28 ${htmlUtil.unescape(subtitle.getData())}
29 </#if>
30 </p>
31 </div>
32
33 <div id="insuranceCard--slider" class="c-insuranceCard-wrapper">
34 <div class="owl-slider js-modal-carousel owl-carousel owl-theme owl-loaded owl-drag" id="carouselTipoSeguros">
35 <#if cardGroup.getSiblings()?has_content>
36 <#list cardGroup.getSiblings() as cur_cardGroup>
37 <#assign linkTarget = "_self">
38 <#assign link = "#">
39 <#if cur_cardGroup.buttonLink?? && cur_cardGroup.buttonLink.getData()?? && cur_cardGroup.buttonLink.getData() != "">
40 <#assign link = cur_cardGroup.buttonLink.getData()>
41 </#if>
42 <#if cur_cardGroup.buttonTarget?? && cur_cardGroup.buttonTarget.getData()?? && cur_cardGroup.buttonTarget.getData() != "">
43 <#assign linkTarget = cur_cardGroup.buttonTarget.getData()>
44 </#if>
45 <a target="${linkTarget}" class="c-insuranceCard js-insurance-card" href="${link}">
46 <div class="c-insuranceCard__image">
47 <img alt="${cur_cardGroup.cardIcon.getAttribute('alt')}" data-fileentryid="${cur_cardGroup.cardIcon.getAttribute('fileEntryId')}" src="${cur_cardGroup.cardIcon.getData()}" />
48 </div>
49 <p class="c-insuranceCard__title">
50 <#if cur_cardGroup.cardTitle?? && cur_cardGroup.cardTitle.getData()?? && cur_cardGroup.cardTitle.getData() != "">
51 ${htmlUtil.unescape(cur_cardGroup.cardTitle.getData())?replace("<br\\s*/?>", " ", "ri")}
52 </#if>
53 </p>
54 <span class="c-insuranceCard__cta">
55 <#if cur_cardGroup.cardButtonText?? && cur_cardGroup.cardButtonText.getData()?? && cur_cardGroup.cardButtonText.getData() != "">
56 ${htmlUtil.unescape(cur_cardGroup.cardButtonText.getData())}
57 </#if>
58 </span>
59 </a>
60 </#list>
61 </#if>
62 </div>
63 </div>
64 <button type="button" class="c-insuranceCard__toggle js-insurance-toggle" aria-expanded="false">
65 <span class="js-insurance-toggle-text">VER MÁS</span>
66 <span class="c-insuranceCard__toggle-icon js-insurance-toggle-icon">
67 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M3.43056 5.67872C3.70012 5.36423 4.1736 5.32781 4.48809 5.59737L8 8.60758L11.5119 5.59737C11.8264 5.32781 12.2999 5.36423 12.5694 5.67872C12.839 5.99322 12.8026 6.46669 12.4881 6.73626L8 10.5832L3.51191 6.73626C3.19741 6.46669 3.16099 5.99322 3.43056 5.67872Z" fill="#00008F"/></svg>
68 </span>
69 </button>
70 <div class="c-insuranceContent">
71 <#if middleText?? && middleText.getData()?? && middleText.getData() != "" && secondMiddleText?? && secondMiddleText.getData()?? && secondMiddleText.getData() != "" && middleLink?? && middleLink.getData()?? && middleLink.getData() != "">
72 <div class="c-insuranceContent__recover-banner">
73 <p class="c-insuranceContent__text--small">
74 ${htmlUtil.unescape(middleText.getData())}
75 </p>
76 <#assign linkTarget = "_self">
77 <#if middleLinkTarget?? && middleLinkTarget.getData()?? && middleLinkTarget.getData() != "">
78 <#assign linkTarget = middleLinkTarget.getData()>
79 </#if>
80 <a class="c-insuranceContent__recover-cta" href="${middleLink.getData()}" target="${linkTarget}">
81 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.94168 6.10219C6.56168 4.48219 9.19168 4.48219 10.8117 6.10219C12.4317 7.72219 12.4317 10.3522 10.8117 11.9722C9.19168 13.5922 6.56168 13.5922 4.94168 11.9722C4.65168 11.6822 4.17168 11.6822 3.88168 11.9722C3.59168 12.2622 3.59168 12.7422 3.88168 13.0322C6.09168 15.2422 9.66168 15.2422 11.8717 13.0322C14.0817 10.8222 14.0817 7.25219 11.8717 5.04219C9.84168 3.01219 6.66168 2.85219 4.44168 4.55219L5.12168 2.27219C5.24168 1.87219 5.01168 1.46219 4.62168 1.34219C4.22168 1.22219 3.81168 1.45219 3.69168 1.84219L2.50168 5.79219C2.40168 6.13219 2.55168 6.49219 2.85168 6.66219L6.44168 8.68219C6.80168 8.88219 7.26168 8.76219 7.46168 8.39219C7.66168 8.03219 7.54168 7.57219 7.17168 7.37219L4.93168 6.11219L4.94168 6.10219Z" fill="#00008F"/></svg>
82 ${htmlUtil.unescape(secondMiddleText.getData())}
83 </a>
84 </div>
85 </#if>
86 </div>
87 <div class="container-fluid">
88 <div class="c-insuranceContent__links">
89 <#assign officeLinkTarget = "_self">
90 <#assign officeLink = "#">
91 <#if officeGroup.officeButtonLink?? && officeGroup.officeButtonLink.getData()?? && officeGroup.officeButtonLink.getData() != "">
92 <#assign officeLink = officeGroup.officeButtonLink.getData()>
93 </#if>
94 <#if officeGroup.officeButtonTarget?? && officeGroup.officeButtonTarget.getData()?? && officeGroup.officeButtonTarget.getData() != "">
95 <#assign officeLinkTarget = officeGroup.officeButtonTarget.getData()>
96 </#if>
97 <#if officeGroup.officeButtonText?? && officeGroup.officeButtonText.getData()?? && officeGroup.officeButtonText.getData() != "">
98 <a target="${officeLinkTarget}" class="c-insuranceContent__link" href="${officeLink}">
99 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 1C10.7614 1 13 3.23858 13 6C13 8.76142 8 15 8 15C8 15 3 8.76142 3 6C3 3.23858 5.23858 1 8 1ZM8 4C6.89543 4 6 4.89543 6 6C6 7.10457 6.89543 8 8 8C9.10457 8 10 7.10457 10 6C10 4.89543 9.10457 4 8 4Z" fill="#00008F"/></svg>
100 ${htmlUtil.unescape(officeGroup.officeButtonText.getData())}
101 </a>
102 </#if>
103 <#assign CallLinkTarget = "_self">
104 <#assign callLink = "#">
105 <#if phoneCallGroup.callButtonLink?? && phoneCallGroup.callButtonLink.getData()?? && phoneCallGroup.callButtonLink.getData() != "">
106 <#assign callLink = phoneCallGroup.callButtonLink.getData()>
107 </#if>
108 <#if phoneCallGroup.callButtonTarget?? && phoneCallGroup.callButtonTarget.getData()?? && phoneCallGroup.callButtonTarget.getData() != "">
109 <#assign CallLinkTarget = phoneCallGroup.callButtonTarget.getData()>
110 </#if>
111 <#if phoneCallGroup.callButtonText?? && phoneCallGroup.callButtonText.getData()?? && phoneCallGroup.callButtonText.getData() != "">
112 <a class="c-insuranceContent__link" href="${callLink}" target="${CallLinkTarget}">
113 <svg fill="none" height="16" viewbox="0 0 12 12" width="16" xmlns="http://www.w3.org/2000/svg"> <path d="M2.41 5.19C3.37614 7.07795 4.91206 8.61386 6.8 9.58L8.27 8.11C8.46816 7.92795 8.757 7.88442 9 8C9.76807 8.25245 10.5715 8.38073 11.38 8.38C11.712 8.40397 11.976 8.66802 12 9V11.33C12 11.7 11.7 12 11.33 12C5.07261 12 0 6.92739 0 0.67C0 0.299969 0.299969 0 0.67 0H3C3.37003 0 3.67 0.299969 3.67 0.67C3.65787 1.45912 3.76921 2.24528 4 3C4.07587 3.2406 4.01017 3.50341 3.83 3.68L2.41 5.19Z" fill="#00008F"></path> </svg>
114 ${htmlUtil.unescape(phoneCallGroup.callButtonText.getData())}
115 </a>
116 </#if>
117 </div>
118 </div>
119 </div>
120
121
122
123
124<script>
125
126 $( document ).ready(function() {
127
128 let abNavPrev = '<svg width="10" height="16" viewBox="0 0 10 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 15L2 8L9 1" stroke="#00008F" stroke-width="1.5" stroke-linecap="round"/></svg>';
129 let abNavNext = '<svg width="10" height="16" viewBox="0 0 10 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L8 8L1 15" stroke="#00008F" stroke-width="1.5" stroke-linecap="round"/></svg>';
130
131 const CARD_GRID_BREAKPOINT = 1024;
132 const MIN_CARD_WIDTH = 160;
133 const CARD_GAP = 16;
134 const CARDS_VISIBLE_COLLAPSED = 6;
135 const NAV_RESERVED_WIDTH = (20 + 20) * 2;
136
137 let tiempo = 3000;
138 let owlInitialized = false;
139 let currentItems = null;
140 let expanded = false;
141
142 let modd = document.getElementsByClassName("c-calc-modal");
143 let carr = document.getElementsByClassName('js-modal-carousel');
144 let toggleButton = document.getElementsByClassName('js-insurance-toggle')[0];
145 let toggleText = document.getElementsByClassName('js-insurance-toggle-text')[0];
146
147 let evnts = ["scroll", "touchmove", "touchstart", "touchend", "mousedown", "mouseup", "dragstart", "drag", "dragend", "dragenter", "dragover", "dragleave", "drop"];
148
149 window.addEventListener('resize', refreshLayout);
150
151 evnts.forEach(e => {
152 modd[0].addEventListener(e, stopcarrousel);
153 if (carr[0]) {
154 carr[0].addEventListener(e, stopcarrousel);
155 }
156 })
157
158 let observer = new MutationObserver(function(mutations){
159 mutations.forEach(function(mutation){
160 if(mutation.type == 'attributes' && mutation.attributeName == 'class'){
161 refreshLayout();
162 if (owlInitialized) {
163 $('.js-modal-carousel').trigger('stop.owl.autoplay');
164 changeIco();
165 }
166 waiting();
167 }
168 })
169 })
170
171 observer.observe(modd[0], { attributes: true });
172
173 if (toggleButton) {
174 toggleButton.onclick = function(){
175 expanded = !expanded;
176 modd[0].classList.toggle('insuranceCard--expanded', expanded);
177 toggleButton.setAttribute('aria-expanded', expanded);
178 toggleText.textContent = expanded ? 'VER MENOS' : 'VER MÁS';
179 toggleButton.classList.toggle('is-expanded', expanded);
180 }
181 }
182
183 refreshLayout();
184
185 function stopcarrousel(){
186 if (owlInitialized) {
187 $('.js-modal-carousel').trigger('stop.owl.autoplay');
188 }
189 waiting();
190 }
191
192 function waiting(){
193 setTimeout(function(){
194 if (owlInitialized) {
195 $('.js-modal-carousel').trigger('stop.owl.autoplay');
196 }
197 },tiempo)
198 }
199
200 function getTotalCards(){
201 return document.getElementsByClassName('js-insurance-card').length;
202 }
203
204 function computeItems(){
205 let stageWidth = $('.js-modal-carousel').width();
206 if (!stageWidth) {
207 stageWidth = Math.min(window.innerWidth, 1440) - 64 - NAV_RESERVED_WIDTH;
208 }
209 const totalCards = getTotalCards();
210 const items = Math.floor((stageWidth + CARD_GAP) / (MIN_CARD_WIDTH + CARD_GAP));
211 return Math.max(1, Math.min(items, totalCards));
212 }
213
214 function refreshLayout(){
215 const isDesktop = window.innerWidth >= CARD_GRID_BREAKPOINT;
216 const totalCards = getTotalCards();
217
218 if (toggleButton) {
219 toggleButton.style.display = (!isDesktop && totalCards > CARDS_VISIBLE_COLLAPSED) ? '' : 'none';
220 }
221
222 if (isDesktop) {
223 const items = computeItems();
224 if (!owlInitialized) {
225 initCarousel(items);
226 } else if (items !== currentItems) {
227 $('.js-modal-carousel').trigger('destroy.owl.carousel');
228 owlInitialized = false;
229 initCarousel(items);
230 }
231 } else if (owlInitialized) {
232 $('.js-modal-carousel').trigger('destroy.owl.carousel');
233 owlInitialized = false;
234 currentItems = null;
235 }
236 }
237
238 function initCarousel(items){
239 $('.js-modal-carousel').owlCarousel({
240 autoplay: false,
241 autoplayTimeout: tiempo,
242 autoplayHoverPause: true,
243 navText: [abNavPrev, abNavNext],
244 dots: true,
245 margin: CARD_GAP,
246 loop: true,
247 nav: true,
248 items: items,
249 slideBy: 1
250 });
251
252 owlInitialized = true;
253 currentItems = items;
254
255 $('.js-modal-carousel').trigger('stop.owl.autoplay');
256 waiting();
257 }
258
259 function changeIco(){
260 $(".owl-prev").empty();
261 $(".owl-next").empty();
262
263 $(".owl-next").append(abNavNext);
264 $(".owl-prev").append(abNavPrev);
265 }
266
267 });
268</script>
- Empresas
- Seguros PEME
- Ciber Protect 360
- Coberturas cyberprotect360
Coberturas principales
-
• Asistencia ante incidentes cibernéticos 24/7
• Asesoramiento y asistencia en procedimientos legales y regulatorios
• Servicio de seguridad informática y forense
• Gestión de la comunicación en situaciones de crisis
• Vulneración de la PrivacidadTe acompañamos tras el incidente, con un módulo de formación para empleados para prevenir y evitar incidentes futuros.
-
Ofrecemos protección frente a las pérdidas económicas por reclamaciones y sanciones administrativas derivadas de incidentes cibernéticos o violaciones involuntarias de privacidad, incluyendo aquellas que pueda imponer la Agencia Española de Protección de Datos (AEPD) y en cumplimiento de las regulaciones NIS2 y DORA.
• Reclamaciones de terceros a raíz de incidente cibernético
• Responsabilidad de gestión para Altos Directivos
• Sanciones Administrativas por incumplimiento involuntario
• Responsabilidad Civil por difamación
• Vulneración de los Derechos de Propiedad Intelectual -
Te ayudamos a recuperarte de tu siniestro rápidamente
Reembolso de los costes derivados de reparar y restaurar los datos y aplicaciones de tus sistemas, las pérdidas financieras sufridas por una interrupción de tus sistemas y por la pérdida de clientes.
• Daños a los sistemas y costes de rectificación
• Daño Reputacional Consecuente
• Cryptojacking
• Cobertura hardware (Bricking)
• Gastos de Ajuste de Siniestro
• Interrupción del Negocio: este seguro te da cobertura por la pérdida de beneficio directa derivada de una paralización de la actividad cuya causa sea un incidente cibernético. -
Indemnización y amenaza de ciber extorsión
Incluyendo la indemnización de las posibles pérdidas financieras que se puedan derivar de esta situación así como la intervención de expertos en negociación, gestión y recuperación de la información comprometida.
-
Fraude por transferencia de fondos (incluida la Ingeniería Social) y Robo de Identidad Digital
Cubre los perjuicios derivados de transferencias no autorizadas, robos de identidad digital o manipulaciones informáticas de documentación.
• Fraude por transferencia de Fondos con y sin acceso a los sistemas
• Robo de Identidad digital -
Ampliación de cobertura
Complementa tu seguro reforzando la protección ante robos y suplantaciones. Esta cobertura adicional amplía la indemnización frente a ataques que afecten al patrimonio del asegurado o de terceros, garantizando una respuesta integral ante fraudes digitales y accesos indebidos.
• Robo de Fondos de Cuenta Fiduciaria
• Robo Fondos Personales
• Hacking Telefónico
• Suplantación de identidad del asegurado