1<!doctype html> 2<html lang="el" style="background-color:#f7f7f7"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <meta name="theme-color" content="#f7f7f7" /> 7 <link rel="icon" type="image/png" href="/favicon.png"> 8 <link rel="apple-touch-icon" href="/favicon.png"> 9 <link rel="preconnect" href="https://fonts.googleapis.com" /> 10 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 11 <link rel="preconnect" href="https://cdn.shopify.com" crossorigin /> 12 <link rel="dns-prefetch" href="https://cdn.shopify.com" /> 13 <link rel="dns-prefetch" href="https://ledmania-gr.myshopify.com" /> 14 <link rel="dns-prefetch" href="https://gujunpwiwjqlgswizbhk.supabase.co" /> 15 <link rel="dns-prefetch" href="https://www.googletagmanager.com" /> 16 <!-- Preload critical font files directly to avoid CSS round-trip --> 17 <link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHTWEBlw.woff2" /> 18 <link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/spacegrotesk/v22/V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2" /> 19 <!-- Fonts: only 2 families, minimal weights, swap for FCP --> 20 <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@600;700&family=DM+Sans:opsz,[email protected],400;9..40,600&subset=greek,latin&display=swap" /> 21 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@600;700&family=DM+Sans:opsz,[email protected],400;9..40,600&subset=greek,latin&display=swap" media="print" onload="this.media='all'" /> 22 <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@600;700&family=DM+Sans:opsz,[email protected],400;9..40,600&subset=greek,latin&display=swap" /></noscript> 23 <!-- Hero skeleton â no image preload to avoid ghost flash --> 24 <link rel="alternate" hreflang="el" href="https://ledmania.gr" /> 25 <link rel="alternate" hreflang="x-default" href="https://ledmania.gr" /> 26 <link rel="canonical" href="https://ledmania.gr/" /> 27 <title>Ledmania.gr - LED ΦÏÏιÏμÏÏ</title> 28 <meta name="description" content="LEDmania.gr: ÎονÏÎÏνα LED ÏÏÏιÏÏικά, ÏαινίεÏ, ÏÏÎ¿Î²Î¿Î»ÎµÎ¯Ï ÎºÎ±Î¹ λÏÏÎµÎ¹Ï ÎµÎ¾Î¿Î¹ÎºÎ¿Î½ÏμηÏÎ·Ï ÎµÎ½ÎÏÎ³ÎµÎ¹Î±Ï Î³Î¹Î± ÏÏίÏι & εÏαγγελμαÏικοÏÏ ÏÏÏÎ¿Ï Ï, άμεÏη αÏοÏÏολή."> 29 <meta name="author" content="Ledmania.gr" /> 30 31 32 33 <meta property="og:type" content="website" /> 34 <meta property="og:url" content="https://ledmania.gr" /> 35 <meta property="og:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/RkOPDPvwbgOY1gRip3I6dLdq7n13/social-images/social-1771782478966-Screenshot_2026-02-22_at_19.47.46.webp"> 36 <meta property="og:locale" content="el_GR" /> 37 <meta property="og:site_name" content="Ledmania.gr" /> 38 39 <meta name="twitter:card" content="summary_large_image" /> 40 41 42 <meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/RkOPDPvwbgOY1gRip3I6dLdq7n13/social-images/social-1771782478966-Screenshot_2026-02-22_at_19.47.46.webp"> 43 44 <meta name="google-site-verification" content="google9028393fea09bec3" /> 45 46 <!-- Consent Mode v2 defaults â analytics pre-granted, ads denied until banner accept --> 47
47<script> 48 window.dataLayer = window.dataLayer || []; 49 function gtag(){dataLayer.push(arguments);} 50 gtag('consent', 'default', { 51 'analytics_storage': 'granted', 52 'ad_storage': 'denied', 53 'ad_user_data': 'denied', 54 'ad_personalization': 'denied', 55 'url_passthrough': true, 56 'ads_data_redaction': true, 57 'wait_for_update': 500, 58 }); 59 </script>
59 60 <!-- Google Tag Manager â disabled on staging --> 61
61<script> 62 (function() { 63 var isStaging = window.location.hostname.indexOf('lovable.app') !== -1 || window.location.hostname === 'localhost'; 64 if (isStaging) return; 65 window.dataLayer = window.dataLayer || []; 66 })(); 67 </script>
67 68 <!-- Google Tag Manager â load immediately so bouncers are still tracked --> 69
69<script> 70 (function(w,d,s,l,i){ 71 if(w.location.hostname.indexOf('lovable.app')!==-1||w.location.hostname==='localhost')return; 72 w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'}); 73 var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:''; 74 j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl; 75 f.parentNode.insertBefore(j,f); 76 })(window,document,'script','dataLayer','GTM-NK3Q6T8J'); 77 </script>
77 78 <!-- End Google Tag Manager --> 79 <meta property="og:title" content="Ledmania.gr - LED ΦÏÏιÏμÏÏ"> 80 <meta name="twitter:title" content="Ledmania.gr - LED ΦÏÏιÏμÏÏ"> 81 <meta property="og:description" content="LEDmania.gr: ÎονÏÎÏνα LED ÏÏÏιÏÏικά, ÏαινίεÏ, ÏÏÎ¿Î²Î¿Î»ÎµÎ¯Ï ÎºÎ±Î¹ λÏÏÎµÎ¹Ï ÎµÎ¾Î¿Î¹ÎºÎ¿Î½ÏμηÏÎ·Ï ÎµÎ½ÎÏÎ³ÎµÎ¹Î±Ï Î³Î¹Î± ÏÏίÏι & εÏαγγελμαÏικοÏÏ ÏÏÏÎ¿Ï Ï, άμεÏη αÏοÏÏολή."> 82 <meta name="twitter:description" content="LEDmania.gr: ÎονÏÎÏνα LED ÏÏÏιÏÏικά, ÏαινίεÏ, ÏÏÎ¿Î²Î¿Î»ÎµÎ¯Ï ÎºÎ±Î¹ λÏÏÎµÎ¹Ï ÎµÎ¾Î¿Î¹ÎºÎ¿Î½ÏμηÏÎ·Ï ÎµÎ½ÎÏÎ³ÎµÎ¹Î±Ï Î³Î¹Î± ÏÏίÏι & εÏαγγελμαÏικοÏÏ ÏÏÏÎ¿Ï Ï, άμεÏη αÏοÏÏολή."> 83 84 <!-- Dynamic meta injection for bots â runs synchronously before React --> 85
85<script> 86 (function(){ 87 var p = window.location.pathname; 88 var origin = 'https://ledmania.gr'; 89 var h = document.querySelector('head'); 90 91 function setMeta(name, content) { 92 var el = document.querySelector('meta[name="'+name+'"]') || document.querySelector('meta[property="'+name+'"]'); 93 if (el) { el.setAttribute('content', content); } 94 else { 95 el = document.createElement('meta'); 96 if (name.indexOf('og:') === 0 || name.indexOf('twitter:') === 0) el.setAttribute('property', name); 97 else el.setAttribute('name', name); 98 el.setAttribute('content', content); 99 h.appendChild(el); 100 } 101 } 102 103 function setCanonical(url) { 104 var link = document.querySelector('link[rel="canonical"]'); 105 if (link) link.setAttribute('href', url); 106 else { link = document.createElement('link'); link.rel = 'canonical'; link.href = url; h.appendChild(link); } 107 } 108 109 function handleToTitle(handle) { 110 return handle.replace(/-/g, ' ').replace(/\b\w/g, function(c){ return c.toUpperCase(); }) 111 .replace(/\bLed\b/gi, 'LED').replace(/\bSmd\b/gi, 'SMD').replace(/\bRgb\b/gi, 'RGB') 112 .replace(/\bCob\b/gi, 'COB').replace(/\bIp\b/gi, 'IP').replace(/\bUsb\b/gi, 'USB') 113 .replace(/\bDc\b/gi, 'DC').replace(/\bAc\b/gi, 'AC'); 114 } 115 116 // Product pages: /products/{handle} or /p/{handle} 117 var prodMatch = p.match(/^\/(?:products|p)\/([^/?#]+)/); 118 if (prodMatch) { 119 var handle = decodeURIComponent(prodMatch[1]); 120 var title = handleToTitle(handle) + ' | Ledmania.gr'; 121 var desc = 'ÎγοÏάÏÏε ' + handleToTitle(handle) + ' online ÏÏο Ledmania.gr. ÎμεÏη αÏοÏÏολή, 2 ÏÏÏνια εγγÏηÏη, ελληνική Ï ÏοÏÏήÏιξη.'; 122 document.title = title; 123 setMeta('description', desc); 124 setMeta('og:title', title); 125 setMeta('og:description', desc); 126 setMeta('og:url', origin + '/products/' + handle); 127 setMeta('og:type', 'product'); 128 setMeta('twitter:title', title); 129 setMeta('twitter:description', desc); 130 setCanonical(origin + '/products/' + handle); 131 return; 132 } 133 134 // Collection pages: /collections/{handle} 135 var collMatch = p.match(/^\/collections\/([^/?#]+)/); 136 if (collMatch) { 137 var handle = decodeURIComponent(collMatch[1]); 138 var title = handleToTitle(handle) + ' - Ledmania.gr'; 139 var desc = 'ÎείÏε Ïη ÏÏ Î»Î»Î¿Î³Î® ' + handleToTitle(handle) + ' ÏÏο Ledmania.gr. Îεγάλη Ïοικιλία LED ÏÏοÏÏνÏÏν, άμεÏη αÏοÏÏολή Ïε Ïλη Ïην Îλλάδα.'; 140 document.title = title; 141 setMeta('description', desc); 142 setMeta('og:title', title); 143 setMeta('og:description', desc); 144 setMeta('og:url', origin + p); 145 setMeta('twitter:title', title); 146 setMeta('twitter:description', desc); 147 setCanonical(origin + '/collections/' + handle); 148 return; 149 } 150 151 // Blog pages: /blog/{slug} (also normalises Shopify /blogs/{blog}/{slug}) 152 var blogMatch = p.match(/^\/blog\/([^/?#]+)/) || p.match(/^\/blogs\/[^/?#]+\/([^/?#]+)/); 153 if (blogMatch && !/^\/blog\/category\//.test(p)) { 154 var slug = decodeURIComponent(blogMatch[1]); 155 var title = handleToTitle(slug) + ' | Blog - Ledmania.gr'; 156 document.title = title; 157 setMeta('og:title', title); 158 setMeta('og:url', origin + '/blog/' + slug); 159 setMeta('twitter:title', title); 160 setCanonical(origin + '/blog/' + slug); 161 return; 162 } 163 164 // Facet pages: /a/{category}/{facet} 165 var facetMatch = p.match(/^\/a\/([^/?#]+)\/([^/?#]+)/); 166 if (facetMatch) { 167 var cat = handleToTitle(decodeURIComponent(facetMatch[1])); 168 var facet = handleToTitle(decodeURIComponent(facetMatch[2])); 169 var title = facet + ' ' + cat + ' | Ledmania.gr'; 170 document.title = title; 171 setMeta('description', facet + ' ' + cat + ' - ÎÏείÏε Ïα καλÏÏεÏα LED ÏÏοÏÏνÏα ÏÏο Ledmania.gr.'); 172 setMeta('og:title', title); 173 setMeta('og:url', origin + p); 174 setMeta('twitter:title', title); 175 setCanonical(origin + p); 176 return; 177 } 178 179 // Every other route: self-referencing canonical. Leaving the static 180 // homepage canonical in place told Google that every URL was a 181 // duplicate of "/", which blocked indexing of hubs, info pages etc. 182 var selfPath = p.replace(/\/+$/, '') || '/'; 183 setCanonical(origin + (selfPath === '/' ? '/' : selfPath)); 184 setMeta('og:url', origin + (selfPath === '/' ? '/' : selfPath)); 185 })(); 186 </script>
186 187
187<script type="module" crossorigin src="/assets/index-BXxlNWgv.js"></script>
187 188 <link rel="modulepreload" crossorigin href="/assets/vendor-react-62vuNXVr.js"> 189 <link rel="modulepreload" crossorigin href="/assets/vendor-query-BBe9Uaw0.js"> 190 <link rel="modulepreload" crossorigin href="/assets/vendor-ui-BgyuxuNv.js"> 191 <link rel="modulepreload" crossorigin href="/assets/vendor-supabase-XMQjZQ6V.js"> 192 <link rel="modulepreload" crossorigin href="/assets/vendor-zustand-CmnBNWkc.js"> 193 <link rel="stylesheet" crossorigin href="/assets/index-CfVOVcp-.css">
194<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
194</head> 195 196 <body style="background-color:#f7f7f7;min-height:100vh"> 197 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 197-198
197 198 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
198GTM-NK3Q6T8J
vendor: 91 bytes, lines 198-200
198" 199 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 200
200<!-- End Google Tag Manager (noscript) --> 201 <div id="root" style="min-height:100vh;background-color:#f7f7f7"> 202 <!-- Static skeleton for instant FCP â replaced by React on mount --> 203 <div id="ssr-shell" style="font-family:'DM Sans',system-ui,sans-serif"> 204 <!-- Header bar --> 205 <header style="background:#fff;height:64px;box-shadow:0 1px 3px rgba(0,0,0,.08);display:flex;align-items:center;padding:0 16px"> 206 <div style="width:140px;height:36px;background:#e5e5e5;border-radius:6px"></div> 207 </header> 208 <!-- Category strip placeholder --> 209 <div style="height:48px;background:#fff;border-bottom:1px solid #eee;display:flex;align-items:center;gap:12px;padding:0 16px;overflow:hidden"> 210 <div style="width:70px;height:28px;background:#f0f0f0;border-radius:14px;flex-shrink:0"></div> 211 <div style="width:80px;height:28px;background:#f0f0f0;border-radius:14px;flex-shrink:0"></div> 212 <div style="width:60px;height:28px;background:#f0f0f0;border-radius:14px;flex-shrink:0"></div> 213 <div style="width:90px;height:28px;background:#f0f0f0;border-radius:14px;flex-shrink:0"></div> 214 </div> 215 <!-- Hero placeholder â neutral skeleton, no product image --> 216 <div style="height:420px;background:#060c1a;position:relative;overflow:hidden"> 217 <div style="position:absolute;inset:0;background:linear-gradient(135deg,#060c1a 0%,#0d1a2e 50%,#060c1a 100%);animation:shimmer 1.8s ease-in-out infinite"></div> 218 </div> 219 <style>@keyframes shimmer{0%,100%{opacity:.6}50%{opacity:1}}</style> 220 </div> 221 </div> 222 <!-- Noscript SEO fallback for non-JS crawlers --> 223 <noscript> 224 <div style="font-family:sans-serif;max-width:960px;margin:0 auto;padding:20px"> 225 <h1>Ledmania.gr â LED ΦÏÏιÏμÏÏ Î³Î¹Î± ΣÏίÏι & ÎÏαγγελμαÏικοÏÏ Î§ÏÏÎ¿Ï Ï</h1> 226 <p>Το Ledmania.gr είναι Ïο μεγαλÏÏεÏο ηλεκÏÏÎ¿Î½Î¹ÎºÏ ÎºÎ±ÏάÏÏημα LED ÏÏÏιÏÎ¼Î¿Ï ÏÏην Îλλάδα με ÏÎ¬Î½Ï Î±ÏÏ 25.000 ÏÏοÏÏνÏα. Î ÏοÏÏÎÏÎ¿Ï Î¼Îµ λάμÏÎµÏ LED, ÏÎ±Î¹Î½Î¯ÎµÏ LED, LED spot, ÏÏÏιÏÏικά, ηλιακά, ÏÏÏιÏÎ¼Ï Î±Ï ÏοκινήÏÎ¿Ï ÎºÎ±Î¹ εÏαγγελμαÏικÎÏ Î»ÏÏÎµÎ¹Ï ÏÏÏιÏμοÏ.</p> 227 <nav> 228 <h2>ÎαÏηγοÏÎ¯ÎµÏ Î ÏοÏÏνÏÏν</h2> 229 <ul> 230 <li><a href="/collections/lampes-led">ÎάμÏÎµÏ LED</a></li> 231 <li><a href="/collections/led-spot">LED Spot</a></li> 232 <li><a href="/collections/tainies-led">Î¤Î±Î¹Î½Î¯ÎµÏ LED</a></li> 233 <li><a href="/collections/fotistika">ΦÏÏιÏÏικά</a></li> 234 <li><a href="/collections/led-autokinitou">LED ÎÏ ÏοκινήÏÎ¿Ï </a></li> 235 <li><a href="/collections/epaggelmatikos-fotismos">ÎÏαγγελμαÏικÏÏ Î¦ÏÏιÏμÏÏ</a></li> 236 <li><a href="/collections/iliaka">Îλιακά</a></li> 237 <li><a href="/collections/exypno-spiti">ÎÎ¾Ï Ïνο ΣÏίÏι</a></li> 238 </ul> 239 <h2>ΠληÏοÏοÏίεÏ</h2> 240 <ul> 241 <li><a href="/sxetika-me-emas">ΣÏεÏικά με εμάÏ</a></li> 242 <li><a href="/apostoli-paradosi">ÎÏοÏÏολή & ΠαÏάδοÏη</a></li> 243 <li><a href="/tropoi-plirwmis">ΤÏÏÏοι ΠληÏÏμήÏ</a></li> 244 <li><a href="/epistrofes-allages">ÎÏιÏÏÏοÏÎÏ & ÎλλαγÎÏ</a></li> 245 <li><a href="/blog">Blog & Îδηγοί</a></li> 246 </ul> 247 </nav> 248 <p>ð 210 6645449 · ÎμεÏη αÏοÏÏολή · 2 ÏÏÏνια εγγÏηÏη · Îλληνική Ï ÏοÏÏήÏιξη</p> 249 </div> 250 </noscript> 251 </body> 252</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.