{"title":"Nguyên liệu lẩu cơ bản","description":"\u003cdiv id=\"um-hotpot-desc\" style=\"max-width:1040px;margin:12px auto 16px;text-align:center;line-height:1.5;\"\u003e\n  \u003cstyle\u003e\n    #um-hotpot-desc .um-chip{display:inline-block;margin:4px;padding:7px 11px;border:1px solid #e5e7eb;border-radius:999px;background:#f8fafc;color:#111;text-decoration:none;font-size:13px}\n    #um-hotpot-desc .um-acc{display:inline-block;margin:8px 6px;text-align:center}\n    #um-hotpot-desc .um-acc summary{display:inline-flex;align-items:center;gap:6px;cursor:pointer;list-style:none;color:#111;background:#eef2ff;border:1px solid #dbeafe;border-radius:999px;padding:7px 12px;font-size:13px;font-weight:600}\n    #um-hotpot-desc .um-acc summary .ico{display:inline-block;transition:transform .2s ease}\n    #um-hotpot-desc .um-acc summary::-webkit-details-marker{display:none}\n    #um-hotpot-desc .um-acc[open] summary .ico{transform:rotate(180deg)}\n  \u003c\/style\u003e\n  \u003cp style=\"margin:0 12px 10px;color:#555;\"\u003eBạn định ăn lẩu tối nay? Bắt đầu với nước dùng, rồi thêm thịt cắt lát hoặc hải sản, đậu hũ, rau củ và mì, cuối cùng là nước chấm và đồ uống. Mua theo danh mục lẩu với dịch vụ giao hàng trong ngày khắp Sydney.\u003c\/p\u003e\n\n  \u003cdetails class=\"um-acc\"\u003e\n    \u003csummary role=\"button\" aria-expanded=\"false\"\u003e\u003cspan class=\"ico\"\u003e▾\u003c\/span\u003e Danh mục lẩu\u003c\/summary\u003e\n    \u003cdiv style=\"margin-top:8px;\"\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-bases\" class=\"um-chip\"\u003eGia vị nấu lẩu \u0026amp; Nước dùng\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-sliced-meat\" class=\"um-chip\"\u003eThịt cắt lát\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-seafood-selected\" class=\"um-chip\"\u003eHải sản ăn lẩu\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-japanese-sukiyaki-shabu\" class=\"um-chip\"\u003eSukiyaki Nhật Bản\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-balls-paste-side\" class=\"um-chip\"\u003eViên thả lẩu, Chả quết \u0026amp; Thịt ăn kèm\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-offals\" class=\"um-chip\"\u003eNội tạng\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-tofu-tofu-skin\" class=\"um-chip\"\u003eĐậu hũ \u0026amp; Tàu hũ ky\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-noodles-vermicelli-konjac\" class=\"um-chip\"\u003eMì, Bún khô \u0026amp; Konjac\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/vegetables\" class=\"um-chip\"\u003eRau củ \u0026amp; Nấm\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-dipping-sauces\" class=\"um-chip\"\u003eNước chấm\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/drinks\" class=\"um-chip\"\u003eĐồ uống\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-tableware\" class=\"um-chip\"\u003eDụng cụ bàn ăn\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/hotpot-cookware\" class=\"um-chip\"\u003eDụng cụ nấu ăn\u003c\/a\u003e\n      \u003ca href=\"\/vi\/collections\/instant-hot-pot-meals\" class=\"um-chip\"\u003eLẩu ăn liền\u003c\/a\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n\n  \u003cp style=\"margin:8px 0 0;color:#555;\"\u003eBạn cần hướng dẫn mua hàng nhanh? \u003ca href=\"\/vi\/blogs\/shopping-guide\/hot-pot-super-guide-australia\" style=\"color:#c2410c;\"\u003eĐọc hướng dẫn đầy đủ về lẩu của chúng tôi\u003c\/a\u003e.\u003c\/p\u003e\n\u003c\/div\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-five-spice-dried-tofu-approximately-220g","title":"Evergreen Đậu hũ khô ngũ vị, 220g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;line-height:1.6;color:#334155;font-family:system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, Apple Color Emoji, Segoe UI Emoji;\"\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ũ khô ngũ vị, 220g\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;\"\u003eĐậu hũ chắc, ăn liền, thấm nước tương kho ngũ vị thơm. Dùng xào nhanh, trộn gỏi, ăn với mì hoặc nấu 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  \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:8px 0 0 18px;\"\u003e\n    \u003cli\u003eĐã tẩm gia vị thơm—chỉ cần cắt rồi dùng hoặc hâm nóng.\u003c\/li\u003e\n    \u003cli\u003eKết cấu đặc, dai, giữ miếng khi xào hay nấu canh.\u003c\/li\u003e\n    \u003cli\u003eGiàu đạm, dễ kết hợp để chuẩn bị bữa tối nhanh 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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h2\u003e\n  \u003col style=\"margin:8px 0 0 18px;\"\u003e\n    \u003cli style=\"margin-bottom:12px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eĐậu hũ xào cải thìa và gừng\u003c\/div\u003e\n      \u003cdiv\u003eCắt đậu hũ thành thanh, xào nhanh với \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/fresh-hydroponically-grown-shanghai-bok-choy-1-bundle\"\u003ecải thìa Shanghai\u003c\/a\u003e, \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003enấm bào ngư\u003c\/a\u003e, và \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng\u003c\/a\u003e. Nêm chút \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/haday-golden-label-light-soy-sauce-1-28l\"\u003enước tương nhạt\u003c\/a\u003e và rưới chút \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e. Chỉ xào 2–4 phút để giữ độ giòn mềm.\u003c\/div\u003e\n    \u003c\/li\u003e\n    \u003cli style=\"margin-bottom:12px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eBún gạo trộn mè dùng lạnh\u003c\/div\u003e\n      \u003cdiv\u003eTrộn đậu hũ cắt lát để lạnh với \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo đã nấu, để nguội\u003c\/a\u003e, thêm hỗn hợp chua nhẹ gồm \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\u003c\/a\u003e và \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e, cùng một muỗng \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003edầu ớt giòn\u003c\/a\u003e. Thêm rau củ bào sợi và dùng lạnh.\u003c\/div\u003e\n    \u003c\/li\u003e\n    \u003cli style=\"margin-bottom:12px;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eĐậu hũ nhúng lẩu\u003c\/div\u003e\n      \u003cdiv\u003eCho đậu hũ vào nồi \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/haidilao-tomato-hot-pot-base-200g\"\u003elẩu cà chua đang sôi nhẹ\u003c\/a\u003e cùng \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003enấm kim châm\u003c\/a\u003e. Nấu 3–5 phút để thấm nước lẩu mà không bị mềm nhũn.\u003c\/div\u003e\n    \u003c\/li\u003e\n    \u003cli\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;\"\u003eGỏi đậu hũ sợi 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\u003eCắt đậu hũ thành sợi mỏng, trộn với \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/fresh-bean-sprouts-approximately-400g\"\u003egiá đã trụng\u003c\/a\u003e, \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/fresh-bunch-of-coriander\"\u003engò rí cắt nhỏ\u003c\/a\u003e, và chút \n        \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\"\u003egiấm gạo trắng\u003c\/a\u003e. Để lạnh 10–15 phút trước khi dùng.\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  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eMẹo chế biến\u003c\/h2\u003e\n  \u003cul style=\"margin:8px 0 0 18px;\"\u003e\n    \u003cli\u003eĂn liền—dùng ngay sau khi mở gói hoặc hâm nhẹ.\u003c\/li\u003e\n    \u003cli\u003eKhi xào, cho đậu hũ vào gần cuối và đảo 2–4 phút để giữ kết cấu.\u003c\/li\u003e\n    \u003cli\u003eMuốn vị tươi mới hơn, trụng nhanh trong nước nóng hoặc nấu trong sốt 3–5 phút.\u003c\/li\u003e\n    \u003cli\u003eNêm nhẹ tay vì đậu hũ đã có vị đậm đà từ nước tương và gia vị.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n  \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý dùng kèm\u003c\/h2\u003e\n  \u003cul style=\"margin:8px 0 0 18px;\"\u003e\n    \u003cli\u003e\n\u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003eDầu hào\u003c\/a\u003e hoặc \n      \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\"\u003enước tương\u003c\/a\u003e để thêm vị đậm đà nhanh chóng.\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/haitian-sesame-fragrant-oil-150ml\"\u003eDầu mè rang\u003c\/a\u003e rưới sau cùng.\u003c\/li\u003e\n    \u003cli\u003e\n\u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003eCải thìa non\u003c\/a\u003e và \n      \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/chois-shiitake-mushrooms-300g\"\u003enấm hương\u003c\/a\u003e cho món xào nhanh.\u003c\/li\u003e\n    \u003cli\u003eThêm chút cay với \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/cuihong-spicy-chili-oil-200g\"\u003edầu ớt cay\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003eCác loại mì và bún như \u003ca style=\"color:#DB3A35;\" href=\"\/vi\/products\/chunsi-jiangxi-rice-vermicelli-300g\"\u003ebún gạo\u003c\/a\u003e cho món nóng hoặc lạ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;display:flex;align-items:center;justify-content:space-between;gap:16px;\"\u003e\n  \u003cdiv\u003e\n    \u003ch2 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h2\u003e\n    \u003cp style=\"margin:6px 0 0;\"\u003eXem thêm đậu hũ và sản phẩm từ đậu nành để kết hợp theo món.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv\u003e\n    \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"color:#DB3A35;font-weight:700;\"\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 #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":48151480008991,"sku":"A9323536001015","price":4.99,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_dba98e4d-92c7-4c11-8563-0ead4c10ba66.jpg?v=1712383828"},{"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-tea-scented-dried-vegetables-approximately-250g","title":"Đậu Hũ Khô Vị Trà Ever Green 250 g – snack chay vị trà giòn ngon","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 10px 18px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#334155;line-height:1.5;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;display:flex;gap:16px;align-items:center;\"\u003e\u003cdiv style=\"flex:1 1 120px;max-width:140px;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_f693da7c-f00a-4ee0-8be5-d479169a5eb9.jpg?v=1712383848\" alt=\"Tea-Flavored Dried Tofu, 250g\" style=\"width:100%;height:auto;border-radius:12px;border:1px solid #e2e8f0;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"flex:4 1 480px;\"\u003e\n\u003ch1 style=\"margin:0 0 6px;font-size:22px;font-weight:800;\"\u003eĐậu hũ khô vị trà, 250g\u003c\/h1\u003e\n\u003cp style=\"margin:4px 0 0;font-size:14px;color:#475569;\"\u003eĐậu hũ chắc dai, thoảng hương trà — cắt dùng cho món lạnh, món mì, xào và lẩu.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:18px;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:6px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eHương trà vừa phải, làm nổi bật gia vị đậm đà mà không lấn át.\u003c\/li\u003e\n\u003cli\u003eKết cấu chắc kiểu đậu hũ khô, giữ miếng khi xào, kho và nấu lẩu.\u003c\/li\u003e\n\u003cli\u003eTiện dùng: đã nấu chín và ăn liền — phù hợp làm món khai vị lạnh nhanh.\u003c\/li\u003e\n\u003cli\u003eNguồn đạm thay thế linh hoạt cho gỏi, mì, cơm tô và cơm hộp.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:18px;margin-top:16px;\"\u003e\u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n\u003col style=\"margin:6px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eĐậu hũ sợi trộn mè–tỏi dùng lạ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\"\u003e Ít calo\u003c\/span\u003e — Cắt sợi rồi trộn với chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm đen\u003c\/a\u003e, vài giọt \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e, và \u003ca href=\"\/vi\/products\/fresh-dried-garlic-heads-approximately-500g\"\u003etỏi bằm\u003c\/a\u003e. Để lạnh một lát rồi dùng làm món khai vị thanh mát.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMón xào 5 phút với ớt chuông và hành lá\u003c\/strong\u003e — Xào đậu hũ cắt que với \u003ca href=\"\/vi\/products\/fresh-green-lantern-peppers-pack-of-3\"\u003eớt chuông xanh cắt lát\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá 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.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eĐậu hũ nhúng lẩu\u003c\/strong\u003e — Cắt lát dày rồi nấu sôi nhẹ trong nước dùng cay bạn thích, chẳng hạn \u003ca href=\"\/vi\/products\/haidilao-spicy-hot-pot-soup-base-500g\"\u003eHaidilao Nước cốt lẩu cay\u003c\/a\u003e, trong vài phút để thấm vị.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBún gạo trộn\u003c\/strong\u003e — Trộn đậu hũ sợi còn ấm với \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo đã nấu\u003c\/a\u003e, 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, và vắt thêm chút nước trái cây họ cam quýt để có tô bún nhanh gọn.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMón ăn kèm cơm hộp với măng ngâm chua\u003c\/strong\u003e — Cắt lát rồi dùng cùng \u003ca href=\"\/vi\/products\/long-hong-pickled-bamboo-shoots-600g\"\u003emăng ngâm chua\u003c\/a\u003e làm món ăn kèm đậm đà, tiện xếp vào hộp.\u003c\/li\u003e\n\u003c\/ol\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:18px;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:6px 0 0 18px;color:#334155;font-size:14px;\"\u003e\n\u003cli\u003eĂn liền: cắt lát hoặc sợi để dùng trực tiếp trong món lạnh. Với món nóng, hâm nhẹ để giữ độ mềm.\u003c\/li\u003e\n\u003cli\u003eCách cắt: cắt que cho gỏi và mì; miếng chữ nhật vừa ăn để nhúng lẩu; lát mỏng để xào nhanh.\u003c\/li\u003e\n\u003cli\u003eNêm nhẹ: vị trà ướp dịu — thêm nước tương, giấm, dầu mè và gia vị thơm tùy khẩu vị.\u003c\/li\u003e\n\u003cli\u003eNấu vừa đủ: cho vào gần cuối khi xào; với canh, chỉ nấu sôi nhẹ 2–4 phút để tránh khô.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:18px;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:6px 0 0 18px;color:#334155;font-size:14px;\"\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\/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\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\"\u003eChuanwazi Dầu ớt giòn với đậu phộng 200g\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/fresh-green-lantern-peppers-pack-of-3\"\u003eỚt chuông xanh - gói 3\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/vi\/products\/chois-shimeji-mushrooms-150g\"\u003eChois Nấm shimeji - 150g\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\u003c\/section\u003e\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:18px;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=\"color:#DB3A35;font-weight:700;\"\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 #e2e8f0;\"\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding:10px;border-right:1px solid #e2e8f0;border-top:1px solid #e2e8f0;\"\u003eTừ $69.00 trở lên\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e2e8f0;\"\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 #e2e8f0;\"\u003e$20 – $68.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e2e8f0;\"\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 #e2e8f0;border-top:1px solid #e2e8f0;\"\u003e$0.01 – $19.99\u003c\/td\u003e\n\u003ctd style=\"padding:10px;border-top:1px solid #e2e8f0;\"\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":48151480795423,"sku":"A9323536002227","price":4.99,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_f693da7c-f00a-4ee0-8be5-d479169a5eb9.jpg?v=1712383848"},{"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-dried-tofu-4-pieces-approximately-400g","title":"Evergreen Đậu hũ khô - 4 cái, 400g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#0f172a;line-height:1.6;\"\u003e\n\u003cstyle\u003e#umall-desc a{ text-decoration:none !important; border-bottom:1px solid var(--brand) !important; } #umall-desc a:hover{ opacity:.85; }\u003c\/style\u003e\n\n\n\n\n\n\n\u003cstyle\u003e\n\/* DESC ENHANCER v1 *\/\n#umall-desc .um-slider{ display:grid; grid-auto-flow:column; grid-auto-columns:180px; gap:12px; overflow-x:auto; padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; margin-top:12px; }\n#umall-desc .um-slider::-webkit-scrollbar{ height:8px; }\n#umall-desc .um-slider::-webkit-scrollbar-thumb{ background:#e5e7eb; border-radius:999px; }\n#umall-desc .um-card{ scroll-snap-align:start; border:1px solid #e5e7eb; border-radius:12px; overflow:hidden; background:#fff; display:flex; flex-direction:column; text-decoration:none; color:inherit; }\n#umall-desc a.um-card{ border-bottom:1px solid #e5e7eb !important; text-decoration:none !important; }\n#umall-desc a[style*=\"border-radius:999\"]{ border-bottom:1px solid #e2e8f0 !important; text-decoration:none !important; }\n#umall-desc .um-imgbox{ background:#fff; display:flex; align-items:center; justify-content:center; width:100%; aspect-ratio:1\/1; height:auto; position:relative; }\n#umall-desc .um-imgbox img{ max-width:100%; max-height:100%; object-fit:contain; }\n#umall-desc .um-badge{ position:absolute; top:8px; left:8px; background:rgba(219,58,53,.92); color:#fff; font-weight:700; font-size:12px; padding:2px 6px; border-radius:6px; display:none; }\n#umall-desc .um-meta{ padding:10px 10px 12px; display:flex; flex-direction:column; gap:6px; }\n#umall-desc .um-title{ font-size:14px; font-weight:600; color:#0f172a; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; min-height:38px; }\n#umall-desc .um-price{ font-size:14px; font-weight:700; color:var(--brand); display:flex; align-items:center; gap:8px; }\n#umall-desc .um-price s{ color:#94a3b8; font-weight:500; }\n#umall-desc .um-recipes{ display:grid; grid-template-columns:repeat(1,minmax(0,1fr)); gap:12px; margin-top:12px; }\n@media (min-width:640px){ #umall-desc .um-recipes{ grid-template-columns:repeat(2,minmax(0,1fr)); } }\n@media (min-width:1024px){ #umall-desc .um-recipes{ grid-template-columns:repeat(3,minmax(0,1fr)); } }\n#umall-desc .um-rcard{ border:1px solid #e2e8f0; border-radius:12px; background:#fff; padding:16px; }\n#umall-desc .um-rcard h4{ margin:0 0 6px; font-size:16px; font-weight:700; color:#0f172a; }\n#umall-desc .um-rcard p, #umall-desc .um-rcard div{ margin:0; font-size:14px; color:#334155; }\n#umall-desc .um-section-title{ margin:16px 0 10px; font-size:16px; font-weight:800; }\n\u003c\/style\u003e\n\n\n\n\n\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:22px;margin-top:16px;\"\u003e\n    \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;\"\u003eEvergreen Đậu hũ khô - 4 cái, 400g\u003c\/h1\u003e\n    \u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eĐậu hũ ép chắc, giàu đạm, giữ miếng khi xào, nấu canh và trộn gỏi.\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;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003eKết cấu rất chắc: cắt sợi, thanh hoặc khối mà không bị vụn.\u003c\/li\u003e\n      \u003cli\u003eThấm nước sốt mà vẫn dai.\u003c\/li\u003e\n      \u003cli\u003eDùng được cho món xào, gỏi lạnh, mì, lẩu và cơm hộp.\u003c\/li\u003e\n      \u003cli\u003eVị thanh nhẹ, hợp nước tương, giấm, dầu ớt, tỏi và gừ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 12px 14px 0;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n\n    \u003cdiv style=\"display:grid;gap:12px;\"\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n        \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ xào ớt chuông với gừng–tỏi\u003c\/h4\u003e\n        \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eCắt đậu hũ thành thanh, áp chảo đến vàng rồi đảo với \u003ca href=\"\/vi\/products\/fresh-green-lantern-peppers-pack-of-3\"\u003eớt chuông xanh cắt lát\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng thái sợi\u003c\/a\u003e, một ít \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi\u003c\/a\u003e, nước tương nhạt 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 2–4 phút đến khi giòn mềm.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n        \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eGỏi đậu hũ sợi 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\"\u003eThanh nhẹ \u0026amp; tươi mát\u003c\/span\u003e\n\u003c\/h4\u003e\n        \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eBào đậu hũ thành sợi mỏng rồi trộn với \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e, một muỗng \u003ca href=\"\/vi\/products\/cuihong-spicy-chili-oil-200g\"\u003edầu ớt\u003c\/a\u003e, và \u003ca href=\"\/vi\/products\/fresh-bunch-of-coriander\"\u003engò rí cắt nhỏ\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá cắt nhỏ\u003c\/a\u003e. Dùng lạnh làm món ăn kèm thanh mát.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n        \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eTô mì nước đậu hũ với nấm và cải thìa\u003c\/h4\u003e\n        \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eNấu sôi nhẹ đậu hũ cắt lát trong \u003ca href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà trong còn ấm\u003c\/a\u003e; thêm \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo đã ngâm\u003c\/a\u003e, một nắm \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. Nêm nước tương nhạt vừa ăn. Món ăn sẵn sàng trong vài phút.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n        \u003ch4 style=\"margin:0 0 6px;font-size:16px;font-weight:700;\"\u003eĐậu hũ kho cay kiểu Tứ Xuyên (đậu hũ sốt doubanjiang)\u003c\/h4\u003e\n        \u003cp style=\"margin:6px 0 0;color:#334155;font-size:14px;\"\u003eChiên áp chảo sơ đậu hũ cắt khối rồi nấu sôi nhẹ với \u003ca href=\"\/vi\/products\/chuan-lao-hui-pi-county-red-oil-broad-bean-paste-500g\"\u003etương đậu tằm ớt Pixian\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003enước tương đậm\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-yellow-onions-1kg\"\u003ehành tây cắt lát\u003c\/a\u003e, và chút nước đến khi sánh sốt. Dọn với \u003ca href=\"\/vi\/products\/arawana-northeast-rice-5kg\"\u003ecơm nóng\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;color:#334155;font-size:14px;\"\u003e\n      \u003cli\u003eThấm khô rồi cắt đều (sợi cho gỏi; thanh 1–2 cm hoặc khối 1.5–2 cm để xào).\u003c\/li\u003e\n      \u003cli\u003eMuốn vị thanh hơn, trụng đậu hũ cắt lát trong nước hơi mặn 30–60 giây rồi để thật ráo.\u003c\/li\u003e\n      \u003cli\u003eÁp chảo với lớp dầu mỏng đến vàng nhẹ rồi mới thêm sốt để giữ kết cấu.\u003c\/li\u003e\n      \u003cli\u003eTránh nấu quá lâu; sau khi thêm sốt, chỉ xào hoặc nấu sôi nhẹ 2–4 phút để giữ độ 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    \u003ch3 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý dùng kèm\u003c\/h3\u003e\n    \u003cdiv style=\"display:flex;flex-wrap:wrap;gap:10px;font-size:14px;\"\u003e\n      \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:#DB3A35;\"\u003eHaitian Nước tương nhạt cao cấp 500ml\u003c\/a\u003e\n      \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\n      \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\" style=\"color:#DB3A35;\"\u003eHengshun Giấm thơm Zhenjiang 550ml\u003c\/a\u003e\n      \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\" style=\"color:#DB3A35;\"\u003eChuanwazi Dầu ớt giòn với đậu phộng 200g\u003c\/a\u003e\n      \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-1000g\" style=\"color:#DB3A35;\"\u003eChunsi Bún gạo Jiangxi - 1kg\u003c\/a\u003e\n      \u003ca href=\"\/vi\/products\/fresh-snow-pea-sprouts-160g\" style=\"color:#DB3A35;\"\u003eRau mầm đậu Hà Lan tươi - 160g\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\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:0;color:#334155;font-size:14px;\"\u003eXem thêm đậu hũ, tàu hũ ky và các sản phẩm đậu nành trong danh mục chọn lọc.\u003c\/p\u003e\n    \u003cp style=\"margin:10px 0 0;\"\u003e\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\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":48151482532127,"sku":"A9323536011229","price":4.79,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_c176c11f-6791-43e6-a648-faaf02dd4793.jpg?v=1712383900"},{"product_id":"fresh-ever-green-brick-dried-tofu-approximately-650g","title":"Evergreen Đậu hũ cứng, 650g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.6;color:#334155;\"\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:12px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;color:#0f172a;\"\u003eEvergreen Đậu hũ cứng, 650g\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;font-size:14px;color:#475569;\"\u003eMiếng đậu hũ chắc, dễ chế biến, giữ miếng khi xào, kho, nướng và trộn gỏi 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 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\u003eKết cấu đặc chắc, dễ áp chảo mà không bị vụn.\u003c\/li\u003e\n    \u003cli\u003eVị nhẹ, dễ thấm gia vị ướp, nước sốt và nước dùng.\u003c\/li\u003e\n    \u003cli\u003eThực phẩm thực vật giàu đạm cho bữa tối nhanh trong tuần.\u003c\/li\u003e\n    \u003cli\u003eMiếng đậu hũ 650g đầy đặn để chuẩn bị bữa ăn, nấu lẩu hoặc xào cho gia đì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 12px 12px 0;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h3\u003e\n  \u003cdiv style=\"display:grid;gap:12px;\"\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;margin-bottom:4px;\"\u003eĐậu hũ \u0026amp; cải rổ xào gừng–tỏi cho bữa tối\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;font-size:14px;\"\u003eÁp chảo đậu hũ cắt khối đến vàng rồi đảo với \u003ca href=\"\/vi\/products\/fresh-bunch-of-chinese-broccoli-kai-lan-hearts\" style=\"color:#DB3A35;\"\u003ecải rổ cắt lát\u003c\/a\u003e, chút \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:#DB3A35;\"\u003edầu hào\u003c\/a\u003e và rưới chút \u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:#DB3A35;\"\u003enước tương nhạt\u003c\/a\u003e. Xào lửa lớn 2–4 phút đến khi sốt áo bóng và rau giòn mềm.\u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;margin-bottom:4px;\"\u003eLẩu thanh đậu hũ và nấm kim châm \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;font-size:14px;\"\u003eNấu sôi nhẹ đậu hũ cắt lát trong nước lẩu thanh, đậm đà pha từ \u003ca href=\"\/vi\/products\/haidilao-mushroom-flavor-hot-pot-seasoning-150g\" style=\"color:#DB3A35;\"\u003enước cốt lẩu nấm\u003c\/a\u003e. Thêm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:#DB3A35;\"\u003enấm kim châm\u003c\/a\u003e và rau xanh; nấu 3–5 phút cho món ăn thanh nhẹ, ấm bụng.\u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;margin-bottom:4px;\"\u003eGỏi đậu hũ lạnh trộn giấm đen\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;font-size:14px;\"\u003eTrụng hoặc hấp sơ đậu hũ cắt lát, để nguội rồi rưới hỗn hợp chua nhẹ gồm \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\" style=\"color:#DB3A35;\"\u003egiấm Zhenjiang\u003c\/a\u003e, nước tương, tỏi và vài giọt \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\" style=\"color:#DB3A35;\"\u003edầu mè\u003c\/a\u003e. Rắc hành lá và mè rang sau cùng.\u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;color:#0f172a;margin-bottom:4px;\"\u003eBún gạo xào đậu hũ giòn và giá\u003c\/div\u003e\n      \u003cp style=\"margin:6px 0 0;font-size:14px;\"\u003eÁp chảo đậu hũ cắt thanh đến vàng, đảo với \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:#DB3A35;\"\u003ebún gạo đã ngâm\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-bean-sprouts-approximately-400g\" style=\"color:#DB3A35;\"\u003egiá giòn\u003c\/a\u003e, nước tương và chút dầu ớt. Xào thêm 2–3 phút.\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;font-size:14px;\"\u003e\n    \u003cli\u003eÉp giữa các lớp khăn giấy hoặc khăn bếp sạch 10–20 phút để bớt nước, giúp chiên vàng hơn.\u003c\/li\u003e\n    \u003cli\u003eCắt theo món: khối 2–3 cm để xào, lát 1 cm để áp chảo, thanh mỏng để xào mì, miếng dày để nướng.\u003c\/li\u003e\n    \u003cli\u003eƯớp sơ (10–15 phút) với nước tương nhạt, tỏi và ít bột bắp để bề mặt đậm vị, cạnh giòn hơn.\u003c\/li\u003e\n    \u003cli\u003eLàm nóng chảo, thêm dầu vừa đủ áo mỏng; áp chảo không đảo 2–3 phút mỗi mặt rồi mới đả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 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\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/kikkoman-all-purpose-soy-sauce-1-6l\" style=\"color:#DB3A35;\"\u003eKikkoman Nước tương đa dụng\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\" style=\"color:#DB3A35;\"\u003eHaitian Nước tương đậm\u003c\/a\u003e để tăng vị và màu.\u003c\/li\u003e\n    \u003cli\u003eThêm hương thơm bùi với \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\" style=\"color:#DB3A35;\"\u003edầu mè nguyên chất\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003eThêm cay và giòn với \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\" style=\"color:#DB3A35;\"\u003eớt giòn Tứ Xuyên\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003eThêm vị chua thanh bằng \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\" style=\"color:#DB3A35;\"\u003egiấm gạo trắng\u003c\/a\u003e hoặc giấm đen.\u003c\/li\u003e\n    \u003cli\u003eCác loại mì dùng kèm: \u003ca href=\"\/vi\/products\/changqing-fresh-egg-noodles-500g\" style=\"color:#DB3A35;\"\u003emì trứng tươi\u003c\/a\u003e hoặc bún gạo.\u003c\/li\u003e\n    \u003cli\u003eRau xanh nấu nhanh như \u003ca href=\"\/vi\/products\/fresh-hydroponically-grown-shanghai-bok-choy-1-bundle\" style=\"color:#DB3A35;\"\u003ecải thìa Shanghai\u003c\/a\u003e.\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/section\u003e\n\n\u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;display:flex;align-items:center;justify-content:space-between;gap:12px;\"\u003e\n  \u003cdiv\u003e\n    \u003ch3 style=\"margin:0 0 6px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n    \u003cp style=\"margin:6px 0 0;font-size:14px;color:#475569;\"\u003eXem đậu hũ, đậu hũ chiên phồng, tàu hũ ky và nhiều sản phẩm khác.\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv\u003e\n    \u003ca href=\"\/vi\/collections\/tofu-soy-products\" style=\"color:#DB3A35;text-decoration:underline;font-weight:700;\"\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":48151482695967,"sku":"A9323536001268","price":6.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_2d5ea63c-a15e-4902-87ed-73384d2ddccc.jpg?v=1712383904"},{"product_id":"fresh-ever-green-dried-tofu-blocks-approximately-600g-pack-of-6","title":"Evergreen Đậu hũ khô dạng miếng, 600g, gói 6","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;\"\u003eEvergreen Đậu hũ khô dạng miếng, 600g, gói 6\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;color:#475569;font-size:14px;\"\u003eĐậu hũ khô ép nhẹ, chắc dai — dùng cắt lát, xào, kho và trộn gỏi 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;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eGiữ miếng khi xào hoặc nấu sôi nhẹ — không dễ vụn như đậu hũ mềm.\u003c\/li\u003e\n    \u003cli\u003eThấm gia vị ướp và sốt mà vẫn dai chắc như thịt.\u003c\/li\u003e\n    \u003cli\u003eDễ dùng: hợp món xào, kho, canh, mì và gỏi lạnh.\u003c\/li\u003e\n    \u003cli\u003eGói tiện lợi, tiết kiệm — đậu hũ đã ép thành miếng, chuẩn bị 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  \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;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eĐậu hũ xào hẹ sốt nước tương\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eCắt đậu hũ thành thanh, áp chảo đến vàng. Đảo với \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi cắt nhỏ\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng thái sợi\u003c\/a\u003e, và sốt pha nhanh từ \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\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e. Cuối cùng thêm một nắm \u003ca href=\"\/vi\/products\/fresh-bundle-of-chives-pack-of-2\"\u003ehẹ cắt nhỏ\u003c\/a\u003e.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eGỏi đậu hũ sợi trộn mè \u0026amp; giấm gạo 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      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eBào sợi mỏng hoặc cắt que rồi trộn với \u003ca href=\"\/vi\/products\/hengshun-white-rice-vinegar-500ml\"\u003egiấm gạo\u003c\/a\u003e, rưới chút \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e, chút đường và \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\"\u003ehành lá cắt lát\u003c\/a\u003e. Món ăn giòn, chua nhẹ, thanh mát.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eĐậu hũ kho nước tương với nấm hương \u0026amp; cải thìa\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eÁp chảo đậu hũ cắt khối đến vàng rồi nấu sôi nhẹ với \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa\u003c\/a\u003e, nước dùng và \u003ca href=\"\/vi\/products\/haitian-dark-soy-sauce-500ml\"\u003enước tương đậm\u003c\/a\u003e đến khi sốt áo đều. Dọn với cơm nấu từ \u003ca href=\"\/vi\/products\/hokkaido-sansanmaru-japanese-rice-5kg\"\u003egạo Nhật Bản\u003c\/a\u003e.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:14px;padding:14px;background:#fff;\"\u003e\n      \u003cdiv style=\"font-weight:700;margin-bottom:6px;\"\u003eMì nước thanh với đậu hũ và nấm kim châm\u003c\/div\u003e\n      \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eCho đậu hũ cắt lát vào nước dùng kiểu shabu-shabu sôi nhẹ 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. Sau cùng thêm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\"\u003enấm kim châm\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo\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.\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;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003eRửa, thấm khô và cắt đều để chín nhanh, đồng đều.\u003c\/li\u003e\n    \u003cli\u003eMuốn mềm hơn, trụng các lát trong nước sôi nhẹ 30–60 giây rồi để thật ráo.\u003c\/li\u003e\n    \u003cli\u003eƯớp 10–20 phút với nước tương nhạt, chút đường và dầu mè để thấm vị hơn.\u003c\/li\u003e\n    \u003cli\u003eÁp chảo lửa vừa lớn đến khi cạnh vàng rồi mới thêm sốt hoặc kho.\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;color:#334155;font-size:14px;\"\u003e\n    \u003cli\u003e\n\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003eNước tương nhạt\u003c\/a\u003e hoặc chút \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\"\u003egiấm Zhenjiang\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003eDầu thơm: \u003ca href=\"\/vi\/products\/chuan-lao-hui-pure-sesame-oil-320ml\"\u003edầu mè nguyên chất\u003c\/a\u003e rưới sau cùng.\u003c\/li\u003e\n    \u003cli\u003eGia vị tăng vị đậm đà: \u003ca href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003enấm bào ngư\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003eMì cho bữa ăn nhanh: \u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\"\u003emì Yangchun\u003c\/a\u003e hoặc \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003eGia vị thơm: \u003ca href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng\u003c\/a\u003e và \u003ca href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi\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;text-align:center;\"\u003e\n  \u003ch3 style=\"margin:0 0 8px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h3\u003e\n  \u003cp style=\"margin:0;color:#334155;font-size:14px;\"\u003eXem đậu hũ, đậu hũ chiên phồng, đậu hũ non và nhiều loại khác trong bộ sưu tập đậu nành.\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 thêm đậ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":48151483056415,"sku":"A9323536001220","price":6.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_06657dc2-1160-4898-92f9-2c659fccb7b1.jpg?v=1712383917"},{"product_id":"fresh-ever-green-fried-tofu-6-pieces-bag-approximately-500g","title":"Evergreen Đậu hũ chiên - 6 cái\/túi, 500g","description":"\u003cdiv id=\"umall-desc\" style=\"max-width:860px;margin:0 auto;padding:16px 0;--brand:#DB3A35;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:0;\"\u003e\n    \u003ch1 style=\"margin:0 0 6px;font-size:26px;font-weight:800;color:#111827;\"\u003eEvergreen Đậu hũ chiên - 6 cái\/túi, 500g\u003c\/h1\u003e\n    \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eĐậu hũ chiên nhẹ, dai, thấm sốt như miếng xốp—hợp món xào nhanh, canh, mì và lẩu. Sẵn dùng, không cần ép nướ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    \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:0;padding-left:18px;color:#334155;\"\u003e\n      \u003cli\u003eCác lỗ xốp hút nước dùng, sốt và gia vị, thấm đậm vị trong vài phút.\u003c\/li\u003e\n      \u003cli\u003eĐã chiên, sẵn sàng chế biến—chỉ cần xào, nấu sôi nhẹ hoặc xiên que.\u003c\/li\u003e\n      \u003cli\u003eGiữ miếng khi xào và nấu lẩu, không bị vụn.\u003c\/li\u003e\n      \u003cli\u003eVị đậu hũ thanh nhẹ, hơi bùi, hợp từ nước tương, tỏi đến sốt trộn chua cay.\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 12px;font-size:18px;font-weight:700;\"\u003eGợi ý chế biến\u003c\/h2\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        \u003cp style=\"margin:0 0 6px;\"\u003e\u003cstrong\u003eĐậu hũ xào cải rổ và nấm hương\u003c\/strong\u003e\u003c\/p\u003e\n        \u003cp style=\"margin:0;color:#334155;\"\u003eCắt đôi miếng đậu hũ, áp chảo đến vàng rồi đảo với \u003ca href=\"\/vi\/products\/fresh-bunch-of-chinese-broccoli-kai-lan-hearts\" style=\"color:var(--brand);\"\u003ecải rổ\u003c\/a\u003e, \u003ca href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\" style=\"color:var(--brand);\"\u003enấm hương\u003c\/a\u003e, tỏi và chút \u003ca href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\" style=\"color:var(--brand);\"\u003edầu hào\u003c\/a\u003e. Xào lửa lớn 2–4 phút để đậu hũ thấm vị và sốt áo bóng.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n        \u003cp style=\"margin:0 0 6px;\"\u003e\u003cstrong\u003eTô mì nước đậu hũ\u003c\/strong\u003e\u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003e Món nước\u003c\/span\u003e\u003c\/p\u003e\n        \u003cp style=\"margin:0;color:#334155;\"\u003eNấu sôi nhẹ đậu hũ trong nước dùng thanh như \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 và thêm \u003ca href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\" style=\"color:var(--brand);\"\u003ebún gạo\u003c\/a\u003e và một nắm \u003ca href=\"\/vi\/products\/fresh-snow-pea-sprouts-160g\" style=\"color:var(--brand);\"\u003erau mầm đậu Hà Lan\u003c\/a\u003e. Thanh nhẹ, ấm bụng, 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        \u003cp style=\"margin:0 0 6px;\"\u003e\u003cstrong\u003eĐậu hũ chiên phồng nhúng lẩu\u003c\/strong\u003e\u003c\/p\u003e\n        \u003cp style=\"margin:0;color:#334155;\"\u003eCho đậu hũ vào nồi lẩu đang sôi pha từ \u003ca href=\"\/vi\/products\/haidilao-mushroom-flavor-hot-pot-seasoning-150g\" style=\"color:var(--brand);\"\u003enước cốt lẩu nấm\u003c\/a\u003e; sau cùng thêm một cụm \u003ca href=\"\/vi\/products\/chois-enoki-mushrooms-300g\" style=\"color:var(--brand);\"\u003enấm kim châm\u003c\/a\u003e. Đậu hũ chiên phồng thấm nước dùng đậm đà.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv style=\"border:1px solid #e2e8f0;border-radius:12px;padding:14px;background:#fff;\"\u003e\n        \u003cp style=\"margin:0 0 6px;\"\u003e\u003cstrong\u003eGỏi đậu hũ chua cay\u003c\/strong\u003e\u003c\/p\u003e\n        \u003cp style=\"margin:0;color:#334155;\"\u003eCắt lát đậu hũ còn ấm rồi trộn với \u003ca href=\"\/vi\/products\/hengshun-zhenjiang-aromatic-vinegar-550ml\" style=\"color:var(--brand);\"\u003egiấm Zhenjiang\u003c\/a\u003e, một muỗng \u003ca href=\"\/vi\/products\/chuanwazi-crispy-chili-oil-with-peanuts-200g-sichuan-chili-crisp\" style=\"color:var(--brand);\"\u003eớt giòn ngâm dầu\u003c\/a\u003e, và \u003ca href=\"\/vi\/products\/fresh-bunch-of-coriander\" style=\"color:var(--brand);\"\u003engò rí cắt nhỏ\u003c\/a\u003e để có món ăn kèm đậm vị.\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 chế biến\u003c\/h2\u003e\n    \u003cul style=\"margin:0;padding-left:18px;color:#334155;\"\u003e\n      \u003cli\u003eMuốn vị thanh hơn, trụng đậu hũ trong nước nóng 10–20 giây rồi để ráo trước khi nấu.\u003c\/li\u003e\n      \u003cli\u003eCắt đôi hoặc tư để tăng diện tích tiếp xúc—giúp thấm sốt hơn.\u003c\/li\u003e\n      \u003cli\u003eÁp chảo lửa vừa lớn với chút dầu đến khi cạnh giòn (2–3 phút), rồi thêm gia vị thơm và sốt.\u003c\/li\u003e\n      \u003cli\u003eNấu sôi nhẹ trong canh hoặc lẩu để đậu hũ thấm nước dùng mà không 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    \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eGợi ý dùng kèm\u003c\/h2\u003e\n    \u003cul style=\"margin:0;padding-left:18px;color:#334155;\"\u003e\n      \u003cli\u003e\n\u003ca href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\" style=\"color:var(--brand);\"\u003eNước tương nhạt\u003c\/a\u003e hoặc chút \u003ca href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\" style=\"color:var(--brand);\"\u003edầu mè nguyên chất\u003c\/a\u003e để thêm đậm vị.\u003c\/li\u003e\n      \u003cli\u003eGia vị thơm tươi như \u003ca href=\"\/vi\/products\/fresh-bundle-of-spring-onions\" style=\"color:var(--brand);\"\u003ehành lá\u003c\/a\u003e và thêm cay với \u003ca href=\"\/vi\/products\/fresh-red-chili-peppers-approximately-250g\" style=\"color:var(--brand);\"\u003eớt đỏ\u003c\/a\u003e.\u003c\/li\u003e\n      \u003cli\u003eCác loại mì và bún như \u003ca href=\"\/vi\/products\/fresh-evergreen-yangchun-noodles-500g\" style=\"color:var(--brand);\"\u003emì lúa mì Yangchun\u003c\/a\u003e cho tô mì nhanh gọn.\u003c\/li\u003e\n      \u003cli\u003eRau xanh nấu nhanh: \u003ca href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\" style=\"color:var(--brand);\"\u003ecải thìa non\u003c\/a\u003e để có món ăn kèm tươi, giòn.\u003c\/li\u003e\n    \u003c\/ul\u003e\n  \u003c\/section\u003e\n\n  \u003csection style=\"border:1px solid #e2e8f0;background:#fff;border-radius:16px;padding:20px;margin-top:16px;\"\u003e\n    \u003ch2 style=\"margin:0 0 10px;font-size:18px;font-weight:700;\"\u003eSản phẩm cùng loại\u003c\/h2\u003e\n    \u003cdiv style=\"display:flex;flex-wrap:wrap;gap:10px;\"\u003e\n      \u003ca href=\"\/vi\/products\/fresh-ever-green-chinese-style-tofu-approximately-500g\" style=\"color:var(--brand);display:inline-block;padding:8px 10px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;\"\u003eEvergreen Đậu hũ truyền thống, 500g\u003c\/a\u003e\n      \u003ca href=\"\/vi\/products\/fresh-ever-green-five-spice-dried-tofu-approximately-220g\" style=\"color:var(--brand);display:inline-block;padding:8px 10px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;\"\u003eEvergreen Đậu hũ khô ngũ vị, 220g\u003c\/a\u003e\n      \u003ca href=\"\/vi\/products\/fresh-ever-green-tofu-puffs-approximately-150g\" style=\"color:var(--brand);display:inline-block;padding:8px 10px;border:1px solid #e2e8f0;border-radius:10px;background:#fff;\"\u003eEvergreen Đậu hũ chiên phồng 150g\u003c\/a\u003e\n    \u003c\/div\u003e\n    \u003cdiv style=\"margin-top:12px;\"\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\/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":48151483253023,"sku":"A9323536001237","price":6.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_ca295fcb-10eb-48b1-8b2a-195fb90c914a.jpg?v=1712383930"},{"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-ever-green-fried-tofu-4-pieces-350g","title":"Evergreen Đậu hũ chiên, 4 cái, 350g","description":"\u003cdiv id=\"umall-desc\" style=\"--brand:#DB3A35;max-width:860px;margin:0 auto;padding:8px 12px;color:#0f172a;line-height:1.6;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:8px;\"\u003e\n  \u003ch1 style=\"margin:0 0 6px;font-size:24px;font-weight:800;color:#0f172a;\"\u003eEvergreen Đậu hũ chiên, 4 cái, 350g\u003c\/h1\u003e\n  \u003cp style=\"margin:6px 0 0;color:#334155;\"\u003eĐậu hũ chiên vàng, ruột mềm như trứng hấp — dễ thấm sốt, thêm đạm và độ dai ngon cho món bạn thích.\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;padding-left:18px;color:#334155;\"\u003e\n    \u003cli\u003eCạnh giòn, ruột xốp — dễ thấm nước dùng, nước kho và sốt xào.\u003c\/li\u003e\n    \u003cli\u003eTiện dùng, dễ chế biến: cho vào mì nước, xào hoặc nhồi nhân rồi kho.\u003c\/li\u003e\n    \u003cli\u003eĐạm thực vật hợp với nước tương, gừng, tỏi và ớt.\u003c\/li\u003e\n    \u003cli\u003eVẫn dai khi nấu lẩu hoặc hầm, không bị bể.\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  \u003col style=\"margin:0;padding-left:18px;color:#334155;\"\u003e\n    \u003cli\u003e\n\u003cstrong\u003eĐậu hũ xào tỏi–gừng\u003c\/strong\u003e — Áp chảo đậu hũ cắt khối rồi đảo với cải thìa non và nấm hương. Thêm chút \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/haitian-premium-light-soy-sauce-500ml\"\u003enước tương nhạt\u003c\/a\u003e, cuối cùng thêm chút \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/lee-kum-kee-pure-sesame-oil-207ml\"\u003edầu mè\u003c\/a\u003e, cùng vị giòn tươi từ \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/fresh-baby-bok-choy-pack-of-2\"\u003ecải thìa non\u003c\/a\u003e và vị đậm đà từ \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/chois-shiitake-mushrooms-100g\"\u003enấm hương\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eTô bún nước đậu hũ\u003c\/strong\u003e\u003cspan style=\"display:inline-flex;align-items:center;border:1px solid rgba(219,58,53,.2);color:var(--brand);background:rgba(219,58,53,.08);border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;margin-left:8px\"\u003e Món nước\u003c\/span\u003e — Nấu sôi nhẹ đậu hũ trong \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003enước dùng gà\u003c\/a\u003e thanh (hoặc nước dùng rau củ), thêm \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/chunsi-jiangxi-rice-noodles-300g\"\u003ebún gạo mềm mượt\u003c\/a\u003e, thêm \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/fresh-green-leaf-farm-tender-ginger-approximately-500g\"\u003egừng cắt lát\u003c\/a\u003e.\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eĐậu hũ nhồi nhân kho kiểu nhà làm\u003c\/strong\u003e — Rạch một đường rồi nhồi \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/borrowdale-free-range-pork-mince-500g-frozen\"\u003ethịt heo bằm đã nêm gia vị\u003c\/a\u003e, cùng \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/peeled-garlic-cloves-250g\"\u003etỏi bằm\u003c\/a\u003e, và một muỗng \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/haitian-premium-oyster-sauce-700g\"\u003edầu hào\u003c\/a\u003e. Kho trong chảo với chút nước đến khi mọng nước.\u003c\/li\u003e\n    \u003cli\u003e\n\u003cstrong\u003eCơm đậu hũ sốt satay–ớt\u003c\/strong\u003e — Trộn đậu hũ nóng với \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/bull-head-brand-satay-sauce-250g\"\u003esốt satay\u003c\/a\u003e và \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/fresh-spiral-jalapeno-peppers-approximately-200g\"\u003eớt xanh áp chảo xém\u003c\/a\u003e; dọn với cơm nấu từ \u003ca style=\"color:var(--brand);\" href=\"\/vi\/products\/hokkaido-sansanmaru-japanese-rice-5kg\"\u003egạo Nhật Bản\u003c\/a\u003e.\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:0;padding-left:18px;color:#334155;\"\u003e\n    \u003cli\u003eMuốn vị thanh hơn, rửa sơ hoặc nhúng nước nóng (10–20 giây) để bớt dầu ngoài mặt trước khi nấu.\u003c\/li\u003e\n    \u003cli\u003eLàm giòn lại bằng nồi chiên không dầu hoặc lò nướng trong 2–4 phút đến khi cạnh hơi giòn.\u003c\/li\u003e\n    \u003cli\u003eCắt khối hoặc tam giác để thấm sốt hơn; nếu nhồi nhân, rạch một túi nhỏ ở một bên.\u003c\/li\u003e\n    \u003cli\u003eNấu sôi nhẹ trong nước dùng hoặc sốt cho thấm vị; tránh đảo mạnh để giữ nguyên miế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;padding-left:18px;color:#334155;\"\u003e\n    \u003cli\u003e\u003ca style=\"color:var(--brand);\" 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 style=\"color:var(--brand);\" 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 style=\"color:var(--brand);\" href=\"\/vi\/products\/chois-oyster-mushrooms-400g\"\u003eChois Nấm bào ngư - 400g\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca style=\"color:var(--brand);\" 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 style=\"color:var(--brand);\" href=\"\/vi\/products\/bull-head-clear-chicken-broth-411ml-canned-chicken-stock\"\u003eBull Head Nước dùng gà thanh 411ml\u003c\/a\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003ca style=\"color:var(--brand);\" 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\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 loại\u003c\/h3\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":48151484530975,"sku":"A9323536011236","price":5.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/451d3341453e54ad61ee6a564d1a0bb2OH4Cp4sagvZBe9cXUFb76WOfZZqEsJtE.jpg?v=1712384006"},{"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.29,"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":5.29,"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-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":5.29,"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-l-c-bbq-squid-skewers-20-skewers-800g","title":"L\u0026C Xiên mực BBQ [Đông lạnh] 20 xiên 800g","description":"\u003cp\u003eXiên mực BBQ đông lạnh L\u0026amp;C thích hợp để nướng vỉ hoặc nướng lò. Mỗi gói gồm 20 xiên, tổng trọng lượng 800g, là món hải sản ngon, tiện chế biến cho buổi BBQ sắp tới của bạn.\u003c\/p\u003e","brand":"L\u0026C","offers":[{"title":"Default Title","offer_id":48151514284319,"sku":"A9354773000042","price":31.09,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_792d0f46-452d-4501-9a89-7cdd58c746a7.jpg?v=1712385363"},{"product_id":"frozen-aushin-dory-fish-fillet-with-bone-900g","title":"Aushin Phi lê cá Dory (có xương) [Đông lạnh] 900g","description":"\u003cp\u003ePhi lê cá Dory đông lạnh Aushin có chất lượng cao, còn xương và hương vị đậm đà vốn có của cá. Gói 900g thích hợp cho bữa ăn gia đình và có thể dùng để chế biến nhiều món khác nhau.\u003c\/p\u003e","brand":"Aushin","offers":[{"title":"Default Title","offer_id":48151515037983,"sku":"A9421027001244","price":11.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_d48a6c9e-0c35-4d25-8ec9-d68df5d886b5.jpg?v=1712385422"},{"product_id":"frozen-yiwelingxian-corn-shrimp-paste-150g","title":"Yiwelingxian Chả tôm bắp [Đông lạnh] 150g","description":"Chả tôm bắp Yiwelingxian được đóng gói 150g và cấp đông để giữ độ tươi cùng hương vị.\u003cbr\u003eSự kết hợp giữa tôm và bắp mang lại hương vị riêng cho món ăn. Bạn có thể dùng sản phẩm hải sản này để chế biến nhiều món khác nhau.","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-mingfa-clam-meat-500g","title":"Thịt nghêu luộc MING FA 500 g – nghêu đông lạnh, thịt ngọt mọng nước","description":"Thịt nghêu MINGFA đông lạnh 500g tiện dùng cho nhiều món ăn, dễ chế biến khi nấu tại nhà. \u003cbr\u003e Thịt nghêu mềm, vị ngọt mang hương vị biển; bạn có thể dùng nấu súp, mì Ý hoặc xào.","brand":"MINGFA","offers":[{"title":"Default Title","offer_id":48151517430047,"sku":"A6937003900881","price":10.59,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_e3d5aebe-b33a-4d7a-8ed3-9a1ec3334df7.jpg?v=1712385560"},{"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":"Old Beifang Ba rọi heo cắt lát cao cấp đông lạnh gói gia đình 600g","description":"\u003cp\u003eBa rọi heo cắt lát đông lạnh Old Beifang có hương vị đậm đà, đóng gói gia đình tiện lợi 600g. Thịt được cắt từ ba rọi heo chất lượng cao, khi chế biến mềm và mọng nước.\u003cbr\u003e Thích hợp để nướng vỉ, nướng lò hoặc chiên, dễ dùng cho bữa cơm gia đình hay những buổi sum họp.\u003cbr\u003e Từng gói được chuẩn bị kỹ để giữ độ tươi và chất lượng, giúp bạn chế biến những món ăn ngon miệng.\u003c\/p\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":"Osawa Ba rọi heo đông lạnh 250g","description":"\u003cp\u003eBa rọi heo đông lạnh Osawa 250g có hương vị đậm đà, là nguyên liệu chất lượng cao cho các món ăn.\u003cbr\u003e Phần 250 grams phù hợp cho bữa tối của gia đình ít người hoặc một người ăn.\u003cbr\u003e Vân mỡ xen trong thịt giúp ba rọi mềm, mọng nước khi nấu chín.\u003cbr\u003e Bạn có thể chế biến nhiều món, từ ba rọi giòn đến các món kho mềm, mọng nước.\u003c\/p\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":"Osawa Thịt cổ heo đông lạnh 250g","description":"\u003cp\u003eThịt cổ heo đông lạnh Osawa 250g là phần thịt chất lượng cao, có kết cấu mềm và vị đậm đà, dễ dùng trong nhiều món ăn.\u003cbr\u003e Thích hợp với cách nấu chậm như kho hoặc hun khói để thịt mềm, mọng nước và đậm vị.\u003cbr\u003e Thịt được đóng gói tiện lợi và cấp đông để giữ độ tươi, giúp bạn chuẩn bị những bữa ăn ngon tại nhà.\u003c\/p\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-frozen-hotpot-duck-intestine-100g","title":"Tianfu Ruột vịt đông lạnh, dùng cho lẩu - 100g","description":"\u003cp\u003eRuột vịt đông lạnh Tianfu có hương vị đậm đà đặc trưng, phù hợp cho nồi lẩu của bạn. Mỗi gói 100g được sơ chế kỹ để giữ độ tươi ngon và chất lượng, giúp nước lẩu thêm đậm vị.\u003cbr\u003e Ruột vịt được làm sạch kỹ, cấp đông nhanh để giữ hương vị và đã sẵn sàng để nấu. Tiện dùng cho cả bữa ăn nhanh lẫn bữa tiệc cầu kỳ.\u003cbr\u003e Ruột vịt đông lạnh Tianfu mang hương vị ẩm thực truyền thống vào bữa ăn, giúp bạn chế biến món ngon ngay tại nhà.\u003c\/p\u003e","brand":"Tianfu","offers":[{"title":"Default Title","offer_id":48151600922911,"sku":"A9780201979626","price":10.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_d0dc2451-627e-40c6-b734-8c8a4c5f5de8.jpg?v=1712386742"},{"product_id":"tianfu-boneless-duck-feet-frozen-100g","title":"Tianfu Chân vịt rút xương đông lạnh, 100g","description":"\u003cp\u003eChân vịt rút xương đông lạnh Tianfu đóng thành từng phần 100g, có hương vị riêng. Được sơ chế kỹ và rút xương, chân vịt có kết cấu mềm, phù hợp để chế biến nhiều món.\u003cbr\u003e Dùng được cho các công thức truyền thống hoặc món mới lạ. Chân vịt là nguồn collagen dồi dào và được xem là món ngon trong nhiều nền ẩm thực.\u003cbr\u003e Có thể nấu trực tiếp từ đông lạnh, giúp món ăn thêm hương vị và kết cấu đặc trưng.\u003c\/p\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-eb-golden-wrapped-fish-300g","title":"EB Cá bọc bột vàng giòn [Đông lạnh] 300g","description":"Cá bọc bột vàng giòn EB đóng gói 300g, được cấp đông để giữ độ tươi và hương vị.\u003cbr\u003eLớp bột vàng bọc bên ngoài cho thành phẩm giòn. Đây là lựa chọn hải sản tiện lợi, chế biến nhanh cho bữa ăn.","brand":"EB","offers":[{"title":"Default Title","offer_id":48151729897759,"sku":"A9555573001165","price":6.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_c039fa01-f334-4f92-a364-3bdc0b8746bf.jpg?v=1736583732"},{"product_id":"frozen-eb-fish-tofu-skin-rolls-300g","title":"EB Tàu hũ ky cuộn cá [Đông lạnh] 300g","description":"\u003cp\u003eTàu hũ ky cuộn cá EB đông lạnh được làm từ cá và tàu hũ ky chất lượng cao, mang hương vị ẩm thực châu Á. Mỗi gói 300g dễ chế biến và dọn ăn, phù hợp khi bạn cần một bữa ăn nhanh, bổ dưỡng.\u003c\/p\u003e","brand":"EB","offers":[{"title":"Default Title","offer_id":48151731929375,"sku":"A9555573001134","price":6.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_b81954a3-d8f2-44b8-896a-de48b1edc60f.webp?v=1736583730"},{"product_id":"frozen-eb-seafood-tofu-skin-roll-300g","title":"EB Tàu hũ ky cuộn hải sản [Đông lạnh] 300g","description":"\u003cp\u003eTàu hũ ky cuộn hải sản EB kết hợp hải sản và đậu hũ trong lớp tàu hũ ky mỏng, giòn. Gói đông lạnh 300g là lựa chọn tiện lợi, ngon miệng cho bữa ăn.\u003c\/p\u003e","brand":"EB","offers":[{"title":"Default Title","offer_id":48151733666079,"sku":"A9555573001080","price":6.29,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_d6f6d556-9fdc-4a19-9b27-ddd3bdfe3857.jpg?v=1736583728"},{"product_id":"frozen-ausnew-fish-sausages-500g","title":"Aushin Xúc xích cá [Đông lạnh] 500g","description":"\u003cp\u003eXúc xích cá Aushin là sản phẩm hải sản đông lạnh làm từ thịt cá phối trộn, có dạng xúc xích tiện dùng. Mỗi gói 500g phù hợp để chuẩn bị bữa ăn nhanh, đồng thời cung cấp nguồn đạm và axit béo omega-3 dồi dào.\u003c\/p\u003e","brand":"Aushin","offers":[{"title":"Default Title","offer_id":48151742447903,"sku":"8850016990091","price":9.89,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_dc7f925d-b76a-41d3-b0c9-79f0dc29e7ad.jpg?v=1736583724"},{"product_id":"frozen-jinlihua-premium-hot-pot-platter-500g","title":"Jinlihua Khay đồ nhúng lẩu cao cấp [Đông lạnh] 500g","description":"\u003cp\u003eKhay đồ nhúng lẩu cao cấp Jinlihua gồm các nguyên liệu lẩu tuyển chọn, được cấp đông và đóng gói 500g. Tiện dùng khi bạn muốn chuẩn bị nhanh một bữa lẩu tại nhà.\u003c\/p\u003e","brand":"Jinlihua","offers":[{"title":"Default Title","offer_id":48151749198111,"sku":"4717344322991","price":20.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_1a51111d-3f2d-41d6-a1ad-6281e40cacb7.jpg?v=1736583720"},{"product_id":"frozen-jinlihua-lucky-bag-500g","title":"Jinlihua Lucky Bag Thực phẩm châu Á tổng hợp [Đông lạnh] 500g","description":"\u003cp\u003eJinlihua Lucky Bag là gói 500g gồm nhiều món châu Á đông lạnh, phù hợp để chuẩn bị bữa ăn nhanh, dễ dàng. Các món có hương vị và kết cấu đa dạng, giúp bữa ăn thêm ngon miệng.\u003c\/p\u003e","brand":"Jinlihua","offers":[{"title":"Default Title","offer_id":48151750377759,"sku":"4717344322625","price":20.49,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_e999285e-e0c5-44f0-8cca-6de558b5dbc2.jpg?v=1736583719"},{"product_id":"frozen-top-quality-crispy-skin-sausages-400g","title":"Old Beifang Xúc xích giòn cao cấp [Đông lạnh] 400g","description":"Xúc xích đông lạnh cao cấp với lớp vỏ giòn, cho cảm giác giòn ngon khi ăn.\u003cbr\u003eGói 400g có phần thịt đậm đà, thơm ngon, phù hợp cho bữa ăn đầy đặn.","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-northern-beef-tripe-strips-250g","title":"Bao tử bò Beifang (Tripe) 250 g – cắt sợi cho lẩu \u0026 xào giòn dai","description":"\u003cp\u003eBao tử bò Beifang đông lạnh đóng gói 250g, cung cấp nhiều đạm cho bữa ăn. Bao tử đã cắt sợi sẵn, giúp bạn tiết kiệm thời gian sơ chế.\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":"Beifang","offers":[{"title":"Default Title","offer_id":48151834525983,"sku":"A9353775035687","price":6.19,"currency_code":"AUD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0864\/3602\/0511\/files\/1_b3fe203c-5489-484e-bc3d-f32c271ef825.jpg?v=1736583717"},{"product_id":"frozen-old-northern-large-leaf-crispy-tripe-strips-200g","title":"Old Beifang Lá sách lá lớn cắt sợi giòn [Đông lạnh] 200g","description":"Lá sách lá lớn cắt sợi giòn Old Beifang được làm từ lá sách chất lượng cao, nấu chín sẵn rồi cấp đông nhanh để giữ hương vị và kết cấu.\u003cbr\u003eGói 200g gồm những sợi lá sách lá lớn giòn, đầy đặn, sẵn sàng để bạn thêm vào các món ăn yêu thích.","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":"Tianfu Lá sách ngàn lớp [Đông lạnh] 150g","description":"\u003cp\u003eLá sách ngàn lớp Tianfu có kết cấu nhiều lớp đặc trưng và hương vị đậm đà, giúp bữa ăn thêm phong phú. Gói 150g được đông lạnh để giữ độ tươi, tiện cho việc chế biến.\u003c\/p\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"}],"url":"https:\/\/www.umall.com.au\/vi\/collections\/nguyen-li%e1%bb%87u-l%e1%ba%a9u-c%c6%a1-b%e1%ba%a3n\/lny-party.oembed","provider":"Umall - Australia's Largest Online Asian Supermarket","version":"1.0","type":"link"}