bep40 commited on
Commit
88d2aba
·
verified ·
1 Parent(s): a33a757

Cập nhật giao diện: thêm filter thương hiệu, badge brand, hero stats cho Malloca + Eurogold

Browse files
Files changed (1) hide show
  1. index.html +32 -18
index.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
  <title>MALLOCA | Smart Kitchen - Smart Life</title>
7
- <meta name="description" content="363 sản phẩm thiết bị nhà bếp Malloca chính hãng — đầy đủ thông số, hình ảnh, mô tả chi tiết.">
8
  <link rel="icon" href="https://bizweb.dktcdn.net/100/567/847/themes/1041000/assets/favicon.png">
9
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
10
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
@@ -326,7 +326,7 @@ textarea.form-input{height:120px;resize:vertical}
326
 
327
  <header class="header"><div class="container">
328
  <div class="logo" onclick="goHome()"><div class="logo-box">M</div><div><div class="logo-name">MALL<span>OCA</span></div><div class="logo-sub">Smart Kitchen &bull; Smart Life</div></div></div>
329
- <div class="search-box"><i class="fas fa-search"></i><input type="text" id="q" placeholder="Tìm sản phẩm... (bếp từ, máy hút mùi, chậu rửa...)" oninput="doSearch()"><span class="search-count" id="sc"></span></div>
330
  <div class="nav-tabs">
331
  <div class="nav-tab active" data-page="products" onclick="showPage('products')"><i class="fas fa-th-large"></i> Sản Phẩm</div>
332
  <div class="nav-tab" data-page="catalogue" onclick="showPage('catalogue')"><i class="fas fa-book-open"></i> Catalogue</div>
@@ -339,11 +339,12 @@ textarea.form-input{height:120px;resize:vertical}
339
  </div></header>
340
 
341
  <section class="hero"><div class="container">
342
- <h1>Thiết Bị Nhà Bếp <span>Malloca</span></h1>
343
- <p>Dữ liệu trực tiếp từ malloca.com — Đầy đủ hình ảnh, thông số kỹ thuật, mô tả chi tiết cho từng sản phẩm</p>
344
- <div class="hero-stats">
345
- <div class="hero-stat"><strong>363</strong><span>Sản phẩm</span></div>
346
- <div class="hero-stat"><strong>9</strong><span>Danh mục</span></div>
 
347
  <div class="hero-stat"><strong>100%</strong><span>Dữ liệu thật</span></div>
348
  </div>
349
  </div></section>
@@ -353,6 +354,7 @@ textarea.form-input{height:120px;resize:vertical}
353
  <div id="page-products" class="page-section active"><div id="listView">
354
  <div class="main">
355
  <aside class="sidebar" id="sidebar">
 
356
  <div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="cl"></ul></div>
357
  <div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="pr"></div></div>
358
  </aside>
@@ -438,6 +440,7 @@ textarea.form-input{height:120px;resize:vertical}
438
  <div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();showPage('contact')"><i class="fas fa-envelope" style="margin-right:8px;color:var(--a)"></i> Liên Hệ</div>
439
  <div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();openCart()"><i class="fas fa-shopping-cart" style="margin-right:8px;color:var(--a)"></i> Giỏ Hàng</div>
440
  </div>
 
441
  <div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="clm"></ul></div>
442
  <div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="prm"></div></div>
443
  </div>
@@ -464,24 +467,24 @@ textarea.form-input{height:120px;resize:vertical}
464
 
465
  <footer class="footer"><div class="container">
466
  <div class="footer-grid">
467
- <div class="footer-brand"><div class="logo-name" style="color:#fff;font-size:1.1rem">MALL<span style="color:var(--a)">OCA</span></div><p>363 sản phẩm với dữ liệu chi tiết đầy đủ — hình ảnh, thông số kỹ thuật, mô tả, tính năng — tích hợp trực tiếp từ malloca.com.</p>
468
  <div class="social-links"><a href="https://www.facebook.com/CongTyMalloca" target="_blank"><i class="fab fa-facebook-f"></i></a><a href="https://www.youtube.com/@mallocakitchenware" target="_blank"><i class="fab fa-youtube"></i></a><a href="https://www.tiktok.com/@mallocavietnam" target="_blank"><i class="fab fa-tiktok"></i></a></div></div>
