1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <meta name="x-prerendered" content="/en"> 7
7<script> 8 // Runs before anything renders. 9 // 1. Root URL: a visitor who chose Romanian goes straight to /ro. Everyone 10 // else gets the English homepage that is prerendered at / itself (see 11 // the "/" route in src/App.tsx), so there is no redirect after the 12 // JavaScript has loaded. 13 // 2. This file is also the SPA fallback for paths that have no 14 // prerendered file of their own (404s, old links). Their markup 15 // belongs to another page, so keep it off screen until React has 16 // rendered the right one (src/main.tsx clears it). 17 (function () { 18 var LEGACY_ROUTES = {"/hyva":["/en/hyva","/ro/hyva"],"/elasticsuite":["/en/elasticsuite","/ro/elasticsuite"],"/hypernode":["/en/hypernode","/ro/hypernode"],"/liquid-framework":["/en/liquid-framework","/ro/liquid-framework"],"/services":["/en/services","/ro/servicii"],"/services/custom-project":["/en/services/custom-project","/ro/servicii/proiect-personalizat"],"/services/prototyping":["/en/services/prototyping","/ro/servicii/prototipare"],"/services/takeover":["/en/services/takeover","/ro/servicii/preluare"],"/services/support-development":["/en/services/support-development","/ro/servicii/suport-dezvoltare"],"/services/advice":["/en/services/advice","/ro/servicii/consultanta"],"/services/advice/code-review":["/en/services/advice/code-review","/ro/servicii/consultanta/analiza-cod"],"/services/advice/website-analysis":["/en/services/advice/website-analysis","/ro/servicii/consultanta/analiza-website"],"/services/advice/telephone-advice":["/en/services/advice/telephone-advice","/ro/servicii/consultanta/consultanta-telefonica"],"/comparison":["/en/comparison","/ro/comparison"],"/contact":["/en/contact","/ro/contact"],"/migrate/shopify":["/en/migrate/shopify","/ro/migrare/shopify"],"/migrate/woocommerce":["/en/migrate/woocommerce","/ro/migrare/woocommerce"],"/case-study":["/en/case-study","/ro/studii-de-caz"],"/case-study/vitacom":["/en/case-study/vitacom","/ro/studii-de-caz/vitacom"],"/case-study/equitana":["/en/case-study/equitana","/ro/studii-de-caz/equitana"],"/liquid-framework/modules":["/en/liquid-framework/modules","/ro/liquid-framework/module"],"/algolia":["/en/algolia","/ro/algolia"],"/jobs":["/en/jobs","/ro/cariere"],"/privacy":["/en/privacy","/ro/confidentialitate"],"/terms":["/en/terms","/ro/termeni"],"/cookie":["/en/cookie","/ro/cookie"],"/slack-code-of-conduct":["/en/slack-code-of-conduct","/ro/slack-cod-de-conduita"]}; 19 var path = location.pathname.length > 1 ? location.pathname.replace(/\/+$/, '') : location.pathname; 20 var preferred = 'en'; 21 try { 22 if (localStorage.getItem('liquidlab-language-preference') === 'ro') preferred = 'ro'; 23 } catch (e) {} 24 if (path === '/') { 25 if (preferred === 'ro') { 26 location.replace('/ro' + location.search + location.hash); 27 return; 28 } 29 } else if (typeof LEGACY_ROUTES !== 'undefined' && LEGACY_ROUTES[path]) { 30 // 3. Old links without a language prefix (/contact): straight to the 31 // prerendered page in the preferred language, the same rule as 32 // SmartLanguageRedirect in App.tsx, without waiting for the app. 33 location.replace(LEGACY_ROUTES[path][preferred === 'ro' ? 1 : 0] + location.search + location.hash); 34 return; 35 } 36 var prerendered = document.querySelector('meta[name="x-prerendered"]'); 37 if (prerendered && prerendered.getAttribute('content') !== path) { 38 document.documentElement.classList.add('prerender-mismatch'); 39 } 40 })(); 41 </script>
41 42 <style>html.prerender-mismatch #root { display: none; }</style> 43 44 <title>Magento Development Agency | Hyvä Theme Experts | LIQUIDLAB</title> 45 <meta name="description" content="Expert Magento 2 & Hyvä agency building blazing-fast stores with top PageSpeed scores. Custom development and support."> 46 <meta name="author" content="LIQUIDLAB" /> 47 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" /> 48 <meta name="googlebot" content="index, follow" /> 49 <meta name="google" content="notranslate" /> 50 51 <!-- hreflang tags for language alternatives --> 52 <!-- Open Graph / Facebook --> 53 <meta property="og:type" content="website" /> 54 <meta property="og:image" content="https://liquidlab.ro/og-image.jpg"> 55 <meta property="og:site_name" content="LIQUIDLAB" /> 56 57 <!-- Twitter --> 58 <meta name="twitter:card" content="summary_large_image" /> 59 <meta name="twitter:image" content="https://liquidlab.ro/og-image.jpg"> 60 61 <!-- Canonical URL --> 62 <!-- Favicons --> 63 <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> 64 <link rel="apple-touch-icon" href="/assets/icons/apple-touch-icon-alt.png"> 65 <link rel="manifest" href="/site.webmanifest"> 66 <!-- Explicit icon links so browsers fetch a 2 KB PNG instead of probing 67 /favicon.ico (which is now a 16/32/48 multi-size file for the rest). --> 68 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 69 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 70 <link rel="icon" href="/favicon.ico" sizes="48x48"> 71 72 <!-- Fonts are self-hosted (src/assets/fonts, declared in src/index.css). 73 Vite rewrites these hrefs to the hashed files. Both subsets are 74 preloaded: latin (24 KB) covers the English text, latin-ext (20 KB) 75 holds the Romanian diacritics, which every page needs (the hero on 76 /ro pages, the footer address on all of them). Left to unicode-range 77 alone, latin-ext was only requested after the CSS had been parsed 78 and the text laid out, so Romanian heroes painted in the fallback 79 font first and swapped. --> 80 <link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/space-grotesk-latin-DPT1xrvW.woff2"> 81 <link rel="preload" as="font" type="font/woff2" crossorigin href="/assets/space-grotesk-latin-ext-wJGaI8U0.woff2"> 82 83 <!-- Critical CSS (inline above-the-fold styles) --> 84 <style> 85 /* Critical CSS for above-the-fold content */ 86 *,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb} 87 html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-feature-settings:normal} 88 body{margin:0;line-height:inherit;font-family:"Space Grotesk","Space Grotesk Fallback",sans-serif} 89 h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;font-family:"Space Grotesk","Space Grotesk Fallback",sans-serif} 90 .bg-background{background-color:hsl(var(--background))} 91 .text-foreground{color:hsl(var(--foreground))} 92 :root{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:221.2 83.2% 53.3%;--primary-foreground:210 40% 98%;--secondary:210 40% 96%;--secondary-foreground:222.2 84% 4.9%;--muted:210 40% 96%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96%;--accent-foreground:222.2 84% 4.9%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:221.2 83.2% 53.3%;--radius:0.75rem} 93 .dark{--background:222.2 84% 4.9%;--foreground:210 40% 98%;--card:222.2 84% 4.9%;--card-foreground:210 40% 98%;--popover:222.2 84% 4.9%;--popover-foreground:210 40% 98%;--primary:217.2 91.2% 59.8%;--primary-foreground:222.2 84% 4.9%;--secondary:217.2 32.6% 17.5%;--secondary-foreground:210 40% 98%;--muted:217.2 32.6% 17.5%;--muted-foreground:215 20.2% 65.1%;--accent:217.2 32.6% 17.5%;--accent-foreground:210 40% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:210 40% 98%;--border:217.2 32.6% 17.5%;--input:217.2 32.6% 17.5%;--ring:224.3 76.3% 94.1%} 94 #root{width:100%;margin:0;padding:0;text-align:left} 95 </style> 96 97 <!-- Hero card image preload: homepage only, desktop only. On phones the 98 card sits below the fold, and a high-priority preload there only 99 delays the JavaScript that paints the hero text (the mobile LCP 100 element). The srcset placeholder is filled in at build time with the 101 hashed asset names (heroPreloadPlugin in vite-plugin-seo-injection.ts). 102 Keep sizes in sync with src/components/HeroBusinessResults.tsx. --> 103
103<script> 104 (function () { 105 var path = window.location.pathname.replace(/\/$/, ''); 106 if (path !== '' && path !== '/en' && path !== '/ro') return; 107 if (!window.matchMedia || !window.matchMedia('(min-width: 768px)').matches) return; 108 var link = document.createElement('link'); 109 link.rel = 'preload'; 110 link.as = 'image'; 111 link.type = 'image/webp'; 112 link.setAttribute('imagesrcset', '/assets/vitacom-building-512-DwNKDQym.webp 512w, /assets/vitacom-building-672-CjEJ9Kw-.webp 672w, /assets/vitacom-building-768-0SdxrcyE.webp 768w, /assets/vitacom-building-1024-B0e81DCu.webp 1024w'); 113 link.setAttribute('imagesizes', '(min-width: 768px) 512px, calc(100vw - 32px)'); 114 link.setAttribute('fetchpriority', 'high'); 115 document.head.appendChild(link); 116 })(); 117 </script>
117 118 119 <!-- The one business entity. Every page references it by @id 120 (https://liquidlab.ro/#business); the name, address and phone must 121 match the Google Business Profile and the footer exactly. --> 122
122<script type="application/ld+json"> 123 { 124 "@context": "https://schema.org", 125 "@graph": [ 126 { 127 "@type": "ProfessionalService", 128 "@id": "https://liquidlab.ro/#business", 129 "name": "LIQUIDLAB", 130 "legalName": "Ecommerce Made Happy S.R.L.", 131 "url": "https://liquidlab.ro/ro", 132 "logo": "https://liquidlab.ro/assets/logos/liquidlab-logo.png", 133 "image": "https://liquidlab.ro/og-image.jpg", 134 "description": "LIQUIDLAB is a Magento agency in ConstanÈa, Romania. We build, take over and maintain Magento 2 stores, with Hyvä as the default frontend on every project. Romania's first Hyvä partner.", 135 "telephone": "+40723767271", 136 "email": "[email protected]", 137 "address": { 138 "@type": "PostalAddress", 139 "streetAddress": "Strada Dumbrava RoÈie 80", 140 "addressLocality": "ConstanÈa", 141 "postalCode": "900613", 142 "addressCountry": "RO" 143 }, 144 "geo": { 145 "@type": "GeoCoordinates", 146 "latitude": 44.1877216, 147 "longitude": 28.6455565 148 }, 149 "hasMap": "https://maps.app.goo.gl/MjV8KbAsbNarYdU77", 150 "openingHoursSpecification": [ 151 { 152 "@type": "OpeningHoursSpecification", 153 "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], 154 "opens": "09:00", 155 "closes": "18:00" 156 } 157 ], 158 "areaServed": [ 159 { "@type": "City", "name": "ConstanÈa" }, 160 { "@type": "Country", "name": "România" } 161 ], 162 "knowsAbout": ["Magento 2", "Magento Open Source", "Adobe Commerce", "Hyvä Themes", "Hyvä Checkout", "ElasticSuite", "Mage-OS"], 163 "contactPoint": { 164 "@type": "ContactPoint", 165 "telephone": "+40723767271", 166 "email": "[email protected]", 167 "contactType": "customer service", 168 "availableLanguage": ["Romanian", "English"] 169 }, 170 "sameAs": [ 171 "https://www.linkedin.com/company/liquid-lab-agency", 172 "https://github.com/liquidlab-agency", 173 "https://www.hyva.io/find-an-agency#Romania" 174 ] 175 }, 176 { 177 "@type": "WebSite", 178 "@id": "https://liquidlab.ro/#website", 179 "name": "LIQUIDLAB", 180 "url": "https://liquidlab.ro", 181 "inLanguage": ["en", "ro"], 182 "publisher": { "@id": "https://liquidlab.ro/#business" } 183 } 184 ] 185 } 186 </script>
186 187
187<script type="module" crossorigin src="/assets/index-SB0Atacq.js"></script>
187 188 <link rel="stylesheet" crossorigin href="/assets/index-DSEjhXvt.css"> 189<link rel="canonical" href="https://liquidlab.ro/en"> 190 <link rel="alternate" hreflang="en" href="https://liquidlab.ro/en"> 191 <link rel="alternate" hreflang="ro" href="https://liquidlab.ro/ro"> 192 <link rel="alternate" hreflang="x-default" href="https://liquidlab.ro/en"> 193 <meta name="keywords" content="magento development agency, hyva theme development, magento 2 development, magento support services, hire magento developers, magento ecommerce solutions, custom magento development, magento performance optimization, magento consulting services, adobe commerce development"> 194 <meta property="og:title" content="Magento Development Agency | Hyvä Theme Experts | LIQUIDLAB"> 195 <meta property="og:description" content="Expert Magento 2 & Hyvä agency building blazing-fast stores with top PageSpeed scores. Custom development and support."> 196 <meta property="og:url" content="https://liquidlab.ro/en"> 197 <meta property="og:locale" content="en_US"> 198 <meta property="og:locale:alternate" content="ro_RO">
199<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
199<meta name="twitter:title" content="Magento Development Agency | Hyvä Theme Experts | LIQUIDLAB"><meta name="twitter:description" content="Expert Magento 2 &amp; Hyvä agency building blazing-fast stores with top PageSpeed scores. Custom development and support."></head> 200 201 <body> 202 <div id="root"><style> 203 /* Critical above-the-fold styles */ 204 .section-container { 205 max-width: 1200px; 206 margin: 0 auto; 207 padding: 2rem 1rem; 208 } 209 210 .chip { 211 display: inline-block; 212 padding: 0.5rem 1rem; 213 border-radius: 9999px; 214 background-color: hsl(210 40% 96%); 215 color: hsl(207 72% 58%); 216 font-size: 0.875rem; 217 font-weight: 500; 218 } 219 220 .text-gradient { 221 background: linear-gradient(to bottom, #4a90e2, rgba(74, 144, 226, 0.7)); 222 -webkit-background-clip: text; 223 -webkit-text-fill-color: transparent; 224 background-clip: text; 225 } 226 227 .animate-fade-in { 228 animation: fadeIn 0.6s ease-out forwards; 229 opacity: 0; 230 } 231 232 @keyframes fadeIn { 233 from { 234 opacity: 0; 235 transform: translateY(20px); 236 } 237 to { 238 opacity: 1; 239 transform: translateY(0); 240 } 241 } 242 243 .animate-float { 244 animation: float 3s ease-in-out infinite; 245 } 246 247 @keyframes float { 248 0%, 100% { transform: translateY(0px); } 249 50% { transform: translateY(-10px); } 250 } 251 252 /* Prevent layout shift */ 253 .hero-container { 254 min-height: 100vh; 255 display: flex; 256 align-items: center; 257 justify-content: center; 258 } 259 </style><button class="fixed bottom-6 right-6 z-50 bg-liquid-accent text-white p-3 rounded-full shadow-cta transition-all duration-300 hover:bg-liquid-blue hover:shadow-lg transform hover:-translate-y-1 opacity-0 scale-75 pointer-events-none" aria-label="Scroll to top"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-up"><path d="m18 15-6-6-6 6"></path></svg></button><!--$--><div class="min-h-screen w-full">
259<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is Hyvä and why should I use it?","acceptedAnswer":{"@type":"Answer","text":"Hyvä is a modern frontend for Magento 2 that replaces the default Luma theme. It's significantly faster, more developer-friendly, and provides a better user experience. Our Liquid themes are built on Hyvä to deliver exceptional performance."}},{"@type":"Question","name":"How does your SaaS model work?","acceptedAnswer":{"@type":"Answer","text":"Our SaaS model includes theme licensing, hosting, maintenance, and regular updates for a single monthly fee. This means you get all the benefits of Magento without the technical overhead."}},{"@type":"Question","name":"Can I customize the Liquid theme?","acceptedAnswer":{"@type":"Answer","text":"Absolutely! While our themes are designed to work great out of the box, we can customize any aspect to match your brand and specific requirements."}},{"@type":"Question","name":"How long does implementation take?","acceptedA
259nswer":{"@type":"Answer","text":"Implementation time varies depending on your specific requirements, but typically ranges from 4-8 weeks. We'll provide a detailed timeline during our initial consultation."}},{"@type":"Question","name":"Do you offer support after launch?","acceptedAnswer":{"@type":"Answer","text":"Yes. Every plan includes ongoing support and maintenance, with a contractual SLA: critical incidents (store down or payments broken) get a response within 2 working hours and a fix within 1 working day. Support runs Monday to Friday, in working hours."}},{"@type":"Question","name":"Can I migrate from my current Magento store?","acceptedAnswer":{"@type":"Answer","text":"Yes, we offer comprehensive migration services from older Magento versions or other platforms. We ensure a smooth transition with minimal disruption to your business."}}]}</script>
259<header class="fixed top-0 left-0 right-0 z-50 transition-all duration-300 py-1 bg-transparent"><nav class="section-container !py-2 px-4"><div class="flex justify-between items-center"><div class="flex items-center max-lg:min-w-0"><a class="flex items-center max-lg:min-w-0 text-liquid-blue" href="/en"><svg viewBox="0 0 1136.91 199.95" fill="currentColor" role="img" aria-label="LIQUIDLAB" focusable="false" class="h-7 w-auto max-lg:max-w-full"><path d="M38.56,165.45V8.72H58.13V147.61h74v17.84Z" transform="translate(-38.56 -6.78)"></path><path d="M182,165.45H162.4V8.72H182Z" transform="translate(-38.56 -6.78)"></path><path d="M295.49,167.38v24.73h29.67v14.62H293.55c-13.11,0-16.77-6.45-16.77-16.56V167c-39.77-4.3-62.35-33.1-62.35-79.76,0-25.37,6.45-45.15,19.35-59.12,12.9-14.19,31-21.29,54-21.29s41.06,7.1,54,21.29c12.9,14,19.35,33.75,19.35,59.12C361.06,135.14,337.41,164.16,295.49,167.38ZM235.07,97.94c0,32.68,20.64,52,52.68,52,33.32,0,52.67-20.21,52.67-52V76c0-16.12-4.73-28.81-14.4-37.84-9.46-9.24-22.15-13.76-38.27-13.76-33.33,0-52.68,20-52.68,51.6Z" transform="translate(-38.56 -6.78)"></path><path d="M392.24,8.72h19.35v97c0,27.52,16.77,43.86,43.43,43.86s43.64-16.34,43.64-43.86v-97h19.13V107.4q0,27.42-16.77,43.86c-11.18,11-26.44,16.34-46,16.34-19.78,0-35.26-5.38-46.23-16.34s-16.55-25.58-16.55-43.86Z" transform="translate(-38.56 -6.78)"></path><path d="M580.79,165.45H561.23V8.72h19.56Z" transform="translate(-38.56 -6.78)"></path><path d="M625.3,165.45V8.72h63.42c46.65,0,65.79,26.87,65.79,78.47,0,51.82-19.35,78.26-65.79,78.26Zm19.56-17.84H688.5c31,0,45.37-14.19,45.37-47.52V74.29c0-33.75-15-47.73-45.37-47.73H644.86Z" transform="translate(-38.56 -6.78)"></path><path d="M787,165.45V8.72h19.57V147.61h74v17.84Z" transform="translate(-38.56 -6.78)"></path><path d="M1009.93,165.45l-13.76-37h-72l-13.76,37H890L949.08,8.72h22.36L1031,165.45Zm-79.77-53.1h60l-9.89-26.88-19.35-57h-1.08l-19.78,57Z" transform="translate(-38.56 -6.78)"></path><path d="M1054.86,165.45V8.72H1129c27.73,0,42.35,15.05,42.35,39.77,0,16.56-8,29.89-22.36,35.26v1.72c17.63,4.52,26.44,17.42,26.44,38.49,0,25.15-18,41.49-48.15,41.49Zm19.35-87.93h53.54c14.62,0,23.65-8,23.65-20.86v-11c0-12.69-8.6-20.43-23.87-20.43h-53.32Zm0,71.38H1126c17.41,0,28.81-8.39,28.81-21.5V116c0-14-9.89-22.14-25.59-22.14h-55Z" transform="translate(-38.56 -6.78)"></path></svg></a></div><div class="hidden lg:flex items-center gap-3"><div class="relative"><div class="flex items-center justify-center"><div class="flex items-center justify-center relative z-40"><button type="button" class="group flex items-center gap-1 px-3 py-2 text-sm font-medium transition-colors text-liquid-blue hover:text-liquid-accent" aria-expanded="false" aria-haspopup="menu"><span>Services</span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down transition-transform duration-200 group-hover:translate-y-[1px]" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><button type="button" class="group flex items-center gap-1 px-3 py-2 text-sm font-medium transition-colors text-liquid-blue hover:text-liquid-accent" aria-expanded="false" aria-haspopup="menu"><span>Partners</span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down transition-transform duration-200 group-hover:translate-y-[1px]" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><button type="button" class="group flex items-center gap-1 px-3 py-2 text-sm font-medium transition-colors text-liquid-blue hover:text-liquid-accent" aria-expanded="false" aria-haspopup="menu"><span>Migrate to Magento</span><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down transition-transform duration-200 group-hover:translate-y-[1px]" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><a class="relative cursor-pointer px-3 py-2 text-sm font-medium text-liquid-blue hover:text-liquid-accent transition-colors" href="/en/case-study">Case Studies</a><a class="relative cursor-pointer px-3 py-2 text-sm font-medium text-liquid-blue hover:text-liquid-accent transition-colors" href="/en/jobs">Jobs</a><a class="relative cursor-pointer px-3 py-2 text-sm font-medium text-liquid-blue hover:text-liquid-accent transition-colors" href="/en/blog">Blog</a></div></div><div class="absolute left-1/2 top-full z-50 -translate-x-1/2 pt-2"><div class="pointer-events-auto h-2 w-full"></div></div></div><div class="relative">
259<button class="justify-center whitespace-nowrap text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border bg-background h-9 rounded-md px-3 flex items-center gap-2 text-liquid-darkGray hover:text-liquid-blue hover:bg-liquid-blue/5 transition-all duration-300 hover:shadow-lg font-medium border-liquid-blue/20" type="button" aria-haspopup="menu" aria-expanded="false"><span>ð¬ð§ EN</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down transition-transform duration-300 rotate-0"><path d="m6 9 6 6 6-6"></path></svg></button></div><a href="/en/contact"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-9 rounded-md px-3 bg-liquid-accent text-white hover:bg-liquid-blue transition-all duration-300 hover:shadow-lg font-medium"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-circle mr-2"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"></path></svg>Contact Us</button></a></div><div class="lg:hidden flex shrink-0 items-center gap-2 ml-3"><a aria-label="Contact Us" href="/en/contact"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-9 rounded-md px-3 bg-liquid-accent text-white hover:bg-liquid-blue transition-all duration-300 hover:shadow-lg font-medium" aria-label="Contact Us"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-circle"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"></path></svg></button></a><div class="relative"><button class="justify-center whitespace-nowrap text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border bg-background h-9 rounded-md px-3 flex items-center gap-2 text-liquid-darkGray hover:text-liquid-blue hover:bg-liquid-blue/5 transition-all duration-300 hover:shadow-lg font-medium border-liquid-blue/20" type="button" aria-haspopup="menu" aria-expanded="false"><span>ð¬ð§ EN</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down transition-transform duration-300 rotate-0"><path d="m6 9 6 6 6-6"></path></svg></button></div><button class="focus:outline-none text-liquid-blue" aria-label="Open menu"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu"><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg></button></div></div><div class="lg:hidden mt-4 bg-white rounded-lg shadow-lg p-4 animate-fade-in max-h-[80vh] overflow-y-auto hidden"><div class="flex flex-col space-y-2"><div class="border-b border-gray-100 pb-2"><button type="button" aria-expanded="false" class="flex w-full items-center justify-between text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-2"><span>Services</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></button><div class="pl-4 py-2 space-y-4 hidden"><div class="space-y-2"><p class="font-medium text-gray-500 text-sm mb-1">Development Services</p><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/liquid-framework">Liquid Framework</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/takeover">Magento Takeover</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/prototyping">Magento Prototyping</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/support-development">Support & Development</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/custom-project">Custom Project</a></div><div class="space-y-2"><p class="font-medium text-gray-500 text-sm mb-1">Consulting Services</p><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/advice">Magento Advice</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/advice/telephone-advice">Telephone Advice</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/advice/website-analysis">Website Analysis</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/services/advice/code-review">Code Review</a></div></div></div><div class="border-b border-gray-100 pb-2"><button type="button" aria-expanded="false" class="flex w-full items-center justify-between text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-2"><span>Migrate to Magento</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></button><div class="pl-4 py-2 space-y-2 hidden"><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/migrate/shopify">From Shopify</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/migrate/woocommerce">From WooCommerce</a></div></div><div class="border-b border-gray-100 pb-2"><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-2" href="/en/case-study">Case Studies</a></div><div class="border-b border-gray-100 pb-2"><button type="button" aria-expanded="false" class="flex w-full items-center justify-between text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-2"><span>About</span><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></button><div class="pl-4 py-2 space-y-2 hidden"><p class="font-medium text-gray-500 text-sm mb-1">Partners</p><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/hyva">About Hyvä</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/elasticsuite">About ElasticSuite</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/hypernode">
259About Hypernode</a><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-1" href="/en/algolia">About Algolia</a></div></div><div class="border-b border-gray-100 pb-2"><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-2" href="/en/jobs">Jobs</a></div><div class="pb-2"><a class="block text-liquid-darkGray hover:text-liquid-blue transition-colors duration-200 py-2" href="/en/blog">Blog</a></div></div></div></nav></header><div class="relative"><div class="absolute left-0 right-0 z-40 w-full"></div></div><main><p class="sr-only">LIQUIDLAB is Romania's first full-service Hyvä agency, specializing in Magento 2 development and performance optimization. We transform slow e-commerce stores into blazing-fast, high-converting platforms with guaranteed 90+ PageSpeed scores. Our expert team delivers custom Hyvä implementations, store migrations, and rescue projects for businesses ready to scale their online presence.</p><section class="min-h-0 pt-12 pb-4 md:min-h-screen md:py-0 flex items-center justify-center relative overflow-x-clip" aria-label="Main hero section"><div class="text-card-foreground shadow-sm w-full h-auto md:min-h-screen bg-white relative overflow-visible border-0 rounded-none flex flex-col justify-center"><div class="pointer-events-none absolute inset-0 z-0 h-72 w-72 opacity-80 -top-40 left-0 md:left-60 md:-top-20"><div class="absolute -inset-24 rounded-full" style="background:radial-gradient(closest-side, rgba(74, 161, 243, 0.15), transparent)"></div></div><div class="section-container flex flex-col md:grid md:grid-cols-2 gap-8 items-center h-full relative z-10 !pt-12 !pb-24 md:!py-24"><div class="text-center md:text-left w-full"><div class="mb-8"><span class="chip inline-block px-4 py-1 rounded-full bg-liquid-gray text-liquid-blue text-sm font-medium mb-4">CERTIFIED MAGENTO 2 & HYVà EXPERTS. Romania's First Full-Service Hyvä Agency</span></div><h1 class="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 leading-tight"><span class="bg-clip-text text-transparent bg-gradient-to-b from-liquid-blue to-liquid-blue/70">Your Slow Magento Store Is Costing You Sales Every Day</span></h1><p class="text-lg md:text-xl text-liquid-darkGray mb-8 whitespace-pre-line">Lost revenue. Poor mobile experience. Security risks keeping you up at night. We rescue technically troubled Magento projects and turn them into fast, secure, perfectly optimized Hyvä stores. 260Romania's best performance team. We've got the numbers to prove it.</p><div class="space-y-6 mb-8"><div class="flex flex-col sm:flex-row items-center justify-center md:justify-start gap-4"><button type="button" class="group relative rounded-full bg-gradient-to-r from-liquid-accent/30 via-liquid-lightBlue/30 via-40% to-liquid-blue/30 p-1 text-white transition-transform hover:scale-110 active:scale-105"><div class="relative z-10 flex items-center justify-center gap-2 rounded-full bg-gradient-to-r from-liquid-accent via-liquid-lightBlue via-40% to-liquid-blue px-6 py-3 text-white"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle size-5 -translate-y-0.5 animate-sparkle fill-white"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute bottom-2.5 left-3.5 z-20 size-2 rotate-12 animate-sparkle fill-white" style="animation-delay:1s"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute left-5 top-2.5 size-1 -rotate-12 animate-sparkle fill-white" style="animation-delay:1.5s;animation-duration:2.5s"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute left-3 top-3 size-1.5 animate-sparkle fill-white" style="animation-delay:0.5s;animation-duration:2.5s"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><span class="font-medium">Book Free Strategy Call</span></div><span aria-hidden="true" class="pointer-events-none absolute -inset-4 z-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute fill-liquid-lightBlue text-liquid-lightBlue opacity-0 group-hover:animate-sparkle-burst motion-reduce:group-hover:animate-none size-2" style="left:6%;top:18%;animation-delay:0ms;--tx:-14px;--ty:-18px"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute fill-liquid-lightBlue text-liquid-lightBlue opacity-0 group-hover:animate-sparkle-burst motion-reduce:group-hover:animate-none size-1.5" style="left:20%;top:72%;animation-delay:150ms;--tx:-10px;--ty:16px"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute fill-liquid-lightBlue text-liquid-lightBlue opacity-0 group-hover:animate-sparkle-burst motion-reduce:group-hover:animate-none size-2" style="left:48%;top:8%;animation-delay:300ms;--tx:4px;--ty:-20px"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute fill-liquid-lightBlue text-liquid-lightBlue opacity-0 group-hover:animate-sparkle-burst motion-reduce:group-hover:animate-none size-1.5" style="left:70%;top:80%;animation-delay:450ms;--tx:12px;--ty:18px"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute fill-liquid-lightBlue text-liquid-lightBlue opacity-0 group-hover:animate-sparkle-burst motion-reduce:group-hover:animate-none size-2" style="left:92%;top:28%;animation-delay:600ms;--tx:18px;--ty:-12px"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkle absolute fill-liquid-lightBlue text-liquid-lightBlue opacity-0 group-hover:animate-sparkle-burst motion-reduce:group-hover:animate-none size-1" style="left:36%;top:50%;animation-delay:750ms;--tx:-6px;--ty:-24px"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path></svg></span></button></div></div></div><div class="relative flex items-center justify-center px-0 md:px-4 w-full"><div class="rounded-lg border text-card-foreground p-0 bg-white shadow-lg w-full md:max-w-lg overflow-hidden"><div class="w-full"><picture><source type="image/webp" srcSet="/assets/vitacom-building-512-DwNKDQym.webp 512w, /assets/vitacom-building-672-CjEJ9Kw-.webp 672w, /assets/vitacom-building-768-0SdxrcyE.webp 768w, /assets/vitacom-building-1024-B0e81DCu.webp 1024w" sizes="(min-width: 768px) 512px, calc(100vw - 32px)"/><img src="/assets/vitacom-building-768-D9uSpNZx.jpg" alt="Vitacom" class="w-full h-44 md:h-40 object-cover" loading="eager" fetchPriority="high" decoding="async" width="768" height="384"/></picture></div><div class="p-4"><div class="mb-3"><h3 class="text-lg font-bold text-liquid-blue mb-0.5">Vitacom</h3><p class="text-xs text-liquid-darkGray">Magento & Hyvä performance rescue</p></div><div class="grid grid-cols-3 gap-2 md:gap-3 mb-3"><div class="flex flex-col"><div class="text-blue-600 mb-1"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gauge w-5 h-5 md:w-6 md:h-6"><path d="m12 14 4-4"></path><path d="M3.34 19a10 10 0 1 1 17.32 0"></path></svg></div>
260<div class="text-[10px] md:text-xs text-liquid-darkGray mb-0.5">PageSpeed</div><div class="text-sm md:text-lg font-bold text-liquid-blue">12 â 100</div></div><div class="flex flex-col"><div class="text-green-600 mb-1"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-5 h-5 md:w-6 md:h-6"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div><div class="text-[10px] md:text-xs text-liquid-darkGray mb-0.5">TTFB</div><div class="text-sm md:text-lg font-bold text-liquid-blue">16s â 12ms</div></div><div class="flex flex-col"><div class="text-purple-600 mb-1"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-server w-5 h-5 md:w-6 md:h-6"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg></div><div class="text-[10px] md:text-xs text-liquid-darkGray mb-0.5">Hardware</div><div class="text-sm md:text-lg font-bold text-liquid-blue">8x less</div></div></div><div class="pt-3 border-t"><a class="block w-full text-[10px] md:text-xs text-liquid-blue hover:text-liquid-blue/80 font-medium transition-colors whitespace-normal text-left" href="/en/case-study/vitacom">View Full Case Study â</a></div></div></div></div></div><div class="absolute bottom-0 left-0 right-0 pb-2 flex justify-center w-full z-20"><a href="#next-section" class="bg-liquid-gray/50 backdrop-blur-sm rounded-full p-2 shadow-md animate-float cursor-pointer hover:bg-liquid-gray/70 transition-colors" aria-label="Discover more"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down text-liquid-blue" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></a></div></div></section><div class=" contain-content"><div class="h-[800px] section-container bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div><div class=" contain-content"><div class="h-96 section-container bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div><div class=" contain-content"><div class="h-96 section-container bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div><div class=" contain-content"><div class="h-screen w-full bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div><div class=" contain-content"><div class="h-96 section-container bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div><div class=" contain-content"><div class="h-64 section-container bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div><div class=" contain-content"><div class="h-48 w-full bg-muted/20 rounded-lg"><div class="p-8 space-y-4"><div class="h-8 bg-muted/40 rounded w-3/4 mx-auto animate-pulse"></div><div class="h-4 bg-muted/30 rounded w-1/2 mx-auto animate-pulse [animation-delay:0.2s]"></div><div class="space-y-2 pt-4"><div class="h-4 bg-muted/30 rounded w-full animate-pulse [animation-delay:0.4s]"></div><div class="h-4 bg-muted/30 rounded w-5/6 animate-pulse [animation-delay:0.6s]"></div><div class="h-4 bg-muted/30 rounded w-4/6 animate-pulse [animation-delay:0.8s]"></div></div></div></div></div></main><footer class="bg-liquid-blue text-white pt-16 pb-8"><div class="section-container px-4"><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-12 mb-16"><div><h3 class="text-xl font-bold mb-4">LIQUIDLAB</h3><p class="text-gray-300 mb-6">Leading Magento development agency specializing in high-performance solutions with Hyvä themes.</p><div class="flex space-x-4"><a href="#" class="bg-white/10 hover:bg-white/20 p-2 rounded-full transition-colors" target="_blank" rel="noopener noreferrer" aria-label="Facebook"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-facebook"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg></a><a href="#" class="bg-white/10 hover:bg-white/20 p-2 rounded-full transition-colors" target="_blank" rel="noopener noreferrer" aria-label="Twitter"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-twitter"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"></path></svg></a><a href="#" class="bg-white/10 hover:bg-white/20 p-2 rounded-full transition-colors" target="_blank" rel="noopener noreferrer" aria-label="Instagram"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-instagram"><rect width="20" height="20" x="2" y="2" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" x2="17.51" y1="6.5" y2="6.5"></line></svg></a><a href="#" class="bg-white/10 hover:bg-white/20 p-2 rounded-full transition-colors" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-linkedin"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect width="4" height="12" x="2" y="9"></rect><circle cx="4" cy="4" r="2"></circle></svg></a></div></div><div><h4 class="text-lg font-semibold mb-4">Quick Links</h4><ul class="space-y-3"><li><a class="text-gray-300 hover:text-white transition-colors" href="/en">Home</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/liquid-framework">Framework</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/case-study">Case Studies</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/hyva">What is Hyvä?</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/contact">Contact Us</a></li></ul></div><div><h4 class="text-lg font-semibold mb-4">Our Services</h4><ul class="space-y-3"><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/services/takeover">Magento Takeover</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/services/prototyping">Magento Prototyping</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/services/support-development">Support & Development</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/services/custom-project">Custom Project</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/services/advice">Magento Advice</a></li></ul></div><div><h4 class="text-lg font-semibold mb-4">Contact Us</h4><ul class="space-y-3"><li class="flex items-start gap-3"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-map-pin flex-shrink-0 mt-1"><path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"></path><circle cx="12" cy="10" r="3"></circle></svg><a href="https://maps.app.goo.gl/MjV8KbAsbNarYdU77" target="_blank" rel="noopener noreferrer" class="text-gray-300 hover:text-white transition-colors">Strada Dumbrava RoÈie 80, ConstanÈa 900613, <!-- -->Romania</a></li><li class="flex items-center gap-3"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-phone"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"></path></svg><span class="text-gray-300"><a href="tel:+40723767271">+40 723 767 271</a></span></li><li class="flex items-center gap-3"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mail"><rect width="20" height="16" x="2" y="4" rx="2"></rect><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"></path></svg><span class="text-gray-300"><a href="mailto:[email protected]">[email protected]</a></span></li></ul></div></div><div class="border-t border-gray-700 pt-12 pb-8"><div class="flex flex-wrap justify-center items-center gap-8"><a href="https://www.hyva.io/find-an-agency#Romania" target="_blank" rel="noopener noreferrer" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/[email protected]" alt="Hyva Bronze Partner" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="766" height="228" loading="lazy"/></a><a class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group" href="/en/algolia"><img src="/assets/algolia-logo-BPCoiGTx.svg" alt="Algolia" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="2196" height="500" loading="lazy"/></a>
260<a href="https://www.hypernode.com/" target="_blank" rel="noopener noreferrer" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/hypernode-D0PvnJCO.png" alt="Hypernode" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="423" height="119" loading="lazy"/></a><a href="https://www.elasticsuite.io/" target="_blank" rel="noopener noreferrer" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/elasticsuite-logo-B5jl2x9H.jpg" alt="Elasticsuite" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="150" height="85" loading="lazy"/></a><a href="https://themarketer.com/hire-an-expert/6821d68d09a8ecf7da0db4b9/Liquidlab" target="_blank" rel="noopener noreferrer" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/themarketer-C_r4b1Xt.svg" alt="TheMarketer" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="985" height="435" loading="lazy"/></a><a href="https://www.n-vision.ro/" target="_blank" rel="noopener noreferrer" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/nvision-logo-fsGMOVtM.png" alt="Nvision" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="122" height="55" loading="lazy"/></a><a href="https://www.euplatesc.ro/" target="_blank" rel="noopener noreferrer" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/euplatesc-logo-DyqLDqA4.svg" alt="EuPlÄtesc.ro" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="845" height="205" loading="lazy"/></a><a href="https://www.connectif.ai/" target="_blank" rel="noopener noreferrer" aria-label="Connectif" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/connectif-logo-CTedfqYl.svg" alt="Connectif" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="1000" height="89" loading="lazy"/></a><a href="https://www.mollie.com/" target="_blank" rel="noopener noreferrer" aria-label="Mollie" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/mollie-logo-Cr_xBl-r.svg" alt="Mollie" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="320" height="94" loading="lazy"/></a><a href="https://oct8ne.com/" target="_blank" rel="noopener noreferrer" aria-label="Oct8ne" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/oct8ne-logo-DVXgQ_eR.png" alt="Oct8ne" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="240" height="56" loading="lazy"/></a><a href="https://qoliber.com/" target="_blank" rel="noopener noreferrer" aria-label="Qoliber" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/qoliber-logo-D0xkDP0J.svg" alt="Qoliber" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="397" height="140" loading="lazy"/></a><a href="https://innoship.com/" target="_blank" rel="noopener noreferrer" aria-label="Innoship" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/innoship-logo-BZkLu2Hc.svg" alt="Innoship" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="405" height="156" loading="lazy"/></a><a href="https://corporate.payu.com/" target="_blank" rel="noopener noreferrer" aria-label="PayU" class="bg-white hover:bg-gray-100 p-4 rounded-lg transition-all duration-300 flex items-center justify-center border border-gray-600 hover:border-gray-400 group"><img src="/assets/payu-logo-kFofYeO_.svg" alt="PayU" class="h-16 w-auto max-w-[250px] object-contain transition-transform duration-300 group-hover:scale-105" width="303" height="152" loading="lazy"/></a></div></div><div class="border-t border-gray-700 pt-8"><div class="flex flex-col md:flex-row justify-between items-center gap-4 text-gray-400 text-sm"><p>© 2026 LIQUIDLAB. All rights reserved.</p><div class="flex flex-col md:flex-row items-center gap-4"><ul class="flex space-x-6"><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/privacy">Privacy Policy</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/terms">Terms of Service</a></li><li><a class="text-gray-300 hover:text-white transition-colors" href="/en/cookie">Cookie Policy</a></li></ul></div></div></div></div></footer></div><!--/$--></div> 261 262 <!-- Consent initialization (moved from head to avoid render-blocking) --> 263
263<script> 264 window.dataLayer = window.dataLayer || []; 265 function gtag(){dataLayer.push(arguments);} 266 gtag('consent', 'default', { 267 'ad_storage': 'denied', 268 'analytics_storage': 'denied', 269 'ad_user_data': 'denied', 270 'ad_personalization': 'denied' 271 }); 272 </script>
272 273 274 <!-- Route-based SEO meta tags. The per-route table used to be inlined here, 275 40 KB in every HTML document. Every marketing route is now prerendered 276 with its own head (scripts/prerender-marketing.ts marks those files 277 with meta[name="x-prerendered"]), so the table is only fetched when it 278 is needed: on client-side navigation, or on the first load of a route 279 that has no prerendered file. vite-plugin-seo-injection.ts fills in 280 SEO_ROUTES_URL with the hashed JSON asset. --> 281
281<script> 282 (function() { 283 var SEO_ROUTES_URL = "/assets/seo-routes-654a8fc5.json"; 284 285 var routesPromise = null; 286 function loadRoutes() { 287 if (!routesPromise) { 288 routesPromise = fetch(SEO_ROUTES_URL) 289 .then(function (response) { return response.ok ? response.json() : {}; }) 290 .catch(function () { return {}; }); 291 } 292 return routesPromise; 293 } 294 295 function cleanPathOf(path) { 296 return path.length > 1 ? path.replace(/\/$/, '') : path; 297 } 298 299 // Canonical is set for EVERY page, including blog pages, so it has to 300 // happen before the blog early-return below. 301 // 302 // Paginated and category-filtered listings self-canonicalise. 303 // robots.txt deliberately lets crawlers reach ?page= and ?category=, 304 // because that is how blog posts past the first page are discovered. 305 // Canonicalising all of them back to page 1 would tell Google to crawl 306 // those pages and then ignore them. 307 // 308 // Only these two params pass through. Anything else, ?q= above all, 309 // must never reach a canonical: search result pages are thin and 310 // robots-blocked. 311 function updateCanonical(path) { 312 var canonicalEl = document.querySelector('link[rel="canonical"]'); 313 if (!canonicalEl) return; 314 var incoming = new URLSearchParams(window.location.search); 315 var kept = new URLSearchParams(); 316 ['category', 'page'].forEach(function (key) { 317 var v = incoming.get(key); 318 if (v && !(key === 'page' && v === '1')) kept.set(key, v); 319 }); 320 var qs = kept.toString(); 321 // The root URL renders the English homepage in place; its canonical 322 // is /en, the same as the static tag it ships with. 323 var canonicalPath = path === '/' ? '/en' : cleanPathOf(path); 324 canonicalEl.setAttribute( 325 'href', 326 'https://liquidlab.ro' + canonicalPath + (qs ? '?' + qs : '') 327 ); 328 } 329 330 function applyMeta(path, seoRoutes) { 331 var routeData = seoRoutes[path] || seoRoutes[cleanPathOf(path)]; 332 // The root URL renders the English homepage in place. 333 if (!routeData && path === '/') routeData = seoRoutes['/en']; 334 // Every real route has an entry. A path without one is a 404: the 335 // NotFound page sets its own title and a noindex, and giving it the 336 // homepage title is what made unknown URLs read as soft 404s. 337 if (!routeData) return; 338 339 var lang = routeData.locale === 'ro_RO' ? 'ro' : 'en'; 340 document.documentElement.lang = lang; 341 window.DETECTED_LANGUAGE = lang; 342 document.title = routeData.title; 343 344 var metaUpdates = { 345 'description': routeData.description, 346 'keywords': routeData.keywords, 347 'og:title': routeData.ogTitle || routeData.title, 348 'og:description': routeData.description, 349 'og:locale': routeData.locale, 350 'twitter:title': routeData.title, 351 'twitter:description': routeData.description 352 }; 353 354 Object.keys(metaUpdates).forEach(function(key) { 355 var selector = key.includes(':') ? 356 'meta[property="' + key + '"]' : 357 'meta[name="' + key + '"]'; 358 var element = document.querySelector(selector); 359 360 if (element) { 361 element.setAttribute('content', metaUpdates[key]); 362 } else { 363 var newMeta = document.createElement('meta'); 364 if (key.includes(':')) { 365 newMeta.setAttribute('property', key); 366 } else { 367 newMeta.setAttribute('name', key); 368 } 369 newMeta.setAttribute('content', metaUpdates[key]); 370 document.head.appendChild(newMeta); 371 } 372 }); 373 } 374 375 // The route whose meta is already in the document. React Router calls 376 // replaceState while it boots and on every state update, so without 377 // this every first load would still fetch the table. 378 var appliedPath = null; 379 380 function applySeoForPath(pathname, isInitialLoad) { 381 var path = pathname; 382 var lang = path.indexOf('/ro') === 0 ? 'ro' : 'en'; 383 document.documentElement.lang = lang; 384 window.DETECTED_LANGUAGE = lang; 385 386 updateCanonical(path); 387 388 // Blog pages are prerendered by scripts/prerender-blog.ts with their 389 // own per-post title, description and OG tags. Do not overwrite those 390 // with the fallback home metadata, which is what would happen 391 // because /en/blog has no seoKeywords entry. 392 if (/^\/(en|ro)\/blog(\/|$)/.test(path)) return; 393 394 var cleanPath = cleanPathOf(path); 395 if (cleanPath === appliedPath) return; 396 appliedPath = cleanPath; 397 398 if (isInitialLoad) { 399 var prerendered = document.querySelector('meta[name="x-prerendered"]'); 400 if (prerendered && prerendered.getAttribute('content') === cleanPath) return; 401 } 402 403 loadRoutes().then(function (seoRoutes) { 404 // Ignore a late response if the visitor has already moved on. 405 if (window.location.pathname !== pathname) return; 406 applyMeta(path, seoRoutes); 407 }); 408 } 409 410 applySeoForPath(window.location.pathname, true); 411 412 var originalPushState = history.pushState; 413 var originalReplaceState = history.replaceState; 414 415 history.pushState = function() { 416 originalPushState.apply(this, arguments); 417 applySeoForPath(window.location.pathname, false); 418 }; 419 420 history.replaceState = function() { 421 originalReplaceState.apply(this, arguments); 422 applySeoForPath(window.location.pathname, false); 423 }; 424 425 window.addEventListener('popstate', function() { 426 applySeoForPath(window.location.pathname, false); 427 }); 428 })(); 429 </script>
429 430 431 <!-- IMPORTANT: DO NOT REMOVE THIS SCRIPT TAG OR THIS VERY COMMENT! --> 432 433 </body> 434</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.