{"title":"Sản phẩm nấu lẩu tuyển chọn","description":"\u003csection\u003e\n  \u003cp\u003eĐồ thiết yếu và thịt lát nhúng lẩu cho các buổi họp mặt năm Ngọ 2026.\u003c\/p\u003e\n  \u003cp\u003e\u003ca href=\"\/vi\/collections\/lunar-new-year-2025\"\u003eVề trang năm Ngọ 2026 →\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/section\u003e\n","products":[{"product_id":"fresh-ever-green-smooth-tofu-approximately-300g","title":"Evergreen Đậu hũ non, 300g","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:20px;\"\u003e\n  \u003ch1 style=\"margin:0;font-size:26px;font-weight:800;\"\u003eEvergreen Đậu hũ non, 300g\u003c\/h1\u003e\n  \u003cp style=\"margin:8px 0 0;color:#334155;\"\u003eĐậu hũ mềm mịn như trứng hấp, dùng cho món lạnh, canh và món hấp mềm. Vị đậu nành thanh nhẹ, dễ kết hợp nhiều món.\u003c\/p\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_88ccd9e0-4500-40e8-a68b-648493d9b7b1.jpg?v=1745982966\" alt=\"Ever Green Silken Tofu 300g\" style=\"width:100%;max-height:360px;object-fit:cover;border-radius:12px;margin-top:12px;\"\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Điểm nổi bật của sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;\"\u003e\n    \u003cli\u003eMềm nhẹ, dễ xắn bằng muỗng, thích hợp dùng lạnh hoặc nấu canh thanh.\u003c\/li\u003e\n    \u003cli\u003eCung cấp đạm thực vật, vị thanh nhẹ, dễ ăn.\u003c\/li\u003e\n    \u003cli\u003eChế biến chỉ trong vài phút — không cần ép nước, chuẩn bị đơn giản mà vẫn mềm mịn.\u003c\/li\u003e\n    \u003cli\u003eHợp với nước tương, mè, gừng, giấm và cách nấu lửa nhẹ.\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      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ lạnh với nước tương–mè và hành lá \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\"\u003eThanh nhẹ \u0026amp; tươi mát\u003c\/span\u003e\n\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eXắn đậu hũ ra, rưới \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e và vài giọt \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\"\u003edầu mè\u003c\/a\u003e, rồi thêm \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá cắt nhuyễn\u003c\/a\u003e và gừng bào. Món ăn sẵn sàng sau 1–2 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;\"\u003eCanh đậu hũ non và nấm kim châm\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eNấu đậu hũ cắt khối cùng \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003enấm kim châm\u003c\/a\u003e trong nước dùng thanh pha từ \u003ca href=\"\/vi\/products\/cygnet-clear-soup-hot-pot-base-200g-mild-chinese-shabu-shabu-broth-seasoning\"\u003egia vị nước lẩu thanh\u003c\/a\u003e trong 2–4 phút. Thêm chút tiêu trắng và vài giọt dầu mè trước khi dùng.\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;\"\u003eTrứng \u0026amp; đậu hũ hấp tôm\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eTrộn đậu hũ non với \u003ca href=\"\/vi\/products\/pace-farm-free-range-eggs-12-extra-large-700g\"\u003etrứng đánh tan\u003c\/a\u003e, nêm nhẹ rồi đổ vào đĩa nông, cho lên trên \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\"\u003etôm king cắt nhỏ\u003c\/a\u003e. Hấp lửa nhẹ 10–12 phút đến khi vừa đông; thêm chút nước tương và dầu 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;\"\u003eTô đậu hũ với nước tương–giấm cay\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eKhuấy \u003ca href=\"\/vi\/products\/dl-black-soybean-brewed-light-soy-sauce-480ml-limited-import\"\u003enước tương nhạt\u003c\/a\u003e với chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\u003c\/a\u003e và một muỗng \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003eớt giòn ngâm dầu\u003c\/a\u003e. Rưới lên đậu hũ, thêm hành lá và mè rang.\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 chế biến\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;\"\u003e\n    \u003cli\u003eMở hộp và chắt nước nhẹ tay; muốn cắt khối gọn, cắt ngay trong hộp rồi nhẹ nhàng trút ra.\u003c\/li\u003e\n    \u003cli\u003eTránh đảo mạnh — dùng muỗng nhấc và đẩy nhẹ; cho nước sốt vào sau cùng.\u003c\/li\u003e\n    \u003cli\u003eVới món nóng, cho đậu hũ vào nước dùng vừa sôi nhẹ trong 2–4 phút để nóng đều mà không bị bể.\u003c\/li\u003e\n    \u003cli\u003eLàm sánh nước sốt riêng bằng bột bắp pha nước rồi mới rưới lên đậu hũ để giữ độ mềm mị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 ý dùng kèm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\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\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eLee Kum Kee Dầu mè nguyên chất 207ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003eBó hành lá\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003eNấm kim châm\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\"\u003eEvergreen Mì Yangchun 500g\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;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;\"\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;color:inherit;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ truyền thống, 500g\u003c\/div\u003e\n      \u003cdiv style=\"color:#64748b;font-size:13px;\"\u003eĐậu hũ miếng dùng cho các món xào hằng ngày\u003c\/div\u003e\n    \u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-aged-tofu-approximately-900g\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;color:inherit;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ cứng truyền thống, 900g\u003c\/div\u003e\n      \u003cdiv style=\"color:#64748b;font-size:13px;\"\u003eKết cấu chắc, hợp với món kho\u003c\/div\u003e\n    \u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-tofu-puffs-approximately-150g\" style=\"display:block;border:1px solid #e2e8f0;border-radius:12px;padding:12px;color:inherit;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ chiên phồng 150g\u003c\/div\u003e\n      \u003cdiv style=\"color:#64748b;font-size:13px;\"\u003eHợp nấu lẩu và cà ri\u003c\/div\u003e\n    \u003c\/a\u003e\n  \u003c\/div\u003e\n  \u003cdiv style=\"margin-top:12px;\"\u003e\n    \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"color:#DB3A35;\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành →\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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 #e2e8f0;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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151479386399,"sku":"A9323536580015","price":2.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_88ccd9e0-4500-40e8-a68b-648493d9b7b1.jpg?v=1745982966"},{"product_id":"fresh-ever-green-tofu-approximately-900g","title":"Evergreen Đậu hũ nguyên bản - độ cứng vừa 900g","description":"\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\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\u003cdiv id=\"umall-desc\" style=\"--brand: #DB3A35; max-width: 860px; margin: 0 auto; padding: 16px;\"\u003e\n\u003csection style=\"border: 1px solid #e2e8f0; background: #fff; border-radius: 16px; padding: 20px;\"\u003e\n\u003ch2 style=\"margin: 0 0 6px; font-size: 22px; font-weight: 800; color: #0f172a;\"\u003eEvergreen Đậu hũ 900g\u003c\/h2\u003e\n\u003cdiv style=\"color: #64748b; font-size: 14px;\"\u003eCòn gọi là đậu hũ\u003c\/div\u003e\n\u003cdiv style=\"color: #64748b; font-size: 14px;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/section\u003e\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: bold;\"\u003eĐiểm nổi bật của sản phẩm\u003c\/h3\u003e\n\u003cul style=\"margin: 8px 0 0 18px; color: #334155; font-size: 14px; line-height: 1.6;\"\u003e\n\u003cli\u003eVị thanh nhẹ, dễ thấm nước sốt và gia vị thơm.\u003c\/li\u003e\n\u003cli\u003eMiếng đậu hũ 900g đầy đặn—hợp bữa cơm gia đình, chuẩn bị bữa ăn hoặc nấu lẩu.\u003c\/li\u003e\n\u003cli\u003eDễ dùng cho món hấp, chiên áp chảo, xào, kho hoặc canh.\u003c\/li\u003e\n\u003cli\u003eĐạm thực vật dùng được cho món Á truyền thống lẫn các món ăn tô hiện đại.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/section\u003e\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: bold;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n\u003cdiv style=\"display: grid; gap: 14px;\"\u003e\n\u003cdiv\u003e\n\u003ch4 style=\"margin: 0 0 4px; font-size: 16px; font-weight: bold; color: #111827;\"\u003eĐậu hũ hấp sốt nước tương hành lá \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; color: #334155; font-size: 14px;\"\u003eHấp đậu hũ cắt lát dày, rồi rưới hỗn hợp nhẹ gồm \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá cắt nhuyễn\u003c\/a\u003e. Thêm vài giọt dầu mè nếu thích.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch4 style=\"margin: 0 0 4px; font-size: 16px; font-weight: bold; color: #111827;\"\u003eĐậu hũ xào bông cải xanh cho bữa tối\u003c\/h4\u003e\n\u003cp style=\"margin: 0; color: #334155; font-size: 14px;\"\u003eChiên áp chảo đậu hũ cắt khối đến vàng, đảo cùng \u003ca href=\"\/vi\/products\/fresh-broccoli-approximately-900g-1000g\"\u003ebông cải xanh\u003c\/a\u003e, tỏi và chút \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e. Xào lửa lớn trong 3–5 phút.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch4 style=\"margin: 0 0 4px; font-size: 16px; font-weight: bold; color: #111827;\"\u003eĐậu hũ mapo nhanh (kiểu nhà làm)\u003c\/h4\u003e\n\u003cp style=\"margin: 0; color: #334155; font-size: 14px;\"\u003eNấu đậu hũ trong nước sốt thơm gồm \u003ca href=\"\/vi\/products\/congbanlv-doubanjiang-broad-bean-chilli-paste-450g-sichuan-fermented-soybean-sauce\"\u003etương đậu ớt doubanjiang\u003c\/a\u003e, tỏi và một ít \u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-mince-500g-frozen\"\u003ethịt heo bằm\u003c\/a\u003e. Cuối cùng rưới chút \u003ca href=\"\/vi\/products\/chuan-lao-hui-sichuan-pepper-oil-210ml\"\u003edầu tiêu Tứ Xuyên\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch4 style=\"margin: 0 0 4px; font-size: 16px; font-weight: bold; color: #111827;\"\u003eLẩu cà chua đậu hũ và nấm\u003c\/h4\u003e\n\u003cp style=\"margin: 0; color: #334155; font-size: 14px;\"\u003eCho đậu hũ cắt miếng lớn vào \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003enước cốt lẩu cà chua\u003c\/a\u003e cùng \u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003enấm shimeji\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa non\u003c\/a\u003e để có món lẩu ấm bụng, dễ ăn cho cả nhà.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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: bold;\"\u003eMẹo chế biến\u003c\/h3\u003e\n\u003cul style=\"margin: 8px 0 0 18px; color: #334155; font-size: 14px; line-height: 1.6;\"\u003e\n\u003cli\u003eMuốn cạnh đậu hũ giòn hơn khi xào, thấm khô và áo một lớp bột bắp mỏng trước khi chiên áp chảo.\u003c\/li\u003e\n\u003cli\u003eCắt theo cách nấu: miếng lớn để hấp, khối 2–3 cm để xào và kho.\u003c\/li\u003e\n\u003cli\u003eChiên áp chảo trước trong chảo nóng 2–4 phút mỗi mặt để giữ kết cấu, rồi mới thêm nước sốt.\u003c\/li\u003e\n\u003cli\u003eCho đậu hũ vào gần cuối khi nấu canh hoặc lẩu, nấu sôi nhẹ để tránh bị bể.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/section\u003e\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: bold;\"\u003eGợi ý dùng kèm\u003c\/h3\u003e\n\u003cul style=\"margin: 8px 0 0 18px; color: #334155; font-size: 14px; line-height: 1.8;\"\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\"\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\"\u003eLee Kum Kee Dầu mè nguyên chất\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003eDầu ớt giòn với đậu phộng\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-1000g\"\u003eBún gạo Jiangxi (1kg)\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003eNấm hương\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-snow-pea-sprouts-160g\"\u003eRau mầm đậu Hà Lan\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/section\u003e\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: bold;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n\u003cul style=\"margin: 8px 0 10px 18px; color: #334155; font-size: 14px; line-height: 1.8;\"\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\"\u003eEvergreen Đậu hũ non, 300g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-brick-dried-tofu-approximately-650g\"\u003eEvergreen Đậu hũ cứng, 650g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-tofu-puffs-approximately-150g\"\u003eEvergreen Đậu hũ chiên phồng 150g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-dried-tofu-4-pieces-approximately-400g\"\u003eEvergreen Đậu hũ khô – 4 cái, 400g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/ever-green-fresh-regular-tofu-900g\"\u003eEvergreen Đậu hũ tươi thường – 900g\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp style=\"margin: 0; color: #334155; font-size: 14px;\"\u003e\u003ca href=\"\/vi\/collections\/tofu-soy-products\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành →\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/section\u003e\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: bold;\"\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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\n\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\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\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\n\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\n\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 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\n\u003c\/section\u003e\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: bold;\"\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ỏ. 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\n\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 #e2e8f0; 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\n\u003c\/table\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e","brand":"Evergreen","offers":[{"title":"Default Title","offer_id":48151479681311,"sku":"A9323536008885","price":4.39,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_c72ed85b-6aaf-444a-a39b-19dd6444dc48.jpg?v=1745982964"},{"product_id":"fresh-ever-green-chinese-style-tofu-approximately-500g","title":"Evergreen Đậu hũ truyền thống, 500g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:16px;color:#0f172a;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;\"\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:0;\"\u003e\n  \u003ch2 style=\"margin:0 0 6px;font-size:24px;font-weight:800;color:#0f172a;\"\u003eEvergreen Đậu hũ truyền thống, 500g\u003c\/h2\u003e\n  \u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eĐậu hũ miếng mềm mịn, giữ dáng khi xào, mềm mượt khi nấu canh và dễ thấm nước sốt.\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Điểm nổi bật của sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;line-height:1.7;\"\u003e\n    \u003cli\u003eVị đậu nành thanh dịu, hợp từ nước tương–gừng đến sốt mala cay.\u003c\/li\u003e\n    \u003cli\u003eĐộ cứng vừa: cắt khối để xào, cắt lát để chiên áp chảo hoặc nấu sôi nhẹ trong canh.\u003c\/li\u003e\n    \u003cli\u003eVị nhẹ, hợp nước sốt đậm đà — chỉ cần ướp sơ là đậu hũ thấm gia vị nhanh.\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  \u003col style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;line-height:1.7;\"\u003e\n    \u003cli style=\"margin:0 0 10px;\"\u003e\n      \u003cstrong\u003eĐậu hũ xào cải thìa \u0026amp; nấm hương với tỏi\u003c\/strong\u003e — Thấm khô đậu hũ, chiên áp chảo các khối đến vàng (3–4 phút), rồi đảo với nấm hương cắt lát và cải thìa giòn. Thêm nước tương nhạt và vài giọt dầu mè; đảo thêm 1–2 phút.\n      \u003cdiv style=\"margin-top:6px;color:#64748b;\"\u003e\n        Dùng thử với: \u003ca href=\"\/vi\/products\/fresh-hydroponically-grown-shanghai-bok-choy-1-bundle\" style=\"color:var(--brand);\"\u003eCải thìa Shanghai\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\" style=\"color:var(--brand);\"\u003eNấm hương\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003eNước tương nhạt\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003eDầu mè\u003c\/a\u003e\n      \u003c\/div\u003e\n    \u003c\/li\u003e\n    \u003cli style=\"margin:0 0 10px;\"\u003e\n      \u003cstrong\u003eCanh cà chua đậu hũ trứng\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 nước cốt lẩu cà chua với nước, thêm đậu hũ cắt lát và cải thảo (2–4 phút), rồi rót trứng đánh tan thành dòng; nêm tiêu trắng sau cùng.\n      \u003cdiv style=\"margin-top:6px;color:#64748b;\"\u003e\n        Dùng thử với: \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\" style=\"color:var(--brand);\"\u003eHaidilao Nước cốt lẩu cà chua\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-local-napa-cabbage-1-piece\" style=\"color:var(--brand);\"\u003eCải thảo\u003c\/a\u003e\n      \u003c\/div\u003e\n    \u003c\/li\u003e\n    \u003cli style=\"margin:0 0 10px;\"\u003e\n      \u003cstrong\u003eĐậu hũ lạnh sốt nước tương–hành lá\u003c\/strong\u003e — Rưới hỗn hợp nước tương nhạt, chút giấm gạo, chút đường và nhiều hành lá cắt nhỏ lên đậu hũ. Dùng làm món ăn kèm thanh mát.\n      \u003cdiv style=\"margin-top:6px;color:#64748b;\"\u003e\n        Dùng thử với: \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:var(--brand);\"\u003eHành lá\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003eGiấm gạo trắng\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" style=\"color:var(--brand);\"\u003eKikkoman Nước tương\u003c\/a\u003e\n      \u003c\/div\u003e\n    \u003c\/li\u003e\n    \u003cli style=\"margin:0 0 0;\"\u003e\n      \u003cstrong\u003eTô bún đậu hũ với nấm kim châm \u0026amp; cải ngọt\u003c\/strong\u003e — Nấu bún gạo (3–5 phút). Trụng nấm kim châm và cải ngọt (30–60 giây). Chan nước dùng nóng, thêm đậu hũ ấm và chút dầu hào.\n      \u003cdiv style=\"margin-top:6px;color:#64748b;\"\u003e\n        Dùng thử với: \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:var(--brand);\"\u003eBún gạo Jiangxi\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003eNấm kim châm\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-green-stemmed-vegetable-hearts-bundle\" style=\"color:var(--brand);\"\u003eCải ngọt\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003eDầu hào\u003c\/a\u003e\n      \u003c\/div\u003e\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 10px;font-size:18px;font-weight:700;\"\u003eMẹo chế biến\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;line-height:1.7;\"\u003e\n    \u003cli\u003eChắt nước rồi thấm khô nhẹ tay. Để đậu hũ chắc hơn khi xào, ép giữa các lớp khăn giấy dưới một chiếc đĩa nhẹ trong 10–15 phút.\u003c\/li\u003e\n    \u003cli\u003eChiên áp chảo với lớp dầu mỏng đến vàng rồi mới thêm sốt để giữ kết cấu.\u003c\/li\u003e\n    \u003cli\u003eKhi nấu canh, thêm đậu hũ gần cuối và nấu sôi nhẹ để lát đậu không bị bể.\u003c\/li\u003e\n    \u003cli\u003eƯớp sơ (10–20 phút) với nước tương, tỏi và chút dầu mè để đậu hũ vàng thơm khi chiê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;\"\u003eGợi ý dùng kèm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;line-height:1.7;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003eLee Kum Kee Dầu mè nguyên chất 207ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\" style=\"color:var(--brand);\"\u003eChois Nấm bào ngư - 400g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-snow-pea-sprouts-160g\" style=\"color:var(--brand);\"\u003eRau mầm đậu Hà Lan tươi - 160g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\" style=\"color:var(--brand);\"\u003eBull Head Nước dùng gà thanh 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;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;font-size:14px;color:#334155;\"\u003eXem thêm đậu hũ và sản phẩm từ đậu nành để nấu lẩu, xào hoặc chuẩn bị bữa ăn nhanh.\u003c\/p\u003e\n  \u003cp style=\"margin:10px 0 0;\"\u003e\u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"color:var(--brand);font-weight:700;\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành →\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151479845151,"sku":"A9323536008786","price":4.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_3648668a-94b9-44e1-80e1-077f7169a00c.jpg?v=1712383823"},{"product_id":"fresh-ever-green-aged-tofu-approximately-900g","title":"Evergreen Đậu hũ cứng truyền thống, 900g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 0;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:20px;\"\u003e\u003cdiv style=\"display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;\"\u003e\n\u003cdiv style=\"flex:1 1 280px;min-width:260px;\"\u003e\n\u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eEvergreen Đậu hũ cứng truyền thống, 900g\u003c\/h1\u003e\n\u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eMiếng đậu hũ 900g đầy đặn, giàu đạm, chắc theo kiểu truyền thống, hợp món xào, kho, nướng và canh.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex:0 0 220px;max-width:220px\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_5c2663a8-d3e5-485f-8882-ed93b430a2ff.jpg?v=1712383835\" alt=\"Ever Green Traditional Firm Tofu, 900g\" style=\"width:100%;height:auto;border-radius:12px;border:1px solid #e2e8f0\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch2 style=\"margin:0 0 10px;font-size:20px;font-weight:700;\"\u003eĐiểm nổi bật của sản phẩm\u003c\/h2\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eGiữ dáng khi chiên áp chảo, xào chảo lớn hoặc nấu trong nước sốt đậm đà.\u003c\/li\u003e\n\u003cli\u003eVị thanh nhẹ, dễ thấm gia vị ướp và nước dùng.\u003c\/li\u003e\n\u003cli\u003eĐạm thực vật hợp với gia vị thơm đậm (tỏi, gừng, hành lá) và các loại sốt quen thuộc (nước tương, dầu hào, giấm).\u003c\/li\u003e\n\u003cli\u003eMiếng đậu hũ 900g cho gia đình—chuẩn bị một lần để nấu nhiều món trong tuần.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch2 style=\"margin:0 0 10px;font-size:20px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h2\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;\"\u003e\n  \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n    \u003ch3 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ xào cải thìa với gừng tỏi\u003c\/h3\u003e\n    \u003cp style=\"margin:6px 0;color:#475569;font-size:14px;\"\u003eÉp nước, cắt khối rồi chiên áp chảo đậu hũ đến vàng. Đảo với gừng tỏi cắt lát, chút dầu hào và \u003ca href=\"\/vi\/products\/fresh-hydroponically-grown-shanghai-bok-choy-1-bundle\"\u003ecải thìa Shanghai vừa xào chín tới\u003c\/a\u003e. Dùng thử với \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi bóc vỏ\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng\u003c\/a\u003e, rưới chút \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e, và \u003ca href=\"\/vi\/products\/88-canola-oil-1l\"\u003edầu cải canola\u003c\/a\u003e. Xào trên chảo nóng trong 4-6 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    \u003ch3 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ kho nước tương với nấm hương \u0026amp; cải thìa non\u003c\/h3\u003e\n    \u003cp style=\"margin:6px 0;color:#475569;font-size:14px;\"\u003eChiên đậu hũ cắt khối đến vàng rồi nấu sôi nhẹ 6-10 phút với \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương cắt lát\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa non\u003c\/a\u003e, nước tương nhạt, chút nước tương đậm và nước hoặc nước dùng. Thêm vài giọt dầu mè sau cùng.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n    \u003ch3 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eCanh đậu hũ \u0026amp; nấm chua cay \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\/h3\u003e\n    \u003cp style=\"margin:6px 0;color:#475569;font-size:14px;\"\u003eNấu sôi nhẹ đậu hũ cắt thanh trong nước dùng nấm thanh như \u003ca href=\"\/vi\/products\/colorful-yunnan-matsutake-mushroom-soup-mix-68g-dried-mushroom-broth-kit\"\u003egia vị súp nấm tùng nhung\u003c\/a\u003e cùng \u003ca href=\"\/vi\/products\/fresh-wood-ear-mushrooms-approximately-100g\"\u003enấm mèo thái sợi\u003c\/a\u003e, tiêu trắng và chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\u003c\/a\u003e. Canh thanh, chua nhẹ, dễ ăn.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n    \u003ch3 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eBún gạo đậu hũ giòn với ớt giòn ngâm dầu\u003c\/h3\u003e\n    \u003cp style=\"margin:6px 0;color:#475569;font-size:14px;\"\u003eÁo đậu hũ cắt khối bằng bột bắp, chiên áp chảo 5-7 phút cho giòn. Dọn lên \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo đã ngâm mềm\u003c\/a\u003e với hành lá và một muỗng \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003eớt giòn ngâm dầu\u003c\/a\u003e. Thêm vị tươi với \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ebó hành lá\u003c\/a\u003e.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp style=\"margin:10px 0 0;color:#94a3b8;font-size:12px;\"\u003eMẹo: Với món nhiều sốt, cắt khối hơi lớn để bên trong đậu hũ vẫn mềm.\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\u003ch2 style=\"margin:0 0 10px;font-size:20px;font-weight:700;\"\u003eMẹo chế biến\u003c\/h2\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eÉp giữa các lớp khăn giấy 10-20 phút để bớt nước, giúp chiên áp chảo vàng hơn.\u003c\/li\u003e\n\u003cli\u003eMuốn cạnh giòn hơn, áo nhẹ đậu hũ cắt khối bằng bột bắp trước khi chiên áp chảo.\u003c\/li\u003e\n\u003cli\u003eƯớp trước 10-15 phút với nước tương nhạt, chút đường và dầu mè.\u003c\/li\u003e\n\u003cli\u003eThêm đậu hũ gần cuối khi xào hoặc nấu canh để giữ nguyên miếng.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\u003ch2 style=\"margin:0 0 10px;font-size:20px;font-weight:700;\"\u003eGợi ý dùng kèm\u003c\/h2\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003eNấm bào ngư\u003c\/a\u003e hoặc các loại nấm khác\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-garlic-leaves-green-garlic-1-bundle\"\u003eLá tỏi xanh\u003c\/a\u003e hoặc hành lá\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eNước tương nhạt\u003c\/a\u003e để nêm\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eDầu mè rang\u003c\/a\u003e rưới sau cùng\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/hengshun-9-degree-rice-vinegar-500ml\"\u003eGiấm gạo\u003c\/a\u003e để thêm vị chua thanh\u003c\/li\u003e\n\u003cli\u003e\n\u003ca href=\"\/vi\/products\/chuan-lao-hui-pixian-red-oil-broad-bean-paste-1kg\"\u003eTương đậu ớt Pixian doubanjiang\u003c\/a\u003e để thêm vị cay đậm đà\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch2 style=\"margin:0 0 10px;font-size:20px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h2\u003e\n  \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"display:inline-block;border:1px solid #e2e8f0;background:#fff;border-radius:999px;padding:10px 14px;font-size:14px;color:var(--brand);font-weight:700;\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành →\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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 #e2e8f0;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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151480172831,"sku":"A9323536008908","price":5.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_5c2663a8-d3e5-485f-8882-ed93b430a2ff.jpg?v=1712383835"},{"product_id":"fresh-ever-green-silken-tofu-approximately-500g","title":"Evergreen Đậu hũ Momen, 500g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:12px 14px;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:20px;\"\u003e\u003cdiv style=\"display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;\"\u003e\n\u003cdiv style=\"flex:1 1 260px;min-width:260px;\"\u003e\n\u003ch1 style=\"margin:0 0 6px;font-size:24px;font-weight:800;color:#0f172a;\"\u003eEvergreen Đậu hũ Momen, 500g\u003c\/h1\u003e\n\u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eĐậu hũ kiểu momen mềm mà chắc — đủ mịn để nấu canh và trộn gỏi, đủ chắc để xào nhẹ tay.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"flex:0 0 220px;max-width:220px;width:100%;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_6ca96e8f-a82d-4096-abfb-dd776104e9f2.jpg?v=1712383842\" alt=\"Ever Green Momen Tofu 500g\" style=\"width:100%;height:auto;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\u003c\/div\u003e\n\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;\"\u003eĐiểm nổi bật của sản phẩm\u003c\/h3\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eVị đậu nành thanh, mềm nhẹ như trứng hấp.\u003c\/li\u003e\n\u003cli\u003eGiữ miếng trong canh và món kho, vẫn mềm mịn khi dùng lạnh.\u003c\/li\u003e\n\u003cli\u003eTiện dùng hằng ngày: dễ chia phần ăn, nêm nếm và chế biế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 ý chế biến\u003c\/h3\u003e\n\u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;\"\u003e \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;\"\u003eĐậu hũ lạnh với nước tương, giấm \u0026amp; hành lá \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:6px 0 0;color:#334155;font-size:14px;\"\u003eRưới \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e và chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm đen\u003c\/a\u003e, cuối cùng thêm chút \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá cắt lát\u003c\/a\u003e. Sẵn sàng sau 2–3 phút.\u003c\/p\u003e\n\u003c\/div\u003e \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;\"\u003eĐậu hũ nấu lẩu nấm\u003c\/h4\u003e\n\u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eNấu sôi nhẹ đậu hũ cắt miếng vừa ăn trong nước dùng thanh từ \u003ca href=\"\/vi\/products\/haidilao-mushroom-flavor-hot-pot-seasoning-150g\"\u003enước cốt lẩu nấm\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003enấm shimeji\u003c\/a\u003e và một nắm \u003ca href=\"\/vi\/products\/fresh-green-stemmed-vegetable-hearts-bundle\"\u003ecải ngọt\u003c\/a\u003e cho món lẩu ấm bụng.\u003c\/p\u003e\n\u003c\/div\u003e \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;\"\u003eĐậu hũ \u0026amp; đậu que xào\u003c\/h4\u003e\n\u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eChiên áp chảo đậu hũ cắt khối rồi đảo với \u003ca href=\"\/vi\/products\/fresh-seasonal-green-beans-approximately-500g\"\u003eđậu que\u003c\/a\u003e, một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e và chút \u003ca href=\"\/vi\/products\/haday-golden-label-light-soy-sauce-1-28l\"\u003enước tương nhạt\u003c\/a\u003e. Xào 4–6 phút đến khi sốt áo bóng.\u003c\/p\u003e\n\u003c\/div\u003e \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;\"\u003eĐậu hũ kiểu mapo cho bữa tối\u003c\/h4\u003e\n\u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eXào sơ một ít \u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-mince-500g-frozen\"\u003ethịt heo bằm\u003c\/a\u003e, làm dậy mùi \u003ca href=\"\/vi\/products\/chuan-lao-hui-pixian-red-oil-broad-bean-paste-1kg\"\u003eTương đậu ớt Pixian doubanjiang\u003c\/a\u003e, rồi nấu đậu hũ cho thấm sốt. Dọn với cơm nóng.\u003c\/p\u003e\n\u003c\/div\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;\"\u003eMẹo chế biến\u003c\/h3\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eĐể cắt miếng gọn, chắt nước sơ rồi dùng dao mỏng, sắc.\u003c\/li\u003e\n\u003cli\u003eKhi xào, thấm khô và chiên áp chảo không đảo 2–4 phút mỗi mặt để tạo lớp vỏ mỏng.\u003c\/li\u003e\n\u003cli\u003eVới canh hoặc lẩu, cho đậu hũ vào sau cùng, nấu sôi nhẹ 3–5 phút cho nóng đều.\u003c\/li\u003e\n\u003cli\u003eMuốn miếng đậu chắc hơn, áo lớp bột mỏng trước khi chiên áp chảo.\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 ý dùng kèm\u003c\/h3\u003e\n\u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\"\u003eChuan Lao Hui Dầu mè nguyên chất 320ml\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-300g\"\u003eChois Nấm hương - 300g\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-green-stemmed-vegetable-hearts-bundle\"\u003eCải ngọt thân xanh, 1 bó\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/hokkaido-sansanmaru-japanese-rice-5kg\"\u003eHokkaido Sansanmaru Gạo Nhật Bản - 5kg\u003c\/a\u003e\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;text-align:center;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n\u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"display:inline-block;color:var(--brand);font-weight:700;border-bottom:1px solid var(--brand);\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành\u003c\/a\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151480336671,"sku":"A9323536008892","price":4.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_6ca96e8f-a82d-4096-abfb-dd776104e9f2.jpg?v=1712383842"},{"product_id":"fresh-ever-green-chinese-style-tofu-approximately-300g","title":"Evergreen Đậu hũ kiểu Trung Quốc, 300g","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:24px;font-weight:800;color:#0f172a;\"\u003eEvergreen Đậu hũ kiểu Trung Quốc, 300g\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;\"\u003eĐậu hũ mềm mà chắc, dễ thấm vị, hợp để xào nhanh, nấu canh, kho hoặc dùng lạnh.\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Điểm nổi bật của sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:0 0 0 18px;\"\u003e\n    \u003cli\u003eVị thanh nhẹ, dễ thấm nước sốt và gia vị thơm.\u003c\/li\u003e\n    \u003cli\u003eKết cấu vừa phải—đủ chắc để chiên áp chảo, đủ mềm để nấu canh.\u003c\/li\u003e\n    \u003cli\u003eĐạm thực vật cho bữa ăn hằng ngày, từ món mì buổi tối đến món lẩu.\u003c\/li\u003e\n    \u003cli\u003eMiếng đậu hũ 300g tiện chia phần ăn, ướp và chế biế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 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:flex;flex-direction:column;gap:14px;\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ xào cải rổ với gừng tỏi \u0026amp; dầu hào\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eThấm khô, cắt khối rồi chiên áp chảo đậu hũ đến vàng (2–4 phút mỗi mặt). Đảo với \u003ca href=\"\/vi\/products\/fresh-bunch-of-chinese-broccoli-kai-lan-hearts\"\u003ecải rổ (gai lan) đã trụng\u003c\/a\u003e, gừng và một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003eHaitian Dầu hào cao cấp 700g\u003c\/a\u003e. Thêm chút nước để sốt áo đều.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ kiểu mapo với thịt bò bằm \u0026amp; tương Pixian doubanjiang\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eXào một ít \u003ca href=\"\/vi\/products\/angus-prime-ground-beef-500g\"\u003eThịt bò Angus Prime bằm 500g\u003c\/a\u003e đến xém, cho vào \u003ca href=\"\/vi\/products\/chuan-lao-hui-pixian-red-oil-broad-bean-paste-1kg\"\u003eTương đậu ớt Pixian Doubanjiang\u003c\/a\u003e, tỏi và nước dùng. Thêm đậu hũ cắt khối, nấu sôi nhẹ 3–5 phút; rắc tiêu Tứ Xuyên và hành lá sau cùng.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eCanh đậu hũ, nấm hương \u0026amp; rau xanh \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\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eNấu nước với \u003ca href=\"\/vi\/products\/cygnet-clear-soup-hot-pot-base-200g-mild-chinese-shabu-shabu-broth-seasoning\"\u003eCygnet Gia vị nước lẩu thanh\u003c\/a\u003e. Thêm đậu hũ cắt khối, \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003eNấm hương 100g\u003c\/a\u003e, và một nắm \u003ca href=\"\/vi\/products\/fresh-snow-pea-sprouts-160g\"\u003eRau mầm đậu Hà Lan\u003c\/a\u003e trong 2–4 phút. Nêm vừa ăn.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eCơm tô đậu hũ giòn sốt mè–nước tương\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eÁo đậu hũ bằng bột bắp, chiên áp chảo cho giòn rồi dọn lên cơm nóng nấu từ \u003ca href=\"\/vi\/products\/beidahuang-wuchang-rice-vacuum-pack-5kg\"\u003eGạo Wuchang\u003c\/a\u003e. Rưới \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eDầu mè\u003c\/a\u003e và nước tương nhạt; thêm rau củ ngâm chua nhanh nếu thích.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;\"\u003e\n      \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ lạnh với nước tương–hành lá \u0026amp; ớt giòn\u003c\/h4\u003e\n      \u003cp style=\"margin:0;\"\u003eRưới hỗn hợp \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eNước tương nhạt\u003c\/a\u003e, chút giấm và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003eHành lá cắt lát\u003c\/a\u003e lên đậu hũ lạnh. Cuối cùng thêm chút \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003eDầu ớt giòn\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 chế biến\u003c\/h3\u003e\n  \u003cul style=\"margin:0 0 0 18px;\"\u003e\n    \u003cli\u003eChắt nước rồi thấm thật khô để chiên vàng hơn; ép sơ giữa các lớp khăn giấy nếu cần.\u003c\/li\u003e\n    \u003cli\u003eMuốn cạnh giòn, áo nhẹ đậu hũ cắt khối bằng bột bắp rồi chiên áp chảo lửa vừa 2–4 phút mỗi mặt.\u003c\/li\u003e\n    \u003cli\u003eCho đậu hũ vào gần cuối các món nấu sôi nhẹ để giữ nguyên miếng.\u003c\/li\u003e\n    \u003cli\u003eNêm lớp ngoài bằng nước tương, dầu mè hoặc giấm ngay trước khi dù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 ý dùng kèm\u003c\/h3\u003e\n  \u003cul style=\"margin:0 0 0 18px;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eLee Kum Kee Dầu mè nguyên chất 207ml\u003c\/a\u003e\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\/fresh-evergreen-yangchun-noodles-500g\"\u003eEvergreen Mì Yangchun 500g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003eChois Nấm kim châm - 300g\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;justify-content:space-between;align-items:center;gap:10px;\"\u003e\n  \u003cdiv\u003e\n    \u003ch3 style=\"margin:0 0 6px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n    \u003cp style=\"margin:0;color:#475569;\"\u003eXem thêm đậu hũ và sản phẩm từ đậu nành cho bữa ăn đơn giản.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"color:var(--brand);font-weight:700;\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành →\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151481188639,"sku":"A9323536580022","price":2.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_ba54bdd2-b13f-4d10-ae90-825b18774f7c.jpg?v=1712383861"},{"product_id":"fresh-ever-green-smooth-strip-tofu-approximately-250g","title":"Evergreen Đậu hũ sợi mềm mịn, 250g","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.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:24px;margin-top:16px;\"\u003e\n  \u003cdiv style=\"display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;\"\u003e\n    \u003ch1 style=\"margin:0;font-size:26px;font-weight:800;color:#0f172a;\"\u003eEvergreen Đậu hũ sợi mềm mịn, 250g\u003c\/h1\u003e\n    \u003cspan style=\"display:inline-block;border:1px solid #e2e8f0;border-radius:999px;padding:6px 10px;font-size:12px;color:#475569;background:#f8fafc;\"\u003eSợi đậu hũ mềm mịn, đã cắt sẵn\u003c\/span\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐiểm nổi bật của sản phẩm\u003c\/h2\u003e\n  \u003cul style=\"margin:10px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eĐậu hũ sợi cắt sẵn mềm mịn, dễ thấm sốt và nước dùng.\u003c\/li\u003e\n    \u003cli\u003eChế biến nhanh — dùng xào, nấu canh, trộn gỏi và nhúng lẩu.\u003c\/li\u003e\n    \u003cli\u003eVị đậu hũ thanh nhẹ, mềm dai.\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h2\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:14px;background:#fff;padding:14px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eGỏi đậu hũ trộn 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\/div\u003e\n      \u003cdiv style=\"color:#334155;font-size:14px;margin-top:6px;\"\u003eTrộn đậu hũ sợi với \u003ca href=\"\/vi\/products\/fresh-snow-pea-sprouts-160g\"\u003erau mầm đậu Hà Lan đã trụng\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm đen Zhenjiang\u003c\/a\u003e, một ít \u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\"\u003enước tương\u003c\/a\u003e và rưới chút \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e. Muốn ăn cay, thêm: \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003eớt giòn ngâm dầu\u003c\/a\u003e. Muốn món đầy đặn hơn, trộn thêm \u003ca href=\"\/vi\/products\/hankun-crispy-konjac-yam-threads-200g\"\u003esợi konjac đã để lạnh\u003c\/a\u003e.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;background:#fff;padding:14px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eĐậu hũ xào cải thìa và dầu hào\u003c\/div\u003e\n      \u003cdiv style=\"color:#334155;font-size:14px;margin-top:6px;\"\u003eÁp chảo đậu hũ sợi trên lửa lớn rồi thêm \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa non\u003c\/a\u003e và một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e. Thêm \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi đập dập\u003c\/a\u003e đập dập và chút nước để sốt áo đều; tổng thời gian 2–4 phút.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;background:#fff;padding:14px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eTô bún nước nóng\u003c\/div\u003e\n      \u003cdiv style=\"color:#334155;font-size:14px;margin-top:6px;\"\u003eNấu nước dùng thanh với \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong\u003c\/a\u003e, thêm đậu hũ sợi và \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003enấm kim châm\u003c\/a\u003e, rồi cho vào \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo\u003c\/a\u003e. Nêm nước tương và tiêu trắng.\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;background:#fff;padding:14px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eĐậu hũ sợi nhúng lẩu\u003c\/div\u003e\n      \u003cdiv style=\"color:#334155;font-size:14px;margin-top:6px;\"\u003eNhúng đậu hũ sợi vào \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003elẩu cà chua\u003c\/a\u003e đang sôi trong một hoặc hai phút. Thêm \u003ca href=\"\/vi\/products\/ever-green-fried-tofu-puffs-200g\"\u003eđậu hũ chiên phồng dai\u003c\/a\u003e dai và rau lá để có nhiều kết cấu.\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo chế biến\u003c\/h2\u003e\n  \u003cul style=\"margin:10px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eRửa sơ rồi nhẹ tay tách các sợi trước khi nấu.\u003c\/li\u003e\n    \u003cli\u003eVới món xào, dùng lửa lớn và ít dầu; xào 2–3 phút để giữ độ mềm.\u003c\/li\u003e\n    \u003cli\u003eVới canh hoặc lẩu, thêm vào 1–2 phút cuối để sợi đậu mịn, không bị đứt.\u003c\/li\u003e\n    \u003cli\u003eTắt bếp rồi mới nêm nước tương, dầu mè hoặc giấm để giữ vị thanh nhẹ.\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý dùng kèm\u003c\/h2\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eNước tương, dầu hào, giấm đen, dầu mè, tỏi, gừng, dầu ớt, nấm kim châm hoặc shimeji, cải thìa, giá, bún gạo, nước dùng thanh và lẩu cà chua.\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  \u003ch2 style=\"margin:0 0 12px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h2\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;\"\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"display:block;border:1px solid #e2e8f0;background:#fff;border-radius:12px;padding:12px;color:#0f172a;\"\u003e\u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ truyền thống, 500g\u003c\/div\u003e\n\u003cdiv style=\"font-size:13px;color:#475569;margin-top:4px;\"\u003eĐậu hũ chắc cho món xào \u0026amp; hầm hằng ngày\u003c\/div\u003e\u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-dried-tofu-4-pieces-approximately-400g\" style=\"display:block;border:1px solid #e2e8f0;background:#fff;border-radius:12px;padding:12px;color:#0f172a;\"\u003e\u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ khô – 4 cái, 400g\u003c\/div\u003e\n\u003cdiv style=\"font-size:13px;color:#475569;margin-top:4px;\"\u003eDai, giàu đạm, dùng ăn vặt hoặc xào\u003c\/div\u003e\u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-brick-dried-tofu-approximately-650g\" style=\"display:block;border:1px solid #e2e8f0;background:#fff;border-radius:12px;padding:12px;color:#0f172a;\"\u003e\u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ cứng, 650g\u003c\/div\u003e\n\u003cdiv style=\"font-size:13px;color:#475569;margin-top:4px;\"\u003eGiữ miếng khi kho \u0026amp; chiên áp chảo\u003c\/div\u003e\u003c\/a\u003e\n    \u003ca href=\"\/vi\/products\/ever-green-fried-tofu-puffs-200g\" style=\"display:block;border:1px solid #e2e8f0;background:#fff;border-radius:12px;padding:12px;color:#0f172a;\"\u003e\u003cdiv style=\"font-weight:700;\"\u003eEvergreen Đậu hũ chiên phồng, 200g\u003c\/div\u003e\n\u003cdiv style=\"font-size:13px;color:#475569;margin-top:4px;\"\u003eĐậu hũ xốp, hợp nấu lẩu \u0026amp; cà ri\u003c\/div\u003e\u003c\/a\u003e\n  \u003c\/div\u003e\n  \u003cdiv style=\"margin-top:12px;text-align:center;\"\u003e\n    \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"display:inline-block;color:#DB3A35;font-weight:700;\"\u003eXem tất cả đậu hũ \u0026amp; đậu nành 7\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151481352479,"sku":"A9323536800014","price":2.39,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_1265659e-c79c-4426-a61d-4d9d08bbe227.jpg?v=1712383868"},{"product_id":"fresh-ever-green-tofu-puffs-approximately-150g","title":"Evergreen Đậu hũ chiên phồng 150g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 12px;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:8px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eEvergreen Đậu hũ chiên phồng 150g\u003c\/h1\u003e\n  \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eĐậu hũ chiên phồng nhẹ, xốp, dễ thấm sốt và nước dùng—hợp nấu canh, xào và nhúng lẩu.\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Điểm nổi bật của sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eNgoài giòn, trong xốp thoáng, thấm vị chỉ trong vài phút.\u003c\/li\u003e\n    \u003cli\u003eĐã chiên sẵn, dùng ngay để chế biến bữa tối nhanh trong tuần.\u003c\/li\u003e\n    \u003cli\u003eDùng cho nhiều món Á: yong tau foo, laksa, cà ri, lẩu và món xào.\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:12px;\"\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;\"\u003eMì nước với đậu hũ thấm nước dù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\"\u003eÍt calo\u003c\/span\u003e\n\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eNấu sôi nhẹ đậu hũ trong nước dùng thanh 2–4 phút, rồi chan lên \u003ca href=\"\/vi\/products\/double-phoenix-jiangmen-rice-noodles-454g\"\u003ebún gạo\u003c\/a\u003e cùng \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa non đã trụng\u003c\/a\u003e. Nêm chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e và tiêu trắng. Dùng thử với \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong\u003c\/a\u003e cho tiệ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;\"\u003eĐậu hũ xào nấm hương và rau xanh\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eXào đậu hũ cắt lát với \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-green-stemmed-vegetable-hearts-bundle\"\u003ecải ngọt\u003c\/a\u003e, và \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi\u003c\/a\u003e. Áo sốt bằng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e và chút nước; đảo vừa đủ cho thấm số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;\"\u003eĐậu hũ chiên phồng nhúng lẩu\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eThêm đậu hũ vào \u003ca href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003enước cốt lẩu cà chua\u003c\/a\u003e đang sôi trong 3–5 phút cuối để thấm vị mà vẫn dai. Dùng kèm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003enấm kim châm\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\"\u003etôm king\u003c\/a\u003e.\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;\"\u003eĐậu hũ chiên phồng nhồi nhân (kiểu yong tau foo)\u003c\/h4\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eRạch một đường rồi nhồi \u003ca href=\"\/vi\/products\/borrowdale-free-range-pork-mince-500g-frozen\"\u003ethịt heo nạc bằm\u003c\/a\u003e, cùng \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá bằm\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng bằm\u003c\/a\u003e. Chiên áp chảo rồi kho 6–8 phút với \u003ca href=\"\/vi\/products\/haitian-premium-soy-sauce-1-9l\"\u003enước tương\u003c\/a\u003e và chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\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 chế biến\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eMuốn vị thanh hơn, trụng nhanh đậu hũ trong nước nóng 10–20 giây rồi để ráo.\u003c\/li\u003e\n    \u003cli\u003eRạch hoặc chọc một lỗ nhỏ để đậu hũ thấm đều sốt và nước dùng.\u003c\/li\u003e\n    \u003cli\u003eMuốn giòn, chiên bằng nồi chiên không dầu hoặc nướng lò ở nhiệt cao 3–5 phút trước khi thêm vào món ăn.\u003c\/li\u003e\n    \u003cli\u003eCho vào gần cuối: khoảng 2–4 phút khi nấu canh hoặc phút cuối khi xào.\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 ý dùng kèm\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003e\n    Dùng thử với \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e, rưới chút \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e, một muỗng \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003edầu ớt giòn\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-1000g\"\u003emì gạo dễ ăn\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-hydroponically-grown-shanghai-bok-choy-1-bundle\"\u003ecải thìa Shanghai mềm\u003c\/a\u003e, và \u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003enấm shimeji đậm vị\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 10px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eXem thêm đậu hũ \u0026amp; sản phẩm từ đậu nành trong bộ sưu tập: \u003ca href=\"\/vi\/collections\/tofu-soy-products\"\u003eĐậu hũ \u0026amp; Sản phẩm từ đậu nành\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151481549087,"sku":"A9323536001251","price":5.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_d3396893-f0ea-4695-8eb4-a3215eda092f.jpg?v=1712383876"},{"product_id":"fresh-ever-green-egg-strip-tofu-approximately-150g","title":"Evergreen Đậu hũ trứng dạng sợi, 150g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:10px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#0f172a;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;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:22px;font-weight:800;\"\u003eEvergreen Đậu hũ trứng dạng sợi, 150g\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eĐậu hũ có trứng mềm mịn, cắt sẵn thành sợi. Dễ thấm sốt, giữ sợi khi xào hoặc nấu canh, chín chỉ trong vài phút cho bữa ăn nhanh, ấm bụng.\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Điểm nổi bật của sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;\"\u003e\n    \u003cli\u003eĐậu hũ trứng mềm mịn, vị đậm đà nhẹ.\u003c\/li\u003e\n    \u003cli\u003eCắt sẵn thành sợi giúp bớt thời gian chuẩn bị—cho thẳng vào chảo, canh hoặc lẩu.\u003c\/li\u003e\n    \u003cli\u003eDùng được cho món xào, mì nước, lẩu và gỏi lạnh.\u003c\/li\u003e\n    \u003cli\u003eGiữ miếng tốt hơn đậu hũ non mà vẫn mềm mị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;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr;gap:14px;\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eĐậu hũ xào nấm bào ngư \u0026amp; rau xanh\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eÁp chảo đậu hũ sợi rồi đảo với \u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\" style=\"color:var(--brand);\"\u003enấm bào ngư\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-hydroponically-grown-shanghai-bok-choy-1-bundle\" style=\"color:var(--brand);\"\u003ecải thìa Shanghai\u003c\/a\u003e, và một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003edầu hào\u003c\/a\u003e. Thêm chút nước để áo sốt; xào 2–4 phút đến khi bóng đều.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eĐậu hũ sợi trộn mè–hành lá dùng lạnh\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eTrụng đậu hũ sợi, để lạnh rồi trộn với \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\" style=\"color:var(--brand);\"\u003edầu mè\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003egiấm gạo\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003enước tương nhạt\u003c\/a\u003e. Rắc lên trên \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:var(--brand);\"\u003ehành lá cắt lát\u003c\/a\u003e cắt nhỏ để dùng làm món khai vị lạnh.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eĐậu hũ nhúng lẩu thanh \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:6px 0 0;color:#334155;\"\u003eCho đậu hũ sợi vào nước dùng thanh nhẹ như \u003ca href=\"\/vi\/products\/cygnet-clear-soup-hot-pot-base-200g-mild-chinese-shabu-shabu-broth-seasoning\" style=\"color:var(--brand);\"\u003eCygnet Gia vị nước lẩu thanh\u003c\/a\u003e; thêm một nắm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003enấm kim châm\u003c\/a\u003e. Nấu sôi nhẹ 2–3 phút đến khi vừa chín.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;\"\u003eMì nước cho bữa tối\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eHâm nóng \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\" style=\"color:var(--brand);\"\u003enước dùng gà trong còn ấm\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\" style=\"color:var(--brand);\"\u003emì Yangchun\u003c\/a\u003e, gừng cắt lát và đậu hũ sợi; nấu sôi nhẹ 3–5 phút cho tô mì ấm bụng.\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 chế biến\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;\"\u003e\n    \u003cli\u003eThấm khô trước khi áp chảo để vàng hơn và bớt bắn dầu.\u003c\/li\u003e\n    \u003cli\u003eLàm nhẹ tay, dùng xẻng bản rộng lật để sợi đậu không bị đứt.\u003c\/li\u003e\n    \u003cli\u003eKhi xào, áp chảo trước rồi lấy ra; cuối cùng cho lại vào chảo và đảo với sốt.\u003c\/li\u003e\n    \u003cli\u003eVới canh hoặc lẩu, thêm gần cuối và nấu sôi nhẹ một lát để giữ độ mềm mịn.\u003c\/li\u003e\n    \u003cli\u003eNếu thích, áo nhẹ bột bắp để tạo lớp sốt mỏng cho các món có nước số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;\"\u003eGợi ý dùng kèm\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 0 18px;color:#334155;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003eHaitian Dầu hào cao cấp 700g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\" style=\"color:var(--brand);\"\u003eChuan Lao Hui Dầu mè nguyên chất 320ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-dried-garlic-heads-approximately-500g\" style=\"color:var(--brand);\"\u003eTỏi củ 500g\u003c\/a\u003e \u0026amp; \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\" style=\"color:var(--brand);\"\u003eGừng 500g\u003c\/a\u003e\n\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\" style=\"color:var(--brand);\"\u003eChois Nấm hương - 100g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-1000g\" style=\"color:var(--brand);\"\u003eChunsi Bún gạo Jiangxi - 1kg\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/hankun-crispy-konjac-yam-threads-200g\" style=\"color:var(--brand);\"\u003eSợi konnyaku từ khoai nưa 200g\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;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n  \u003cul style=\"margin:8px 0 10px 18px;color:#334155;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"color:var(--brand);\"\u003eEvergreen Đậu hũ truyền thống, 500g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-silken-tofu-approximately-500g\" style=\"color:var(--brand);\"\u003eEvergreen Đậu hũ Momen, 500g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-dried-tofu-4-pieces-approximately-400g\" style=\"color:var(--brand);\"\u003eEvergreen Đậu hũ khô - 4 cái, 400g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/ever-green-fried-tofu-puffs-200g\" style=\"color:var(--brand);\"\u003eEvergreen Đậu hũ chiên phồng - 200g\u003c\/a\u003e\u003c\/li\u003e\n  \u003c\/ul\u003e\n  \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"display:inline-block;color:var(--brand);font-weight:700;\"\u003eXem tất cả đậu hũ \u0026amp; sản phẩm từ đậu nành →\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151481712927,"sku":"A9323536720022","price":3.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_24257df0-cffd-49dc-a562-852cd315a028.jpg?v=1736929216"},{"product_id":"fresh-ever-green-smooth-fried-tofu-approximately-300g","title":"Đậu Hũ Lụa Chiên Ever Green 300 g – đậu chiên giòn mềm, giàu protein","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:10px 12px;\"\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  \u003ch2 style=\"margin:0 0 6px;font-size:22px;font-weight:800;color:#111827;\"\u003eĐậu hũ non chiên, 300g\u003c\/h2\u003e\n  \u003cp style=\"margin:8px 0 0;color:#334155;\"\u003eBên trong mềm, bên ngoài có lớp vỏ vàng mỏng. Đã chiên sẵn cho tiện—thêm vào món xào, canh hoặc mì.\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Điểm nổi bật của sản phẩm\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;color:#334155;line-height:1.6;\"\u003e\n    \u003cli\u003eRuột đậu hũ non vẫn mềm, lớp ngoài dễ bám sốt.\u003c\/li\u003e\n    \u003cli\u003eTiện vì đã chiên sẵn—chỉ cần hâm lại rồi kết hợp với rau củ, mì hoặc nước dùng bạn thích.\u003c\/li\u003e\n    \u003cli\u003eHợp món xào nhanh và lẩu; giữ miếng tốt hơn đậu hũ non chưa chiên.\u003c\/li\u003e\n    \u003cli\u003eVị thanh nhẹ, dễ thấm nước tương, tỏi và 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:flex;flex-direction:column;gap:12px;color:#334155;\"\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;color:#111827;\"\u003eĐậu hũ xào cải thìa non \u0026amp; sốt dầu hào–nước tương\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;\"\u003eLàm giòn đậu hũ sơ rồi đảo với \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa non\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e, và một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e. Xào lửa lớn 2–4 phút.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;color:#111827;\"\u003eTô mì nước nấm đậu hũ \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:6px 0 0;\"\u003eNấu sôi nhẹ đậu hũ cùng \u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003enấm shimeji\u003c\/a\u003e trong \u003ca href=\"\/vi\/products\/colorful-yunnan-matsutake-mushroom-soup-mix-68g-dried-mushroom-broth-kit\"\u003enước dùng nấm\u003c\/a\u003e thanh, rồi thêm một nắm \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo\u003c\/a\u003e. Rắc hành lá sau cùng. Món ăn thanh nhẹ, ấm bụng.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;color:#111827;\"\u003eĐậu hũ sốt satay với ớt chuông đỏ ngọt\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;\"\u003eÁp chảo đậu hũ đến khi cạnh giòn, thêm \u003ca href=\"\/vi\/products\/fresh-red-lantern-peppers-pack-of-3\"\u003eớt chuông đỏ cắt lát\u003c\/a\u003e, rồi áo với một muỗng \u003ca href=\"\/vi\/products\/bull-head-brand-satay-sauce-250g\"\u003esốt satay\u003c\/a\u003e và rưới chút \u003ca href=\"\/vi\/products\/chuan-lao-hui-spicy-chili-oil-210ml\"\u003edầu ớt\u003c\/a\u003e. Dùng với cơm nóng.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cdiv style=\"font-weight:700;color:#111827;\"\u003eĐậu hũ kiểu mapo với nấm ăn cùng cơm\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;\"\u003eNấu sôi nhẹ đậu hũ và \u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003enấm bào ngư\u003c\/a\u003e trong sốt pha nhanh từ \u003ca href=\"\/vi\/products\/chuan-lao-hui-pixian-red-oil-broad-bean-paste-1kg\"\u003eTương đậu ớt Pixian doubanjiang\u003c\/a\u003e, tỏi và nước dùng. Dọn với cơm nóng nấu từ \u003ca href=\"\/vi\/products\/beidahuang-wuchang-rice-vacuum-pack-5kg\"\u003egạo Wuchang\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 chế biến\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;color:#334155;line-height:1.6;\"\u003e\n    \u003cli\u003eThấm khô rồi cắt miếng vừa ăn để nóng đều và cạnh giòn.\u003c\/li\u003e\n    \u003cli\u003eDùng nồi chiên không dầu hoặc lò nướng hâm ở 180–200°C trong 5–8 phút để lớp vỏ giòn lại trước khi thêm sốt.\u003c\/li\u003e\n    \u003cli\u003eVới canh hoặc lẩu, trụng 20–30 giây để bớt dầu ngoài mặt rồi cho vào gần cuối để giữ độ mềm.\u003c\/li\u003e\n    \u003cli\u003eXào lửa lớn, thêm sốt vào 30–60 giây cuối để đậu hũ không bị mềm nhũ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;\"\u003eGợi ý dùng kèm\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;color:#334155;line-height:1.7;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003eHaitian Dầu hào cao cấp 700g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eLee Kum Kee Dầu mè nguyên chất 207ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003eNấm kim châm - 300g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003eCải thìa non, gói 2\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-1000g\"\u003eChunsi Bún gạo Jiangxi - 1kg\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-300g\"\u003eEvergreen Đậu hũ kiểu Trung Quốc, 300g\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;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003e\n    Xem thêm đậu hũ và sản phẩm từ đậu nành: \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"color:#DB3A35;\"\u003exem toàn bộ đậu hũ \u0026amp; sản phẩm từ đậu nành →\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\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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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 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ỏ. 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 #e2e8f0;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":"Evergreen","offers":[{"title":"Default Title","offer_id":48151483318559,"sku":"9323536001091","price":5.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/d14a3d957c2f7fbd6b6a31615ef56083ariDGRNovivIvlZtxubgRn3uv4G4KU2x.jpg?v=1712383934"},{"product_id":"fresh-loofah-1-piece","title":"Mướp Hương (Loofah) 1 trái – rau củ tươi giòn, 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:#0f172a;line-height:1.6;\"\u003e \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:24px;margin-top:16px;\"\u003e \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eMướp 1 cái\u003c\/h1\u003e \u003cp style=\"margin:0;color:#64748b;font-size:14px;\"\u003eCòn gọi là mướp (Luffa)\u003c\/p\u003e \u003c\/section\u003e \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐiểm nổi bật của sản phẩm\u003c\/h2\u003e \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e \u003cli\u003eThịt mềm, ngọt nhẹ, nấu chín có độ mềm mượt.\u003c\/li\u003e \u003cli\u003eThanh nhẹ, nhiều nước; dùng để xào nhanh, nấu canh hoặc hấp.\u003c\/li\u003e \u003cli\u003eDễ thấm gia vị và nước sốt (tỏi, gừng, nước tương, mè).\u003c\/li\u003e \u003c\/ul\u003e \u003c\/section\u003e \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e \u003ch2 style=\"margin:0 0 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h2\u003e \u003cdiv style=\"display:grid;grid-template-columns:1fr;gap:12px;\"\u003e \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eMướp xào tôm tỏi\u003c\/div\u003e \u003cdiv style=\"color:#334155;font-size:14px;\"\u003eXào mướp cắt lát trên lửa lớn với \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\" style=\"color:#DB3A35;\"\u003etỏi đã bóc vỏ\u003c\/a\u003e và một nắm \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\" style=\"color:#DB3A35;\"\u003etôm king đã bóc vỏ\u003c\/a\u003e. Thêm chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:#DB3A35;\"\u003enước tương nhạt\u003c\/a\u003e và vài giọt \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:#DB3A35;\"\u003edầu mè\u003c\/a\u003e. Nấu vừa đến khi mướp hơi trong (2–4 phút).\u003c\/div\u003e \u003c\/div\u003e \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eCanh mướp, nấm kim châm \u0026amp; đậu hũ \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\"\u003eNấu với nước dùng\u003c\/span\u003e\n\u003c\/div\u003e \u003cdiv style=\"color:#334155;font-size:14px;\"\u003eNấu mướp cắt lát bán nguyệt trong \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 với \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:#DB3A35;\"\u003enấm kim châm\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\" style=\"color:#DB3A35;\"\u003eđậu hũ non\u003c\/a\u003e cắt khối và vài lát \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\" style=\"color:#DB3A35;\"\u003egừng tươi\u003c\/a\u003e đến khi mềm (3–5 phút). Nêm nhẹ tay.\u003c\/div\u003e \u003c\/div\u003e \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eMướp hấp nước tương và mè\u003c\/div\u003e \u003cdiv style=\"color:#334155;font-size:14px;\"\u003eHấp mướp cắt lát dày vừa mềm (4–6 phút). Thêm \u003ca href=\"\/vi\/products\/fresh-dried-garlic-heads-approximately-500g\" style=\"color:#DB3A35;\"\u003etỏi\u003c\/a\u003e băm, rưới chút \u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" style=\"color:#DB3A35;\"\u003enước tương đa dụng\u003c\/a\u003e và một ít \u003ca href=\"\/vi\/products\/haitian-sesame-fragrant-oil-150ml\" style=\"color:#DB3A35;\"\u003edầu mè\u003c\/a\u003e. Dùng làm món ăn kèm thanh nhẹ.\u003c\/div\u003e \u003c\/div\u003e \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eBún với mướp và trứng mềm\u003c\/div\u003e \u003cdiv style=\"color:#334155;font-size:14px;\"\u003eĐánh rồi đảo chín \u003ca href=\"\/vi\/products\/pace-farm-free-range-eggs-12-extra-large-700g\" style=\"color:#DB3A35;\"\u003etrứng gà nuôi thả\u003c\/a\u003e, cho mướp cắt que vào đảo nhanh. Dọn cùng \u003ca href=\"\/vi\/products\/double-phoenix-jiangmen-rice-noodles-454g\" style=\"color:#DB3A35;\"\u003ebún gạo đã ngâm mềm\u003c\/a\u003e, thêm một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:#DB3A35;\"\u003edầu hào\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:#DB3A35;\"\u003ehành lá cắt nhỏ\u003c\/a\u003e.\u003c\/div\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế và nấu\u003c\/h2\u003e \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e \u003cli\u003eChọn mướp nhẹ tay, vỏ non; tránh trái quá lớn, bị xơ.\u003c\/li\u003e \u003cli\u003eGọt các gờ hoặc gọt mỏng vỏ; cắt ngay trước khi nấu để giữ nước.\u003c\/li\u003e \u003cli\u003eNấu nhanh trên lửa lớn đến khi vừa trong để mướp mềm mượt mà không bị nhũn.\u003c\/li\u003e \u003c\/ul\u003e \u003c\/section\u003e \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý mua kèm\u003c\/h2\u003e \u003cul style=\"margin:8px 0 0 18px;color:#334155;font-size:14px;\"\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:#DB3A35;\"\u003eHaitian Dầu hào cao cấp 700g\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:#DB3A35;\"\u003eLee Kum Kee Dầu mè nguyên chất 207ml\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\" style=\"color:#DB3A35;\"\u003eGừng tươi 500g\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\" style=\"color:#DB3A35;\"\u003eChois Nấm shimeji - 150g\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/ever-green-fresh-regular-tofu-900g\" style=\"color:#DB3A35;\"\u003eEver Green Đậu hũ thường tươi - 900g\u003c\/a\u003e\u003c\/li\u003e \u003cli\u003e\u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\" style=\"color:#DB3A35;\"\u003eTôm king sống Úc, 700g\u003c\/a\u003e\u003c\/li\u003e \u003c\/ul\u003e \u003c\/section\u003e \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng danh mục\u003c\/h2\u003e \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eBạn muốn chọn thêm rau củ tươi? \u003ca href=\"\/vi\/collections\/vegetables\" style=\"color:#DB3A35;\"\u003eXem tất cả rau củ\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;\"\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í tài xế giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trên mạng! Đơn hàng có thể đến 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 ở 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 sau giờ chốt đơn có thể phát sinh phí. \u003ca href=\"\/vi\/pages\/return-refund-policy\" style=\"color:#DB3A35;text-decoration:underline;\"\u003eBấm vào đâ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ó áp dụng một khoản phí dịch vụ nhỏ. 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 tại.\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 \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":48151484891423,"sku":"9202402011410","price":5.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/f933d35fa17eb6f424af50cbba589827lHBKhNuCwg0aJUfUWNPjKo5qoLOaR5IB.jpg?v=1712384022"},{"product_id":"fresh-bundle-of-spring-onions","title":"Hành lá bó (hành lá)","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 12px;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:24px;margin-top:8px;\"\u003e\n    \u003ch1 style=\"margin:0;font-size:26px;font-weight:800;\"\u003eHành lá bó\u003c\/h1\u003e\n    \u003cp style=\"margin:6px 0 0;color:#64748b;font-size:14px;\"\u003eCòn gọi là Spring Onion \/ Scallion trong tiếng Anh\u003c\/p\u003e\n    \u003cp style=\"margin:14px 0 0;color:#334155;font-size:15px;\"\u003eLá xanh giòn, thân trắng mềm, có vị hành ngọt nhẹ. Dùng cho món xào, canh, mì hoặc salad để thêm hương thơm thanh.\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Điểm nổi bật\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:15px;\"\u003e\n      \u003cli\u003eVị hành tươi, ngọt dịu, không quá nồng.\u003c\/li\u003e\n      \u003cli\u003eDùng được cả bó: phần trắng để phi xào, phần lá xanh cho vào cuối để giữ hương thơm.\u003c\/li\u003e\n      \u003cli\u003eThêm vào mì, trứng, sủi cảo, món kho hoặc nước dùng.\u003c\/li\u003e\n      \u003cli\u003eNhanh chín, chỉ cần vài giây là mềm, tiện nấu bữa tối trong tuầ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;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n    \u003cdiv style=\"display:grid;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;\"\u003eGà xào gừng hành\u003c\/h4\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXào nhanh phần thân trắng thái lát với gừng, rồi cho \u003ca href=\"\/vi\/products\/premium-selected-frozen-chicken-breast-1kg\" style=\"color:var(--brand);\"\u003eức gà cắt sợi\u003c\/a\u003evào. Thêm lá hành, 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\u003evà dầu mè. Xào lửa lớn trong 2–4 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;\"\u003eCanh trứng đậu hũ non \u0026amp; hành lá \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\/h4\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eĐun liu riu \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, cho \u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\" style=\"color:var(--brand);\"\u003eđậu hũ non cắt khối\u003c\/a\u003e và hành lá thái nhỏ vào. Rót từ từ \u003ca href=\"\/vi\/products\/canobolas-free-range-eggs-18-pieces-1kg\" style=\"color:var(--brand);\"\u003etrứng xào mềm\u003c\/a\u003e, rồi nêm tiêu trắng và một ít nước tương.\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;\"\u003eMì dầu hành kiểu Shanghai\u003c\/h4\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003ePhi hành thái lát trong dầu ở lửa nhỏ cho thơm, rồi trộn với \u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\" style=\"color:var(--brand);\"\u003emì Yangchun nóng\u003c\/a\u003e và một muỗng \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. Thêm nước tương và một chút đường.\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;\"\u003eBún gạo xào tôm hành lá\u003c\/h4\u003e\n        \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXào \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\" style=\"color:var(--brand);\"\u003etôm King\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:var(--brand);\"\u003ebún gạo đã ngâm\u003c\/a\u003e và nhiều hành lá thái nhỏ. Nêm nước tương nhạt, tiêu trắng rồi đảo cho sợi bún bóng đề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ế\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:15px;\"\u003e\n      \u003cli\u003eCắt rễ, bỏ lớp ngoài bị héo rồi rửa kỹ phần gốc, nơi dễ đọng đất cát.\u003c\/li\u003e\n      \u003cli\u003eTách phần trắng và lá xanh: phần trắng chịu lửa lớn, còn lá nên cho vào cuối.\u003c\/li\u003e\n      \u003cli\u003eCắt xéo để tăng diện tích tiếp xúc và trang trí món ăn đẹp hơn.\u003c\/li\u003e\n      \u003cli\u003eLàm dầu hành bằng cách phi hành trong dầu trung tính ở lửa nhỏ đến vàng nhạt, lọc lấy dầu để trộn mì hoặc rau.\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    \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eHành lá hợp với đậu hũ và mì. Bạn có thể thử \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, \u003ca href=\"\/vi\/products\/chunsi-strong-ramen-noodles-1000g\" style=\"color:var(--brand);\"\u003emì kéo dai\u003c\/a\u003e, nước tương đậm vị như \u003ca href=\"\/vi\/products\/haday-golden-label-light-soy-sauce-1-28l\" style=\"color:var(--brand);\"\u003enước tương nhạt Haday\u003c\/a\u003e, thêm chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\" style=\"color:var(--brand);\"\u003egiấm Zhenjiang\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003edầu mè thơm\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/pace-farm-free-range-eggs-12-extra-large-700g\" style=\"color:var(--brand);\"\u003etrứng xào mềm\u003c\/a\u003ehoặc \u003ca href=\"\/vi\/products\/beifang-frozen-sliced-beef-rolls-for-hot-pot-600g\" style=\"color:var(--brand);\"\u003ethịt bò thái lát nhanh chín\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;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;\"\u003eSản phẩm cùng nhóm\u003c\/h3\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXem thêm các loại hành và gia vị thơm cho bữa ăn.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003ca href=\"\/vi\/collections\/scallion-ginger-garlic\" style=\"flex-shrink:0;color:#DB3A35;font-weight:700;border:1px solid #e2e8f0;background:#fff;border-radius:999px;padding:10px 14px;\"\u003eXem Hành • Gừng • Tỏ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í người giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Đơn hàng có thể đến 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 điểm đặ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 khung giờ):\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 tại.\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":48151487545631,"sku":"9335351095513","price":2.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/6b6175c571d601234985892455b84449Ia3B3viuY5K38fskdvbXL7l1X5XQObzm.jpg?v=1745982958"},{"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-bean-sprouts-approximately-400g","title":"Giá đỗ xanh (Bean Sprouts) 400 g – giá tươi giòn, giàu vitamin","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\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;color:#0f172a;\"\u003eGiá đậu xanh 400g\u003c\/h1\u003e\n  \u003cp style=\"margin:0;color:#475569;font-size:14px;\"\u003eCòn gọi là giá đậu xanh\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á tươi, giòn; xào nhanh vẫn giữ được độ giòn.\u003c\/li\u003e\n    \u003cli\u003eVị thanh nhẹ, dễ thấm nước sốt và gia vị.\u003c\/li\u003e\n    \u003cli\u003eDùng để xào, ăn cùng mì hoặc cơm, nấu canh hay trộn salad giòn má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: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;\"\u003eGiá xào tỏi\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eLàm nóng chảo đến khi bốc khói, cho ít dầu rồi thêm \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\" style=\"color:var(--brand);\"\u003etỏi\u003c\/a\u003ethái lát. Cho giá vào đảo cùng một í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; thêm vài giọt \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003edầu mè\u003c\/a\u003eở cuối. Xào nhanh 1–2 phút để giá còn 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;\"\u003eCanh nấm kim châm \u0026amp; đậu hũ \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\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eĐun liu riu \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, cho \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003enấm kim châm\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-ever-green-smooth-tofu-approximately-300g\" style=\"color:var(--brand);\"\u003eđậu hũ non\u003c\/a\u003ecắt khối vào. Cho giá vào trong 30–60 giây cuối, nêm nhẹ vừa ă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 giá trộn giấm mè\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eRửa giá rồi để thật ráo. Trộn với cà rốt\/dưa leo cắt sợi, một ít \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003egiấm gạo trắng\u003c\/a\u003e, vài giọt dầu mè và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:var(--brand);\"\u003ehành lá\u003c\/a\u003ethái nhỏ. Làm lạnh một lúc rồi dùng.\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;\"\u003eBún xào kiểu hàng quán\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXào \u003ca href=\"\/vi\/products\/cha-kou-rice-noodles-1kg\" style=\"color:var(--brand);\"\u003ebún gạo\u003c\/a\u003e đã ngâm với \u003ca href=\"\/vi\/products\/canobolas-free-range-eggs-18-pieces-1kg\" style=\"color:var(--brand);\"\u003etrứng\u003c\/a\u003eđánh tan, tỏi và hẹ. Cho giá vào sau cùng cùng một muỗng \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003edầu hào\u003c\/a\u003e để món xào bóng và thơm mùi chảo.\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\u003eRửa bằng nước lạnh rồi để thật ráo; nước còn đọng dễ làm loãng sốt xào.\u003c\/li\u003e\n    \u003cli\u003eCó thể ngắt bỏ phần rễ dài để món ăn gọn hơn.\u003c\/li\u003e\n    \u003cli\u003eXào nhanh trên lửa lớn trong 1–2 phút, hoặc cho giá vào cuối để giữ độ giòn.\u003c\/li\u003e\n    \u003cli\u003eMuốn vị dịu hơn, trụng nhanh (20–30 giây) rồi ngâm nước lạnh trước khi chế biế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;\"\u003eNguyên liệu dùng kèm\u003c\/h3\u003e\n  \u003cp style=\"margin:0;color:#334155;font-size:14px;display:flex;flex-wrap:wrap;gap:8px;\"\u003e\n    \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\n    \u003cspan style=\"color:#94a3b8;\"\u003e•\u003c\/span\u003e\n    \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003eDầu mè\u003c\/a\u003e\n    \u003cspan style=\"color:#94a3b8;\"\u003e•\u003c\/span\u003e\n    \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003eNấm kim châm\u003c\/a\u003e\n    \u003cspan style=\"color:#94a3b8;\"\u003e•\u003c\/span\u003e\n    \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"color:var(--brand);\"\u003eĐậu hũ truyền thống (loại cứng)\u003c\/a\u003e\n    \u003cspan style=\"color:#94a3b8;\"\u003e•\u003c\/span\u003e\n    \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:var(--brand);\"\u003eBún gạo\u003c\/a\u003e\n    \u003cspan style=\"color:#94a3b8;\"\u003e•\u003c\/span\u003e\n    \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003eGiấm gạo trắng\u003c\/a\u003e\n    \u003cspan style=\"color:#94a3b8;\"\u003e•\u003c\/span\u003e\n    \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:var(--brand);\"\u003eHành lá\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;text-align:center;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng nhóm\u003c\/h3\u003e\n  \u003ca href=\"\/vi\/collections\/order-mushrooms-beans-online-next-day-delivery-in-sydney\" style=\"display:inline-block;color:var(--brand);padding:10px 14px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;\"\u003eXem nấm \u0026amp; đậu\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í người giao hàng theo \u003cstrong\u003eThời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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ỏ. 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":48151495442719,"sku":"A0735745752289","price":1.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/09356dc1852ab9dd791f2cc663067593.jpg?v=1735370753"},{"product_id":"fresh-crab-flavoured-mushrooms-1-box","title":"Nấm Shimeji Nâu 200 g – giòn ngọt xào \u0026 lẩu","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 0 24px;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:24px;margin-top:0;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;color:#0f172a;\"\u003eNấm shimeji, 1 hộp\u003c\/h1\u003e\n  \u003cp style=\"margin:-4px 0 0;color:#475569;font-size:14px;\"\u003eCòn gọi là nấm beech\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  \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eNấm shimeji có vị bùi nhẹ, hậu vị umami thanh và giữ dáng khi nấu. Mũ nấm nhỏ mọc thành cụm, thân dai, nấu lên vẫn mềm giòn. Nấm nhanh chín, dễ dùng cho món xào, canh, mì và lẩu trong bữa ăn hằng ngày.\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 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;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;\"\u003eNấm shimeji xào tỏi nước tương\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eÁp chảo nấm với ít dầu trên chảo nóng, thêm tỏi băm và một ít \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e. Thêm một miếng bơ nhỏ hoặc vài giọt dầu mè ở cuối. Chế biến trong 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;\"\u003eCanh đậu hũ \u0026amp; nấm shimeji \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\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eNấu liu riu nấm shimeji, đậu hũ mềm và hành lá trong nước dùng gà nhẹ như \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong\u003c\/a\u003e. Nêm ít nước tương, nấu 5–7 phút cho tô canh thanh nhẹ.\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;\"\u003eMì xào kiểu yakisoba\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eXào nấm shimeji với bắp cải hoặc cải thìa, rồi trộn cùng \u003ca href=\"\/vi\/products\/chung-yuen-hokkien-noodles-1kg\"\u003emì Hokkien\u003c\/a\u003e dai và sốt nước tương dầu hào đậm đà. Tổng thời gian 5–8 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;\"\u003eNấm ăn lẩu cà chua\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eCho từng cụm nấm shimeji 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ấm chín trong khoảng 1–2 phút, mọng nước và đậm vị umami.\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;color:#334155;\"\u003e\n    \u003cli\u003eChỉ cắt phần gốc sát rễ để tách cụm; giữ các cụm nhỏ để nấm có độ giòn dai hơn.\u003c\/li\u003e\n    \u003cli\u003eTránh ngâm nước. Nếu cần, rửa nhanh rồi thấm khô để nấm áp chảo vàng, không bị hấp hơi.\u003c\/li\u003e\n    \u003cli\u003eNấm shimeji sống có vị đắng, cần nấu chín. Áp chảo nóng khoảng 2–4 phút đến khi mềm giòn và hơi 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 8px;font-size:18px;font-weight:700;\"\u003eNguyên liệu dùng kèm\u003c\/h3\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eTỏi, gừng, nước tương nhạt, dầu hào, dầu mè, bơ, đậu hũ, trứng, rau lá (cải thìa, cải bó xôi), hải sản (tôm, cá), mì và cơm.\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;text-align:center;\"\u003e\n  \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng nhóm\u003c\/h3\u003e\n  \u003ca href=\"\/vi\/collections\/order-mushrooms-beans-online-next-day-delivery-in-sydney\" style=\"color:var(--brand);font-weight:700;\"\u003eXem tất cả nấm \u0026amp; đậu\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í người giao hàng theo \u003cstrong\u003eThời gian thực\u003c\/strong\u003e trực tuyến! Nhận đơn 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ỏ. 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 #e2e8f0;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":48151496196383,"sku":"9202402011423","price":1.89,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/edc4b398df5da7e784781b55e2692724.jpg?v=1724144189"},{"product_id":"fresh-bunch-of-coriander","title":"Ngò rí tươi (Cilantro) — 1 bó","description":"\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\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\u003cdiv id=\"umall-desc\" style=\"--brand: #DB3A35; max-width: 860px; margin: 0 auto; padding: 8px 12px; font-family: system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif; color: #0f172a; line-height: 1.55;\"\u003e\n\u003csection style=\"border: 1px solid #e2e8f0; background: #fff; border-radius: 16px; padding: 20px;\"\u003e\n\u003ch2 style=\"margin: 0 0 4px; font-size: 24px; font-weight: 800;\"\u003eNgò rí bó\u003c\/h2\u003e\n\u003cp style=\"margin: 0; color: #64748b;\"\u003eCòn gọi là ngò rí (cilantro)\u003c\/p\u003e\n\u003cp style=\"margin: 10px 0 0; color: #334155;\"\u003eNgò rí có lá và cọng non thơm tươi, thoảng hương cam chanh — thêm vào món xào, canh, salad, chutney, salsa hay phở đều nhanh gọn. Có giao hàng ngày hôm sau tại Sydney.\u003c\/p\u003e\n\u003c\/section\u003e\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: bold;\"\u003eĐiểm nổi bật\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHương vị thanh, tươi giúp món béo hoặc cay bớt ngấy.\u003c\/li\u003e\n\u003cli\u003eCọng ngò cũng thơm — băm nhỏ để xào hoặc làm sốt; giữ lá để thêm sau cùng.\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eDùng được trong món xào châu Á, salsa\/guacamole Mexico, salad Trung Đông và cà ri Thái Lan.\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eThêm màu sắc và vị tươi cho mì, cơm tô, hải sản và thịt nướng.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/section\u003e\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: bold;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n\u003cdiv style=\"display: grid; gap: 14px;\"\u003e\n\u003cdiv style=\"border: 1px solid #e2e8f0; border-radius: 12px; padding: 14px; background: #fff;\"\u003e\n\u003cdiv style=\"font-weight: bold; margin: 0 0 6px;\"\u003eThịt bò xào ngò rí với nước tương–gừng\u003c\/div\u003e\n\u003cp style=\"margin: 0; color: #334155;\"\u003eÁp chảo nhanh \u003ca href=\"\/vi\/products\/angus-prime-shredded-beef-500g\"\u003ethịt bò thái sợi\u003c\/a\u003e với \u003ca href=\"\/vi\/products\/fresh-yellow-onions-1kg\"\u003ehành tây cắt lát\u003c\/a\u003e; thêm chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e. Cho cọng ngò băm vào xào 20–30 giây, tắt bếp rồi thêm lá.\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: bold; margin: 0 0 6px;\"\u003eCanh rau thơm với tôm \u0026amp; đậu hũ \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;\"\u003eĐun nhỏ lửa nước dùng trong với \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\"\u003etôm\u003c\/a\u003e và những miếng \u003ca href=\"\/vi\/products\/ever-green-fresh-regular-tofu-900g\"\u003eđậu hũ\u003c\/a\u003e đến khi vừa chín (5–8 phút). Thêm lá ngò rí sau cùng — canh thanh nhẹ và thơ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: bold; margin: 0 0 6px;\"\u003eCơm chiên trứng, ngò rí và rau\u003c\/div\u003e\n\u003cp style=\"margin: 0; color: #334155;\"\u003eChiên \u003ca href=\"\/vi\/products\/arawana-northeast-rice-5kg\"\u003ecơm nguội để từ hôm trước\u003c\/a\u003e với \u003ca href=\"\/vi\/products\/pace-farm-free-range-eggs-12-extra-large-700g\"\u003etrứng đánh tan\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-seasonal-green-beans-approximately-500g\"\u003eđậu cô ve cắt nhỏ\u003c\/a\u003e. Cho cọng ngò băm vào lúc chiên, rắc lá ngay trước khi ăn.\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: bold; margin: 0 0 6px;\"\u003eSalad gà xé trộn mè và ngò rí\u003c\/div\u003e\n\u003cp style=\"margin: 0; color: #334155;\"\u003eXé nhỏ \u003ca href=\"\/vi\/products\/premium-selected-frozen-chicken-breast-1kg\"\u003eức gà luộc\u003c\/a\u003e. Trộn với nhiều ngò rí, rau giòn, hỗn hợp chua nhẹ gồm \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\"\u003egiấm gạo\u003c\/a\u003e và vài giọt \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e. Món salad tươi, thơm mè và đậm hương rau.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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: bold;\"\u003eMẹo sơ chế\u003c\/h3\u003e\n\u003cul style=\"margin: 0 0 0 18px; color: #334155;\"\u003e\n\u003cli\u003eRửa nhẹ rồi thấm khô hoặc quay ráo để lá tươi.\u003c\/li\u003e\n\u003cli\u003eTận dụng cọng ngò: băm và cho sớm vào món xào, nước sốt hoặc hỗn hợp ướp để thêm thơm.\u003c\/li\u003e\n\u003cli\u003eThêm lá lúc cuối hoặc sau khi tắt bếp để giữ mùi.\u003c\/li\u003e\n\u003cli\u003eMuốn làm sốt rau thơm nhanh, xay cọng và lá với chút muối, một ít \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\u003c\/a\u003e, và dầu có vị nhẹ.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/section\u003e\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: bold;\"\u003eGợi ý ăn kèm\u003c\/h3\u003e\n\u003cul style=\"margin: 0 0 0 18px; color: #334155;\"\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eLee Kum Kee Dầu mè nguyên chất 207ml\u003c\/a\u003e\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\/fresh-ever-green-chinese-style-tofu-approximately-300g\"\u003eEver Green Đậu hũ kiểu Trung Quốc, 300g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\"\u003eTôm king Úc chưa nấu chín 700g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003eChunsi Bún gạo Jiangxi 300g\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/section\u003e\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: bold;\"\u003eXem thêm cùng nhóm\u003c\/h3\u003e\n\u003cp style=\"margin: 0; color: #334155;\"\u003eBạn thích rau xanh tươi? Xem thêm các loại rau lá tại đây: \u003ca href=\"\/vi\/collections\/leafy-vegetables\"\u003eRau lá\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/section\u003e\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: bold;\"\u003eGiao hàng \u0026amp; Thời gian nhận hàng\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 nhân viên giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Đơn hàng có thể đến 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\n\u003ctr\u003e\n\u003cth style=\"text-align: left; padding: 10px; border-right: 1px solid #e5e7eb; background: #f8fafc;\"\u003eThời điểm đặ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\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\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\n\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\n\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 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\n\u003c\/section\u003e\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: bold;\"\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ỏ. 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\n\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\n\u003c\/table\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48151499997471,"sku":"A0735745751916","price":2.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/6b3503b49c332c66a956e5635b996747jv5XdeaADZHfh5vIvPPYojCCV9abZgUw_81fcde5b-05db-4e4d-9765-b7ad7021f7ea.jpg?v=1745982947"},{"product_id":"fresh-bunch-of-chinese-lettuce","title":"Rau Xà Lách Trung Quốc (A-choy) 1 bó – lá giòn, thơm, giàu chất xơ","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:16px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#0f172a;\"\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:0;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;line-height:1.2;font-weight:800;\"\u003eRau A-choy (xà lách Trung Quốc), 1 bó\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eCọng giòn mọng nước, lá non, chín chỉ trong vài phút—tiện xào nhanh, nấu canh hoặc ăn cùng mì vào ngày thường.\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eĐiểm nổi bật\u003c\/h2\u003e\n  \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:14px;line-height:1.6;\"\u003e\n    \u003cli\u003eVị ngọt dịu, cọng giòn thanh mát và lá mềm mượt.\u003c\/li\u003e\n    \u003cli\u003eDùng để xào tỏi, nấu canh trong hoặc trộn cùng mì đều hợp.\u003c\/li\u003e\n    \u003cli\u003eChín nhanh trong 1–3 phút, thích hợp xào chảo lửa lớn.\u003c\/li\u003e\n    \u003cli\u003eHợp với nước tương, dầu hào, tỏi, gừng và chút dầu 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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h2\u003e\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr;gap:12px;\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin:0 0 6px;\"\u003eRau xào tỏi kiểu truyền thống\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXào cọng cắt lát trước, rồi thêm lá cùng \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\" style=\"color:var(--brand);\"\u003etỏi bóc vỏ\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003edầu hào\u003c\/a\u003e, và một ít \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003edầu mè\u003c\/a\u003e. Xào đến khi rau vừa 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:0 0 6px;\"\u003eCanh trong với nấm kim châm \u0026amp; đậu hũ \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 nước dùng thanh nhẹ bằng \u003ca href=\"\/vi\/products\/cygnet-clear-soup-hot-pot-base-200g-mild-chinese-shabu-shabu-broth-seasoning\" style=\"color:var(--brand);\"\u003enước cốt lẩu thanh\u003c\/a\u003e. Thêm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003enấm kim châm\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-ever-green-silken-tofu-approximately-500g\" style=\"color:var(--brand);\"\u003eđậu hũ non\u003c\/a\u003e, rồi cho rau A‑choy vào 30–60 giây cuối.\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:0 0 6px;\"\u003eRau chần trộn nước tương–giấm\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eChần sơ cọng và lá đã cắt, để ráo rồi trộn với hỗn hợp nhẹ gồm \u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" style=\"color:var(--brand);\"\u003enước tương\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:var(--brand);\"\u003egiấm gạo\u003c\/a\u003e. Sau cùng thêm vài giọt dầu mè và tiêu trắ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:0 0 6px;\"\u003eBún gạo xào rau A‑choy\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eNgâm mềm \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:var(--brand);\"\u003ebún gạo\u003c\/a\u003e, rồi xào với rau A‑choy và nước tương nhạt (\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003eHaitian\u003c\/a\u003e), thêm chút cay từ \u003ca href=\"\/vi\/products\/fresh-spiral-jalapeno-peppers-approximately-200g\" style=\"color:var(--brand);\"\u003eớt xanh dài\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế\u003c\/h2\u003e\n  \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:14px;line-height:1.6;\"\u003e\n    \u003cli\u003eRửa kỹ, tách cọng dày khỏi lá; nấu cọng trước để rau chín đều.\u003c\/li\u003e\n    \u003cli\u003eĐể thật ráo trước khi xào để tránh bắn dầu và giúp rau xém thơm.\u003c\/li\u003e\n    \u003cli\u003eNấu nhanh trên lửa lớn: xào 1–2 phút để vừa mềm giòn; khi nấu canh, thêm rau vào 30–60 giây cuối.\u003c\/li\u003e\n    \u003cli\u003eNêm đơn giản với nước tương nhạt, dầu hào, tỏi và chút dầu 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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý ăn kèm\u003c\/h2\u003e\n  \u003cul style=\"margin:0 0 0 18px;color:#334155;font-size:14px;line-height:1.6;\"\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003eHaitian Dầu hào cao cấp 700g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\" style=\"color:var(--brand);\"\u003eTỏi bóc vỏ 250g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\" style=\"color:var(--brand);\"\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\" style=\"color:var(--brand);\"\u003eBull Head Nước dùng gà trong 411ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"color:var(--brand);\"\u003eEver Green Đậu hũ truyền thống 500g\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    \u003ch2 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng nhóm\u003c\/h2\u003e\n    \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXem thêm rau lá tươi để xào nhanh và nấu canh.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv\u003e\n    \u003ca href=\"\/vi\/collections\/leafy-vegetables\" style=\"color:var(--brand);font-weight:700;\"\u003eXem tất cả rau lá →\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 hàng\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 nhân viên giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Đơn hàng có thể đến 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 điểm đặ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 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ỏ. 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":48151501668639,"sku":"A0735745751961","price":3.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/6b3503b49c332c66a956e5635b996747VTjs4raJheF7TuSfQAlRKrdkJGcARACz_1ad5718e-6381-41a1-979b-aa10d002aa40.jpg?v=1721098081"},{"product_id":"fresh-bundle-of-spinach-1-bundle","title":"Rau chân vịt (Spinach) 1 bó – giàu sắt \u0026 vitamin","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:16px auto;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#0f172a;line-height:1.65;font-size:16px;\"\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:0;\"\u003e\n    \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eCải bó xôi - 1 bó\u003c\/h1\u003e\n    \u003cp style=\"margin:6px 0 0;color:#475569;\"\u003eLá non, cọng chín nhanh — dùng để xào, nấu canh, ăn với mì và nhiều món khác.\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Điểm nổi bật\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;\"\u003e\n      \u003cli\u003eVị ngọt tự nhiên, thoảng mùi đất, lá mềm và dễ chín.\u003c\/li\u003e\n      \u003cli\u003eChín nhanh — tiện làm món ăn kèm vào buổi tối bận rộn.\u003c\/li\u003e\n      \u003cli\u003eDùng được trong món Trung Quốc, Nhật Bản, Hàn Quốc và các món phương Tây quen thuộc.\u003c\/li\u003e\n      \u003cli\u003eHợp với tỏi, nước tương, mè, nấm, đậu hũ và trứ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 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n    \u003col style=\"margin:0 0 0 18px;color:#334155;\"\u003e\n      \u003cli style=\"margin-bottom:10px;\"\u003e\n\u003cstrong\u003eCải bó xôi xào tỏi\u003c\/strong\u003e — Phi thơm \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi bóc vỏ\u003c\/a\u003e với chút dầu, thêm cải bó xôi và chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e. Đảo đến khi rau vừa bóng (1‑2 phút).\u003c\/li\u003e\n      \u003cli style=\"margin-bottom:10px;\"\u003e\n\u003cstrong\u003eCanh trong với cải bó xôi, đậu hũ \u0026amp; trứng đánh\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\"\u003eMón nước\u003c\/span\u003e — Đun nhỏ lửa \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\"\u003eđậu hũ cắt miếng\u003c\/a\u003e, rót trứng đánh tan vào, rồi thêm cải bó xôi nấu vừa mềm.\u003c\/li\u003e\n      \u003cli style=\"margin-bottom:10px;\"\u003e\n\u003cstrong\u003eMì nấm hương trộn mè và cải bó xôi\u003c\/strong\u003e — Trộn \u003ca href=\"\/vi\/products\/hakka-steamed-singapore-noodles-1kg\"\u003emì Singapore còn nóng\u003c\/a\u003e với \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương đã xào\u003c\/a\u003e, nước tương và chút \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e; cho cải bó xôi vào sau cùng.\u003c\/li\u003e\n      \u003cli style=\"margin-bottom:0;\"\u003e\n\u003cstrong\u003eThịt bò \u0026amp; cải bó xôi xào gừng\u003c\/strong\u003e — Xào nhanh \u003ca href=\"\/vi\/products\/angus-prime-shredded-beef-500g\"\u003ethịt bò thái sợi\u003c\/a\u003e với \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng thái sợi\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\"\u003enước tương\u003c\/a\u003e, rồi thêm cải bó xôi, đảo đến khi vừa chí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 10px;font-size:18px;font-weight:700;\"\u003eMẹo sơ chế\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;\"\u003e\n      \u003cli\u003eRửa kỹ bằng nước lạnh cho sạch cát rồi giũ ráo.\u003c\/li\u003e\n      \u003cli\u003eBỏ đầu cọng già; giữ cọng non để xào hoặc nấu canh.\u003c\/li\u003e\n      \u003cli\u003eNấu nhanh trên lửa lớn để giữ màu xanh (xào 1‑3 phút).\u003c\/li\u003e\n      \u003cli\u003eNêm lúc cuối, thêm vài giọt dầu mè cho thơ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 ý ăn kèm\u003c\/h3\u003e\n    \u003cul style=\"margin:0 0 0 18px;color:#334155;\"\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-yellow-onions-1kg\"\u003eHành tây vàng 1kg\u003c\/a\u003e — thêm vị ngọt cho món xào nhanh hoặc món om.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003eHaitian Dầu hào cao cấp 700g\u003c\/a\u003e — tạo lớp sốt bóng, đậm đà cho món xào.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003eChois Nấm shimeji - 150g\u003c\/a\u003e — thêm độ mềm giòn cho tô mì.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/ever-green-fresh-regular-tofu-900g\"\u003eEver Green Đậu hũ tươi thường - 900g\u003c\/a\u003e — bổ sung đạm cho món canh hoặc om.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\"\u003eEvergreen Mì Yangchun 500g\u003c\/a\u003e — làm món mì trộn mè–nước tương nhanh gọn.\u003c\/li\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/pace-farm-free-range-eggs-12-extra-large-700g\"\u003ePace Farm Trứng gà thả vườn - 12 XL\u003c\/a\u003e — tạo vân trứng mềm trong canh hoặc dùng cho món xào.\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 8px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng nhóm\u003c\/h3\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eXem thêm rau lá tươi cho món xào hoặc canh.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003ca href=\"\/vi\/collections\/leafy-vegetables\" style=\"color:#DB3A35;font-weight:700;white-space:nowrap;\"\u003eXem rau lá →\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 hàng\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 nhân viên giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Đơn hàng có thể đến 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 điểm đặ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 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ỏ. 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":48151503470879,"sku":"A0735745751947","price":3.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/6b3503b49c332c66a956e5635b996747ojvoQuXWcgzxx5MUQq5O6dYthaza2aX1_e8fc0488-f1fe-4d07-bd43-527f9770b410.jpg?v=1721715485"},{"product_id":"fresh-broccoli-approximately-900g-1000g","title":"Bông cải xanh 900g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 8px 20px;color:#0f172a;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;\"\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\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:20px;\"\u003e\u003ch1 style=\"margin:0 0 6px;font-size:24px;font-weight:800;\"\u003eBông cải xanh 900g\u003c\/h1\u003e\n\u003cp style=\"margin:0;color:#334155;\"\u003eBông giòn, cọng mềm ngọt — dùng cho bữa cơm ngày thường, từ xào, nướng đến canh và salad.\u003c\/p\u003e\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 10px;font-size:18px;font-weight:700;\"\u003eĐiểm nổi bật\u003c\/h3\u003e\n\u003cul style=\"margin:6px 0 0 18px;color:#334155;line-height:1.6;\"\u003e\n\u003cli\u003eBông chắc, khít và cọng mọng nước tạo độ giòn ngọt.\u003c\/li\u003e\n\u003cli\u003eDễ chế biến: chần nhanh, xào lửa lớn hoặc nướng đều hợp.\u003c\/li\u003e\n\u003cli\u003eGiữ màu xanh tốt, giúp món ăn trông tươi hơn.\u003c\/li\u003e\n\u003cli\u003eBông cải 900g cỡ gia đình — dùng cho món chính, món ăn kèm và chuẩn bị sẵn bữa ăn.\u003c\/li\u003e\n\u003c\/ul\u003e\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:14px;\"\u003e\n    \u003cdiv\u003e\n      \u003ch4 style=\"margin:0 0 4px;font-size:16px;font-weight:700;\"\u003eBông cải xanh xào tỏi với dầu hào\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eXào bông cải và cọng cắt lát với tỏi băm, chút \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e và một muỗng nước để áo đều. Muốn nhanh hơn, dùng \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi bóc vỏ\u003c\/a\u003e.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003ch4 style=\"margin:0 0 4px;font-size:16px;font-weight:700;\"\u003eBông cải xanh hấp với giấm gạo\u003c\/h4\u003e\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\"\u003eÍt calo\u003c\/span\u003e\n      \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eHấp đến khi xanh và vừa mềm giòn, rồi nêm chút muối và một ít \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\"\u003egiấm gạo trắng\u003c\/a\u003e để làm món ăn kèm thanh nhẹ, chua dịu.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003ch4 style=\"margin:0 0 4px;font-size:16px;font-weight:700;\"\u003eThịt bò xào kiểu truyền thống \u0026amp; bông cải xanh\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eÁp chảo \u003ca href=\"\/vi\/products\/angus-prime-shredded-beef-500g\"\u003ethịt bò Angus thái sợi đã ướp\u003c\/a\u003e, thêm bông cải chần rồi nêm chút \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003enước tương đậm\u003c\/a\u003e và chút nước để có lớp sốt bóng, đậm đà.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003ch4 style=\"margin:0 0 4px;font-size:16px;font-weight:700;\"\u003eLẩu nấm bông cải xanh \u0026amp; Đậu hũ\u003c\/h4\u003e\n      \u003cp style=\"margin:0;color:#334155;\"\u003eĐun nước lẩu vị nhẹ với \u003ca href=\"\/vi\/products\/haidilao-mushroom-flavor-hot-pot-seasoning-150g\"\u003egia vị lẩu nấm\u003c\/a\u003e, thêm \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-500g\"\u003eđậu hũ cứng\u003c\/a\u003e, rồi cho bông cải vào gần cuối để giữ màu xanh và độ giòn.\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ế\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;color:#334155;line-height:1.6;\"\u003e\n    \u003cli\u003eTách bông vừa ăn, gọt vỏ cứng của cọng rồi cắt phần lõi non để chín đều.\u003c\/li\u003e\n    \u003cli\u003eChần trong nước sôi có muối 1–2 phút rồi để ráo (ngâm nước đá nếu muốn rau xanh và giòn hơn).\u003c\/li\u003e\n    \u003cli\u003eKhi xào, dùng lửa lớn trong 2–4 phút và thêm chút nước hoặc nước dùng để rau chín bằng hơi.\u003c\/li\u003e\n    \u003cli\u003eNướng ở nhiệt cao (khoảng 200–220°C) trong 12–18 phút đến khi rìa bông ngả màu vàng nâu.\u003c\/li\u003e\n    \u003cli\u003eKhi nấu canh hoặc lẩu, cho bông cải vào 3–4 phút cuối để tránh quá chí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;\"\u003eGợi ý ăn kèm\u003c\/h3\u003e\n  \u003cul style=\"margin:6px 0 0 18px;color:#334155;line-height:1.7;\"\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\"\u003emì lúa mì Yangchun\u003c\/a\u003e để làm món nước nhanh gọn.\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\"\u003eNước tương đa dụng\u003c\/a\u003e để nêm món ăn.\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003eDầu mè nguyên chất\u003c\/a\u003e để thêm mùi thơm sau cùng.\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/australian-raw-king-prawns-peeled-tail-on-flash-frozen-700g\"\u003eTôm king chưa nấu chín\u003c\/a\u003e để xào hải sản.\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/pace-farm-free-range-eggs-12-extra-large-700g\"\u003eTrứng gà thả vườn\u003c\/a\u003e để làm cơm chiên hoặc trứng chiên với bông cải xanh.\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:16px;\"\u003e\n  \u003cdiv\u003e\n    \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eXem thêm cùng nhóm\u003c\/h3\u003e\n    \u003cp style=\"margin:0;color:#334155;\"\u003eXem thêm rau củ tươi để mua cùng.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv\u003e\n    \u003ca href=\"\/vi\/collections\/vegetables\" style=\"color:#DB3A35;font-weight:700;\"\u003eXem tất cả rau củ 2\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 hàng\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 nhân viên giao hàng theo \u003cstrong\u003ethời gian thực\u003c\/strong\u003e trực tuyến! Đơn hàng có thể đến 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 điểm đặ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 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ỏ. 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":48151505109279,"sku":"A0735745751978","price":4.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/118e6d912785716b9b3fa3631e0386d6irsLjwJveqrKbqK5g97R6eM0MaRnQci4.jpg?v=1712384937"},{"product_id":"frozen-yiwelingxian-corn-shrimp-paste-150g","title":"Tôm viên ngô Umami Food 150 g – tôm viên đông lạnh cho lẩu \u0026 súp","description":"\u003cp\u003eTôm viên ngô Umami Food 150 g kết hợp vị ngọt thanh của tôm tươi và độ giòn ngọt của hạt ngô vàng. Sản phẩm đông lạnh tiện dụng, nhanh chóng biến tấu thành topping cho lẩu, súp, cháo hay chiên rán.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eThành phần tươi ngon:\u003c\/strong\u003e Tôm nguyên chất kết hợp ngô vàng ngọt mát.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐóng viên sẵn:\u003c\/strong\u003e Viên tròn đều, dễ thao tác và gia tăng thẩm mỹ món ăn.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eChế biến nhanh:\u003c\/strong\u003e Hấp, luộc hoặc nấu lẩu chỉ từ 3–5 phút (tuỳ khẩu vị).\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhông chất bảo quản:\u003c\/strong\u003e Bảo quản đông lạnh giữ trọn vị ngọt tự nhiên và độ tươi.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 150 g:\u003c\/strong\u003e Phù hợp bữa ăn cho 1–2 người hoặc bổ sung vào thực đơn gia đình.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Umami Food(Yiweilingxian)","offers":[{"title":"Default Title","offer_id":48151516741919,"sku":"A648722766271","price":9.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_ac20b823-fbd4-4ab7-b8e4-8193bedd6fbd.jpg?v=1712385527"},{"product_id":"frozen-xian-mei-lai-sea-duck-egg-yolk-shrimp-paste-160g","title":"Xian Mei Lai Chả Tôm Viên Trứng Vịt Muối 160 g – tôm viên trứng muối béo ngậy","description":"Sản phẩm hải sản đông lạnh kết hợp lòng đỏ trứng vịt biển với tôm quết cho hương vị đậm đà. \u003cbr\u003e Gói Xianmeilai 160g là nguyên liệu tiện dùng cho các món ăn phong cách châu Á.","brand":"Xianmeilai","offers":[{"title":"Default Title","offer_id":48151517462815,"sku":"A6950327003151","price":10.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1.webp?v=1712385564"},{"product_id":"osawa-frozen-wagyu-beef-slices-250g","title":"Thịt Bò Wagyu Úc Osawa 250 g – lát mỏng đông lạnh cho lẩu \u0026 nướng","description":"\u003cp\u003eThịt bò Wagyu thái lát đông lạnh Osawa đóng gói 250g, tiện dùng cho bữa ăn tại nhà.\u003cbr\u003e Từng lát có vân mỡ đan xen, cho cảm giác mềm tan cùng vị bò đậm đà.\u003cbr\u003e Bạn có thể dùng để xào hoặc nấu lẩu Nhật Bản truyền thống.\u003cbr\u003e Thịt chế biến nhanh, được đóng gói để giữ độ tươi ngon.\u003c\/p\u003e\n\n\u003cp\u003eXem tất cả sản phẩm trong bộ sưu tập thịt bò: \u003ca href=\"\/vi\/collections\/angus-wagyu-beef\"\u003eThịt bò\u003c\/a\u003e.\u003c\/p\u003e","brand":"Osawa","offers":[{"title":"Default Title","offer_id":48151537254687,"sku":"A702785166604","price":12.39,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_71d62d90-d24e-45fa-b39f-d217e5cadf36.jpg?v=1736929190"},{"product_id":"old-northern-frozen-pork-belly-slices-family-pack-600g","title":"Thịt ba chỉ cuộn Old Beifang 600 g – đông lạnh miếng mỏng cho lẩu \u0026 nướng","description":"\u003cp\u003eThịt ba chỉ cuộn Old Beifang đông lạnh cấp đông nhanh giữ trọn vị béo ngọt tự nhiên, miếng thái mỏng dễ chín, phù hợp cho lẩu, nướng và xào.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eCấp đông IQF:\u003c\/strong\u003e Đông lạnh nhanh giữ độ tươi và hương vị thịt.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eMiếng mỏng chuẩn lẩu \u0026 nướng:\u003c\/strong\u003e Dễ chín đều, thấm đều gia vị.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eThịt ba chỉ tươi ngon:\u003c\/strong\u003e Vân mỡ xen kẽ, vị béo ngậy, mềm ngọt.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 600 g:\u003c\/strong\u003e Phù hợp cho gia đình 3–4 người hoặc tiệc BBQ nhỏ.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐóng gói tiện lợi:\u003c\/strong\u003e Túi zip dễ bảo quản, giữ lạnh lâu.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Old Beifang","offers":[{"title":"Default Title","offer_id":48151593845023,"sku":"A9333127007722","price":17.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_83ea4840-90a0-494e-aa73-558ded4e2b80.jpg?v=1735370743"},{"product_id":"osawa-frozen-pork-belly-250g","title":"Heo Ba Chỉ Úc Osawa 250 g – lát mỏng cho lẩu \u0026 nướng","description":"\u003cp\u003eThịt ba chỉ heo Úc cao cấp Osawa thái lát mỏng, giữ trọn độ tươi ngon và vị ngọt tự nhiên. Sản phẩm đông lạnh sẵn, tiện lợi cho các bữa lẩu, nướng tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eThịt ba chỉ Úc:\u003c\/strong\u003e Vân mỡ xen kẽ hài hòa, mềm ngọt, không ngấy.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eLát mỏng chuẩn:\u003c\/strong\u003e Chín nhanh, dễ thấm gia vị, lý tưởng cho lẩu \u0026 nướng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh sâu:\u003c\/strong\u003e Bảo quản ở -18°C, giữ trọn độ tươi và dưỡng chất.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 250 g:\u003c\/strong\u003e Phù hợp cho 2–3 người thưởng thức.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐóng gói tiện lợi:\u003c\/strong\u003e Khay nhựa bọc màng kín, dễ bảo quản và vệ sinh.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Osawa","offers":[{"title":"Default Title","offer_id":48151594533151,"sku":"A702785166666","price":8.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_16cc3397-4c45-43ef-86b0-3d384c7473ee.jpg?v=1712386657"},{"product_id":"old-northern-clean-pork-tripe-1kg-frozen","title":"Lao Beifang Bao tử heo làm sạch đông lạnh - Bao tử heo (Dạ dày heo) 1kg","description":"\u003cp\u003eLao Beifang Bao tử heo đông lạnh đã được làm sạch kỹ và loại bỏ mỡ, tiện dùng cho các món quen thuộc. Gói 1 kg có độ dai đặc trưng, vị đậm đà, dùng nấu canh, kho, xào hoặc lẩ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\u003eĐã làm sạch \u0026amp; loại bỏ mỡ:\u003c\/strong\u003e Được sơ chế sẵn nên chỉ cần chuẩn bị thêm rất ít trước khi nấu.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBảo quản đông lạnh:\u003c\/strong\u003e Giữ chất lượng và hương vị; rã đông rồi chế biến theo nhu cầu.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNhiều cách chế biến:\u003c\/strong\u003e Dùng nấu canh bao tử tiêu, kho nồi đất, xào hoặc nấu lẩu.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eDai mà vẫn mềm:\u003c\/strong\u003e Bao tử chắc nhưng mềm khi nhai, thấm nước dùng và nước sốt.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMẹo chế biến:\u003c\/strong\u003e Chần sơ với gừng và hành lá trước khi nấu để dậy mùi thơm.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Lao Beifang","offers":[{"title":"Default Title","offer_id":48151597777183,"sku":"A9333127007500","price":11.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_758d4893-bcdb-4772-9e86-2352cc9d7df4.jpg?v=1712386694"},{"product_id":"osawa-frozen-pork-neck-250g","title":"Thịt Cổ Heo (Pork Neck) Osawa 250 g – đông lạnh, cắt lát cho lẩu \u0026 xào","description":"\u003cp\u003eThịt cổ heo Osawa đông lạnh 250 g, cắt lát mỏng, xen kẽ nạc và mỡ hài hòa, giữ trọn vị ngọt tự nhiên. Osawa Enterprises – nhà nhập khẩu thực phẩm cao cấp tại Úc, cam kết chất lượng tuyệt đối.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eCắt lát mỏng:\u003c\/strong\u003e Nạc mỡ đan xen, mềm ngậy, dễ thấm gia vị.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh nhanh:\u003c\/strong\u003e Giữ độ tươi và dưỡng chất như mới mổ.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003ePhù hợp đa dụng:\u003c\/strong\u003e Lẩu, xào, nướng BBQ hay stir-fry đều ngon miệng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 250 g:\u003c\/strong\u003e Phù hợp khẩu phần 1–2 người.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eXuất xứ Úc:\u003c\/strong\u003e Tiêu chuẩn an toàn thực phẩm nghiêm ngặt.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Osawa","offers":[{"title":"Default Title","offer_id":48151598399775,"sku":"A702785166673","price":7.99,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_55b4658d-eab1-4278-8b06-a77240507421.jpg?v=1712386702"},{"product_id":"tianfu-boneless-duck-feet-frozen-100g","title":"Chân Vịt Bỏ Xương Tianfu 100 g – chân vịt đông lạnh, giàu collagen","description":"\u003cp\u003eChân vịt bỏ xương Tianfu đông lạnh 100 g, giữ nguyên vị ngọt tự nhiên và độ giòn sần sật, là nguyên liệu lý tưởng cho lẩu, xào hoặc nhậu tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eBỏ xương sẵn:\u003c\/strong\u003e Tiết kiệm thời gian sơ chế, tiện lợi cho bữa ăn nhanh gọn.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eGiàu collagen:\u003c\/strong\u003e Hỗ trợ làm đẹp da, tăng cường sức mạnh xương khớp.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh cấp đông nhanh:\u003c\/strong\u003e Giữ trọn độ tươi ngon và dinh dưỡng sau khi rã đông.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003ePhù hợp đa dạng món ăn:\u003c\/strong\u003e Lẩu, rim mắm, xào sả ớt, nướng BBQ đều thơm ngon.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 100 g:\u003c\/strong\u003e Phần ăn vừa đủ cho 1–2 người hoặc làm topping trang trí món ăn.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Tianfu","offers":[{"title":"Default Title","offer_id":48151613571359,"sku":"A9720200802662","price":10.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_7dac1911-ec66-4982-8a47-2e8532c8a911.jpg?v=1712386913"},{"product_id":"frozen-essential-hot-pot-ingredient-tribute-vegetable-250g","title":"Rau tiến vua Gong Cai đông lạnh (thân xà lách măng bào sợi) - Món nhúng lẩu không thể thiếu 250g","description":"\u003cp\u003eRau tiến vua Gong Cai—còn gọi là thân xà lách măng bào sợi—được cắt thành dải, cấp đông nhanh để giữ độ giòn, vị thanh. Dùng nhúng shabu-shabu\/lẩu, xào nhanh hoặc trộn salad lạnh đều ngon. Nấu trực tiếp từ đông lạnh rồi nêm theo khẩu vị.\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\u003eTiện nhúng lẩu:\u003c\/strong\u003e Chỉ cần trụng vài giây, rau vẫn giữ độ giòn.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eVị nhẹ, thanh mát:\u003c\/strong\u003e Thân xà lách măng dễ kết hợp với các loại nước dùng và nước sốt.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNhiều cách thưởng thức:\u003c\/strong\u003e Thích hợp để nhúng lẩu, xào hoặc trộn món nguội.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eĐóng gói tiện lợi:\u003c\/strong\u003e Phần ăn 250 g—dễ chia phần ăn và chế biến.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eKhông thêm gia vị:\u003c\/strong\u003e Vị nhẹ, chưa nêm sẵn để bạn thêm gia vị theo ý thích.\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Umall Fresh","offers":[{"title":"Default Title","offer_id":48151725408543,"sku":"A9333127007678","price":15.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/aae2d1ecc726ecdfe6c68a2de43efc88e0Zi3nMNsRkMsf7tNxixT1ewjglp25Vk.jpg?v=1736583733"},{"product_id":"frozen-top-quality-crispy-skin-sausages-400g","title":"Xúc xích da giòn Old Beifang 400 g – đông lạnh giòn tan","description":"\u003cp\u003eXúc xích da giòn Old Beifang với lớp vỏ rụm giòn, ruột thịt đậm đà, đóng gói 400 g tiện lợi, là lựa chọn hoàn hảo cho các bữa ăn nhanh và party tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eDa giòn tan:\u003c\/strong\u003e Vỏ áo đặc biệt tạo độ giòn rụm hấp dẫn.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eThịt đậm đà:\u003c\/strong\u003e Hương vị thịt heo ướp gia vị thấm đều.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh cấp đông nhanh:\u003c\/strong\u003e Giữ trọn độ tươi ngon và chất dinh dưỡng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eChế biến dễ dàng:\u003c\/strong\u003e Chiên, nướng hay luộc 5–7 phút là dùng được.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 400 g:\u003c\/strong\u003e Phù hợp cho 3–4 người thưởng thức.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Old Beifang","offers":[{"title":"Default Title","offer_id":48151795466527,"sku":"A9354652000736","price":10.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_59bccc32-0284-4504-9da9-cbaaba3e19ce.jpg?v=1736929173"},{"product_id":"frozen-old-northern-large-leaf-crispy-tripe-strips-200g","title":"Old Beifang Sách Bò (Omasum) Cắt Sợi 200 g – sách bò giòn sật","description":"\u003cp\u003eSách bò (dạ dày thứ ba) cắt sợi, đông lạnh sâu ở -18°C, giữ trọn độ giòn sật và hương vị tươi ngon. Sản phẩm tiện lợi, đã làm sạch, không cần sơ chế nhiều, phù hợp chế biến xào, lẩu hoặc soup.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e100% sản phẩm Úc:\u003c\/strong\u003e Chế biến và đóng gói tại Australia, nguồn gốc minh bạch.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh IQF:\u003c\/strong\u003e Công nghệ cấp đông nhanh bảo toàn cấu trúc và độ tươi.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eSẵn sàng sử dụng:\u003c\/strong\u003e Đã làm sạch và cắt sợi, tiết kiệm thời gian sơ chế.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐộ giòn đặc trưng:\u003c\/strong\u003e Sách bò dai giòn, tăng hương vị cho món xào và lẩu.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 200 g:\u003c\/strong\u003e Phần vừa đủ cho 2–3 người dùng.","brand":"Old Beifang","offers":[{"title":"Default Title","offer_id":48151834558751,"sku":"A9333127007418","price":6.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_54768ff7-f616-4488-ac07-e97580a6e084.jpg?v=1736583716"},{"product_id":"frozen-old-northern-style-beef-tripe-strips-250g","title":"Lòng Bò Thái Sợi Old Beifang 250 g – giòn sần sật cho lẩu \u0026 xào","description":"\u003cp\u003eSách bò cắt sợi kiểu Old Beifang đông lạnh, phần 250g, có hương vị đậm đà và kết cấu riêng, phù hợp chế biến các món truyền thống. Có thể nấu trực tiếp từ đông lạnh.\u003c\/p\u003e\n\n\u003cp\u003eXem tất cả thịt bò trong bộ sưu tập chính: \u003ca href=\"\/vi\/collections\/angus-wagyu-beef\"\u003eThịt bò\u003c\/a\u003e.\u003c\/p\u003e","brand":"Old Beifang","offers":[{"title":"Default Title","offer_id":48151835115807,"sku":"A9333127008200","price":4.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_af924c2b-e637-426e-9308-3bfb7f0326b0.jpg?v=1736583715"},{"product_id":"frozen-old-northern-shredded-beef-tripe-250g","title":"Lao Beifang Lá sách bò thái lát đông lạnh - lá sách bò nấu lẩu 250g","description":"\u003cp\u003eLá sách bò đông lạnh Lao Beifang có xuất xứ Úc, đã làm sạch và thái mỏng, cho độ giòn đặc trưng khi nhúng lẩu. Các lát lá sách mềm, chỉ cần nhúng vài giây trong nước dùng sôi hoặc đảo nhanh trên chảo.\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\u003eSẵn sàng nhúng lẩu:\u003c\/strong\u003e Lá sách bò thái mỏng, có độ giòn nhẹ.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eChế biến nhanh:\u003c\/strong\u003e Nhúng trong nước dùng sôi chỉ vài giây để có độ giòn vừa ăn.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eĐông lạnh tiện dùng:\u003c\/strong\u003e Cấp đông giúp giữ chất lượng; mỗi phần ăn 250 g tiện sử dụng.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eNhiều cách chế biến:\u003c\/strong\u003e Dùng nấu lẩu, xào hoặc làm món nguội cay.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSản phẩm từ Úc:\u003c\/strong\u003e Xuất xứ Úc, được làm sạch kỹ để giữ vị tự nhiên.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eXem tất cả sản phẩm trong bộ sưu tập thịt bò: \u003ca href=\"\/vi\/collections\/angus-wagyu-beef\"\u003eThịt bò\u003c\/a\u003e.\u003c\/p\u003e","brand":"Lao Beifang","offers":[{"title":"Default Title","offer_id":48151835672863,"sku":"A9333127007319","price":4.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_d4045bca-f5af-4f52-8071-3b8a4f3d6c23.jpg?v=1736583714"},{"product_id":"frozen-tianfu-thousand-layer-tripe-150g","title":"Bao Tử Bò Xếp Lớp Tianfu 150 g – nguyên liệu lẩu Tứ Xuyên","description":"\u003cp\u003eBao tử bò xếp lớp Tianfu 150 g, sản xuất tại Úc theo công nghệ chuẩn Tứ Xuyên, cấp đông sâu giúp giữ trọn độ giòn sần sật và vị ngọt tự nhiên. Sản phẩm là lựa chọn tuyệt vời cho nồi lẩu cay hoặc nhúng lẩu thập cẩm tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eBao tử bò xếp lớp:\u003c\/strong\u003e Miếng thịt giòn, dai ngon với vân nhiều lớp đặc trưng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eSản xuất tại Úc:\u003c\/strong\u003e Nguyên liệu bò 100% Australia, tuân thủ tiêu chuẩn an toàn thực phẩm.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eCấp đông sâu (-18°C):\u003c\/strong\u003e Giữ nguyên cấu trúc sần sật, bảo toàn hương vị.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 150 g:\u003c\/strong\u003e Phù hợp nhúng lẩu 2–3 người, tiện lợi không dư thừa.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eChế biến nhanh:\u003c\/strong\u003e Rã đông rồi nhúng lẩu 2–3 phút đến độ chín vừa.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Tianfu","offers":[{"title":"Default Title","offer_id":48151836328223,"sku":"978006077176","price":6.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_32b0d498-b2d9-4926-9574-9b9e9c9faeab.jpg?v=1736583711"},{"product_id":"frozen-tianfu-premium-crispy-pork-belly-200g","title":"Lòng Giòn Heo Tianfu 200 g – đồ nhúng lẩu, giòn sật","description":"\u003cp\u003eLòng heo giòn Tianfu 200 g đã sơ chế sẵn, cấp đông nhanh giữ trọn độ dai sật. Sau khi rã đông, chỉ cần nấu khoảng 7 phút, bạn đã có ngay topping lẩu giòn ngon, chuẩn vị Tứ Xuyên tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eCấp đông nhanh:\u003c\/strong\u003e Công nghệ IQF bảo quản độ giòn tự nhiên.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eHương vị Tứ Xuyên:\u003c\/strong\u003e Đậm đà gia vị cay nồng, kích thích vị giác.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eSơ chế sẵn:\u003c\/strong\u003e Tiết kiệm thời gian, chỉ cần rã đông và nấu chín.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 200 g:\u003c\/strong\u003e Phù hợp cho 2–3 người thưởng thức lẩu.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eSản xuất tại Úc:\u003c\/strong\u003e Nguyên liệu heo địa phương đảm bảo chất lượng cao.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Tianfu","offers":[{"title":"Default Title","offer_id":48151836393759,"sku":"9720200802334","price":6.89,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_1bea1360-608d-46fe-8ff9-47512b5c0d53.jpg?v=1736583710"},{"product_id":"frozen-tianfu-premium-beef-bone-marrow-200g","title":"Tủy Xương Bò Tianfu 200 g – nguyên liệu lẩu \u0026 xào chuẩn vị Tứ Xuyên","description":"\u003cp\u003eTủy xương bò đông lạnh Tianfu 200g đã chia phần, tiện dùng khi nấu ăn. Tủy bò giúp nước súp và nước dùng thêm vị bò đậm đà.\u003c\/p\u003e\n\n\u003cp\u003eXem tất cả sản phẩm trong bộ sưu tập thịt bò: \u003ca href=\"\/vi\/collections\/angus-wagyu-beef\"\u003eThịt bò\u003c\/a\u003e.\u003c\/p\u003e","brand":"Tianfu","offers":[{"title":"Default Title","offer_id":48151837475103,"sku":"9720200802556","price":10.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_0f1583df-2b13-4db2-aa7a-f79d474286f1.jpg?v=1736583707"},{"product_id":"frozen-yiwei-lingxian-shrimp-paste-150g","title":"Thịt Tôm Băm Yiwei Lingxian 150 g – tôm xay nhuyễn cho lẩu \u0026 há cảo","description":"\u003cp\u003eThịt tôm băm nhuyễn 100% từ tôm tươi Úc, giữ trọn vị ngọt tự nhiên. Đóng gói 150 g tiện lợi, không chất bảo quản, sẵn sàng cho mọi món yêu thích. Dễ dàng chế biến nhanh chỉ 3–5 phút.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eTôm tươi Úc:\u003c\/strong\u003e 100% tôm bóc vỏ, xay nhuyễn, giữ vị ngọt tự nhiên.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐa dụng trong bếp:\u003c\/strong\u003e Thích hợp làm há cảo, chả tôm, lẩu hải sản.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhông chất bảo quản:\u003c\/strong\u003e Đóng gói an toàn, nhập khẩu từ Australia.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKích thước vừa đủ:\u003c\/strong\u003e 150 g phục vụ 1–2 người.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eDễ chế biến:\u003c\/strong\u003e Nấu chín nhanh chỉ 3–5 phút (điều chỉnh theo món).\u003c\/li\u003e\u003c\/ul\u003e","brand":"Yi Wei Ling Xian","offers":[{"title":"Default Title","offer_id":48151837540639,"sku":"A0793618312732","price":11.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/5b236f315e927842a00f925b189e5dbbmLYXwF2VDCdoIvE8n0TPjcwPMqe3Nx34.jpg?v=1736583704"},{"product_id":"frozen-jun-crab-sticks-200g","title":"Thanh Cua Giả Jun Pacific 200 g – nguyên liệu sushi \u0026 salad","description":"\u003cp\u003eThanh cua giả đông lạnh Jun Pacific 200 g mang đến hương vị ngọt nhẹ, kết cấu dai mềm như cua tươi. Sản phẩm tiện lợi, đã chế biến sẵn, phù hợp cho đa dạng món ăn từ sushi đến lẩu hải sản.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh tươi ngon:\u003c\/strong\u003e Bảo quản lạnh nhanh giúp giữ kết cấu và hương vị.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKết cấu dai mềm:\u003c\/strong\u003e Mô phỏng thịt cua tự nhiên, dễ hoà quyện vào món ăn.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eTiện lợi \u0026 nhanh gọn:\u003c\/strong\u003e Đã chế biến sẵn, chỉ cần rã đông trước khi dùng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐa dụng trong bếp:\u003c\/strong\u003e Phù hợp sushi, salad, lẩu hải sản hoặc cơm cuộn.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 200 g:\u003c\/strong\u003e Phần vừa đủ cho 2–3 người.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Jun","offers":[{"title":"Default Title","offer_id":48151841571103,"sku":"8854241006312","price":2.99,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_367de11b-57bc-4a5f-b8a9-afb49659b5f2.jpg?v=1736583694"},{"product_id":"frozen-china-royal-kitchen-squid-balls-430g","title":"China Royal Kitchen Viên Mực Nang 430 g – dai giòn, ngọt thịt","description":"\u003cp\u003eViên mực nang (Cuttlefish Balls) China Royal Kitchen 430 g đông lạnh giữ trọn độ tươi ngon và dai giòn, dễ chế biến. Sản phẩm lý tưởng cho lẩu, hấp, xào hay chiên giòn tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eXuất xứ Úc:\u003c\/strong\u003e Sản xuất từ ít nhất 54% nguyên liệu Úc, đảm bảo chất lượng và an toàn vệ sinh.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eHương vị ngọt thịt:\u003c\/strong\u003e Từng viên chứa mực nang tươi, vị biển tự nhiên đậm đà.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eDai giòn đặc trưng:\u003c\/strong\u003e Cấu trúc đàn hồi, không bở, ăn đã miệng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eChế biến nhanh:\u003c\/strong\u003e Luộc, hấp hoặc chiên giòn chỉ trong 3–5 phút.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 430 g:\u003c\/strong\u003e Phù hợp nấu lẩu cho 2–4 người hoặc bảo quản trữ đông tiện lợi.\u003c\/li\u003e\u003c\/ul\u003e","brand":"China Royal Kitchen","offers":[{"title":"Default Title","offer_id":48151851729183,"sku":"A9316429001254","price":9.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_7043deca-99d6-4385-9c66-fd5525f52a31.jpg?v=1736583667"},{"product_id":"frozen-chinas-royal-kitchen-beef-meatballs-430g","title":"Thịt Viên Bò Chinese Royal Kitchen 430 g – đông lạnh tiện nấu lẩu, xào \u0026 chiên","description":"\u003cp\u003eBò viên China's Royal Kitchen được đông lạnh để giữ độ tươi và hương vị. Mỗi gói 430g gồm những viên bò mọng nước, chất lượng cao, tiện chế biến thành nhiều món ăn.\u003c\/p\u003e\n\n\u003cp\u003eXem tất cả thịt bò trong danh mục chính: \u003ca href=\"\/vi\/collections\/angus-wagyu-beef\"\u003eThịt bò\u003c\/a\u003e.\u003c\/p\u003e","brand":"China Royal Kitchen","offers":[{"title":"Default Title","offer_id":48151852286239,"sku":"A9316429001247","price":9.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_8a1c329d-2937-4d39-a062-4fdae3f5d08d.jpg?v=1736583666"},{"product_id":"frozen-chinas-royal-kitchen-new-bamboo-meatballs-430g","title":"Viên Chả Heo Hsin-Chu 430 g – topping lẩu, bún \u0026 súp","description":"\u003cp\u003eViên chả heo Hsin-Chu 430 g đông lạnh, làm từ 88% thịt heo Úc tươi ngon, giữ độ dai giòn đặc trưng. Sản phẩm lý tưởng cho các món lẩu, bún, súp hay xào tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eThịt heo Úc chất lượng:\u003c\/strong\u003e Nguyên liệu chính từ thịt heo tươi, đảm bảo an toàn và vị ngọt tự nhiên.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh nhanh (IQF):\u003c\/strong\u003e Giữ trọn kết cấu dai mềm, giảm hao hụt dưỡng chất khi rã đông.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eChế biến nhanh gọn:\u003c\/strong\u003e Trụng trong nước sôi 3–4 phút, sẵn sàng làm topping lẩu, bún \u0026amp; súp.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐa dụng:\u003c\/strong\u003e Phù hợp cho lẩu, xào chua ngọt, súp và các món nóng khác.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKhối lượng 430 g:\u003c\/strong\u003e Vừa đủ cho 3–4 người, tiện cho bữa ăn gia đình hoặc tiệc nhỏ.\u003c\/li\u003e\u003c\/ul\u003e","brand":"China Royal Kitchen","offers":[{"title":"Default Title","offer_id":48151854186783,"sku":"A9316429001223","price":9.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_033d6c53-f7bf-4e8f-84a2-ccd6533627f7.jpg?v=1736583662"},{"product_id":"frozen-anyi-osmanthus-cake-300g","title":"Bánh hoa quế Anjoy đông lạnh 300 g – mềm dẻo, thơm ngọt","description":"\u003cp\u003eBánh hoa quế Anjoy đông lạnh được làm từ bột gạo tinh tuyển và cánh hoa quế thiên nhiên, dẻo mềm, thơm ngọt đặc trưng. Chỉ cần hấp 6–8 phút, bạn đã có món bánh tráng miệng thanh mát, hấp dẫn.\u003c\/p\u003e\u003cp\u003eThương hiệu Anjoy (Trung Quốc) nổi tiếng với các sản phẩm bánh đông lạnh chất lượng, tiện lợi và an toàn vệ sinh.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eHương hoa quế tự nhiên:\u003c\/strong\u003e Thơm dịu, tinh tế từ cánh hoa quế nguyên chất.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eKết cấu mềm dẻo:\u003c\/strong\u003e Bột gạo mịn, dai vừa phải, tan ngay trong miệng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eDễ chế biến:\u003c\/strong\u003e Hấp 6–8 phút là bánh chín mềm, giữ đầy đủ hương vị.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003ePhù hợp ăn vặt, tráng miệng:\u003c\/strong\u003e Thanh mát, không béo ngậy, dễ ăn.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐóng gói 300 g:\u003c\/strong\u003e Gồm 8 miếng cắt sẵn, dễ chia khẩu phần cho gia đình.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Anyo","offers":[{"title":"Default Title","offer_id":48151872799007,"sku":"A6971738650017","price":2.89,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_137a59a7-e24e-4d1a-b54a-f7bcbc58fcb7.jpg?v=1712389542"},{"product_id":"frozen-likoufu-red-bean-crystal-cakes-pack-of-12-360g","title":"Bánh Crystal Nhân Đậu Đỏ Likoufu 360 g × 12 – đông lạnh, nhân mềm dẻo","description":"\u003cp\u003eBánh pha lê nhân đậu đỏ LIKOFU là món tráng miệng đông lạnh với lớp vỏ trong veo như thạch và phần nhân đậu đỏ nghiền ngọt, đậm vị. Mỗi gói có 12 cái, mỗi cái 30g.\u003c\/p\u003e","brand":"LIKOFU","offers":[{"title":"Default Title","offer_id":48151886627103,"sku":"6902230163835","price":4.39,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_0f96aa68-42c3-4951-87b1-0cdd8dfd9a08.jpg?v=1712389667"},{"product_id":"frozen-likoufu-aromatic-sesame-coconut-rolls-8-pieces-280g","title":"Bánh Cuộn Vừng Dừa Likoufu 280 g (8 chiếc) – bánh đông lạnh thơm ngon","description":"\u003cp\u003eBánh cuộn mè dừa LIKOFU là món tráng miệng đông lạnh thơm mùi mè và dừa. Mỗi gói có 8 cái, tổng trọng lượng 280g; chỉ cần rã đông nhanh là có thể thưởng thức.\u003c\/p\u003e","brand":"LIKOFU","offers":[{"title":"Default Title","offer_id":48151893410079,"sku":"6902230158343","price":3.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_0b0c4190-9224-41c4-ba9e-ab0ed7281c6e.jpg?v=1712389736"},{"product_id":"frozen-likoufu-malaysian-steamed-cake-8-pieces-350g","title":"Bánh Hấp Malaysia Likoufu 360 g (8 cái) – mềm xốp, thơm ngon tiện lợi","description":"\u003cp\u003eBánh hấp Malaysia LIKOFU là món tráng miệng truyền thống với vị ngọt đậm đà, kết cấu mềm xốp. Gói đông lạnh có 8 cái, tổng trọng lượng 350g; bạn có thể lấy từ ngăn đông, hấp rồi dùng ngay để thưởng thức hương vị Malaysia tại nhà.\u003c\/p\u003e","brand":"LIKOFU","offers":[{"title":"Default Title","offer_id":48151910154527,"sku":"6902230153225","price":5.39,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_f529492b-2dee-4109-863c-ad734e711c8c.jpg?v=1712389884"},{"product_id":"frozen-mingfa-quick-freeze-tripe-knots-200g","title":"Ming Fa Bao Tử Bò Thắt Nút 200 g – đông lạnh sần sật cho lẩu \u0026 xào","description":"\u003cp\u003eLá sách thắt nút MINGFA đã được thắt nút sẵn, tiện chế biến các món châu Á. Gói 200g được cấp đông nhanh để giữ độ tươi và hương vị, sẵn để nấu.\u003c\/p\u003e","brand":"MINGFA","offers":[{"title":"Default Title","offer_id":48152071373087,"sku":"6784521100206","price":2.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_6b9a8886-20f7-48c8-ba8e-1de7834452e4.jpg?v=1712390364"},{"product_id":"frozen-mingfa-quick-freeze-b-thinly-sliced-offal-whole-sheet-200g","title":"Váng Đậu (Yuba) Ming Fa 200 g – váng đậu mỏng cho lẩu \u0026 xào","description":"MINGFA Quick-Freeze B là nội tạng đông lạnh dạng nguyên tấm, thái mỏng, đóng gói 200g, phù hợp chế biến món Á.\u003cbr\u003eĐược cấp đông nhanh để giữ độ tươi và hương vị, làm nguyên liệu chất lượng cho bữa ăn.","brand":"MINGFA","offers":[{"title":"Default Title","offer_id":48152083824927,"sku":"6910521888558","price":2.69,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_0b3fa238-fff6-4296-9f3c-57d0c56d1f7f.jpg?v=1712390406"},{"product_id":"frozen-old-northern-boneless-duck-feet-8pcs","title":"Da Vịt Không Xương Old Beifang 8 miếng – topping lẩu \u0026 mì cay","description":"\u003cp\u003eDa vịt không xương Old Beifang được sơ chế sạch, cấp đông nhanh ngay tại Úc, giữ độ giòn dai và hương vị tự nhiên. Sản phẩm là nguyên liệu lý tưởng cho các món lẩu, mì cay hay hotpot tại gia. Thương hiệu Old Beifang (老北方) nổi tiếng với các thực phẩm lẩu chuẩn vị Trung Quốc.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eKhông xương, sẵn sàng dùng:\u003c\/strong\u003e Tiết kiệm thời gian sơ chế.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐông lạnh IQF:\u003c\/strong\u003e Giữ trọn độ tươi ngon và cấu trúc giòn dai.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003e8 miếng tiện lợi:\u003c\/strong\u003e Đủ dùng cho 2–3 người hoặc bữa tiệc gia đình.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐa dụng:\u003c\/strong\u003e Phù hợp topping lẩu, mì cay, hotpot, xào hoặc nướng nhanh.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eXuất xứ Úc:\u003c\/strong\u003e Sản xuất bởi Fuda Group Pty Ltd, đảm bảo vệ sinh an toàn.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Old Beifang","offers":[{"title":"Default Title","offer_id":48152117444895,"sku":"A9333127007456","price":7.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_24ef5bee-5dd6-4e15-9fc4-73279f21f9ee.jpg?v=1785308366"},{"product_id":"frozen-northern-beef-tongue-rolls-200g","title":"Lưỡi Bò Cuộn Beifang 200 g – lẩu bò \u0026 nướng xiên","description":"\u003cp\u003eLưỡi bò cuộn Beifang được đóng gói đông lạnh 200g để giữ độ tươi và hương vị. Vị riêng của lưỡi bò là lựa chọn cho bạn khi muốn đổi món.\u003c\/p\u003e\n\n\u003cp\u003eXem thêm các sản phẩm thịt bò: \u003ca href=\"\/vi\/collections\/angus-wagyu-beef\"\u003eThịt bò\u003c\/a\u003e.\u003c\/p\u003e","brand":"Beifang","offers":[{"title":"Default Title","offer_id":48152130158879,"sku":"A9353775001361","price":14.89,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_4ddff160-7100-4e4a-8b70-0f506580eaf8.jpg?v=1712390561"},{"product_id":"frozen-tianfu-braised-pork-intestines-200g","title":"Lòng heo ngũ vị Tianfu 200 g – lẩu xào nướng chuẩn vị Tứ Xuyên","description":"\u003cp\u003eLòng heo ngũ vị Tianfu được ướp theo công thức Tứ Xuyên chuẩn, mang đến hương vị đậm đà, cay nồng đặc trưng. Sản phẩm đông lạnh tiện lợi, chỉ cần rã đông và nấu trong 10 phút, phù hợp lẩu, xào và nướng tại gia.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eNgũ vị hảo hạng:\u003c\/strong\u003e Star anise, quế, hồi, tiêu... hòa quyện tạo vị cay ấm.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eSản xuất tại Úc:\u003c\/strong\u003e Dùng nguyên liệu \u0026gt;99% Úc, bảo đảm an toàn vệ sinh.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eTiện chế biến:\u003c\/strong\u003e Rã đông, nấu nhanh trong 10 phút, tiết kiệm thời gian.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eThịt lòng dai giòn:\u003c\/strong\u003e Thấm đều gia vị, giữ độ tươi ngon tự nhiên.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐóng gói 200 g:\u003c\/strong\u003e Vừa đủ cho 2–3 người, dễ bảo quản và chia sẻ.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Tianfu","offers":[{"title":"Default Title","offer_id":48152145068319,"sku":"A9720200802112","price":14.89,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/8d7fcfd6a449cf323371314daa9e062bYMFgvFAz9NdYWAcMUcAsIS6yRzl7kOgC.jpg?v=1736583649"},{"product_id":"frozen-old-northern-premium-duck-intestines-200g","title":"Lòng Vịt Đông Lạnh Old Beifang 200 g – vị Bắc truyền thống, tươi giòn","description":"\u003cp\u003eLòng vịt đông lạnh Old Beifang 200 g, nguồn gốc Úc, đã làm sạch kỹ, giữ nguyên độ giòn sần sật và vị ngọt tự nhiên, đậm đà phong cách ẩm thực miền Bắc Trung Quốc.\u003c\/p\u003e\u003ch2\u003eĐặc sắc sản phẩm:\u003c\/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eChế biến nhanh:\u003c\/strong\u003e Lòng vịt đã cắt sẵn và sơ chế sạch, chỉ cần rã đông và xào, nấu lẩu hoặc nướng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eGiữ kết cấu giòn:\u003c\/strong\u003e Công nghệ cấp đông nhanh khóa chặt độ tươi, không mất độ sần sật.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eĐóng gói tiện lợi:\u003c\/strong\u003e Khối lượng 200 g vừa đủ, dễ bảo quản và chia khẩu phần.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003eGiàu dưỡng chất:\u003c\/strong\u003e Nguồn protein cao, ít chất béo, lý tưởng cho bữa ăn bổ dưỡng.\u003c\/li\u003e\u003cli\u003e\u003cstrong\u003e100% sản phẩm Úc:\u003c\/strong\u003e Đảm bảo tiêu chuẩn an toàn thực phẩm, chất lượng nhập khẩu.\u003c\/li\u003e\u003c\/ul\u003e","brand":"Old Beifang","offers":[{"title":"Default Title","offer_id":48152151982367,"sku":"A9333127007630","price":19.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_9a1f023e-33d2-4c09-99c3-64a2e047d0a0.jpg?v=1736583648"}],"url":"https:\/\/www.umall.com.au\/vi\/collections\/year-of-the-horse-hot-pot\/vegan.oembed","provider":"Umall - Australia's Largest Online Asian Supermarket","version":"1.0","type":"link"}