PageSourceSearch

https://bechester.com/simulador/

html bechester.com collected 2026-10-07 01:58:36 UTC 22,963 bytes, 198 lines download raw bytes

1<!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
2<title>Calcula el Coste de tu Proyecto de Amueblamiento | Bechester</title>
3<meta name="description" content="Simulador gratuito para estimar el coste de amueblamiento integral de tu proyecto según tipología y número de unidades.">
4<link rel="canonical" href="https://bechester.com/simulador/">
5<link rel="icon" type="image/png" href="/assets/img-fc14cbc5ca.png">
6<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Cormorant+Garamond:ital,wght@0,400;0,600;1,400;1,600&family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
7<link rel="stylesheet" href="/assets/styles.css">
8<style>*,*::before,*::after{cursor:auto !important}</style>
9<script type="application/ld+json">{"@context": "https://schema.org", "@type": "Organization", "name": "Bechester", "legalName": "Vallis Tolitum S.L.", "url": "https://bechester.com/", "logo": "https://bechester.com/assets/img-a77970ec16.png", "email": "[email protected]", "telephone": "+34644655355", "taxID": "B47802095", "address": {"@type": "PostalAddress", "streetAddress": "C/ María de Molina 7, planta 3, oficina 2", "postalCode": "47001", "addressLocality": "Valladolid", "addressCountry": "ES"}, "areaServed": ["ES", "FR", "PT"], "sameAs": ["https://www.instagram.com/bechester_es/", "https://www.pinterest.com/bechestercom/", "https://www.linkedin.com/company/bechester/"]}</script>
vendor: 1 bytes, line 9
9
10<script>
11(function(){
12  window.__gaId__='G-WTGVLT94E4';
13  window.loadGA4=function(){
14    if(window.__ga4Loaded) return;
15    window.__ga4Loaded=true;
16    var s=document.createElement('script');
17    s.async=true;
18    s.src='https://www.googletagmanager.com/gtag/js?id='+window.__gaId__;
19    document.head.appendChild(s);
20    window.dataLayer=window.dataLayer||[];
21    window.gtag=function(){dataLayer.push(arguments);};
22    gtag('js', new Date());
23    gtag('config', window.__gaId__, { anonymize_ip: true });
24  };
25  try {
26    var m = document.cookie.match(/(?:^|; )bechesterCookieChoiceV3=([^;]*)/);
27    var choice = (window.localStorage && localStorage.getItem('bechesterCookieChoiceV3')) || (m ? decodeURIComponent(m[1]) : null);
28    if (choice === 'accepted') window.loadGA4();
29  } catch(e) {}
30})();
31</script>
31
32<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 32-33
32
33<script async src="https://www.googletagmanager.com/gtag/js?id=
33G-WTGVLT94E4
vendor: 12 bytes, line 33
33"></script>
34<script>
35  
vendor: 133 bytes, lines 35-38
35window.dataLayer = window.dataLayer || [];
36  function gtag(){dataLayer.push(arguments);}
37  gtag('js', new Date());
38  gtag('config', '
38G-WTGVLT94E4
vendor: 4 bytes, line 38
38');
39</script>
39</head><body>
40<nav class="nav" id="navbar"><div class="nav-left"><a href="/portfolio/">Portfolio</a><a href="/sectores/">Sectores</a><a href="/simulador/">Simulador</a></div><a class="nav-logo" href="/"><img alt="Bechester" decoding="async" height="28" src="/assets/img-a77970ec16.png" style="height:28px;width:auto;display:block" width="147"/></a><div class="nav-right"><a class="nav-cta" href="#cta-section">Solicitar propuesta gratis</a></div><button aria-label="Abrir menú" class="nav-hamburger" id="nav-ham"><span></span><span></span><span></span></button></nav>
41<div class="nav-mobile-menu" id="nav-mobile-menu"><a href="/">Inicio</a><a href="/amueblamiento-integral-empresas/">Amueblamiento integral</a><a href="/portfolio/">Portfolio</a><a href="/sectores/">Sectores</a><a href="/simulador/">Simulador</a><span class="mob-item mob-cta" onclick="document.getElementById('cta-section').scrollIntoView({behavior:'smooth'});closeMobMenu()">Solicitar propuesta gratis</span></div>
42<div class="page active" id="page-simulador"><section class="section" style="background:#f8f8f8;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:60px 20px"><div style="display:grid;grid-template-columns:1fr 1fr;gap:40px;max-width:1000px;width:100%;background:white;border-radius:12px;overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,0.08)"><div style="padding:50px 45px;display:flex;flex-direction:column;justify-content:center"><div style="margin-bottom:35px"><h1 style="font-family:'DM Serif Display',serif;font-size:36px;color:#1a1a1a;margin-bottom:12px;font-weight:400">Presupuesto</h1><p style="font-size:14px;color:#666;font-weight:300;line-height:1.6">Calcula el coste de tu proyecto de amueblamiento integral</p></div><form id="simuladorForm" onsubmit="return false;"><div style="margin-bottom:20px"><label style="display:block;font-size:11px;font-weight:600;color:#1a1a1a;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.8px">Tipo de Proyecto</label><select id="sim-sector" required="" style="width:100%;padding:12px 14px;border:1px solid #e0e0e0;border-radius:6px;font-size:14px;font-family:Inter,sans-serif;color:#1a1a1a;background:white url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%278%27 viewBox=%270 0 12 8%27%3e%3cpath fill=%27%231a1a1a%27 d=%27M0 0l6 8 6-8z%27/%3e%3c/svg%3e') no-repeat right 16px center;background-size:12px;padding-right:40px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none"><option value="">Selecciona un sector...</option><option value="turistico">Turístico / Corporativo</option><option value="coliving">FlexLiving / Coliving</option><option value="hotel">Hotel Boutique</option><option value="residencia">PBSA / Residencia</option></select></div><div style="margin-bottom:20px"><label style="display:block;font-size:11px;font-weight:600;color:#1a1a1a;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.8px">Tipología</label><select disabled="" id="sim-tipologia" required="" style="width:100%;padding:12px 14px;border:1px solid #e0e0e0;border-radius:6px;font-size:14px;font-family:Inter,sans-serif;color:#1a1a1a;background:white url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%278%27 viewBox=%270 0 12 8%27%3e%3cpath fill=%27%231a1a1a%27 d=%27M0 0l6 8 6-8z%27/%3e%3c/svg%3e') no-repeat right 16px center;background-size:12px;padding-right:40px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none"><option value="">Selecciona una tipología...</option></select></div><div style="margin-bottom:20px"><label style="display:block;font-size:11px;font-weight:600;color:#1a1a1a;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.8px">Modelo</label><select disabled="" id="sim-modelo" required="" style="width:100%;padding:12px 14px;border:1px solid #e0e0e0;border-radius:6px;font-size:14px;font-family:Inter,sans-serif;color:#1a1a1a;background:white url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%278%27 viewBox=%270 0 12 8%27%3e%3cpath fill=%27%231a1a1a%27 d=%27M0 0l6 8 6-8z%27/%3e%3c/svg%3e') no-repeat right 16px center;background-size:12px;padding-right:40px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none"><option value="">Selecciona un modelo...</option></select></div><div style="margin-bottom:20px"><label style="display:block;font-size:11px;font-weight:600;
42color:#1a1a1a;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.8px">Número de Unidades</label><input id="sim-cantidad" max="1000" min="1" required="" style="width:100%;padding:12px 14px;border:1px solid #e0e0e0;border-radius:6px;font-size:14px;font-family:Inter,sans-serif;color:#1a1a1a;background:white" type="number" value="1"/></div></form><div id="sim-resultsBox" style="display:none;background:#f8f8f8;padding:28px;border-radius:8px;margin-top:35px"><div style="display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid #e8e8e8"><span style="font-size:11px;color:#666;font-weight:600;text-transform:uppercase;letter-spacing:0.5px">Precio por Unidad</span><div><span id="sim-precioUnit" style="font-size:20px;font-weight:700;color:#1a1a1a">—</span><span id="sim-unitUnit" style="font-size:12px;color:#999;margin-left:4px"></span></div></div><div style="display:flex;justify-content:space-between;align-items:center;padding:10px 0"><span style="font-size:11px;color:#666;font-weight:600;text-transform:uppercase;letter-spacing:0.5px">Coste Total del Período</span><div><span id="sim-costePeriodo" style="font-size:20px;font-weight:700;color:#1a1a1a">—</span><span id="sim-periodoUnit" style="font-size:12px;color:#999;margin-left:4px"></span></div></div><div style="background:#184849;color:white;padding:24px;border-radius:8px;text-align:center;margin-top:18px"><div style="color:rgba(255,255,255,0.6);margin-bottom:10px;font-size:11px">INVERSIÓN TOTAL</div><div id="sim-totalInversion" style="color:white;font-size:32px;font-weight:700">—</div></div></div><button disabled="" id="sim-btnPropuesta" onclick="abrirModalEmailSim()" style="width:100%;padding:13px 24px;background:#184849;color:white;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;margin-top:24px;text-transform:uppercase;letter-spacing:0.5px;opacity:0.4">
43 Solicitar Propuesta
44 </button></div><div style="background:linear-gradient(135deg,#f5f5f5 0%,#e8e8e8 100%);display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;min-height:500px"><div style="width:100%;height:100%;background-image:url('https://res.cloudinary.com/da0nxykeu/image/upload/v1774004207/Caterina_2_4_9575b97b-3f2b-4339-a605-de7f56fbaf4d_hiouzx.webp');background-size:cover;background-position:center"></div></div></div></section></div>
45<section class="section" id="cta-section" style="background:var(--ow)"><div class="si"><div class="cta-inner" data-anim="scale"><span class="stag">Contacto</span><h2 class="stitle">¿Tienes un proyecto? Hablemos.</h2><p class="sbody" style="max-width:500px;margin:0 auto 40px">Cuéntanos tu activo y en menos de 48 horas te enviamos una propuesta personalizada. Completamente gratis y sin compromiso.</p><div class="pipedriveWebForms proposal-form-embed"><iframe allowtransparency="true" frameborder="0" scrolling="yes" src="https://webforms.pipedrive.com/f/6GYbJpVBcVw7WN5l9Z2qOoW1BAoeadDB2Y2U619E3pYjHm6xg9fPYwnf2vXFncyXsL" style="width:100%;height:820px;border:none;display:block;"></iframe></div><p class="cta-note">O escríbenos a <a class="notranslate" href="mailto:[email protected]" lang="en" style="color:var(--gl);text-decoration:none;" translate="no">[email protected]</a></p></div></div></section>
46<footer class="footer"><div class="footer-top"><div class="footer-col"><h4>Contacto</h4><ul><li><a href="https://webforms.pipedrive.com/f/6GYbJpVBcVw7WN5l9Z2qOoW1BAoeadDB2Y2U619E3pYjHm6xg9fPYwnf2vXFncyXsL" target="_blank">Formulario</a></li><li><a class="notranslate" href="mailto:[email protected]" lang="en" style="color:var(--gl);text-decoration:none;" translate="no">[email protected]</a></li><li><a href="tel:644655355">644 655 355</a></li><li><a href="https://share.hsforms.com/1vTaZC1hSRIij8cA7hW4Uzw8n0br" target="_blank">Convertirse en Proveedor</a></li></ul></div><div class="footer-col"><h4>Países</h4><ul><li><a href="/" onclick="setLang('es');return false;">🇪🇸 España</a></li><li><a href="#" onclick="setLang('fr');return false;">🇫🇷 Francia</a></li><li>
46<a href="#" onclick="setLang('pt');return false;">🇵🇹 Portugal</a></li></ul></div><div class="footer-col"><h4>Amueblamiento y portfolio</h4><ul><li><a href="/amueblamiento-integral-empresas/">Amueblamiento integral</a></li><li></li><li><a href="/portfolio/flexliving/">FlexLiving</a></li><li><a href="/portfolio/coliving/">Coliving</a></li><li><a href="/portfolio/pisos-turisticos/">Pisos Turísticos</a></li><li><a href="/portfolio/pisos-corporativos/">Alquiler Corporativos</a></li></ul></div><div class="footer-col"><h4>Síguenos</h4><ul><li><a href="https://www.instagram.com/bechester_es/" target="_blank">Instagram</a></li><li><a href="https://www.pinterest.com/bechestercom/" target="_blank">Pinterest</a></li><li><a href="https://www.linkedin.com/company/bechester/" target="_blank">LinkedIn</a></li></ul></div></div><div class="footer-bottom"><span>© 2026, Bechester</span><span class="sep">·</span><a href="/privacidad/">Política de privacidad</a><span class="sep">·</span><a href="#cookies" class="notranslate" translate="no" onclick="event.preventDefault();openCookiePreferences(true);return false;">Política de cookies</a><span class="sep">·</span><a href="/terminos/">Condiciones Generales</a><span class="sep">·</span><a href="/aviso-legal/">Aviso legal</a></div><div class="footer-enisa notranslate" translate="no"><a href="https://www.enisa.es/" target="_blank" rel="noopener noreferrer" aria-label="Visitar la web de ENISA"><img src="/assets/sello-enisa-horizontal.png" alt="Empresa financiada por ENISA" loading="lazy" width="2706" height="1808"></a></div><div class="lightbox" id="lightbox" onclick="closeLightbox(event)"><span class="lightbox-close" onclick="closeLightbox({target:this})">×</span><span class="lightbox-prev" onclick="lightboxNav(-1,event)">‹</span><img alt="Imagen ampliada" id="lightbox-img" loading="lazy" src=""/><span class="lightbox-next" onclick="lightboxNav(1,event)">›</span><div class="lightbox-counter" id="lightbox-counter"></div></div>
46<script src="/assets/script-4.js"></script>
46<div class="lang-selector notranslate" data-no-translate="true" id="lang-selector" translate="no"><button class="lang-btn active notranslate" data-no-translate="true" id="btn-es" onclick="setLang('es')" translate="no">ES</button><button class="lang-btn notranslate" data-no-translate="true" id="btn-fr" onclick="setLang('fr')" translate="no">FR</button><button class="lang-btn notranslate" data-no-translate="true" id="btn-pt" onclick="setLang('pt')" translate="no">PT</button></div><div class="lang-translate-bar notranslate" data-no-translate="true" id="lang-bar" translate="no">Traduciendo... ⏳</div>
46<script src="/assets/script-5.js"></script>
46<script src="/assets/script-6.js"></script>
46<script src="/assets/script-7.js"></script>
vendor: 1 bytes, line 46
46
47<script id="bechester-cookie-freeze-fix">
48(function(){
49  var KEY='bechesterCookieChoiceV3';
50  function safeGet(k){try{return window.localStorage?localStorage.getItem(k):null;}catch(e){return null;}}
51  function safeSet(k,v){try{if(window.localStorage)localStorage.setItem(k,v);}catch(e){try{document.cookie=k+'='+encodeURIComponent(v)+';path=/;max-age=31536000;SameSite=Lax';}catch(_){}}}
52  function removeAllPopups(){
53    document.querySelectorAll('.cookie-popup-overlay').forEach(function(el){
54      el.classList.remove('show');
55      el.style.opacity='0';
56      el.style.pointerEvents='none';
57      setTimeout(function(){ if(el && el.parentNode) el.parentNode.removeChild(el); }, 180);
58    });
59    document.documentElement.style.overflow='';
60    document.body.style.overflow='';
61  }
62  function buildPopup(){
63    var overlay=document.createElement('div');
64    overlay.className='cookie-popup-overlay notranslate';
65    overlay.setAttribute('role','dialog');
66    overlay.setAttribute('aria-modal','true');
67    overlay.setAttribute('aria-labelledby','cookie-title');
68    overlay.setAttribute('translate','no');
69    overlay.innerHTML='<div class="cookie-popup" role="document"><div class="cookie-text"><div class="cookie-kicker">Bechester</div><h3 id="cookie-title">Cookies y privacidad</h3><p>Utilizamos cookies técnicas para que la web funcione correctamente y cookies analíticas para entender cómo se utiliza la página y mejorar la experiencia.</p></div><div class="cookie-details" id="cookie-details"><strong>Política de cookies</strong><p>Puedes aceptar o rechazar las cookies no esenciales. Las cookies técnicas son necesarias para la navegación, la seguridad y el correcto funcionamiento del sitio.</p><ul><li><strong>Cookies técnicas:</strong> necesarias para recordar acciones básicas y permitir el uso normal de la web.</li><li><strong>Cookies analíticas:</strong> nos ayudan a medir visitas, rendimiento y navegación para optimizar la web.</li><li><strong>Gestión del consentimiento:</strong> guardamos tu elección para no volver a mostrar este aviso en cada visita.</li></ul></div><div class="cookie-actions"><button id="rejectCookies" class="cookie-btn secondary green-cursor" type="button">Rechazar</button><button id="acceptCookies" class="cookie-btn primary white-cursor" type="button">Aceptar</button></div><p class="cookie-footer-note">Puedes cambiar tu decisión en cualquier momento desde “Política de cookies” en el footer.</p></div>';
70    return overlay;
71  }
72  function choose(choice, ev){
73    if(ev){ev.preventDefault(); ev.stopPropagation(); if(ev.stopImmediatePropagation) ev.stopImmediatePropagation();}
74    safeSet(KEY, choice);
75    removeAllPopups();
76    return false;
77  }
78  document.addEventListener('click', function(ev){
79    var btn=ev.target && ev.target.closest ? ev.target.closest('#acceptCookies,#rejectCookies') : null;
80    if(!btn) return;
81    choose(btn.id==='acceptCookies'?'accepted':'rejected', ev);
82  }, true);
83  window.openCookiePreferences=function(force){
84    removeAllPopups();
85    if(!force && safeGet(KEY)) return;
86    var overlay=buildPopup();
87    document.body.appendChild(overlay);
88    var accept=overlay.querySelector('#acceptCookies');
89    var reject=overlay.querySelector('#rejectCookies');
90    if(accept) accept.addEventListener('click', function(e){choose('accepted',e);}, true);
91    if(reject) reject.addEventListener('click', function(e){choose('rejected',e);}, true);
92    overlay.addEventListener('click', function(e){ if(force && e.target===overlay) removeAllPopups(); });
93    setTimeout(function(){ overlay.classList.add('show'); }, 30);
94  };
95  function init(){ if(!safeGet(KEY)) window.openCookiePreferences(false); }
96  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', init); else init();
97})();
98</script>
vendor: 1 bytes, line 98
98
99<script>
100(function(){
101  var simImg='https://res.cloudinary.com/da0nxykeu/image/upload/v1774004207/Caterina_2_4_9575b97b-3f2b-4339-a605-de7f56fbaf4d_hiouzx.webp';
102  function fixSimImage(){
103    var sim=document.getElementById('page-simulador');
104    if(!sim) return;
105    var divs=sim.querySelectorAll('div[style*="background-image"]');
106    divs.forEach(function(d){
107      if((d.getAttribute('style')||'').indexOf('Caterina_2_4')>-1 || d.offsetHeight>300){
108        d.style.backgroundImage='url('+simImg+')';
109        d.style.backgroundSize='cover';
110        d.style.backgroundPosition='center';
111      }
112    });
113  }
114  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',fixSimImage); else fixSimImage();
115  window.addEventListener('load',fixSimImage);
116})();
117</script>
vendor: 1 bytes, line 117
117
118<script id="portfolio-broken-image-order-fix">
119(function(){
120  function moveBrokenPortfolioCard(img){
121    var card = img && img.closest ? img.closest('#portfolio-grid .port-card') : null;
122    var grid = document.getElementById('portfolio-grid');
123    if(!card || !grid || card.dataset.noPhotoMoved === '1') return;
124    card.dataset.noPhotoMoved = '1';
125    card.classList.add('portfolio-no-photo-last');
126    grid.appendChild(card);
127  }
128  function setupBrokenImageOrdering(){
129    var imgs = document.querySelectorAll('#portfolio-grid .port-card img');
130    imgs.forEach(function(img){
131      img.addEventListener('error', function(){ moveBrokenPortfolioCard(img); }, {once:true});
132      if(img.complete && img.naturalWidth === 0){ moveBrokenPortfolioCard(img); }
133    });
134  }
135  if(document.readyState === 'loading'){
136    document.addEventListener('DOMContentLoaded', setupBrokenImageOrdering);
137  } else {
138    setupBrokenImageOrdering();
139  }
140  window.addEventListener('load', function(){ setTimeout(setupBrokenImageOrdering, 300); });
141})();
142</script>
142
143</footer>
144<div class="lang-selector notranslate" data-no-translate="true" id="lang-selector" translate="no"><button class="lang-btn active notranslate" data-no-translate="true" id="btn-es" onclick="setLang('es')" translate="no">ES</button><button class="lang-btn notranslate" data-no-translate="true" id="btn-fr" onclick="setLang('fr')" translate="no">FR</button><button class="lang-btn notranslate" data-no-translate="true" id="btn-pt" onclick="setLang('pt')" translate="no">PT</button></div><div class="lang-translate-bar notranslate" data-no-translate="true" id="lang-bar" translate="no">Traduciendo... ⏳</div>
145<script defer src="https://webforms.pipedrive.com/f/loader" async></script>
vendor: 1 bytes, line 145
145
146<script src="/assets/script-1.js"></script>
vendor: 1 bytes, line 146
146
147<script src="/assets/script-2.js"></script>
vendor: 1 bytes, line 147
147
148<script src="/assets/script-4.js"></script>
vendor: 1 bytes, line 148
148
149<script src="/assets/script-5.js"></script>
vendor: 1 bytes, line 149
149
150<script src="/assets/script-6.js"></script>
vendor: 1 bytes, line 150
150
151<script src="/assets/script-7.js"></script>
vendor: 1 bytes, line 151
151
152<script>
153(function(){
154  var simImg='https://res.cloudinary.com/da0nxykeu/image/upload/v1774004207/Caterina_2_4_9575b97b-3f2b-4339-a605-de7f56fbaf4d_hiouzx.webp';
155  function fixSimImage(){
156    var sim=document.getElementById('page-simulador');
157    if(!sim) return;
158    var divs=sim.querySelectorAll('div[style*="background-image"]');
159    divs.forEach(function(d){
160      if((d.getAttribute('style')||'').indexOf('Caterina_2_4')>-1 || d.offsetHeight>300){
161        d.style.backgroundImage='url('+simImg+')';
162        d.style.backgroundSize='cover';
163        d.style.backgroundPosition='center';
164      }
165    });
166  }
167  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',fixSimImage); else fixSimImage();
168  window.addEventListener('load',fixSimImage);
169})();
170</script>
vendor: 1 bytes, line 170
170
171<script id="portfolio-broken-image-order-fix">
172(function(){
173  function moveBrokenPortfolioCard(img){
174    var card = img && img.closest ? img.closest('#portfolio-grid .port-card') : null;
175    var grid = document.getElementById('portfolio-grid');
176    if(!card || !grid || card.dataset.noPhotoMoved === '1') return;
177    card.dataset.noPhotoMoved = '1';
178    card.classList.add('portfolio-no-photo-last');
179    grid.appendChild(card);
180  }
181  function setupBrokenImageOrdering(){
182    var imgs = document.querySelectorAll('#portfolio-grid .port-card img');
183    imgs.forEach(function(img){
184      img.addEventListener('error', function(){ moveBrokenPortfolioCard(img); }, {once:true});
185      if(img.complete && img.naturalWidth === 0){ moveBrokenPortfolioCard(img); }
186    });
187  }
188  if(document.readyState === 'loading'){
189    document.addEventListener('DOMContentLoaded', setupBrokenImageOrdering);
190  } else {
191    setupBrokenImageOrdering();
192  }
193  window.addEventListener('load', function(){ setTimeout(setupBrokenImageOrdering, 300); });
194})();
195</script>
195
196
197<script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="f92a5a0a-afb1-4a89-b900-0a8496ddde73" data-netlify-deploy-branch="" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiZjkyYTVhMGEtYWZiMS00YTg5LWI5MDAtMGE4NDk2ZGRkZTczIiwiYWNjb3VudF9pZCI6IjY5ZWIzYzc4NWI1MmE5M2NlMzhjZTJjMiIsImRlcGxveV9pZCI6IjZhYzRjYWU5NTU3ZDYwNjg3N2JlMDM1OSIsImlzc3VlciI6Im5mc2VydmVyIn0.ftdccZr1KJIDejWXRkfJnluwaTtIE6QzzC__mJyVw_4"></script>
197
198</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.