469
  <div><h4>Thiết Bị Nhà Bếp</h4><ul class="footer-links"><li><a href="https://malloca.com/may-hut-khoi-khu-mui" target="_blank">Máy hút khói khử mùi</a></li><li><a href="https://malloca.com/bep-dien-tu-bep-gas" target="_blank">Bếp điện từ, bếp gas</a></li><li><a href="https://malloca.com/lo-nuong" target="_blank">Lò nướng, lò hấp</a></li><li><a href="https://malloca.com/chau-rua-chen" target="_blank">Chậu rửa chén</a></li><li><a href="https://malloca.com/voi-rua-chen" target="_blank">Vòi rửa chén</a></li></ul></div>
470
  <div><h4>Thêm</h4><ul class="footer-links"><li><a href="https://malloca.com/tu-lanh-tu-ruou" target="_blank">Tủ lạnh, tủ rượu</a></li><li><a href="https://malloca.com/may-rua-chen-may-say-chen" target="_blank">Máy rửa chén</a></li><li><a href="https://malloca.com/thiet-bi-gia-dung-nho" target="_blank">Gia dụng nhỏ</a></li><li><a href="https://malloca.com/khuyen-mai" target="_blank">Khuyến mãi</a></li><li><a href="https://malloca.com/catalogue" target="_blank">Catalogue</a></li></ul></div>
471
  <div><h4>Hỗ Trợ</h4><ul class="footer-links"><li><a href="https://malloca.com/ve-chung-toi" target="_blank">Về Malloca</a></li><li><a href="https://malloca.com/he-thong-showroom" target="_blank">Showroom</a></li><li><a href="https://malloca.com/tra-cuu-ttbh" target="_blank">Tra cứu bảo hành</a></li><li><a href="https://malloca.com/kich-hoat-bao-hanh" target="_blank">Kích hoạt bảo hành</a></li><li><a href="https://malloca.com/yeu-cau-bao-hanh" target="_blank">Yêu cầu bảo hành</a></li></ul></div>
472
  </div>
473
- <div class="footer-bottom"><p>&copy; 2025 Malloca Việt Nam &bull; Dữ liệu tích hợp từ malloca.com</p></div>
474
  </div></footer>
475
 
476
  <script>
477
- let D=[],S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:'g'};
478
  const PP=24;
479
  const PRICES=[
480
  {l:'Tất cả',min:0,max:1e15},{l:'Dưới 5 triệu',min:0,max:5e6},{l:'5-15 triệu',min:5e6,max:15e6},
481
  {l:'15-30 triệu',min:15e6,max:3e7},{l:'30-50 triệu',min:3e7,max:5e7},{l:'Trên 50 triệu',min:5e7,max:1e15}
482
  ];
483
 
484
- fetch('products.json').then(r=>r.json()).then(d=>{D=d.map(p=>{let o={name:p.n,link:p.l,image:p.i,price:p.p,priceNum:p.pn,cat:p.c,catSlug:p.cs,catIcon:p.ci,images:p.imgs||[],summary:p.sum||'',desc:p.desc||'',specs:p.specs||{},feats:p.feats||[],sku:p.sku||'',video:p.vid||'',model:p.mod||''};o._idx=buildSearchIndex(o);return o});init()});
485
 
