{"title":"Taro, Yam \u0026 Root Vegetables","description":"\u003cp\u003eThis assortment covers firm roots for soups, braises and stir-fries, from lotus root to taro and yam. Carrots and radishes are useful everyday choices, while frozen burdock is ready to portion. Browse \u003ca href=\"\/vi\/collections\/potatoes-root-vegetables\"\u003ePotatoes \u0026amp; Root Vegetables\u003c\/a\u003e for potatoes and sweet potatoes.\u003c\/p\u003e","products":[{"product_id":"fresh-single-white-radish","title":"Củ Cải Trắng (White Radish) 1 củ – nguyên liệu xào \u0026 nấu canh","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px;color:#334155;line-height:1.55;font-size:15px;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:24px;font-weight:800;color:#0f172a;\"\u003eCủ cải trắng, 1 củ\u003c\/h1\u003e\n  \u003cp style=\"margin:0;color:#64748b;font-size:14px;\"\u003eCòn gọi là Daikon\u003c\/p\u003e\n  \u003cp style=\"margin:10px 0 0;\"\u003eCủ cải trắng sống giòn mọng, hơi cay; nấu chín thì mềm ngọt. Dùng trộn salad, nấu canh, kho hoặc nhúng lẩu đều hợp.\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;\"\u003e\n    \u003cli\u003eĂn sống giòn mát; nấu liu riu thì vị dịu và ngọt nhẹ.\u003c\/li\u003e\n    \u003cli\u003eGiúp cân bằng vị đậm của món hầm, món kho và nước lẩu.\u003c\/li\u003e\n    \u003cli\u003eNhanh mềm, dễ thấm nước sốt khi nấu.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;color:#0f172a;\"\u003eGỏi củ cải trắng giòn với giấm gạo \u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003eÍt calo\u003c\/span\u003e\n\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eCắt củ cải thành sợi, trộn chút muối rồi thêm \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:#DB3A35;\"\u003eHengshun Giấm gạo trắng\u003c\/a\u003e và vài giọt \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\" style=\"color:#DB3A35;\"\u003edầu mè nguyên chất\u003c\/a\u003e. Thêm hành lá cắt lát cho tươi vị.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;color:#0f172a;\"\u003eCanh xương heo \u0026amp; củ cải trắng\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eHầm \u003ca href=\"\/vi\/products\/frozen-northern-free-range-pork-neck-bones-1kg\" style=\"color:#DB3A35;\"\u003exương cổ heo\u003c\/a\u003e với gừng đến khi nước dùng đục trắng, thêm củ cải cắt dày rồi châm thêm \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\" style=\"color:#DB3A35;\"\u003enước dùng gà trong\u003c\/a\u003e. Nấu đến khi củ cải mềm ngọt (30–45 phút sau khi sôi).\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;color:#0f172a;\"\u003eCủ cải xào nhanh với thịt bò \u0026amp; dầu hào\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eÁp chảo \u003ca href=\"\/vi\/products\/angus-prime-shredded-beef-500g\" style=\"color:#DB3A35;\"\u003ethịt bò cắt sợi\u003c\/a\u003e, thêm củ cải cắt que rồi đảo cùng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:#DB3A35;\"\u003edầu hào\u003c\/a\u003e, nước tương nhạt, tỏi và ít nước. Xào lửa lớn đến khi rìa củ cải trong lại (3–5 phút).\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;color:#0f172a;\"\u003eCủ cải nấu lẩu cà chua\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eCắt củ cải thành lát bán nguyệt, nấu liu riu trong \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\" style=\"color:#DB3A35;\"\u003eHaidilao Nước cốt lẩu cà chua\u003c\/a\u003e. Nhúng thêm \u003ca href=\"\/vi\/products\/beifang-frozen-sliced-beef-rolls-for-hot-pot-600g\" style=\"color:#DB3A35;\"\u003ethịt bò cuộn\u003c\/a\u003e và cho \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:#DB3A35;\"\u003enấm kim châm\u003c\/a\u003e vào cuối để có nồi lẩu thanh, đậm đà.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;\"\u003e\n    \u003cli\u003eGọt vỏ để củ cải mềm đều; cắt khoanh, lát bán nguyệt hoặc que.\u003c\/li\u003e\n    \u003cli\u003eĐể củ cải bớt cay khi làm salad, ngâm sợi trong nước lạnh 5–10 phút rồi để thật ráo.\u003c\/li\u003e\n    \u003cli\u003eƯớp củ cải sợi với muối 5–10 phút rồi vắt ráo để gỏi giòn hơn.\u003c\/li\u003e\n    \u003cli\u003eXào lửa lớn đến khi rìa củ cải trong lại (2–4 phút), vẫn giữ độ giòn mọng.\u003c\/li\u003e\n    \u003cli\u003eNấu canh đến khi củ cải vừa mềm để giữ miếng và vị ngọt (20–30 phút).\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;\"\u003e\n    \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:#DB3A35;\"\u003eNước tương nhạt\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:#DB3A35;\"\u003eDầu hào\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:#DB3A35;\"\u003eGiấm gạo\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\" style=\"color:#DB3A35;\"\u003eDầu mè\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/beifang-frozen-sliced-beef-rolls-for-hot-pot-600g\" style=\"color:#DB3A35;\"\u003eThịt bò cuộn (ăn lẩu)\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\" style=\"color:#DB3A35;\"\u003eĐậu hũ non\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:#DB3A35;\"\u003eNấm kim châm\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:#DB3A35;\"\u003eBún gạo\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/cygnet-clear-soup-hot-pot-base-200g-mild-chinese-shabu-shabu-broth-seasoning\" style=\"color:#DB3A35;\"\u003eNước cốt lẩu thanh\u003c\/a\u003e •\n    \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\" style=\"color:#DB3A35;\"\u003eTôm lớn\u003c\/a\u003e\n  \u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;\"\u003e\u003ca href=\"\/vi\/collections\/radish\" style=\"color:#DB3A35;\"\u003eXem các loại củ cải\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48151489544479,"sku":"A0735745752227","price":4.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/ed4c3b875ee96fbcd00b5ba7ecf0153bLYHzEfIyRazg4qiZ2VttLGaRPW9Xzubc.jpg?v=1745982957"},{"product_id":"fresh-carrots-approximately-1kg","title":"Cà Rốt Tươi 1 kg – ngọt giòn, giàu vitamin A","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif;color:#0f172a;line-height:1.6;padding:8px 0;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;\"\u003e\n    \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eCà rốt 1kg\u003c\/h1\u003e\n    \u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eCà rốt giòn, ngọt tự nhiên, dễ chế biến — xào nhanh cho bữa cơm ngày thường hoặc nướng cho bữa cuối tuần.\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003eGiữ vị ngọt và độ giòn khi xào, nướng, nấu canh hoặc trộn gỏi.\u003c\/li\u003e\n      \u003cli\u003eCắt sợi thì nhanh chín; nướng lên ngọt thơm, xém cạnh.\u003c\/li\u003e\n      \u003cli\u003eHợp với nước tương, mè, tỏi, gừng và các gia vị thơm ấm.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n    \u003cdiv style=\"display:grid;grid-template-columns:1fr;gap:14px;\"\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;\"\u003e\n        \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eCà rốt xào gừng–tỏi và nước tương nhạt\u003c\/div\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXào nhanh cà rốt sợi với gừng, tỏi, rồi thêm chút \u003ca href=\"\/vi\/products\/haday-golden-label-light-soy-sauce-1-28l\" title=\"Haday Golden Label Light Soy Sauce\"\u003enước tương nhạt\u003c\/a\u003e và một ít \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" title=\"Haitian Premium Oyster Sauce\"\u003edầu hào\u003c\/a\u003e. Xào 2‑4 phút đến khi vừa chín tới, còn giòn.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;\"\u003e\n        \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eCanh cà rốt, nấm hương \u0026amp; bún gạo\u003c\/div\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eNấu liu riu cà rốt cắt lát cùng \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\" title=\"Chois Shiitake Mushrooms\"\u003enấm hương\u003c\/a\u003e trong \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\" title=\"Bull Head Clear Chicken Broth\"\u003enước dùng gà trong\u003c\/a\u003e, sau đó cho \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" title=\"Chunsi Jiangxi Rice Vermicelli 300g\"\u003ebún gạo\u003c\/a\u003e vào. Nêm vừa ăn để có tô bún nước ấm bụng.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;\"\u003e\n        \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eGỏi cà rốt sợi với mè \u0026amp; giấm gạo \u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003eÍt calo\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eTrộn cà rốt sợi nhỏ với \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" title=\"Hengshun White Rice Vinegar\"\u003egiấm gạo\u003c\/a\u003e, vài giọt \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" title=\"Lee Kum Kee Pure Sesame Oil\"\u003edầu mè\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" title=\"Shallot Bunch\"\u003ehành tím\u003c\/a\u003e cắt lát. Ướp lạnh một lúc để giữ độ giòn.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;\"\u003e\n        \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eCà rốt nướng thì là Ai Cập trên khay\u003c\/div\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eTrộn cà rốt cắt múi với ít \u003ca href=\"\/vi\/products\/88-canola-oil-1l\" title=\"88 Canola Oil\"\u003edầu cải\u003c\/a\u003e, trộn cùng \u003ca href=\"\/vi\/products\/bakerdream-cumin-barbecue-seasoning-130g\" title=\"Bakerdream Cumin Seasoning\"\u003egia vị thì là Ai Cập\u003c\/a\u003e rồi nướng 18‑25 phút đến khi lên màu.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003eGọt vỏ nếu muốn cà rốt thật láng; hoặc chà sạch để giữ màu sắc và độ giòn.\u003c\/li\u003e\n      \u003cli\u003eMuốn nhanh chín thì cắt sợi nhỏ hoặc lát xéo; khi nướng, cắt miếng lớn hơn để cạnh xém mà bên trong vẫn mềm.\u003c\/li\u003e\n      \u003cli\u003eChần cà rốt cắt khoanh hoặc que 1‑2 phút trước khi xào nhanh để giữ màu và rút ngắn thời gian nấu.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\" title=\"Australian Raw King Prawns\"\u003eTôm lớn\u003c\/a\u003e cho món xào nhanh.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\" title=\"Chois Oyster Mushrooms\"\u003eNấm bào ngư\u003c\/a\u003e cho vị bùi thơm đặc trưng của nấm.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-bunch-of-coriander\" title=\"Bunch of Coriander\"\u003eNgò rí\u003c\/a\u003e để rắc lên salad và tô mì.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" title=\"Kikkoman Soy Sauce\"\u003eNước tương\u003c\/a\u003e để nêm vị đậm đà.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" title=\"Ever Green Classic Tofu 500g\"\u003eĐậu hũ cứng\u003c\/a\u003e để thêm đạm từ thực vật.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n    \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eBạn thích nấu các loại củ? Xem thêm các lựa chọn trong nhóm này.\u003c\/p\u003e\n    \u003cp style=\"margin:10px 0 0;\"\u003e\u003ca href=\"\/vi\/collections\/potatoes-root-vegetables\" style=\"color:var(--brand);font-weight:700;\"\u003eXem rau củ →\u003c\/a\u003e\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48151489741087,"sku":"A0735745752159","price":1.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/4049e40aea454854f53aca1094bb64931QnDqeyFQxBHXNeqc3h4WIdsI68uJvxz.jpg?v=1735370758"},{"product_id":"fresh-selection-of-fresh-lotus-root-various-sizes-available","title":"Củ sen tươi tuyển chọn 1kg","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;color:#334155;line-height:1.6;font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; color:#DB3A35; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:24px;margin-top:16px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;color:#0f172a;\"\u003eCủ sen tươi tuyển chọn 1kg\u003c\/h1\u003e\n  \u003cp style=\"margin:0;color:#64748b;font-size:14px;\"\u003eCòn gọi là Renkon\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:0;padding-left:18px;\"\u003e\n    \u003cli\u003eGiòn mọng, ngọt nhẹ và bùi; vẫn giữ độ giòn khi xào, nấu canh hoặc kho.\u003c\/li\u003e\n    \u003cli\u003eCác lỗ có hoa văn như bông tuyết giúp món salad và khay lẩu thêm đẹp mắt.\u003c\/li\u003e\n    \u003cli\u003eDễ thấm vị nước tương, giấm, tỏi và dầu ớt.\u003c\/li\u003e\n    \u003cli\u003eCắt lát mỏng để nấu nhanh, cắt miếng lớn để hầm hoặc bào mỏng làm salad.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr;gap:14px;\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eCủ sen xào tỏi–gừng với đậu Hà Lan ngọt\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eXào củ sen cắt lát mỏng với gừng, tỏi, thêm một nắm \u003ca href=\"\/vi\/products\/fresh-sugar-snap-peas-300g\"\u003eĐậu Hà Lan ngọt tươi - 300g\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e và ít dầu mè. Xào lửa lớn 3–5 phút để giữ độ giòn.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eSalad mè–giấm dùng lạnh \u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003eÍt calo\u003c\/span\u003e\n\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eChần củ sen cắt lát thật mỏng 30–60 giây, ngâm ngay vào nước lạnh rồi trộn với \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003eHengshun Giấm thơm Zhenjiang 550ml\u003c\/a\u003e, chút nước tương nhạt, tỏi băm và dầu ớt (tùy thích). Ướp lạnh trước khi ăn cho giòn hơn.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eCủ sen nấu lẩu cà chua hoặc canh nhà\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eCho củ sen cắt lát dày vào nồi lẩu đang sôi với \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003eHaidilao Nước cốt lẩu cà chua - 200g\u003c\/a\u003e. Thêm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003eEnoki Nấm kim châm - 300g\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-ever-green-tofu-puffs-approximately-150g\"\u003eEver Green Đậu hũ chiên phồng 150g\u003c\/a\u003e để có nhiều độ mềm giòn; nấu liu riu 6–10 phút đến vừa mềm.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eBa rọi heo kho \u0026amp; củ sen\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eÁp chảo \u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-belly-bbq-slices-6mm-500g\"\u003eBorrowdale Ba rọi heo thả vườn cắt lát BBQ - 6mm, 500g\u003c\/a\u003e, thêm củ sen cắt miếng, \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003eHaitian Nước tương đen - 500ml\u003c\/a\u003e, nước tương nhạt, đường và nước. Kho lửa nhỏ 20–30 phút đến khi sốt bóng và nguyên liệu mềm thấm vị.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eSnack củ sen giòn bằng nồi chiên không dầu\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eThấm khô củ sen cắt lát mỏng, xịt ít dầu rồi chiên không dầu 8–12 phút ở nhiệt vừa đến vàng. Rắc muối và chút ớt bột; chấm cùng \u003ca href=\"\/vi\/products\/chuan-lao-hui-spicy-chili-oil-210ml\"\u003eChuan Lao Hui Dầu ớt cay 210ml\u003c\/a\u003e.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n  \u003cul style=\"margin:0;padding-left:18px;\"\u003e\n    \u003cli\u003eGọt vỏ, rửa sạch; ngâm lát củ sen trong nước pha chút giấm để không bị thâm.\u003c\/li\u003e\n    \u003cli\u003eMuốn giòn hơn, chần 30–60 giây trước khi xào; khi hầm thì cắt lát bán nguyệt dày hơn.\u003c\/li\u003e\n    \u003cli\u003eCắt ngang củ để có hoa văn \"bông tuyết\" quen thuộc; dùng dụng cụ bào để có lát mỏng đều khi làm snack.\u003c\/li\u003e\n    \u003cli\u003eNêm vào gần cuối để giữ độ giòn; thêm chút giấm đen trước khi tắt bếp để món ăn tươi vị.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n  \u003cul style=\"margin:0;padding-left:18px;\"\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003eHaitian Nước tương đen - 500ml\u003c\/a\u003e\n\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003eHengshun Giấm thơm Zhenjiang 550ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chuan-lao-hui-spicy-chili-oil-210ml\"\u003eChuan Lao Hui Dầu ớt cay 210ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-belly-bbq-slices-6mm-500g\"\u003eBorrowdale Ba rọi heo thả vườn cắt lát BBQ - 6mm, 500g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003eChois Nấm bào ngư - 400g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003eBull Head Nước dùng gà trong 411ml\u003c\/a\u003e\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;\"\u003e\n    \u003ca href=\"\/vi\/products\/fresh-single-white-radish\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;background:#fff;\"\u003eCủ cải trắng, 1 củ\u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-carrots-approximately-1kg\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;background:#fff;\"\u003eCà rốt 1kg\u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-soil-free-potatoes-approximately-1kg\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;background:#fff;\"\u003eKhoai tây sạch đất, 1kg\u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-small-corn-1-box\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;background:#fff;\"\u003eBắp non tươi - 1 hộp\u003c\/a\u003e\n  \u003c\/div\u003e\n  \u003cdiv style=\"margin-top:12px;\"\u003e\n    \u003ca href=\"\/vi\/collections\/potatoes-root-vegetables\" style=\"font-weight:700;\"\u003eXem tất cả rau củ \u0026amp; khoai củ →\u003c\/a\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48151491838239,"sku":"A0735745753040","price":27.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/3e68898b86801dc01b5c8297a68257e1.jpg?v=1724143355"},{"product_id":"fresh-small-taro-1kg","title":"Khoai Môn Nhỏ Tươi 1 kg – củ bùi thơm, giàu chất xơ","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#334155;line-height:1.6;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:24px;margin-top:16px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;line-height:1.25;\"\u003eKhoai môn củ nhỏ tươi - 1kg\u003c\/h1\u003e\n  \u003cp style=\"margin:8px 0 0;\"\u003eKhoai môn củ nhỏ bùi mịn, nấu chín thì mềm xốp — dùng nấu canh, kho, ăn lẩu hoặc hấp.\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;padding:0;\"\u003e\n    \u003cli\u003eChín kỹ thì bùi xốp như hạt dẻ, có vị ngọt nhẹ.\u003c\/li\u003e\n    \u003cli\u003eCủ nhỏ vừa ăn, giữ miếng khi nấu canh hoặc kho, bên trong vẫn bùi mịn.\u003c\/li\u003e\n    \u003cli\u003eHấp rồi thêm nước tương và hẹ, hầm với thịt heo hoặc cho vào lẩu.\u003c\/li\u003e\n    \u003cli\u003eGiúp nước dùng và món hầm sánh hơn — không cần thêm sữa hay bột.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 14px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eCanh sườn heo \u0026amp; khoai môn \u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003eMón nước\u003c\/span\u003e\n\u003c\/div\u003e\n      \u003cdiv style=\"font-size:14px;color:#475569;\"\u003eLuộc sơ khoai môn rồi hầm với \u003ca href=\"\/vi\/products\/umall-frozen-pork-spare-ribs-600g\"\u003esườn heo\u003c\/a\u003e, một lon \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng\u003c\/a\u003e cắt lát đến khi khoai mềm mịn, nước canh hơi sánh. Rắc thêm \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành tím băm\u003c\/a\u003e.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eKhoai môn kho ba rọi heo\u003c\/div\u003e\n      \u003cdiv style=\"font-size:14px;color:#475569;\"\u003eÁp chảo thịt cắt khối từ \u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-belly-bbq-slices-6mm-500g\"\u003eba rọi heo\u003c\/a\u003e, thêm khoai môn đã chần, \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003enước tương đen\u003c\/a\u003e, đường và nước; kho liu riu đến khi sốt bóng, thịt khoai mềm. Thêm ít \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi\u003c\/a\u003e vào cuối.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eLẩu cà chua với khoai môn, nấm shimeji \u0026amp; đậu hũ chiên phồng\u003c\/div\u003e\n      \u003cdiv style=\"font-size:14px;color:#475569;\"\u003eNấu liu riu \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003enước cốt lẩu cà chua\u003c\/a\u003e với nước. Thêm khoai môn đã luộc sơ, \u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003enấm shimeji\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/ever-green-fried-tofu-puffs-200g\"\u003eđậu hũ chiên phồng\u003c\/a\u003e. Nấu đến khi khoai bùi mịn, nấm vừa mềm.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eKhoai môn hấp sốt nước tương–hẹ\u003c\/div\u003e\n      \u003cdiv style=\"font-size:14px;color:#475569;\"\u003eHấp khoai cắt miếng đến mềm, rưới hỗn hợp ấm gồm \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e, dầu nóng và \u003ca href=\"\/vi\/products\/fresh-bundle-of-chives-pack-of-2\"\u003ehẹ\u003c\/a\u003e cắt nhỏ. Thêm vài giọt \u003ca href=\"\/vi\/products\/amoy-black-sesame-oil-150ml-aromatic-roasted-sesame-essence\"\u003edầu mè đen\u003c\/a\u003e.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;padding:0;\"\u003e\n    \u003cli\u003eNếu da nhạy cảm, nên đeo găng vì khoai môn sống có thể gây ngứa. Gọt dưới vòi nước rồi rửa sạch.\u003c\/li\u003e\n    \u003cli\u003eLuộc sơ khoai đã cắt 5–7 phút để bớt tinh bột ngoài, để ráo trước khi kho, chiên hoặc cho vào lẩu.\u003c\/li\u003e\n    \u003cli\u003eNấu thật chín mềm đến bên trong: hấp 12–18 phút; nấu liu riu hoặc kho 20–30 phút sau khi luộc sơ.\u003c\/li\u003e\n    \u003cli\u003eMuốn cạnh giòn, hấp trước rồi chiên áp chảo với lớp dầu mỏng đến vàng.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;padding:0;\"\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003eDầu hào\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e để thêm vị đậm đà\u003c\/li\u003e\n    \u003cli\u003eMột ít \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè nguyên chất\u003c\/a\u003e\n\u003c\/li\u003e\n    \u003cli\u003eGia vị thơm: \u003ca href=\"\/vi\/products\/fresh-dried-garlic-heads-approximately-500g\"\u003etỏi củ\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành tím\u003c\/a\u003e\n\u003c\/li\u003e\n    \u003cli\u003eThêm vị bùi thơm với \u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003enấm bào ngư\u003c\/a\u003e\n\u003c\/li\u003e\n    \u003cli\u003eĂn cùng nguyên liệu giàu đạm: \u003ca href=\"\/vi\/products\/umall-frozen-pork-belly-cubes-600g\"\u003eba rọi heo cắt khối\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\"\u003etôm lớn\u003c\/a\u003e\n\u003c\/li\u003e\n    \u003cli\u003eThêm đậu hũ để có độ mềm khác: \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\"\u003eđậu hũ truyền thống (loại cứng)\u003c\/a\u003e\n\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;\"\u003eBạn thích các loại khoai củ? \u003ca href=\"\/vi\/collections\/potatoes-root-vegetables\"\u003eXem bộ sưu tập Khoai \u0026amp; Củ\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48632349720863,"sku":"A0735745755259","price":24.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/c71b813236366c9e5a994c9564f41dd4.jpg?v=1724144137"},{"product_id":"fresh-radishes-1-bunch","title":"Củ Cải Đỏ (Radish) 1 bó – giòn ngọt, cay nhẹ","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#0f172a;line-height:1.6;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;margin-top:16px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;line-height:1.2;font-weight:800;\"\u003eCủ cải tươi - 1 bó\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eCủ cải giòn, cay nhẹ, màu tươi — dùng trộn salad, muối chua nhanh hoặc xào sơ.\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:10px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eGiòn, có vị cay thanh giúp món ăn thêm tươi vị.\u003c\/li\u003e\n    \u003cli\u003eCó thể ăn sống, xào sơ, nướng hoặc muối chua nhanh.\u003c\/li\u003e\n    \u003cli\u003eLá củ cải cũng ăn được, có vị cay nhẹ — cho vào mì hoặc xào đến vừa mềm.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr;gap:14px;\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;font-size:15px;margin:0 0 6px;\"\u003eSalad củ cải giòn với mè–nước tương\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eCắt củ cải thành lát mỏng, trộn với chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\" style=\"color:var(--brand);\"\u003egiấm thơm Zhenjiang\u003c\/a\u003e, một ít \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003enước tương nhạt\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:var(--brand);\"\u003ehành lá\u003c\/a\u003e cắt lát. Thêm vài giọt dầu mè và hạt rang.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;font-size:15px;margin:0 0 6px;\"\u003eCủ cải muối chua nhanh ăn cùng mì\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eTrộn củ cải cắt lát mỏng với muối, đường rồi đổ ngập bằng \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003egiấm gạo trắng\u003c\/a\u003e đã làm ấm. Để 10–15 phút. Cho lên \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:var(--brand);\"\u003ebún gạo\u003c\/a\u003e cùng rau thơm và dầu ớt.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;font-size:15px;margin:0 0 6px;\"\u003eCủ cải xào tỏi với đậu hũ \u0026amp; dầu hào\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eCắt củ cải làm đôi hoặc tư, xào nhanh với \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\" style=\"color:var(--brand);\"\u003etỏi\u003c\/a\u003e và những miếng \u003ca href=\"\/vi\/products\/fresh-ever-green-dried-tofu-4-pieces-approximately-400g\" style=\"color:var(--brand);\"\u003eđậu hũ khô\u003c\/a\u003e. Thêm một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003edầu hào\u003c\/a\u003e và chút nước, xào 2–4 phút đến vừa mềm.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;font-size:15px;margin:0 0 6px;\"\u003eCanh củ cải \u0026amp; nấm hương \u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003eMón nước\u003c\/span\u003e\n\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eNấu liu riu củ cải cắt múi và \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\" style=\"color:var(--brand);\"\u003enấm hương\u003c\/a\u003e cắt lát trong \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\" style=\"color:var(--brand);\"\u003enước dùng gà trong\u003c\/a\u003e 5–8 phút; thêm tiêu trắng và hành lá lúc cuối.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n  \u003cul style=\"margin:10px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eCắt phần lá để riêng, giữ lại để xào nhanh với tỏi hoặc cho vào mì.\u003c\/li\u003e\n    \u003cli\u003eMuốn lát củ cải giòn hơn, ngâm nước đá 5–10 phút rồi để thật ráo.\u003c\/li\u003e\n    \u003cli\u003eCắt đôi hoặc tư khi xào; giữ lửa lớn để củ cải còn giòn.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eThử thêm một ít \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003edầu mè nguyên chất\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haday-golden-label-light-soy-sauce-1-28l\" style=\"color:var(--brand);\"\u003enước tương nhạt\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003enước tương đen\u003c\/a\u003e. Muốn thêm đạm, dùng \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"color:var(--brand);\"\u003eđậu hũ truyền thống\u003c\/a\u003e hoặc thêm vị bùi thơm với \u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\" style=\"color:var(--brand);\"\u003enấm bào ngư\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;display:flex;justify-content:space-between;align-items:center;gap:12px;\"\u003e\n  \u003cdiv\u003e\n    \u003ch3 style=\"margin:0 0 6px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n    \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXem thêm các loại củ giòn, cay nhẹ và phù hợp nấu canh.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003ca href=\"\/vi\/collections\/radish\" style=\"color:var(--brand);font-weight:700;border:1px solid #e2e8f0;padding:10px 14px;border-radius:12px;background:#fff;\"\u003eXem tất cả các loại củ cải →\u003c\/a\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48800945701151,"sku":"A0735745755310","price":2.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/A0735745755310.jpg?v=1724308104"},{"product_id":"ming-fa-frozen-young-taro-400g","title":"Khoai môn non Ming Fa 400 g – đông lạnh tiện nấu chè \u0026 canh","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;color:#0f172a;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.6;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;margin-top:0;\"\u003e\u003ch1 style=\"margin:0;font-size:24px;line-height:1.25;\"\u003eMing Fa Khoai môn non đông lạnh - 400g\u003c\/h1\u003e\n\u003cp style=\"margin:8px 0 0;color:#475569;font-size:14px;\"\u003eKhoai môn non đã gọt vỏ và cấp đông nhanh, tiện chế biến — ruột bùi mịn, giữ miếng khi nấu canh, kho và xào.\u003c\/p\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eBùi mịn, ngọt nhẹ, giữ hương vị khoai môn quen thuộc.\u003c\/li\u003e\n\u003cli\u003eĐã gọt vỏ và chia phần, không cần sơ chế; nấu trực tiếp từ đông lạnh.\u003c\/li\u003e\n\u003cli\u003eGiữ nguyên miếng khi nấu liu riu hoặc xào nhẹ, không dễ bị nhũn.\u003c\/li\u003e\n\u003cli\u003eDùng ăn lẩu, nấu hầm, xào hoặc nấu chè nước cốt dừa.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n\u003col style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eCanh khoai môn \u0026amp; đậu hũ\u003c\/strong\u003e\u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003e Món nước\u003c\/span\u003e — Nấu liu riu khoai môn trong \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong\u003c\/a\u003e cùng những lát \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\"\u003eđậu hũ truyền thống\u003c\/a\u003e và vài lát \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng tươi\u003c\/a\u003e đến vừa mềm (8–12 phút). Thêm chút tiêu trắng lúc cuối.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKhoai môn xào dầu hào và hẹ\u003c\/strong\u003e — Luộc sơ khoai môn 3–4 phút, áp chảo đến vàng. Đảo cùng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-bundle-of-chives-pack-of-2\"\u003ehẹ tươi\u003c\/a\u003e và ít \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi\u003c\/a\u003e băm, xào trên chảo nóng với \u003ca href=\"\/vi\/products\/88-canola-oil-1l\"\u003edầu cải\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKhoai môn cắt khối cho món lẩu\u003c\/strong\u003e — Cho khoai môn vào nồi \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003enước cốt lẩu cà chua\u003c\/a\u003e đang sôi nhẹ, nấu 6–10 phút cùng \u003ca href=\"\/vi\/products\/frozen-northern-style-wagyu-beef-rolls-225g\"\u003ethịt bò wagyu cuộn\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003enấm kim châm\u003c\/a\u003e.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKhoai môn kho ba rọi heo với nước tương\u003c\/strong\u003e — Áp chảo cho vàng mặt \u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-belly-slices-3mm-500g\"\u003eba rọi heo cắt lát\u003c\/a\u003e; thêm khoai môn, chút \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003enước tương đen\u003c\/a\u003e và nước dùng loãng, kho liu riu đến khi mềm và sốt bóng.\u003c\/li\u003e\n\u003c\/ol\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eNấu trực tiếp từ đông lạnh khi làm canh hoặc món hầm; nếu áp chảo hay xào thì rã đông sơ, thấm thật khô để dễ vàng mặt.\u003c\/li\u003e\n\u003cli\u003eLuộc sơ 3–4 phút trước khi xào để khoai giữ nguyên khối.\u003c\/li\u003e\n\u003cli\u003eNấu lửa nhỏ đến vừa mềm (8–12 phút tùy kích cỡ); tránh đun sôi mạnh hoặc đảo quá nhiều.\u003c\/li\u003e\n\u003cli\u003eLuôn nấu chín kỹ trước khi ăn.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003eTỏi\u003c\/a\u003e \u0026amp; \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\"\u003eNước tương\u003c\/a\u003e \u0026amp; \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli\u003eThêm vị đậm đà với \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-300g\"\u003enấm hương\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli\u003eNước dùng cho món canh: \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/haidilao-mushroom-flavor-hot-pot-seasoning-150g\"\u003egia vị lẩu nấm\u003c\/a\u003e\n\u003c\/li\u003e\n\u003cli\u003eKết hợp thêm đạm: đậu hũ cứng, ba rọi heo, thịt bò cắt lát\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 12px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;\"\u003e\n\u003ca href=\"\/vi\/products\/fresh-small-taro-1kg\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:14px;color:#0f172a;background:#fff;\"\u003e\u003cdiv style=\"font-weight:600;\"\u003eKhoai môn củ nhỏ tươi - 1kg\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eLựa chọn khoai tươi\u003c\/div\u003e\u003c\/a\u003e\n\u003ca href=\"\/vi\/products\/fresh-selection-of-fresh-lotus-root-various-sizes-available\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:14px;color:#0f172a;background:#fff;\"\u003e\u003cdiv style=\"font-weight:600;\"\u003eCủ sen tươi 1–1.2kg\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eGiòn ngon khi xào\u003c\/div\u003e\u003c\/a\u003e\n\u003ca href=\"\/vi\/products\/fresh-soil-free-potatoes-approximately-1kg\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:14px;color:#0f172a;background:#fff;\"\u003e\u003cdiv style=\"font-weight:600;\"\u003eKhoai tây sạch đất, 1kg\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eNguyên liệu quen thuộc hằng ngày\u003c\/div\u003e\u003c\/a\u003e\n\u003ca href=\"\/vi\/products\/fresh-golden-sweet-potatoes-approximately-1kg\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:14px;color:#0f172a;background:#fff;\"\u003e\u003cdiv style=\"font-weight:600;\"\u003eKhoai lang 1kg\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#64748b;\"\u003eNướng hoặc hấp\u003c\/div\u003e\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"margin-top:12px;\"\u003e\u003ca href=\"\/vi\/collections\/potatoes-root-vegetables\" style=\"color:#DB3A35;font-weight:600;\"\u003eXem tất cả các loại khoai củ →\u003c\/a\u003e\u003c\/div\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n","brand":"Minfa","offers":[{"title":"Default Title","offer_id":48801283735839,"sku":"6920084998274","price":3.39,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/d41caca64cfd5c65e125aa011b43339bwV1YN5bKCB4R8QC1ZUxlfl0OGHRxcWOP_c9f816f7-cc95-413c-b48b-5cdc19a4dc78.jpg?v=1718326724"},{"product_id":"jun-frozen-shredded-burdock-400g","title":"Jun Củ Ngưu Bàng Cắt Sợi 400 g – đông lạnh tiện xào \u0026 nấu","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;color:#0f172a;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.55;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;margin-top:16px;\"\u003e\n    \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eJun Ngưu bàng cắt sợi đông lạnh - 400g\u003c\/h1\u003e\n    \u003cp style=\"margin:0;color:#64748b;font-size:14px;\"\u003eCòn gọi là Gobo\u003c\/p\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eĐặc điểm sản phẩm\u003c\/h3\u003e\n    \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003eGobo đã cắt sợi, lấy từ ngăn đông cho thẳng vào chảo — tiện cho bữa cơm ngày bận rộn.\u003c\/li\u003e\n      \u003cli\u003eHương bùi ngọt quen thuộc, giữ độ giòn khi xào hoặc nấu canh.\u003c\/li\u003e\n      \u003cli\u003eCắt sợi đều, giúp món kinpira, đồ ăn kèm cơm donburi và món mì có độ chín đồng đều.\u003c\/li\u003e\n      \u003cli\u003eNhanh chín; hợp với nước tương, mè và chút ớt hoặc giấm.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n    \u003col style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli style=\"margin-bottom:10px;\"\u003e\n        \u003cstrong\u003eNgưu bàng xào kinpira gobo\u003c\/strong\u003e — Xào trực tiếp từ đông lạnh với chút \u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" style=\"color:var(--brand);\"\u003enước tương\u003c\/a\u003e, ít \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003edầu mè\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-carrots-approximately-1kg\" style=\"color:var(--brand);\"\u003ecà rốt\u003c\/a\u003e cắt sợi; thêm ớt khô hoặc mè lúc cuối.\n      \u003c\/li\u003e\n      \u003cli style=\"margin-bottom:10px;\"\u003e\n        \u003cstrong\u003eCanh kiểu miso với đậu hũ \u0026amp; nấm kim châm\u003c\/strong\u003e\u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003e Món nước\u003c\/span\u003e — Nấu liu riu ngưu bàng trong \u003ca href=\"\/vi\/products\/daisho-miso-sumo-hot-pot-soup-base-750g\" style=\"color:var(--brand);\"\u003enước cốt lẩu miso\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\" style=\"color:var(--brand);\"\u003eđậu hũ non\u003c\/a\u003e cắt khối và một ít \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003enấm kim châm\u003c\/a\u003e để có tô canh thanh nhẹ, ấm bụng.\n      \u003c\/li\u003e\n      \u003cli style=\"margin-bottom:10px;\"\u003e\n        \u003cstrong\u003eCơm thịt bò \u0026amp; ngưu bàng (kiểu gyudon)\u003c\/strong\u003e — Xào nhanh cùng \u003ca href=\"\/vi\/products\/angus-prime-shredded-beef-500g\" style=\"color:var(--brand);\"\u003ethịt bò cắt sợi\u003c\/a\u003e, hành tây và \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003enước tương nhạt\u003c\/a\u003e; múc lên \u003ca href=\"\/vi\/products\/arawana-northeast-rice-5kg\" style=\"color:var(--brand);\"\u003ecơm nóng\u003c\/a\u003e.\n      \u003c\/li\u003e\n      \u003cli style=\"margin-bottom:0;\"\u003e\n        \u003cstrong\u003eSalad mì soba với đọt đậu Hà Lan\u003c\/strong\u003e — Trộn \u003ca href=\"\/vi\/products\/j-basket-japanese-buckwheat-noodles-720g\" style=\"color:var(--brand);\"\u003emì soba kiều mạch\u003c\/a\u003e đã nấu chín với ngưu bàng chần, \u003ca href=\"\/vi\/products\/fresh-pea-shoots-approximately-300g\" style=\"color:var(--brand);\"\u003eđọt đậu Hà Lan\u003c\/a\u003e và chút \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003egiấm gạo\u003c\/a\u003e cùng dầu mè.\n      \u003c\/li\u003e\n    \u003c\/ol\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h3\u003e\n    \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003eNấu trực tiếp từ đông lạnh hoặc rã đông nhanh dưới nước lạnh; để ráo và bóp nhẹ cho bớt nước.\u003c\/li\u003e\n      \u003cli\u003eKhi xào, dùng lửa vừa lớn, đảo 3–5 phút để vừa chín tới, còn giòn.\u003c\/li\u003e\n      \u003cli\u003eGia vị phù hợp: nước tương, mirin hoặc đường, dầu mè, tỏi hoặc gừng và chút ớt.\u003c\/li\u003e\n      \u003cli\u003eTránh nấu quá lâu — giữ độ giòn nhẹ để ăn ngon hơn.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý kết hợp\u003c\/h3\u003e\n    \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003e\u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" style=\"color:var(--brand);\"\u003eKikkoman Nước tương đa dụng\u003c\/a\u003e\u003c\/li\u003e\n      \u003cli\u003e\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003eDầu mè nguyên chất\u003c\/a\u003e\u003c\/li\u003e\n      \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-carrots-approximately-1kg\" style=\"color:var(--brand);\"\u003eCà rốt 1kg\u003c\/a\u003e\u003c\/li\u003e\n      \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\" style=\"color:var(--brand);\"\u003eĐậu hũ non\u003c\/a\u003e\u003c\/li\u003e\n      \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003eNấm kim châm\u003c\/a\u003e\u003c\/li\u003e\n      \u003cli\u003e\u003ca href=\"\/vi\/products\/arawana-northeast-rice-5kg\" style=\"color:var(--brand);\"\u003eArawana Gạo Đông Bắc\u003c\/a\u003e\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;display:flex;align-items:center;justify-content:space-between;gap:12px;\"\u003e\n    \u003cdiv\u003e\n      \u003ch3 style=\"margin:0 0 6px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng loại\u003c\/h3\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXem thêm các loại củ và rau để xào, nấu canh hoặc kho.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003ca href=\"\/vi\/collections\/potatoes-root-vegetables\" style=\"color:var(--brand);font-weight:700;border:1px solid #e2e8f0;background:#fff;border-radius:999px;padding:10px 14px;white-space:nowrap;\"\u003eXem Khoai \u0026amp; Củ →\u003c\/a\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGiao hàng \u0026amp; thời gian nhận\u003c\/h3\u003e\n\u003cp style=\"margin:6px 0 10px;color:#334155;font-size:14px;\"\u003eBạn có thể \u003cstrong\u003etheo dõi\u003c\/strong\u003e vị trí của người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng. Bạn có thể nhận hàng sớm nhất vào \u003cstrong\u003engày hôm sau\u003c\/strong\u003e (áp dụng cho phần lớn khu vực tại Sydney).\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth style=\"text-align:left;padding:10px;border-right:1px solid #e5e7eb;background:#f8fafc;\"\u003eThời gian đặt hàng\u003c\/th\u003e\n\u003cth style=\"text-align:left;padding:10px;background:#f8fafc;\"\u003eThời gian nhận hàng\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;border-right:1px solid #e5e7eb;\"\u003eHôm nay\u003c\/td\u003e\n\u003ctd style=\"padding:12px;border-top:1px solid #e5e7eb;\"\u003e\n\u003cstrong\u003eNgày hôm sau (2 lựa chọn):\u003c\/strong\u003e\u003cul style=\"margin:6px 0 0 18px;\"\u003e\n\u003cli\u003e11:30AM – 06:30PM\u003c\/li\u003e\n\u003cli\u003e05:00PM – 11:00PM\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp style=\"color:#a9a9a9;font-size:12px;margin:10px 0 0;\"\u003e* Hủy đơn sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eXem tại đây\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp style=\"margin:8px 0 0;color:#334155;font-size:14px;\"\u003eChi tiết: \u003ca href=\"\/vi\/pages\/delivery-information\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eThông tin giao hàng\u003c\/a\u003e.\u003c\/p\u003e\u003c\/section\u003e\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003ePhí giao hàng\u003c\/h3\u003e\n\u003cp style=\"font-size:13px;color:#666;margin:0 0 8px\"\u003eMỗi đơn hàng có một khoản phí dịch vụ nhỏ. Bạn vui lòng xem \u003ca href=\"\/vi\/pages\/delivery-information\"\u003ethông tin giao hàng\u003c\/a\u003e để biết mức phí hiện hành.\u003c\/p\u003e\n\u003ctable style=\"width:100%;border-collapse:collapse;border:1px solid #e5e7eb;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e\u003cstrong\u003eMiễn phí\u003c\/strong\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$4.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e5e7eb;border-top:1px solid #e5e7eb;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e5e7eb;\"\u003e$7.99 \u003cspan style=\"color:#999;font-size:12px\"\u003e(trước đây $10)\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/section\u003e\n\u003c\/div\u003e\n\n\n\n\n\n\n\n\n\n\u003cscript\u003e\n\/* DESC ENHANCER JS v1 *\/\n(function(){\n  const root = document.getElementById('umall-desc');\n  if(!root) return;\n\n  const handleFromHref = (href)=\u003e{\n    try{ const u = new URL(href, location.origin); const parts=u.pathname.split('\/').filter(Boolean); const i=parts.findIndex(p=\u003ep==='products'); if(i\u003e=0\u0026\u0026parts[i+1]) return parts[i+1]; }catch(e){}\n    return null;\n  };\n  const money = (cents)=\u003e{ if(window.Shopify \u0026\u0026 Shopify.formatMoney) return Shopify.formatMoney(cents, \"A${{amount}}\"); return typeof cents==='number' ? 'A$'+(cents\/100).toFixed(2) : ''; };\n  const buildProdCard = (handle)=\u003e{ const a=document.createElement('a'); a.className='um-card'; a.href=\"\/vi\/products\"+handle; a.setAttribute('data-handle',handle); a.innerHTML='\u003cdiv class=\"um-imgbox\"\u003e\u003cimg alt=\"'+handle+'\" loading=\"lazy\"\/\u003e\u003cspan class=\"um-badge\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"um-meta\"\u003e\u003cdiv class=\"um-title\"\u003e'+handle.replace(\/-\/g,' ')+'\u003c\/div\u003e\u003cdiv class=\"um-price\"\u003e\u003c\/div\u003e\u003c\/div\u003e'; return a; };\n  const hydrate = async (a)=\u003e{ const h=a.getAttribute('data-handle'); try{ const r=await fetch('\/products\/'+h+'.js',{credentials:'same-origin'}); if(!r.ok) return; const p=await r.json(); const img=a.querySelector('img'); if(p.images\u0026\u0026p.images[0]) img.src=p.images[0]; const t=a.querySelector('.um-title'); t.textContent=p.title||t.textContent; const vs=(p.variants||[]); const avail=vs.filter(v=\u003ev.available); const arr=avail.length?avail:vs; if(arr.length){ const min=Math.min(...arr.map(v=\u003ev.price)); const maxCompare=Math.max(...arr.map(v=\u003ev.compare_at_price||0)); const price=a.querySelector('.um-price'); price.textContent=''; const cur=document.createElement('span'); cur.textContent=money(min); price.appendChild(cur); if(maxCompare \u0026\u0026 maxCompare\u003emin){ const s=document.createElement('s'); s.textContent=money(maxCompare); price.appendChild(document.createTextNode(' ')); price.appendChild(s); const badge=a.querySelector('.um-badge'); const off=Math.round((1-min\/maxCompare)*100); badge.textContent='-'+off+'%'; badge.style.display='inline-block'; } } }catch(e){} };\n\n  const ensureAfter = (refNode, node)=\u003e{ if(!refNode || !node) return; if(node.parentElement) return; refNode.parentElement.insertBefore(node, refNode.nextSibling); };\n\n  \/\/ How to enjoy → 卡片（保留原内容；隐藏原块；标题统一“Recipes with this product”）\n  try{\n    \/\/ 1) 更鲁棒地找到标题（h2\/h3\/h4）\n    const enjoyH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(how to enjoy|ways to enjoy|serving ideas|recipes with this product|食用建议|食用灵感|食法)\/i.test(h.textContent));\n    if(enjoyH){\n      const container = enjoyH.parentElement;\n      \/\/ 2) 就近查找列表或段落（同容器或下一个兄弟）\n      let listEl = container.querySelector('ol, ul');\n      if(!listEl){ const sib = enjoyH.nextElementSibling; if(sib){ listEl = sib.querySelector \u0026\u0026 sib.querySelector('ol, ul'); } }\n\n      \/\/ 3) 容器若不存在则创建\n      let cardsHost = container.querySelector('#um-recipes-cards');\n      if(!cardsHost){ cardsHost=document.createElement('div'); cardsHost.id='um-recipes-cards'; cardsHost.className='um-recipes'; ensureAfter(listEl||enjoyH, cardsHost); }\n      let prodHost = container.querySelector('#um-recipes-products');\n      if(!prodHost){ prodHost=document.createElement('div'); prodHost.id='um-recipes-products'; prodHost.className='um-slider'; ensureAfter(cardsHost, prodHost); }\n\n      const links = new Set();\n      let items = [];\n      if(listEl){ items = Array.from(listEl.children).filter(n=\u003en.tagName==='LI'); }\n      \/\/ 4) 若没有列表，尝试用同容器的段落或“网格DIV\/ARTICLE”作为卡片项\n      if(items.length === 0){\n        let ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n        if(ps.length \u003c 2){ const sib = enjoyH.nextElementSibling; if(sib){ ps = Array.from(sib.querySelectorAll(':scope \u003e p')); } }\n        items = ps;\n      }\n      \/\/ 5) 同容器下寻找“网格容器”（含多个子块，且子块内有 h4\/strong）\n      let gridToHide = null;\n      if(items.length === 0){\n        const ch = Array.from(container.children || []);\n        for(const el of ch){\n          if(el === enjoyH) continue;\n          if(el.children \u0026\u0026 el.children.length \u003e= 2){\n            const first = el.children[0];\n            if((first.querySelector \u0026\u0026 first.querySelector('h3, h4, h5, strong, b, div[style*=\"font-weight:700\"]'))){\n              items = Array.from(el.children);\n              gridToHide = el;\n              break;\n            }\n          }\n        }\n      }\n      \/\/ 6) 仍然没有，则看紧跟标题的下一个块（如显示为卡片的 div\/article 列表）\n      if(items.length === 0){\n        const sib = enjoyH.nextElementSibling;\n        if(sib){\n          const children = Array.from(sib.children || []);\n          if(children.length \u003e= 2){ items = children; gridToHide = sib; }\n        }\n      }\n\n      if(items.length){\n        items.forEach((node, idx)=\u003e{\n          const card=document.createElement('article'); card.className='um-rcard';\n          const titleNode = node.querySelector \u0026\u0026 node.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b, a');\n          const h4=document.createElement('h4'); h4.textContent = titleNode ? (titleNode.textContent.trim()||('Recipe '+(idx+1))) : ('Recipe '+(idx+1));\n          const clone = node.cloneNode(true);\n          const rm = clone.querySelector \u0026\u0026 clone.querySelector('h3, h4, h5, div[style*=\"font-weight:700\"], strong, b'); if(rm) rm.remove();\n          const body=document.createElement('div'); while(clone.firstChild){ body.appendChild(clone.firstChild); }\n          card.appendChild(h4); card.appendChild(body); cardsHost.appendChild(card);\n          (node.querySelectorAll ? node.querySelectorAll('a[href]') : []).forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h) links.add(h); });\n        });\n        \/\/ 统一标题并隐藏原内容块\n        enjoyH.textContent = 'Recipes with this product';\n        if(listEl){ listEl.style.display='none'; }\n        else if(gridToHide){ gridToHide.style.display='none'; }\n        else {\n          \/\/ 隐藏直接段落（避免把其它段落隐藏过多，仅隐藏紧邻的）\n          const ps = Array.from(container.querySelectorAll(':scope \u003e p'));\n          ps.forEach(p=\u003e{ p.style.display='none'; });\n        }\n      }\n      if(prodHost \u0026\u0026 links.size){ Array.from(links).forEach(h=\u003e{ const a=buildProdCard(h); prodHost.appendChild(a); hydrate(a); }); }\n    }\n  }catch(e){}\n\n  \/\/ Pairs well → 滑动卡片（并将标题统一为 “Pairs well with these products”）\n  try{\n    const pairsH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(pairs\\s*well|pairswell|配搭建议|搭配推荐|搭配)\/i.test(h.textContent));\n    if(pairsH){\n      const section=pairsH.parentElement; const ul=section.querySelector('ul');\n      \/\/ 统一标题文案\n      pairsH.textContent = 'Pairs well with these products';\n      let host=section.querySelector('#um-pairs-slider');\n      if(!host){ host=document.createElement('div'); host.id='um-pairs-slider'; host.className='um-slider'; ensureAfter(ul||pairsH, host); }\n      const unique=new Set();\n      \/\/ 允许 p 段落或任意容器中的产品链接\n      section.querySelectorAll('a[href]').forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)) unique.add(h); });\n      unique.forEach(h=\u003e{ const card=buildProdCard(h); host.appendChild(card); hydrate(card); });\n    }\n  }catch(e){}\n\n  \/\/ More in this category → 条件滑动，成功后隐藏原标题与列表，把 Explore CTA 放到滑动条上方\n  try{\n    const moreH = Array.from(root.querySelectorAll('h2,h3,h4')).find(h=\u003e\/(more in this category|同类推荐|更多此分类)\/i.test(h.textContent));\n    if(moreH){ const section=moreH.parentElement; const ul=section.querySelector('ul'); let host=section.querySelector('#um-more-slider'); if(!host){ host=document.createElement('div'); host.id='um-more-slider'; host.className='um-slider'; ensureAfter(ul||moreH, host); } if(ul){ const links=ul.querySelectorAll('a[href]'); if(links.length\u003e=2){ const unique=new Set(); links.forEach(a=\u003e{ const h=handleFromHref(a.getAttribute('href')); if(h \u0026\u0026 !unique.has(h)){ unique.add(h); const card=buildProdCard(h); host.appendChild(card); hydrate(card); } }); if(host.children.length){ ul.style.display='none'; moreH.style.display='none'; const ctaWrap = Array.from(section.querySelectorAll('div')).find(d=\u003ed.querySelector('a[href^=\"\/collections\/\"]')); if(ctaWrap){ section.insertBefore(ctaWrap, host); } } } } }\n  }catch(e){}\n})();\n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n","brand":"Jun","offers":[{"title":"Default Title","offer_id":49099041603871,"sku":"A6945904809059","price":5.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_e1d8ab17-75be-45ec-ba7c-6230c6e89af3.jpg?v=1747018920"},{"product_id":"white-yam-0-9-1kg","title":"Khoai mài trắng - 0.9kg","description":"\u003cp\u003eKhoai mài trắng tươi, giàu dưỡng chất, dùng được cho nhiều món. Phần 0.9kg thích hợp nấu canh, hầm và các món khác.\u003c\/p\u003e\u003ch2\u003eĐiểm nổi bật của sản phẩm:\u003c\/h2\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eTươi và giàu dưỡng chất:\u003c\/strong\u003e Khoai mài trắng chất lượng cao, giàu dưỡng chất.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNhiều cách chế biến:\u003c\/strong\u003e Dùng nấu canh, hầm và nhiều món khác.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eQuy cách:\u003c\/strong\u003e 0.9kg, dùng được cho nhiều công thức.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eĐóng gói không hút chân không:\u003c\/strong\u003e Khoai tươi, sẵn sàng để chế biến.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDễ bảo quản:\u003c\/strong\u003e Bảo quản ở nhiệt độ phòng, tiện sử dụng.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":49410246508831,"sku":"A0735745757963","price":22.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/847b7595269008f15f8b553bbdf4e15euwUGcJDFzhGFCoTGbKDZYPrWOOyes3zA.jpg?v=1726909973"},{"product_id":"purple-yam-purple-flesh-1-1-1-3kg","title":"Khoai mỡ tím 1kg","description":"\u003cp\u003eLoại khoai mỡ tím rực rỡ này có ruột màu tím đậm cùng vị ngọt nhẹ, bùi, nổi bật trong cả món mặn lẫn món tráng miệng. Luộc, hấp, nướng hoặc nghiền để thêm màu sắc tự nhiên và kết cấu chắc bùi cho bữa ăn hằng ngày hoặc các công thức lấy cảm hứng từ ẩm thực châu Á.\u003c\/p\u003e\u003ch2\u003eĐiểm nổi bật của sản phẩm:\u003c\/h2\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eMàu sắc nổi bật:\u003c\/strong\u003e Ruột màu tím đậm giúp món ăn trông đẹp mắt.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNhiều cách sử dụng:\u003c\/strong\u003e Thích hợp để nướng, nghiền, làm bánh hoặc bào vào món tráng miệng.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKết cấu chắc bùi:\u003c\/strong\u003e Nhiều tinh bột và mềm mịn khi nấu chín, rất thích hợp để thay thế khoai tây.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eThích hợp làm món tráng miệng:\u003c\/strong\u003e Thường dùng trong bánh ngọt, bánh pudding và các loại nhân ngọt kiểu châu Á.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKích cỡ đầy đặn:\u003c\/strong\u003e 1kg.\u003c\/li\u003e\n\u003c\/ul\u003e\u003cdetails\u003e\u003csummary\u003eTừ khóa tìm kiếm\u003c\/summary\u003e\u003cp\u003e\u003csmall\u003eTừ khóa tìm kiếm: khoai mỡ tím, ube, khoai mỡ tím ngọt, khoai mỡ, 山药, 紫山药\u003c\/small\u003e\u003c\/p\u003e\u003c\/details\u003e","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":52638105567519,"sku":"A9202606151337","price":11.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/150bdd5d61bfeb9a2d27d3eb07c3cdebzQAywkn9aM6Eigl0B5N6BHCg2JGOuLWo.jpg?v=1782462798"}],"url":"https:\/\/www.umall.com.au\/vi\/collections\/taro-yam-root-vegetables\/lny2026.oembed","provider":"Umall - Australia's Largest Online Asian Supermarket","version":"1.0","type":"link"}