486
  function buildSearchIndex(p){
487
  let parts=[p.name,p.cat,p.sku,p.model,'malloca',p.summary,p.desc,p.price];
@@ -490,7 +493,7 @@ if(p.specs){Object.entries(p.specs).forEach(([k,v])=>{parts.push(k);parts.push(v
490
  return parts.join(' ').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');
491
  }
492
 
493
- function init(){buildCats();buildPrices();render()}
494
 
495
  function buildCats(){
496
  let cats={};D.forEach(p=>{if(!cats[p.catSlug])cats[p.catSlug]={n:p.cat,i:p.catIcon,c:0};cats[p.catSlug].c++});
@@ -503,9 +506,20 @@ function buildPrices(){
503
  let h='';PRICES.forEach((p,i)=>{h+=`<div class="pr-item${i===0?' active':''}" data-i="${i}" onclick="setPrice(${p.min},${p.max},${i})"><span class="pr-dot"></span>${p.l}</div>`});
504
  document.getElementById('pr').innerHTML=h;document.getElementById('prm').innerHTML=h;
505
  }
 
 
 
 
 
 
 
 
 
 
506
 
507
  function getF(){
508
  let r=D;
 
509
  if(S.cat!=='all')r=r.filter(p=>p.catSlug===S.cat);
510
  if(S.q){let q=S.q.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');r=r.filter(p=>p._idx.includes(q))}
511
  if(S.pmin>0||S.pmax<1e15)r=r.filter(p=>p.priceNum>=S.pmin&&p.priceNum<=S.pmax);
@@ -524,7 +538,7 @@ let g=document.getElementById('grid');
524
  g.className='pg'+(S.view==='l'?' lv':'');
525
  if(!items.length){g.innerHTML=`<div class="empty" style="grid-column:1/-1"><i class="fas fa-search"></i><h3>Không tìm thấy</h3><p>Thử thay đổi bộ lọc hoặc từ khóa</p><button class="reset-btn" onclick="resetAll()">Xóa bộ lọc</button></div>`;
526
  }else{
527
- g.innerHTML=items.map((p,i)=>{let idx=D.indexOf(p);return`<div class="pc fade" onclick="showDetail(${idx})" style="transition-delay:${Math.min(i*25,400)}ms"><div class="pi"><img src="${p.image}" alt="${p.name}" loading="lazy" onerror="this.style.display='none'"><span class="pi-badge"><i class="fas ${p.catIcon}"></i> ${p.cat}</span></div><div class="pb"><div style="font-size:.65rem;font-weight:700;color:var(--a);letter-spacing:.5px;margin-bottom:4px">${p.model}</div><div class="pn">${p.name}</div><div class="pf"><span class="pp">${p.price||'Liên hệ'}</span><i class="fas fa-chevron-right"></i></div></div></div>`}).join('');
528
  }
529
  requestAnimationFrame(()=>document.querySelectorAll('.fade').forEach(e=>e.classList.add('vis')));
530
  renderPag(tp);
@@ -602,17 +616,17 @@ ${allImgs.length>1?`<div class="gallery-thumbs">${thumbs}</div>`:''}
602
  ${p.sku?`<div class="detail-sku">SKU: ${p.sku} &bull; Model: ${p.model}</div>`:''}
603
  <div class="detail-cat"><i class="fas ${p.catIcon}"></i> ${p.cat}</div>
604
  <h1 class="detail-name">${p.name}</h1>
605
- <div style="font-size:.95rem;font-weight:800;color:var(--a);letter-spacing:1px;margin-bottom:12px">${p.model} | Malloca</div>
606
  <div class="detail-price">${p.price||'Liên hệ'}</div>
607
  ${p.summary?`<div class="detail-summary">${p.summary}</div>`:''}
608
  <div class="detail-badges">
609
- <div class="detail-badge"><i class="fas fa-check-circle"></i> Chính hãng Malloca</div>
610
  <div class="detail-badge"><i class="fas fa-shield-halved"></i> Bảo hành điện tử</div>
611
  <div class="detail-badge"><i class="fas fa-truck-fast"></i> Miễn phí lắp đặt</div>
612
  </div>
613
  <div style="display:flex;gap:10px;flex-wrap:wrap">
614
  <button class="add-cart-btn" onclick="event.stopPropagation();addToCart(${idx})"><i class="fas fa-cart-plus"></i> Thêm vào giỏ</button>
615
- <a href="${p.link}" target="_blank" class="detail-btn detail-btn-outline"><i class="fas fa-external-link-alt"></i> malloca.com</a>
616
  </div>
617
  </div>
618
  </div>
@@ -650,12 +664,12 @@ document.getElementById('tab-'+id).classList.add('active');
650
 
651
  // ===== ACTIONS =====
652
  function setCat(s){S.cat=s;S.pg=1;updActive('.cat-item','data-s',s);render();closeMsb()}
653
- function setPrice(min,max,i){S.pmin=min;S.pmax=max;S.pg=1;document.querySelectorAll('.pr-item').forEach((e,j)=>e.classList.toggle('active',j===i));render();closeMsb()}
654
  function doSearch(){S.q=document.getElementById('q').value.trim();S.pg=1;render();renderMainCatSearch()}
655
  function doSort(){S.sort=document.getElementById('ss').value;S.pg=1;render()}
656
  function setV(v){S.view=v;document.getElementById('gb').classList.toggle('active',v==='g');document.getElementById('lb').classList.toggle('active',v==='l');render()}
657
  function goPg(p){let f=getF(),tp=Math.ceil(f.length/PP);if(p<1||p>tp)return;S.pg=p;render();document.querySelector('.toolbar').scrollIntoView({behavior:'smooth',block:'start'})}
658
- function resetAll(){S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:S.view};document.getElementById('q').value='';document.getElementById('ss').value='default';updActive('.cat-item','data-s','all');document.querySelectorAll('.pr-item').forEach((e,i)=>e.classList.toggle('active',i===0));render();let csr=document.getElementById('catSearchResults');if(csr)csr.innerHTML='';}
659
  function updActive(sel,attr,val){document.querySelectorAll(sel).forEach(e=>e.classList.toggle('active',e.getAttribute(attr)===val))}
660
  function closeMsb(){document.getElementById('msb').classList.remove('open')}
661
  document.addEventListener('keydown',e=>{if(e.key==='Escape')goBack();if(e.key==='/'&&document.activeElement.tagName!=='INPUT'){e.preventDefault();document.getElementById('q').focus()}});
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
  <title>MALLOCA | Smart Kitchen - Smart Life</title>
7
+ <meta name="description" content="1173 sản phẩm thiết bị nhà bếp Malloca & Eurogold chính hãng — đầy đủ thông số, hình ảnh, mô tả chi tiết.">
8
  <link rel="icon" href="https://bizweb.dktcdn.net/100/567/847/themes/1041000/assets/favicon.png">
9
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
10
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
 
326
 
327
  <header class="header"><div class="container">
328
  <div class="logo" onclick="goHome()"><div class="logo-box">M</div><div><div class="logo-name">MALL<span>OCA</span></div><div class="logo-sub">Smart Kitchen &bull; Smart Life</div></div></div>
329
+ <div class="search-box"><i class="fas fa-search"></i><input type="text" id="q" placeholder="Tìm sản phẩm Malloca & Eurogold... (bếp từ, giá bát, khoá cửa...)" oninput="doSearch()"><span class="search-count" id="sc"></span></div>
330
  <div class="nav-tabs">
331
  <div class="nav-tab active" data-page="products" onclick="showPage('products')"><i class="fas fa-th-large"></i> Sản Phẩm</div>
332
  <div class="nav-tab" data-page="catalogue" onclick="showPage('catalogue')"><i class="fas fa-book-open"></i> Catalogue</div>
 
339
  </div></header>
340
 
341
  <section class="hero"><div class="container">
342
+ <h1>Thiết Bị Nhà Bếp <span>Malloca</span> & <span>Eurogold</span></h1>
343
+ <p>Dữ liệu trực tiếp từ malloca.com & eurogold.vn — Đầy đủ hình ảnh, thông số kỹ thuật, mô tả chi tiết</p>
344
+ <div class="hero-stats" id="heroStats">
345
+ <div class="hero-stat"><strong id="statTotal">1173</strong><span>Sản phẩm</span></div>
346
+ <div class="hero-stat"><strong id="statCats">16</strong><span>Danh mục</span></div>
347
+ <div class="hero-stat"><strong>2</strong><span>Thương hiệu</span></div>
348
  <div class="hero-stat"><strong>100%</strong><span>Dữ liệu thật</span></div>
349
  </div>
350
  </div></section>
 
354
  <div id="page-products" class="page-section active"><div id="listView">
355
  <div class="main">
356
  <aside class="sidebar" id="sidebar">
357
+ <div class="sb-card"><h3><i class="fas fa-building"></i> Thương Hiệu</h3><div class="pr" id="br"></div></div>
358
  <div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="cl"></ul></div>
359
  <div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="pr"></div></div>
360
  </aside>
 
440
  <div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();showPage('contact')"><i class="fas fa-envelope" style="margin-right:8px;color:var(--a)"></i> Liên Hệ</div>
441
  <div style="padding:12px;border-radius:10px;font-weight:600;cursor:pointer;font-size:.9rem" onclick="closeMsb();openCart()"><i class="fas fa-shopping-cart" style="margin-right:8px;color:var(--a)"></i> Giỏ Hàng</div>
442
  </div>
443
+ <div class="sb-card"><h3><i class="fas fa-building"></i> Thương Hiệu</h3><div class="pr" id="brm"></div></div>
444
  <div class="sb-card"><h3><i class="fas fa-layer-group"></i> Danh Mục</h3><ul class="cat-list" id="clm"></ul></div>
445
  <div class="sb-card"><h3><i class="fas fa-tag"></i> Khoảng Giá</h3><div class="pr" id="prm"></div></div>
446
  </div>
 
467
 
468
  <footer class="footer"><div class="container">
469
  <div class="footer-grid">
470
+ <div class="footer-brand"><div class="logo-name" style="color:#fff;font-size:1.1rem">MALL<span style="color:var(--a)">OCA</span> & EURO<span style="color:var(--a)">GOLD</span></div><p>1173 s���n phẩm với dữ liệu chi tiết đầy đủ — hình ảnh, thông số kỹ thuật, mô tả, tính năng — tích hợp trực tiếp từ malloca.com & eurogold.vn.</p>
471
  <div class="social-links"><a href="https://www.facebook.com/CongTyMalloca" target="_blank"><i class="fab fa-facebook-f"></i></a><a href="https://www.youtube.com/@mallocakitchenware" target="_blank"><i class="fab fa-youtube"></i></a><a href="https://www.tiktok.com/@mallocavietnam" target="_blank"><i class="fab fa-tiktok"></i></a></div></div>
472
  <div><h4>Thiết Bị Nhà Bếp</h4><ul class="footer-links"><li><a href="https://malloca.com/may-hut-khoi-khu-mui" target="_blank">Máy hút khói khử mùi</a></li><li><a href="https://malloca.com/bep-dien-tu-bep-gas" target="_blank">Bếp điện từ, bếp gas</a></li><li><a href="https://malloca.com/lo-nuong" target="_blank">Lò nướng, lò hấp</a></li><li><a href="https://malloca.com/chau-rua-chen" target="_blank">Chậu rửa chén</a></li><li><a href="https://malloca.com/voi-rua-chen" target="_blank">Vòi rửa chén</a></li></ul></div>
473
  <div><h4>Thêm</h4><ul class="footer-links"><li><a href="https://malloca.com/tu-lanh-tu-ruou" target="_blank">Tủ lạnh, tủ rượu</a></li><li><a href="https://malloca.com/may-rua-chen-may-say-chen" target="_blank">Máy rửa chén</a></li><li><a href="https://malloca.com/thiet-bi-gia-dung-nho" target="_blank">Gia dụng nhỏ</a></li><li><a href="https://malloca.com/khuyen-mai" target="_blank">Khuyến mãi</a></li><li><a href="https://malloca.com/catalogue" target="_blank">Catalogue</a></li></ul></div>
474
  <div><h4>Hỗ Trợ</h4><ul class="footer-links"><li><a href="https://malloca.com/ve-chung-toi" target="_blank">Về Malloca</a></li><li><a href="https://malloca.com/he-thong-showroom" target="_blank">Showroom</a></li><li><a href="https://malloca.com/tra-cuu-ttbh" target="_blank">Tra cứu bảo hành</a></li><li><a href="https://malloca.com/kich-hoat-bao-hanh" target="_blank">Kích hoạt bảo hành</a></li><li><a href="https://malloca.com/yeu-cau-bao-hanh" target="_blank">Yêu cầu bảo hành</a></li></ul></div>
475
  </div>
476
+ <div class="footer-bottom"><p>&copy; 2025 Malloca & Eurogold Việt Nam &bull; Dữ liệu tích hợp từ malloca.com & eurogold.vn</p></div>
477
  </div></footer>
478
 
479
  <script>
480
+ let D=[],S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:'g',brand:'all'};
481
  const PP=24;
482
  const PRICES=[
483
  {l:'Tất cả',min:0,max:1e15},{l:'Dưới 5 triệu',min:0,max:5e6},{l:'5-15 triệu',min:5e6,max:15e6},
484
  {l:'15-30 triệu',min:15e6,max:3e7},{l:'30-50 triệu',min:3e7,max:5e7},{l:'Trên 50 triệu',min:5e7,max:1e15}
485
  ];
486
 
487
+ fetch('products.json').then(r=>r.json()).then(d=>{D=d.map(p=>{let o={name:p.n,link:p.l,image:p.i,price:p.p,priceNum:p.pn,cat:p.c,catSlug:p.cs,catIcon:p.ci,images:p.imgs||[],summary:p.sum||'',desc:p.desc||'',specs:p.specs||{},feats:p.feats||[],sku:p.sku||'',video:p.vid||'',model:p.mod||'',brand:p.n.includes('| Eurogold |')||p.n.startsWith('Eurogold |')?'Eurogold':'Malloca'};o._idx=buildSearchIndex(o);return o});init()});
488
 
489
  function buildSearchIndex(p){
490
  let parts=[p.name,p.cat,p.sku,p.model,'malloca',p.summary,p.desc,p.price];
 
493
  return parts.join(' ').toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');
494
  }
495
 
496
+ function init(){buildCats();buildPrices();buildBrands();render()}
497
 
498
  function buildCats(){
499
  let cats={};D.forEach(p=>{if(!cats[p.catSlug])cats[p.catSlug]={n:p.cat,i:p.catIcon,c:0};cats[p.catSlug].c++});
 
506
  let h='';PRICES.forEach((p,i)=>{h+=`<div class="pr-item${i===0?' active':''}" data-i="${i}" onclick="setPrice(${p.min},${p.max},${i})"><span class="pr-dot"></span>${p.l}</div>`});
507
  document.getElementById('pr').innerHTML=h;document.getElementById('prm').innerHTML=h;
508
  }
509
+ function buildBrands(){
510
+ let brands={};D.forEach(p=>{brands[p.brand]=(brands[p.brand]||0)+1});
511
+ let h=`<div class="pr-item active" data-b="all" onclick="setBrand('all')"><span class="pr-dot"></span>Tất cả (${D.length})</div>`;
512
+ Object.entries(brands).sort((a,b)=>b[1]-a[1]).forEach(([b,c])=>{h+=`<div class="pr-item" data-b="${b}" onclick="setBrand('${b}')"><span class="pr-dot"></span>${b} (${c})</div>`});
513
+ document.getElementById('br').innerHTML=h;document.getElementById('brm').innerHTML=h;
514
+ document.getElementById('statTotal').textContent=D.length;
515
+ let cats={};D.forEach(p=>{cats[p.catSlug]=1});document.getElementById('statCats').textContent=Object.keys(cats).length;
516
+ }
517
+
518
+
519
 
520
  function getF(){
521
  let r=D;
522
+ if(S.brand!=='all')r=r.filter(p=>p.brand===S.brand);
523
  if(S.cat!=='all')r=r.filter(p=>p.catSlug===S.cat);
524
  if(S.q){let q=S.q.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');r=r.filter(p=>p._idx.includes(q))}
525
  if(S.pmin>0||S.pmax<1e15)r=r.filter(p=>p.priceNum>=S.pmin&&p.priceNum<=S.pmax);
 
538
  g.className='pg'+(S.view==='l'?' lv':'');
539
  if(!items.length){g.innerHTML=`<div class="empty" style="grid-column:1/-1"><i class="fas fa-search"></i><h3>Không tìm thấy</h3><p>Thử thay đổi bộ lọc hoặc từ khóa</p><button class="reset-btn" onclick="resetAll()">Xóa bộ lọc</button></div>`;
540
  }else{
541
+ g.innerHTML=items.map((p,i)=>{let idx=D.indexOf(p);let brandColor=p.brand==='Eurogold'?'#c8102e':'var(--p)';return`<div class="pc fade" onclick="showDetail(${idx})" style="transition-delay:${Math.min(i*25,400)}ms"><div class="pi"><img src="${p.image}" alt="${p.name}" loading="lazy" onerror="this.style.display='none'"><span class="pi-badge"><i class="fas ${p.catIcon}"></i> ${p.cat}</span><span style="position:absolute;top:8px;right:8px;background:${brandColor};color:#fff;padding:3px 8px;border-radius:5px;font-size:.58rem;font-weight:700">${p.brand}</span></div><div class="pb"><div style="font-size:.65rem;font-weight:700;color:${brandColor};letter-spacing:.5px;margin-bottom:4px">${p.model||p.brand}</div><div class="pn">${p.name}</div><div class="pf"><span class="pp">${p.price||'Liên hệ'}</span><i class="fas fa-chevron-right"></i></div></div></div>`}).join('');
542
  }
543
  requestAnimationFrame(()=>document.querySelectorAll('.fade').forEach(e=>e.classList.add('vis')));
544
  renderPag(tp);
 
616
  ${p.sku?`<div class="detail-sku">SKU: ${p.sku} &bull; Model: ${p.model}</div>`:''}
617
  <div class="detail-cat"><i class="fas ${p.catIcon}"></i> ${p.cat}</div>
618
  <h1 class="detail-name">${p.name}</h1>
619
+ <div style="font-size:.95rem;font-weight:800;color:${p.brand==='Eurogold'?'#c8102e':'var(--a)'};letter-spacing:1px;margin-bottom:12px">${p.model?p.model+' | ':''} ${p.brand}</div>
620
  <div class="detail-price">${p.price||'Liên hệ'}</div>
621
  ${p.summary?`<div class="detail-summary">${p.summary}</div>`:''}
622
  <div class="detail-badges">
623
+ <div class="detail-badge"><i class="fas fa-check-circle"></i> Chính hãng ${p.brand}</div>
624
  <div class="detail-badge"><i class="fas fa-shield-halved"></i> Bảo hành điện tử</div>
625
  <div class="detail-badge"><i class="fas fa-truck-fast"></i> Miễn phí lắp đặt</div>
626
  </div>
627
  <div style="display:flex;gap:10px;flex-wrap:wrap">
628
  <button class="add-cart-btn" onclick="event.stopPropagation();addToCart(${idx})"><i class="fas fa-cart-plus"></i> Thêm vào giỏ</button>
629
+ <a href="${p.link}" target="_blank" class="detail-btn detail-btn-outline"><i class="fas fa-external-link-alt"></i> ${p.brand==='Eurogold'?'eurogold.vn':'malloca.com'}</a>
630
  </div>
631
  </div>
632
  </div>
 
664
 
665
  // ===== ACTIONS =====
666
  function setCat(s){S.cat=s;S.pg=1;updActive('.cat-item','data-s',s);render();closeMsb()}
667
+ function setPrice(min,max,i){S.pmin=min;S.pmax=max;S.pg=1;document.querySelectorAll('.pr-item').forEach((e,j)=>e.classList.toggle('active',j===i));render();closeMsb()}function setBrand(b){S.brand=b;S.pg=1;document.querySelectorAll('[data-b]').forEach(e=>e.classList.toggle('active',e.getAttribute('data-b')===b));render();closeMsb()}
668
  function doSearch(){S.q=document.getElementById('q').value.trim();S.pg=1;render();renderMainCatSearch()}
669
  function doSort(){S.sort=document.getElementById('ss').value;S.pg=1;render()}
670
  function setV(v){S.view=v;document.getElementById('gb').classList.toggle('active',v==='g');document.getElementById('lb').classList.toggle('active',v==='l');render()}
671
  function goPg(p){let f=getF(),tp=Math.ceil(f.length/PP);if(p<1||p>tp)return;S.pg=p;render();document.querySelector('.toolbar').scrollIntoView({behavior:'smooth',block:'start'})}
672
+ function resetAll(){S={cat:'all',q:'',pmin:0,pmax:1e15,sort:'default',pg:1,view:S.view,brand:'all'};document.getElementById('q').value='';document.getElementById('ss').value='default';updActive('.cat-item','data-s','all');document.querySelectorAll('.pr-item[data-i]').forEach((e,i)=>e.classList.toggle('active',i===0));document.querySelectorAll('[data-b]').forEach(e=>e.classList.toggle('active',e.getAttribute('data-b')==='all'));render();let csr=document.getElementById('catSearchResults');if(csr)csr.innerHTML='';}
673
  function updActive(sel,attr,val){document.querySelectorAll(sel).forEach(e=>e.classList.toggle('active',e.getAttribute(attr)===val))}
674
  function closeMsb(){document.getElementById('msb').classList.remove('open')}
675
  document.addEventListener('keydown',e=>{if(e.key==='Escape')goBack();if(e.key==='/'&&document.activeElement.tagName!=='INPUT'){e.preventDefault();document.getElementById('q').focus()}});