{"id":10526,"date":"2026-08-10T20:36:29","date_gmt":"2026-08-10T20:36:29","guid":{"rendered":"https:\/\/2bbiobeauty.com\/trouver-ma-routine\/"},"modified":"2026-08-17T10:59:12","modified_gmt":"2026-08-17T10:59:12","slug":"thoi-quen-hang-ngay-cua-toi","status":"publish","type":"page","link":"https:\/\/2bbiobeauty.com\/vi\/ma-routine\/","title":{"rendered":"T\u00ecm ra th\u00f3i quen h\u00e0ng ng\u00e0y c\u1ee7a m\u00ecnh"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10526\" class=\"elementor elementor-10526\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8d4eba7 e-con-boxed e-flex sc_layouts_column_icons_position_left e-con e-parent\" data-id=\"8d4eba7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dad22a6 sc_fly_static elementor-widget elementor-widget-html\" data-id=\"dad22a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\n\n<style>.page_content_wrap{padding-top:0!important}.top_panel{position:absolute!important;top:0;left:0;right:0;z-index:60;background:transparent!important;box-shadow:none!important}<\/style>\n<div style=\"position:relative;width:100vw;margin-left:calc(50% - 50vw);min-height:460px;display:flex;align-items:center;overflow:hidden;margin-bottom:28px;\">\n  <img decoding=\"async\" src=\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/hero-routine2.jpg\" alt=\"Rituel 2B Bio Beauty\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:72% center;z-index:0;\">\n  <span style=\"position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(90deg,#F6F7F1 8%,rgba(246,247,241,.93) 36%,rgba(246,247,241,0) 66%);z-index:1;\"><\/span>\n  <div style=\"position:relative;z-index:2;max-width:1160px;margin:0 auto;width:100%;padding:150px 30px 60px;\">\n    <span style=\"display:inline-block;color:#53720b;font-size:16px;font-weight:600;letter-spacing:.14em;margin-bottom:14px;\">[ changez de peau ]<\/span>\n    <h1 style=\"margin:0 0 12px;font-size:clamp(32px,4.5vw,54px);font-weight:700;letter-spacing:-.02em;line-height:1.05;color:#211102;\">Trouver ma routine<\/h1>\n    <p style=\"margin:0;font-size:18px;line-height:1.5;color:#5d5755;max-width:46ch;\">2B Bio Beauty\u00ae prend soin de votre peau. Trouvez votre rituel beaut\u00e9, en 3 clics.<\/p>\n  <\/div>\n<\/div>\n<div id=\"bb-rf\">\n  \n  <div class=\"rf-bar\">\n    <button id=\"backBtn\" type=\"button\">&larr; Retour<\/button>\n    <div id=\"crumbs\"><\/div>\n    <button id=\"homeLink\" type=\"button\">&#8635; Recommencer<\/button>\n  <\/div>\n  <div id=\"stage\"><\/div>\n  <div id=\"toast\"><\/div>\n<\/div>\n<script>\n(function(){\n\nconst GRID_STYLE = \"display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px\";\nconst GRID2_STYLE = \"display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px\";\nfunction photoCard(opts){\n  const {img, tag, tagColor, title, desc, attr} = opts;\n  return `<div class=\"choice-card photo-card\" ${attr} style=\"position:relative;overflow:hidden;border-radius:15px;min-height:${opts.h||190}px;padding:18px;display:flex;flex-direction:column;justify-content:flex-end;color:#fff;cursor:pointer;\">\n    <img decoding=\"async\" src=\"${img}\" alt=\"\" loading=\"lazy\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:0;\">\n    <span style=\"position:absolute;top:0;left:0;width:100%;height:100%;background:linear-gradient(180deg,rgba(20,24,10,0) 30%,rgba(20,24,10,.62) 100%);z-index:1;\"><\/span>\n    <span style=\"position:relative;z-index:2;\">\n      ${tag?`<span style=\"display:inline-block;background:${tagColor||'#53720b'};color:#fff;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;border-radius:100px;padding:5px 12px;margin-bottom:9px;\">${tag}<\/span>`:''}\n      <h3 style=\"margin:0;color:#fff;font-size:${opts.ts||20}px;line-height:1.2;\">${title}<\/h3>\n      ${desc?`<p style=\"margin:6px 0 0;color:rgba(255,255,255,.88);font-size:15px;line-height:1.45;\">${desc}<\/p>`:''}\n    <\/span>\n  <\/div>`;\n}\nconst PRODUCT_IDS = {\"2B Bio Net\": 10540, \"2B Bio Puret\u00e9\": 10541, \"2B Bio Clart\u00e9\": 10542, \"2B Bio Gommage\": 10543, \"2B Bio Enzyscrub\": 10544, \"2B Bio Matifiant\": 10545, \"2B SOS Boutons\": 10546, \"2B Bio Douceur\": 10547, \"2B Bio Regard\": 10548, \"2B Bio Nutrition\": 10549, \"2B Bio Purifiant\": 10550, \"2B Bio Oxygel\": 10551, \"2B Bio S\u00e9rum O2\": 10552, \"2B Bio Hydravit\": 10553, \"2B Bio Cocoon\": 10554, \"2B Bio SkinRebirth\": 10555, \"2B Bio HydraWhite\": 10556, \"2B Bio D\u00e9fense BB Cream\": 10181, \"2B Bio D\u00e9fense Whitening BB Cream\": 10558, \"2B Bio Lift\": 10199, \"2B Bio Clean\": 10191, \"2B Bio D\u00e9fense Naturel\": 10181, \"2B Bio D\u00e9fense\": 10181, \"2B Cr\u00e8me Mains\": 10194};\n\nconst PID_KEYS = Object.keys(PRODUCT_IDS).sort((a,b)=>b.length-a.length);\nfunction productIdFor(txt){\n  const plain = String(txt).replace(\/<[^>]+>\/g,'').trim();\n  for (const k of PID_KEYS){ if(plain.startsWith(k)) return PRODUCT_IDS[k]; }\n  return null;\n}\nasync function addIdsToCart(cta){\n  const raw = (cta.getAttribute('data-ids')||'').split(',').filter(Boolean);\n  if(!raw.length){ toast('Produits indisponibles pour le moment'); return; }\n  cta.disabled = true;\n  const orig = cta.textContent;\n  cta.textContent = 'Ajout en cours\u2026';\n  try {\n    for (const id of raw){\n      await fetch('\/?wc-ajax=add_to_cart', {\n        method:'POST', credentials:'same-origin',\n        headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n        body:'product_id='+encodeURIComponent(id)+'&quantity=1&bb2_routine=1'\n      });\n    }\n    if (window.jQuery) jQuery(document.body).trigger('wc_fragment_refresh');\n    toast(raw.length + ' produits ajout\u00e9s \u00e0 votre panier');\n    cta.textContent = 'Ajout\u00e9 \u2713';\n    if (!cta.nextElementSibling || !cta.nextElementSibling.classList.contains('cta-view')){\n      const a = document.createElement('a');\n      a.href = '\/panier\/';\n      a.className = 'cta cta-view';\n      a.textContent = 'Voir mon panier \u2192';\n      a.style.marginTop = '10px';\n      cta.insertAdjacentElement('afterend', a);\n    }\n  } catch(e){\n    cta.disabled = false; cta.textContent = orig;\n    toast('Une erreur est survenue, r\u00e9essayez');\n  }\n}\n\nconst PRICES = {\n  \"2B Bio Net\": 33.75, \"2B Bio Clean\": 29.00, \"2B Bio Puret\u00e9\": 32.75, \"2B Bio Clart\u00e9\": 34.75,\n  \"2B Bio Gommage\": 40.75, \"2B Bio Enzyscrub\": 54.75, \"2B Bio Matifiant\": 39.95, \"2B SOS Boutons\": 25.50,\n  \"2B Bio Douceur\": 34.75, \"2B Bio Regard\": 39.95, \"2B Bio Nutrition\": 54.75, \"2B Bio Purifiant\": 54.75,\n  \"2B Bio Oxygel\": 78.95, \"2B Bio S\u00e9rum O2\": 259.75, \"2B Bio Hydravit\": 56.95, \"2B Bio Cocoon\": 92.75,\n  \"2B Bio Lift\": 78.95, \"2B Bio SkinRebirth\": 39.50, \"2B Bio HydraWhite\": 85.95,\n  \"2B Bio D\u00e9fense Whitening\": 56.50, \"2B Bio D\u00e9fense BB Cream\": 53.50, \"2B Bio D\u00e9fense Naturel\": 53.50, \"2B Bio D\u00e9fense\": 53.50\n};\nconst PRICE_KEYS = Object.keys(PRICES).sort((a,b)=>b.length-a.length);\nfunction priceFor(txt){\n  const plain = String(txt).replace(\/<[^>]+>\/g,'').trim();\n  for (const k of PRICE_KEYS){ if(plain.startsWith(k)) return PRICES[k]; }\n  return null;\n}\nfunction remiseFor(n){ return n>=5 ? 30 : n===4 ? 20 : n===3 ? 10 : n===2 ? 5 : 0; }\nfunction eur(v){ return v.toFixed(2).replace('.',',') + '\\u00a0\u20ac'; }\nfunction prix95(t){ let c = Math.floor(t) + 0.95; if (c > t) c -= 1; return Math.max(c, 0.95); }\nfunction panierBlockHtml(title, tagline, list, ctaLabel, spf){\n  \/\/ les cartes sont deja affichees par etape ; on valide la selection pour la barre\n  if (window.rfSelNext && Object.keys(window.rfSelNext).length) {\n    window.rfSel = window.rfSelNext;\n  } else {\n    \/\/ ecran sans etapes detaillees : cartes directes depuis la liste du rituel\n    window.rfSelNext = {};\n    var cards = stepsHtml(list);\n    window.rfSel = window.rfSelNext; window.rfSelNext = null;\n    return `<div class=\"rf-routine\"><div class=\"phase-label\">Votre rituel<\/div>${cards}\n      <div class=\"rituel-notes\"><div class=\"discount-note\">Prix d\u00e9gressif selon le nombre de produits&nbsp;: 2 produits \u22125%, 3 produits \u221210%, 4 produits \u221220%, 5 et plus \u221230%.<\/div>\n      ${spf ? '<div class=\"spf-note\">\u00c0 r\u00e9appliquer toutes les 3-4 heures en cas d\\u2019exposition au soleil.<\/div>' : ''}<\/div><\/div>`;\n  }\n  window.rfSelNext = null;\n  return `<div class=\"rf-routine\">\n    <div class=\"rituel-notes\"><div class=\"discount-note\">Prix d\u00e9gressif selon le nombre de produits&nbsp;: 2 produits \u22125%, 3 produits \u221210%, 4 produits \u221220%, 5 et plus \u221230%.<\/div>\n    ${spf ? '<div class=\"spf-note\">\u00c0 r\u00e9appliquer toutes les 3-4 heures en cas d\\u2019exposition au soleil.<\/div>' : ''}<\/div><\/div>`;\n}\n\nconst IMGS = {\"2B Bio Net\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-net.jpg\", \"2B Bio Clean\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-clean.jpg\", \"2B Bio Puret\u00e9\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-purete.jpg\", \"2B Bio Clart\u00e9\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-clarte.jpg\", \"2B Bio Gommage\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-gommage.jpg\", \"2B Bio Enzyscrub\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-enzyscrub.jpg\", \"2B Bio Matifiant\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-matifiant.jpg\", \"2B SOS Boutons\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/sos-boutons.jpg\", \"2B Bio Douceur\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-douceur.jpg\", \"2B Bio Regard\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-regard.jpg\", \"2B Bio Nutrition\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-nutrition.jpg\", \"2B Bio Purifiant\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-purifiant.jpg\", \"2B Bio Oxygel\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-oxygel.jpg\", \"2B Bio S\u00e9rum O2\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-serum-o2.jpg\", \"2B Bio Serum O2\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-serum-o2.jpg\", \"2B Bio Hydravit\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-hydravit.jpg\", \"2B Bio Cocoon\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-cocoon.jpg\", \"2B Bio Lift\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-lift.jpg\", \"2B Bio SkinRebirth\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-skinrebirth.jpg\", \"2B Bio HydraWhite\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-hydrawhite.jpg\", \"2B Bio D\u00e9fense Whitening BB Cream\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-defense-bb.jpg\", \"2B Bio D\u00e9fense BB Cream\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-defense-bb.jpg\", \"2B Bio D\u00e9fense Naturel\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-defense.jpg\", \"2B Bio D\u00e9fense\": \"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/bio-defense.jpg\"};\nconst IMG_KEYS = Object.keys(IMGS).sort((a,b)=>b.length-a.length);\n\n\/* ---------- Donn\u00e9es ---------- *\/\n\nconst INSTITUT = {\n  peeling: {\n    label: \"2B Bio Peeling\",\n    avantPaniers: {\n      toutes: {label:\"Toutes peaux\", produits:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Clean\",\"2B Bio Douceur\"], panier:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\"], subtotal:\"97,50\", price:\"67,95\"},\n      grasse: {label:\"Peau grasse\", produits:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Puret\u00e9\",\"2B Bio Clart\u00e9\"], panier:[\"2B Bio Net\",\"2B Bio Puret\u00e9\",\"2B Bio Clart\u00e9\"], subtotal:\"101,25\", price:\"69,95\"}\n    }\n  },\n  enzymatique: {\n    label: \"Soin enzymatique\",\n    apres: {\n      matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Hydravit\"],\n      soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Hydravit\"],\n      hebdo: [\"2B Bio Enzyscrub\"]\n    },\n    panier: {produits:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Hydravit\",\"2B Bio Enzyscrub\"], subtotal:\"209,20\", price:\"145,95\"}\n  }\n};\n\n\/* Post-peel-off \u00e0 domicile, d\u00e9clin\u00e9 par type de peau, protocole r\u00e9solu (sans \"ou\")\n   et panier chiffr\u00e9, -30% sur le total, arrondi au ,95 inf\u00e9rieur. *\/\nconst PEELOFF_APRES_TYPES = {\n  toutes: {\n    label: \"Toutes peaux\",\n    matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Lift\", \"2B Bio Hydravit\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Lift\", \"2B Bio Hydravit\"],\n    panier: [\"2B Bio Net\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Lift\", \"2B Bio Hydravit\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    subtotal: \"286,90\", price: \"199,95\"\n  },\n  grasse: {\n    label: \"Peau grasse\",\n    matin: [\"2B Bio Puret\u00e9\", \"2B Bio Clart\u00e9\", \"2B Bio Lift\", \"2B Bio Hydravit\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Puret\u00e9\", \"2B Bio Clart\u00e9\", \"2B Bio Lift\", \"2B Bio Hydravit\"],\n    panier: [\"2B Bio Net\", \"2B Bio Puret\u00e9\", \"2B Bio Clart\u00e9\", \"2B Bio Lift\", \"2B Bio Hydravit\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    subtotal: \"290,65\", price: \"202,95\"\n  }\n};\n\n\/* Post-peeling \u00e0 domicile, d\u00e9clin\u00e9 par type de peau, protocole r\u00e9solu (sans \"ou\")\n   et panier chiffr\u00e9, -30% sur le total, arrondi au ,95 inf\u00e9rieur. *\/\nconst PEELING_APRES_TYPES = {\n  normale: {\n    label: \"Peau normale\",\n    preparer: {matin:[\"2B Bio Clean\"], soir:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Clean\"], hebdo:[\"2B Bio Gommage, 1 fois par semaine, \u00e0 partir de J+3-4 et jusqu'au prochain rendez-vous\"]},\n    apaiser: [\"2B Bio Douceur\",\"2B Bio Regard <i>(contour des yeux et l\u00e8vres)<\/i>\"],\n    nourrir: [\"2B Bio Nutrition\"],\n    traiter: [\"2B Bio Oxygel\",\"2B Bio Hydravit\"],\n    proteger: [\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes), \u00e0 r\u00e9appliquer toutes les 3-4h au soleil\"],\n    panier: [\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Gommage\",\"2B Bio Regard\",\"2B Bio Nutrition\",\"2B Bio Oxygel\",\"2B Bio Hydravit\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    subtotal: \"422,35\", price: \"294,95\"\n  },\n  seche: {\n    label: \"Peau s\u00e8che\",\n    preparer: {matin:[\"2B Bio Clean\"], soir:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Clean\"], hebdo:[\"2B Bio Gommage, 1 fois par semaine, \u00e0 partir de J+3-4 et jusqu'au prochain rendez-vous\"]},\n    apaiser: [\"2B Bio Douceur\",\"2B Bio Regard\"],\n    nourrir: [\"2B Bio Nutrition\"],\n    traiter: [\"2B Bio Oxygel\",\"2B Bio Cocoon\"],\n    proteger: [\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes), \u00e0 r\u00e9appliquer toutes les 3-4h au soleil\"],\n    panier: [\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Gommage\",\"2B Bio Regard\",\"2B Bio Nutrition\",\"2B Bio Oxygel\",\"2B Bio Cocoon\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    subtotal: \"458,15\", price: \"319,95\"\n  },\n  mature: {\n    label: \"Peau mature\",\n    preparer: {matin:[\"2B Bio Clean\"], soir:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Clean\"], hebdo:[\"2B Bio Gommage, 1 fois par semaine, \u00e0 partir de J+3-4 et jusqu'au prochain rendez-vous\"]},\n    apaiser: [\"2B Bio Douceur\",\"2B Bio Regard\"],\n    nourrir: [\"2B Bio Nutrition\"],\n    traiter: [\"2B Bio S\u00e9rum O2\",\"2B Bio Cocoon\"],\n    proteger: [\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes), \u00e0 r\u00e9appliquer toutes les 3-4h au soleil\"],\n    panier: [\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Gommage\",\"2B Bio Regard\",\"2B Bio Nutrition\",\"2B Bio S\u00e9rum O2\",\"2B Bio Cocoon\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    subtotal: \"638,95\", price: \"446,95\"\n  },\n  grasse: {\n    label: \"Peau grasse\",\n    preparer: {matin:[\"2B Bio Puret\u00e9\"], soir:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Puret\u00e9\"], hebdo:[\"2B Bio Gommage, 1 fois par semaine, \u00e0 partir de J+3-4 et jusqu'au prochain rendez-vous\"]},\n    apaiser: [\"2B Bio Clart\u00e9\",\"2B Bio Regard\"],\n    nourrir: [\"2B Bio Purifiant\"],\n    traiter: [\"2B Bio Oxygel\",\"2B Bio Hydravit\"],\n    proteger: [\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes), \u00e0 r\u00e9appliquer toutes les 3-4h au soleil\"],\n    panier: [\"2B Bio Net\",\"2B Bio Puret\u00e9\",\"2B Bio Clart\u00e9\",\"2B Bio Gommage\",\"2B Bio Regard\",\"2B Bio Purifiant\",\"2B Bio Oxygel\",\"2B Bio Hydravit\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n    subtotal: \"426,10\", price: \"297,95\"\n  },\n  hyperpigmentee: {\n    label: \"Peau hyperpigment\u00e9e\",\n    preparer: {matin:[\"2B Bio Clean\"], soir:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Clean\"], hebdo:[\"2B Bio Gommage, 1 fois par semaine, \u00e0 partir de J+3-4 et jusqu'au prochain rendez-vous\"]},\n    apaiser: [\"2B Bio Douceur\",\"2B Bio Regard\"],\n    nourrir: [\"2B Bio Nutrition\"],\n    traiter: [\"2B Bio Oxygel\",\"2B Bio HydraWhite\"],\n    proteger: [\"2B Bio D\u00e9fense Whitening BB Cream SPF50+, \u00e0 r\u00e9appliquer toutes les 3-4h au soleil\"],\n    panier: [\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Gommage\",\"2B Bio Regard\",\"2B Bio Nutrition\",\"2B Bio Oxygel\",\"2B Bio HydraWhite\",\"2B Bio D\u00e9fense Whitening BB Cream SPF50+\"],\n    subtotal: \"454,35\", price: \"317,95\"\n  },\n  grasseHyperpigmentee: {\n    label: \"Peau grasse hyperpigment\u00e9e\",\n    preparer: {matin:[\"2B Bio Puret\u00e9\"], soir:[\"2B Bio Net <i>(si maquillage)<\/i>\",\"2B Bio Puret\u00e9\"], hebdo:[\"2B Bio Gommage, 1 fois par semaine, \u00e0 partir de J+3-4 et jusqu'au prochain rendez-vous\"]},\n    apaiser: [\"2B Bio Clart\u00e9\",\"2B Bio Regard\"],\n    nourrir: [\"2B Bio Purifiant\"],\n    traiter: [\"2B Bio Oxygel\",\"2B Bio HydraWhite\"],\n    proteger: [\"2B Bio D\u00e9fense Whitening BB Cream SPF50+, \u00e0 r\u00e9appliquer toutes les 3-4h au soleil\"],\n    panier: [\"2B Bio Net\",\"2B Bio Puret\u00e9\",\"2B Bio Clart\u00e9\",\"2B Bio Gommage\",\"2B Bio Regard\",\"2B Bio Purifiant\",\"2B Bio Oxygel\",\"2B Bio HydraWhite\",\"2B Bio D\u00e9fense Whitening BB Cream SPF50+\"],\n    subtotal: \"458,10\", price: \"319,95\"\n  }\n};\n\nconst RITUELS = [\n  {id:\"grasse\", symptom:\"Boutons, brillance\", title:\"Rituel Peau Nette\", tagline:\"Matifier, purifier, apaiser.\",\n   products:[\"2B Bio Net\",\"2B Bio Puret\u00e9\",\"2B Bio Matifiant\",\"2B SOS Boutons\",\"2B Bio Purifiant\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n   subtotal:\"240,20\", price:\"167,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Puret\u00e9\", \"2B Bio Matifiant\", \"2B SOS Boutons <i>(application locale)<\/i>\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Puret\u00e9\", \"2B Bio Matifiant\", \"2B SOS Boutons <i>(application locale)<\/i>\"],\n     hebdo: [\"2B Bio Purifiant <i>(masque)<\/i>\"]\n   }},\n  {id:\"taches\", symptom:\"Taches, teint irr\u00e9gulier\", title:\"Rituel Teint Unifi\u00e9\", tagline:\"Att\u00e9nuer les taches, uniformiser le teint.\",\n   products:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio HydraWhite\",\"2B Bio D\u00e9fense Whitening BB Cream SPF50+\"],\n   subtotal:\"239,95\", price:\"167,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio HydraWhite\", \"2B Bio D\u00e9fense Whitening BB Cream SPF50+\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio HydraWhite\"],\n     hebdo: []\n   }},\n  {id:\"mature\", symptom:\"Rides, rel\u00e2chement\", title:\"Rituel Slow-Age\", tagline:\"Nourrir, raffermir, r\u00e9g\u00e9n\u00e9rer.\",\n   products:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio S\u00e9rum O2\",\"2B Bio Lift\",\"2B Bio Cocoon\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n   subtotal:\"582,45\", price:\"406,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio S\u00e9rum O2\", \"2B Bio Cocoon\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Lift\", \"2B Bio Cocoon\"],\n     hebdo: []\n   }},\n  {id:\"secheresse\", symptom:\"S\u00e9cheresse, tiraillements\", title:\"Rituel Grand Confort\", tagline:\"Restaurer le confort, hydrater en profondeur.\",\n   products:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Hydravit\",\"2B Bio Nutrition\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n   subtotal:\"262,70\", price:\"182,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Hydravit\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Hydravit\"],\n     hebdo: [\"2B Bio Nutrition <i>(masque)<\/i>\"],\n     hebdoLabel: \"Le soir, en cas de tiraillements\"\n   }},\n  {id:\"sensible\", symptom:\"Sensibilit\u00e9, inconfort\", title:\"Rituel Douceur Absolue\", tagline:\"Apaiser, remin\u00e9raliser, prot\u00e9ger.\",\n   products:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio Cocoon\",\"2B Bio Nutrition\",\"2B Bio Regard\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n   subtotal:\"338,45\", price:\"235,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Cocoon\", \"2B Bio Regard\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio Cocoon\", \"2B Bio Regard\"],\n     hebdo: [\"2B Bio Nutrition <i>(masque)<\/i>\"]\n   }},\n  {id:\"terne\", symptom:\"Teint terne, peau fatigu\u00e9e\", title:\"Rituel Teint Frais\", tagline:\"Relancer l'\u00e9clat, limiter le stress oxydatif.\",\n   products:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Douceur\",\"2B Bio SkinRebirth\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n   subtotal:\"190,50\", price:\"132,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio SkinRebirth\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Douceur\", \"2B Bio SkinRebirth\"],\n     hebdo: []\n   }},\n  {id:\"preventif\", symptom:\"Aucun probl\u00e8me pr\u00e9cis\", title:\"Rituel \u00c9quilibre Quotidien\", tagline:\"Entretenir l'\u00e9quilibre naturel de la peau.\",\n   products:[\"2B Bio Net\",\"2B Bio Clean\",\"2B Bio Enzyscrub\",\"2B Bio Hydravit\",\"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n   subtotal:\"227,95\", price:\"158,95\", spf:true,\n   protocol: {\n     matin: [\"2B Bio Clean\", \"2B Bio Hydravit\", \"2B Bio D\u00e9fense Naturel SPF30 ou 2B Bio D\u00e9fense BB Cream SPF50+ (3 teintes)\"],\n     soir: [\"2B Bio Net <i>(si maquillage)<\/i>\", \"2B Bio Clean\", \"2B Bio Hydravit\"],\n     hebdo: [\"2B Bio Enzyscrub\"]\n   }}\n];\n\n\/* ---------- Moteur de navigation ---------- *\/\n\nlet path = [];      \/\/ pile de labels pour le fil d'ariane\n\nconst stage = document.getElementById('stage');\nconst crumbsEl = document.getElementById('crumbs');\nconst backBtn = document.getElementById('backBtn');\n\nfunction renderCrumbs(){\n  crumbsEl.innerHTML = path.map((p,i)=>\n    (i>0?'<span class=\"sep\">\/<\/span>':'') + '<span>'+p+'<\/span>'\n  ).join('');\n  backBtn.style.display = path.length ? 'inline-block' : 'none';\n}\n\nlet history = [];\n\nfunction toast(msg){\n  const t = document.getElementById('toast');\n  t.textContent = msg;\n  t.classList.add('show');\n  setTimeout(()=>t.classList.remove('show'), 2200);\n}\n\n\/* ---------- \u00c9crans ---------- *\/\n\nfunction screenHome(){\n  return `\n  <div class=\"step-title\">Quel type de routine souhaitez-vous ?<\/div>\n  <div style=\"${GRID2_STYLE}\">\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2025\/07\/2B-BIO-exfolier.jpg\", tag:\"Institut\", tagColor:\"#53720b\", title:\"Apr\u00e8s un soin en institut\", desc:\"2B Bio Peeling, soin enzymatique ou peel-off antioxydant - retrouvez le protocole adapt\u00e9.\", attr:'data-go=\"institutChoice\"', h:210})}\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2025\/07\/2B-BIO-hydrater.jpg\", tag:\"Maison\", tagColor:\"#b07b1e\", title:\"A la maison, au quotidien\", desc:\"Avec ou sans probl\u00e8me de peau particulier \u00e0 cibler.\", attr:'data-go=\"maisonChoice\"', h:210})}\n  <\/div>`;\n}\n\nfunction screenInstitutChoice(){\n  return `\n  <div class=\"step-title\">Quel soin avez-vous re\u00e7u (ou allez recevoir) ?<\/div>\n  <div style=\"${GRID_STYLE}\">\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/2B_Bio_Peel_group.jpg\", tag:\"Cabine\", title:\"2B Bio Peeling\", attr:'data-go=\"peelingChoice\"', h:180})}\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/choix-enzymatique.jpg\", tag:\"Cabine\", title:\"Soin enzymatique\", attr:'data-go=\"enzymatiqueResult\"', h:180})}\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/peeloff-on-face.png\", tag:\"Cabine\", title:\"Peel-off\", attr:'data-go=\"peeloffApresTypeChoice\"', h:180})}\n  <\/div>\n  <div style=\"margin-top:18px;\">\n    <p style=\"font-size:16.5px;color:var(--ink-soft);margin:0 0 6px;\">Ces soins sont r\u00e9alis\u00e9s exclusivement par un professionnel agr\u00e9\u00e9.<\/p>\n    <a href=\"https:\/\/2bbiobeauty.com\/nos-instituts\/\" style=\"color:var(--institut,#53720b);text-decoration:underline;font-size:17px;font-weight:500;display:inline-block;\">Trouver un sp\u00e9cialiste 2B Bio Beauty\u00ae &rarr;<\/a>\n  <\/div>`;\n}\n\nfunction screenPeelingChoice(){\n  return `\n  <div class=\"step-title\">Avant ou apr\u00e8s votre s\u00e9ance ?<\/div>\n  <div style=\"${GRID2_STYLE}\">\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2025\/07\/2B-BIO-Nettoyer.jpg\", tag:\"Pr\u00e9-soin\", title:\"Avant la s\u00e9ance\", desc:\"Routine l\u00e9g\u00e8re de double nettoyage et d\u2019\u00e9quilibrage pour pr\u00e9parer la peau.\", attr:'data-go=\"peelingAvant\"', h:200})}\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2025\/07\/2B-BIO-oxygener.jpg\", tag:\"Post-soin\", title:\"Apr\u00e8s la s\u00e9ance\", desc:\"Protocole complet, adapt\u00e9 \u00e0 votre type de peau.\", attr:'data-go=\"peelingApresTypeChoice\"', h:200})}\n  <\/div>`;\n}\n\nfunction imgFor(txt){\n  const plain = String(txt).replace(\/<[^>]+>\/g,'').trim();\n  for (const k of IMG_KEYS){ if(plain.startsWith(k)) return IMGS[k]; }\n  return null;\n}\nfunction stepsHtml(list, phase){\n  return '<div class=\"rf-cards\">' + cardsHtml(list, phase || '') + '<\/div>';\n}\nfunction groupsHtml(groups){\n  const order = [], map = {};\n  groups.forEach(g => {\n    const phase = g[0] || '', list = g[1] || [];\n    list.forEach(s => {\n      const label = String(s).replace(\/<[^>]*>\/g, '');\n      const pid = (typeof productIdFor === 'function') ? productIdFor(s) : null;\n      const key = pid ? String(pid) : label;\n      if (!map[key]) { map[key] = {item: s, phases: []}; order.push(key); }\n      if (phase && map[key].phases.indexOf(phase) < 0) map[key].phases.push(phase);\n    });\n  });\n  let all = '';\n  order.forEach(k => { all += cardsHtml([map[k].item], mergePhases(map[k].phases)); });\n  return '<div class=\"rf-cards\">' + all + '<\/div>';\n}\nfunction mergePhases(phases){\n  const SEP = ' &middot; ';\n  const groups = [], idx = {};\n  phases.forEach(p => {\n    const i = p.indexOf(SEP);\n    const pre = i > -1 ? p.slice(0, i) : '';\n    const suf = i > -1 ? p.slice(i + SEP.length) : p;\n    if (!(pre in idx)) { idx[pre] = groups.length; groups.push({pre: pre, sufs: []}); }\n    if (groups[idx[pre]].sufs.indexOf(suf) < 0) groups[idx[pre]].sufs.push(suf);\n  });\n  return groups.map(g => {\n    const txt = g.sufs.map((s, n) => n ? s.charAt(0).toLowerCase() + s.slice(1) : s).join(' et ');\n    return g.pre ? g.pre + SEP + txt : txt;\n  }).join('|');\n}\nfunction cardsHtml(list, phase){\n  window.rfSelNext = window.rfSelNext || {};\n  const GAMME = function(n){\n    if (\/Net\\b|Clean|Puret\\u00e9|Clart\\u00e9|Gommage|Enzyscrub\/.test(n)) return 'Nettoyer';\n    if (\/D\\u00e9fense|Oxygel|S\\u00e9rum O2|Serum O2\/.test(n)) return 'Oxyg\\u00e9ner et Prot\\u00e9ger';\n    if (\/Peeling|F1|F2|F3|Mousse calmante|Peel-off\/.test(n)) return 'En institut';\n    return 'Hydrater';\n  };\n  let cards = '';\n  list.forEach(s => {\n    const label = s.replace(\/<[^>]*>\/g, '');\n    const pid = (typeof productIdFor === 'function') ? productIdFor(s) : null;\n    const pr = priceFor(s) || 0, im = imgFor(s) || '';\n    const key = pid ? String(pid) : label;\n    if (!window.rfSelNext[key]) window.rfSelNext[key] = {pid: pid, price: pr, qty: 1, img: im, label: label};\n    cards += '<div class=\"rf-card\" data-key=\"' + key + '\">'\n      + '<div class=\"rf-card-tag\">' + GAMME(label) + '<\/div>'\n      + '<div class=\"rf-card-img\">' + (phase ? '<span class=\"rf-card-phases\">' + phase.split('|').map(function(p){ return '<span class=\"rf-card-phase\">' + p + '<\/span>'; }).join('') + '<\/span>' : '') + (im ? '<img decoding=\"async\" src=\"' + im + '\" alt=\"\">' : '') + '<\/div>'\n      + '<div class=\"rf-card-nom\">' + label + '<\/div>'\n      + (pr ? '<div class=\"rf-card-prix\">' + eur(pr) + '<\/div>' : '<div class=\"rf-card-prix rf-card-institut\">En institut<\/div>')\n      + (pid && pr ? '<div class=\"rf-card-actions\"><span class=\"rf-stepper\"><button type=\"button\" class=\"rf-moins\" data-key=\"' + key + '\">\\u2212<\/button><b class=\"rf-q\">1<\/b><button type=\"button\" class=\"rf-plus\" data-key=\"' + key + '\">+<\/button><\/span><\/div>' : '')\n      + '<\/div>';\n  });\n  return cards;\n}\n\n\nasync function addOneToCart(btn){\n  const id = btn.getAttribute('data-ids');\n  if(!id) return;\n  btn.disabled = true;\n  const svg = btn.innerHTML;\n  btn.innerHTML = '\u2026';\n  try {\n    await fetch('\/?wc-ajax=add_to_cart', {\n      method:'POST', credentials:'same-origin',\n      headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n      body:'product_id='+encodeURIComponent(id)+'&quantity=1&bb2_routine=1'\n    });\n    if (window.jQuery) jQuery(document.body).trigger('wc_fragment_refresh');\n    btn.innerHTML = '\u2713';\n    btn.style.background = '#53720b';\n    btn.style.color = '#fff';\n    toast('Produit ajout\u00e9 \u00e0 votre panier');\n  } catch(e){\n    btn.disabled = false; btn.innerHTML = svg;\n    toast('Une erreur est survenue, r\u00e9essayez');\n  }\n}\n\ndocument.addEventListener('click', function(e){\n  const b = e.target.closest ? e.target.closest('.rf-atc') : null;\n  if (b && !b.disabled) { e.preventDefault(); e.stopPropagation(); addOneToCart(b); }\n}, true);\n\n\nfunction screenPeelingAvant(){\n  return `\n  <div class=\"step-title\">Quel est votre type de peau ?<\/div>\n  <div class=\"pill-row\" id=\"peelingAvantPills\">\n    <div class=\"pill\" data-type=\"toutes\">Toutes peaux<\/div>\n    <div class=\"pill\" data-type=\"grasse\">Peau grasse<\/div>\n  <\/div>\n  <div id=\"peelingAvantResult\" style=\"margin-top:18px;\"><\/div>`;\n}\n\nfunction screenPeelingAvantType(key){\n  const p = INSTITUT.peeling.avantPaniers[key];\n  return `\n  <div class=\"protocol\">\n    ${groupsHtml([[\"Routine l\u00e9g\u00e8re\", p.produits]])}\n  <\/div>\n  ${panierBlockHtml('Panier '+p.label, 'Les produits de cette routine, r\u00e9unis en un seul panier.', p.panier, 'Ajouter au panier', false)}`;\n}\n\nfunction screenPeelingApresTypeChoice(){\n  return `\n  <div class=\"step-title\">Quel est votre type de peau ?<\/div>\n  <div class=\"pill-row\" id=\"peelingApresPills\">\n    <div class=\"pill\" data-type=\"normale\">Peau normale<\/div>\n    <div class=\"pill\" data-type=\"seche\">Peau s\u00e8che<\/div>\n    <div class=\"pill\" data-type=\"mature\">Peau mature<\/div>\n    <div class=\"pill\" data-type=\"grasse\">Peau grasse<\/div>\n    <div class=\"pill\" data-type=\"hyperpigmentee\">Peau hyperpigment\u00e9e<\/div>\n    <div class=\"pill\" data-type=\"grasseHyperpigmentee\">Peau grasse hyperpigment\u00e9e<\/div>\n  <\/div>\n  <div id=\"peelingApresResult\" style=\"margin-top:18px;\"><\/div>`;\n}\n\nfunction screenPeelingApresType(key){\n  const t = PEELING_APRES_TYPES[key];\n  return `\n  <div class=\"protocol\">\n    ${groupsHtml([\n      [\"Pr\u00e9parer &middot; Matin\", t.preparer.matin],\n      [\"Pr\u00e9parer &middot; Soir\", t.preparer.soir],\n      [\"Pr\u00e9parer &middot; Hebdo\", t.preparer.hebdo],\n      [\"Apaiser &middot; Matin et soir\", t.apaiser],\n      [\"Nourrir &middot; Hebdo\", t.nourrir],\n      [\"Cibler &middot; Matin et soir\", t.traiter],\n      [\"Prot\u00e9ger\", t.proteger]\n    ])}\n  <\/div>\n  ${panierBlockHtml('Panier '+t.label, 'Les produits de ce protocole, r\u00e9unis en un seul panier.', t.panier, 'Ajouter au panier', false)}`;\n}\n\nfunction screenEnzymatiqueResult(){\n  const a = INSTITUT.enzymatique.apres;\n  const p = INSTITUT.enzymatique.panier;\n  return `\n  <div class=\"protocol\">\n    ${groupsHtml([[\"Matin\", a.matin], [\"Soir\", a.soir], [\"Hebdo\", a.hebdo]])}\n  <\/div>\n  ${panierBlockHtml('Panier Soin enzymatique', 'Les produits de cette routine, r\u00e9unis en un seul panier.', p.produits, 'Ajouter au panier', false)}`;\n}\n\nfunction screenPeeloffApresTypeChoice(){\n  return `\n  <div class=\"step-title\">Quel est votre type de peau ?<\/div>\n  <div class=\"pill-row\" id=\"peeloffTypePills\">\n    <div class=\"pill\" data-type=\"toutes\">Toutes peaux<\/div>\n    <div class=\"pill\" data-type=\"grasse\">Peau grasse<\/div>\n  <\/div>\n  <div id=\"peeloffTypeResult\" style=\"margin-top:18px;\"><\/div>`;\n}\n\nfunction screenPeeloffApresType(key){\n  const t = PEELOFF_APRES_TYPES[key];\n  return `\n  <div class=\"protocol\">\n    ${groupsHtml([[\"Matin\", t.matin], [\"Soir\", t.soir]])}\n  <\/div>\n  ${panierBlockHtml('Panier '+t.label, 'Les produits de ce protocole, r\u00e9unis en un seul panier.', t.panier, 'Ajouter au panier', false)}`;\n}\n\nfunction screenMaisonChoice(){\n  return `\n  <div class=\"step-title\">Avez-vous un probl\u00e8me de peau particulier ?<\/div>\n  <div style=\"${GRID2_STYLE}\">\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2025\/07\/2B-BIO-corriger.jpg\", tag:\"Oui\", tagColor:\"#b07b1e\", title:\"J'ai un probl\u00e8me \u00e0 cibler\", desc:\"Boutons, taches, rides, s\u00e9cheresse, sensibilit\u00e9...\", attr:'data-go=\"symptomChoice\"', h:200})}\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2025\/07\/2B-BIO-apaiser.jpg\", tag:\"Non\", tagColor:\"#53720b\", title:\"Entretien, pr\u00e9vention\", desc:\"Aucun probl\u00e8me pr\u00e9cis, je veux une routine d'\u00e9quilibre.\", attr:'data-go=\"rituel-preventif\"', h:200})}\n  <\/div>`;\n}\n\nfunction screenSymptomChoice(){\n  const items = RITUELS.filter(r=>r.id!=='preventif');\n  const IMGS = {\"grasse\":\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/boutons-brillance.jpg\",\"taches\":\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/taches-teint-irregulier.jpg\",\"mature\":\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/rides-relachement.jpg\",\"secheresse\":\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/secheresse-tiraillements.jpg\",\"sensible\":\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/sensibilite-inconfort.jpg\",\"terne\":\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/teint-terne-peau-fatiguee.jpg\"};\n  return `\n  <div class=\"step-title\">Quel est votre probl\u00e8me principal ?<\/div>\n  <div id=\"symptomPills\" style=\"${GRID_STYLE}\">\n    ${items.map(r=>photoCard({img:IMGS[r.id], title:r.symptom, attr:`data-type=\"rituel-${r.id}\"`, h:160, ts:18})).join('')}\n    ${photoCard({img:\"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/09\/autre-non-liste.jpg\", tag:\"Conseil\", tagColor:\"#b07b1e\", title:\"Autre \/ non list\u00e9\", attr:'data-type=\"autre\"', h:160, ts:18})}\n  <\/div>\n  <div id=\"symptomResult\" style=\"margin-top:18px;\"><\/div>`;\n}\n\nfunction screenRituel(id){\n  const r = RITUELS.find(x=>x.id===id);\n  const protocolHtml = r.protocol ? `\n  <div class=\"protocol\">\n    ${groupsHtml([[\"Matin\", r.protocol.matin], [\"Soir\", r.protocol.soir], [\"Hebdo\", r.protocol.hebdo || []]])}\n  <\/div>` : '';\n  return `\n  ${protocolHtml}\n  ${panierBlockHtml(r.title, r.tagline, r.products, 'Ajouter le rituel au panier', r.spf)}`;\n}\n\nfunction screenAutre(){\n  return `\n  <div class=\"info-card\">\n    <p>Pour les probl\u00e8mes cutan\u00e9s plus complexes, telles que rougeurs diffuses, cellulite, vergetures, cicatrices, irritations post-rasage,... prenez contact avec un sp\u00e9cialiste 2B Bio Beauty\u00ae, form\u00e9 pour r\u00e9aliser un bilan esth\u00e9tique de votre peau et vous orienter vers un programme de soin personnalis\u00e9.<\/p>\n    <a class=\"cta\" href=\"https:\/\/2bbiobeauty.com\/contact\/\" style=\"display:inline-block;text-decoration:none;text-align:center;\">Trouver un sp\u00e9cialiste 2B Bio Beauty\u00ae<\/a>\n    \n  <\/div>`;\n}\n\n\/* ---------- C\u00e2blage des \u00e9crans ---------- *\/\n\nconst SCREENS = {\n  institutChoice: {fn:screenInstitutChoice, label:\"Institut\"},\n  peelingChoice: {fn:screenPeelingChoice, label:\"Peeling\"},\n  peelingAvant: {fn:screenPeelingAvant, label:\"Avant\"},\n  peelingApresTypeChoice: {fn:screenPeelingApresTypeChoice, label:\"Apr\u00e8s, type de peau\"},\n  enzymatiqueResult: {fn:screenEnzymatiqueResult, label:\"Enzymatique\"},\n  peeloffApresTypeChoice: {fn:screenPeeloffApresTypeChoice, label:\"Peel-off, type de peau\"},\n  maisonChoice: {fn:screenMaisonChoice, label:\"Maison\"},\n  symptomChoice: {fn:screenSymptomChoice, label:\"Sympt\u00f4me\"}\n};\n\nfunction resolveScreen(key){\n  if(SCREENS[key]) return SCREENS[key];\n  if(key.startsWith('rituel-')){\n    const id = key.replace('rituel-','');\n    const r = RITUELS.find(x=>x.id===id);\n    return {fn:()=>screenRituel(id), label:r.title};\n  }\n  return null;\n}\n\nfunction wireCurrentStep(container, currentFn){\n  container.querySelectorAll('[data-go]').forEach(node=>{\n    node.addEventListener('click', ()=>{\n      const key = node.getAttribute('data-go');\n      const screen = resolveScreen(key);\n      path.push(screen.label);\n      history.push(screen.fn);\n      renderCrumbs();\n      stage.innerHTML = '';\n      const el = document.createElement('div');\n      el.className = 'step';\n      el.innerHTML = screen.fn();\n      stage.appendChild(el);\n      wireCurrentStep(el, screen.fn);\n    });\n  });\n  container.querySelectorAll('.ctaAdd').forEach(cta=>{\n    cta.addEventListener('click', ()=>{\n      addIdsToCart(cta);\n    });\n  });\n  const peeloffPills = container.querySelector('#peeloffTypePills');\n  if(peeloffPills){\n    const resultBox = container.querySelector('#peeloffTypeResult');\n    peeloffPills.querySelectorAll('[data-type],.pill').forEach(pill=>{\n      pill.addEventListener('click', ()=>{\n        peeloffPills.querySelectorAll('[data-type],.pill').forEach(p=>p.classList.remove('active'));\n        pill.classList.add('active');\n        const key = pill.getAttribute('data-type');\n        resultBox.innerHTML = screenPeeloffApresType(key);\n        resultBox.querySelectorAll('.ctaAdd').forEach(cta=>{\n          cta.addEventListener('click', ()=>{\n            addIdsToCart(cta);\n          });\n        });\n      });\n    });\n  }\n  const peelingAvantPills = container.querySelector('#peelingAvantPills');\n  if(peelingAvantPills){\n    const resultBox = container.querySelector('#peelingAvantResult');\n    peelingAvantPills.querySelectorAll('[data-type],.pill').forEach(pill=>{\n      pill.addEventListener('click', ()=>{\n        peelingAvantPills.querySelectorAll('[data-type],.pill').forEach(p=>p.classList.remove('active'));\n        pill.classList.add('active');\n        const key = pill.getAttribute('data-type');\n        resultBox.innerHTML = screenPeelingAvantType(key);\n        resultBox.querySelectorAll('.ctaAdd').forEach(cta=>{\n          cta.addEventListener('click', ()=>{\n            addIdsToCart(cta);\n          });\n        });\n      });\n    });\n  }\n  const peelingApresPills = container.querySelector('#peelingApresPills');\n  if(peelingApresPills){\n    const resultBox = container.querySelector('#peelingApresResult');\n    peelingApresPills.querySelectorAll('[data-type],.pill').forEach(pill=>{\n      pill.addEventListener('click', ()=>{\n        peelingApresPills.querySelectorAll('[data-type],.pill').forEach(p=>p.classList.remove('active'));\n        pill.classList.add('active');\n        const key = pill.getAttribute('data-type');\n        resultBox.innerHTML = screenPeelingApresType(key);\n        resultBox.querySelectorAll('.ctaAdd').forEach(cta=>{\n          cta.addEventListener('click', ()=>{\n            addIdsToCart(cta);\n          });\n        });\n      });\n    });\n  }\n  const symptomPills = container.querySelector('#symptomPills');\n  if(symptomPills){\n    const resultBox = container.querySelector('#symptomResult');\n    symptomPills.querySelectorAll('[data-type],.pill').forEach(pill=>{\n      pill.addEventListener('click', ()=>{\n        symptomPills.querySelectorAll('[data-type],.pill').forEach(p=>p.classList.remove('active'));\n        pill.classList.add('active');\n        const type = pill.getAttribute('data-type');\n        if(type === 'autre'){\n          resultBox.innerHTML = screenAutre();\n        } else {\n          const rituelId = type.replace('rituel-','');\n          resultBox.innerHTML = screenRituel(rituelId);\n          resultBox.querySelectorAll('.ctaAdd').forEach(cta=>{\n            cta.addEventListener('click', ()=>{\n              addIdsToCart(cta);\n            });\n          });\n        }\n      });\n    });\n  }\n}\n\nbackBtn.addEventListener('click', ()=>{\n  path.pop();\n  history.pop();\n  stage.innerHTML = '';\n  if(history.length===0){\n    renderHome();\n    return;\n  }\n  const fn = history[history.length-1];\n  renderCrumbs();\n  const el = document.createElement('div');\n  el.className = 'step';\n  el.innerHTML = fn();\n  stage.appendChild(el);\n  wireCurrentStep(el, fn);\n});\n\nfunction renderHome(){\n  path = ['D\u00e9part'];\n  history = [screenHome];\n  renderCrumbs();\n  stage.innerHTML = '';\n  const el = document.createElement('div');\n  el.className = 'step';\n  el.innerHTML = screenHome();\n  stage.appendChild(el);\n  wireCurrentStep(el, screenHome);\n}\n\ndocument.getElementById('homeLink').addEventListener('click', renderHome);\nrenderHome();\n\n})();\n<\/script>\n<script>\n(function () {\n  var TIERS = [[5, 30], [4, 20], [3, 10], [2, 5]];\n  function eur2(v) { return v.toFixed(2).replace('.', ',') + ' \\u20ac'; }\n  function remise2(n) { for (var i = 0; i < TIERS.length; i++) if (n >= TIERS[i][0]) return TIERS[i][1]; return 0; }\n\n  function ensure() {\n    if (document.getElementById('rfBar2')) return;\n    var b = document.createElement('div');\n    b.id = 'rfBar2';\n    b.innerHTML = '<div class=\"rf-bar-titre\">La routine qui vous correspond.<\/div><div class=\"rf-bar-in\">'\n      + '<div class=\"rf-bar-left\"><span class=\"rf-bar-label\">Total<\/span> '\n      + '<span id=\"rfOld2\" class=\"rf-old\" hidden><\/span> <span id=\"rfTot2\" class=\"rf-tot\"><\/span> '\n      + '<span id=\"rfEco2\" class=\"rf-eco\" hidden><\/span><\/div>'\n      + '<div class=\"rf-slots\" id=\"rfSlots2\"><\/div>'\n      + '<button type=\"button\" class=\"cta\" id=\"rfCta2\">Ajouter ma routine au panier<\/button><\/div>';\n    document.body.appendChild(b);\n  }\n\n  function items() {\n    var out = [];\n    for (var k in (window.rfSel || {})) {\n      var it = window.rfSel[k];\n      if (it.qty > 0 && it.pid && it.price) out.push(it);\n    }\n    return out;\n  }\n\n  function sync() {\n    ensure();\n    var bar = document.getElementById('rfBar2');\n    var actifs = items();\n    var n = actifs.reduce(function (t, i) { return t + i.qty; }, 0);\n    var visible = !!document.querySelector('#bb-rf .rf-routine') && n > 0;\n    bar.classList.toggle('rf-bar-on', visible);\n    if (!visible) return;\n    var r = remise2(n), avant = actifs.reduce(function (t, i) { return t + i.price * i.qty; }, 0);\n    var apres = avant * (1 - r \/ 100);\n    document.getElementById('rfTot2').textContent = eur2(apres);\n    var old = document.getElementById('rfOld2');\n    old.hidden = !r; if (r) old.textContent = eur2(avant);\n    var eco = document.getElementById('rfEco2');\n    eco.hidden = false;\n    eco.textContent = r ? eur2(avant - apres) + ' \\u00e9conomis\\u00e9s !' : 'Ajoutez un 2e produit : \\u22125 %';\n    var labels = ['', '\\u22125%', '\\u221210%', '\\u221220%', '\\u221230%', '\\u221230%'];\n    var thumbs = [];\n    actifs.forEach(function (i) { for (var q = 0; q < i.qty; q++) thumbs.push(i); });\n    var htmlS = '';\n    for (var s = 0; s < Math.max(6, thumbs.length); s++) {\n      if (s < thumbs.length) {\n        var it2 = thumbs[s];\n        htmlS += '<span class=\"rf-slot rf-slot-full\" data-key=\"' + (it2.pid ? String(it2.pid) : it2.label) + '\">'\n          + (it2.img ? '<img decoding=\"async\" src=\"' + it2.img + '\" alt=\"\">' : '')\n          + '<span class=\"rf-tip\">' + it2.label + ' \\u00b7 ' + eur2(it2.price) + '<\/span>'\n          + '<span class=\"rf-x\">\\u00d7<\/span><\/span>';\n      } else {\n        htmlS += '<span class=\"rf-slot\">' + (labels[s] || '\\u221230%') + '<\/span>';\n      }\n    }\n    document.getElementById('rfSlots2').innerHTML = htmlS;\n  }\n\n  document.addEventListener('click', function (e) {\n    var slot = e.target.closest('#rfBar2 .rf-slot-full');\n    if (slot) {\n      var ks = slot.getAttribute('data-key');\n      var its = (window.rfSel || {})[ks];\n      if (its) {\n        its.qty = Math.max(0, its.qty - 1);\n        document.querySelectorAll('.rf-card').forEach(function (cd) {\n          if (cd.getAttribute('data-key') === ks) {\n            cd.querySelector('.rf-q').textContent = its.qty;\n            cd.classList.toggle('rf-zero', its.qty === 0);\n          }\n        });\n        sync();\n      }\n      return;\n    }\n    var pm = e.target.closest('.rf-plus, .rf-moins');\n    if (pm) {\n      var k = pm.getAttribute('data-key');\n      var it = (window.rfSel || {})[k];\n      if (!it) return;\n      it.qty = Math.max(0, it.qty + (pm.classList.contains('rf-plus') ? 1 : -1));\n      var card = pm.closest('.rf-card');\n      if (card) { card.querySelector('.rf-q').textContent = it.qty; card.classList.toggle('rf-zero', it.qty === 0); }\n      sync();\n      return;\n    }\n    if (e.target.id === 'rfCta2') {\n      var btn = e.target;\n      btn.disabled = true; btn.textContent = 'Ajout en cours\\u2026';\n      var jobs = items().map(function (i) {\n        return function () {\n          return fetch('\/?wc-ajax=add_to_cart', {\n            method: 'POST', credentials: 'same-origin',\n            headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\n            body: 'product_id=' + i.pid + '&quantity=' + i.qty + '&bb2_routine=1'\n          });\n        };\n      });\n      jobs.reduce(function (p, j) { return p.then(j); }, Promise.resolve())\n        .then(function () { window.location = '\/panier\/'; })\n        .catch(function () { btn.disabled = false; btn.textContent = 'Ajouter ma routine au panier'; });\n    }\n  });\n\n  var app = document.getElementById('bb-rf');\n  if (app) new MutationObserver(function () { sync(); }).observe(app, { childList: true, subtree: true });\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', sync);\n  else sync();\n})();\n\n\/* ---------- Liens profonds : \/ma-routine\/?routine=cle ---------- *\/\n(function(){\n  var DEEP = {\n    'enzymatique':                  [['go','institutChoice'],['go','enzymatiqueResult']],\n    'peeloff':                      [['go','institutChoice'],['go','peeloffApresTypeChoice']],\n    'peeloff-toutes':               [['go','institutChoice'],['go','peeloffApresTypeChoice'],['pill','peeloffTypePills','toutes']],\n    'peeloff-grasse':               [['go','institutChoice'],['go','peeloffApresTypeChoice'],['pill','peeloffTypePills','grasse']],\n    'peeling':                      [['go','institutChoice'],['go','peelingChoice']],\n    'peeling-avant-toutes':         [['go','institutChoice'],['go','peelingChoice'],['go','peelingAvant'],['pill','peelingAvantPills','toutes']],\n    'peeling-avant-grasse':         [['go','institutChoice'],['go','peelingChoice'],['go','peelingAvant'],['pill','peelingAvantPills','grasse']],\n    'peeling-normale':              [['go','institutChoice'],['go','peelingChoice'],['go','peelingApresTypeChoice'],['pill','peelingApresPills','normale']],\n    'peeling-seche':                [['go','institutChoice'],['go','peelingChoice'],['go','peelingApresTypeChoice'],['pill','peelingApresPills','seche']],\n    'peeling-mature':               [['go','institutChoice'],['go','peelingChoice'],['go','peelingApresTypeChoice'],['pill','peelingApresPills','mature']],\n    'peeling-grasse':               [['go','institutChoice'],['go','peelingChoice'],['go','peelingApresTypeChoice'],['pill','peelingApresPills','grasse']],\n    'peeling-hyperpigmentee':       [['go','institutChoice'],['go','peelingChoice'],['go','peelingApresTypeChoice'],['pill','peelingApresPills','hyperpigmentee']],\n    'peeling-grasse-hyperpigmentee':[['go','institutChoice'],['go','peelingChoice'],['go','peelingApresTypeChoice'],['pill','peelingApresPills','grasseHyperpigmentee']]\n  };\n  function run(){\n    var key = null;\n    try { key = new URLSearchParams(window.location.search).get('routine'); } catch(e){ return; }\n    var seq = key && DEEP[key];\n    if (!seq) return;\n    var i = 0;\n    (function step(){\n      if (i >= seq.length) {\n        setTimeout(function(){\n          var res = document.querySelector('#bb-rf .protocol, #bb-rf .rf-cards, #bb-rf .pill-row');\n          if (res && res.scrollIntoView) res.scrollIntoView({behavior:'smooth', block:'start'});\n        }, 200);\n        return;\n      }\n      var a = seq[i++], el = null;\n      if (a[0] === 'go') el = document.querySelector('#bb-rf [data-go=\"' + a[1] + '\"]');\n      else el = document.querySelector('#' + a[1] + ' [data-type=\"' + a[2] + '\"]');\n      if (el) el.click();\n      setTimeout(step, 80);\n    })();\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', function(){ setTimeout(run, 300); });\n  else setTimeout(run, 300);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>T\u00ecm th\u1ea5y nghi th\u1ee9c l\u00e0m \u0111\u1eb9p c\u1ee7a b\u1ea1n ch\u1ec9 trong 3 c\u00fa nh\u1ea5p chu\u1ed9t: sau khi tr\u1ea3i qua m\u1ed9t li\u1ec7u tr\u00ecnh t\u1ea1i th\u1ea9m m\u1ef9 vi\u1ec7n...<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10526","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Trouver ma routine - 2bbiobeauty<\/title>\n<meta name=\"description\" content=\"R\u00e9pondez \u00e0 quelques questions sur votre peau et recevez la routine 2B Bio Beauty adapt\u00e9e \u00e0 vos besoins, \u00e9tape par \u00e9tape, du nettoyage \u00e0 la protection.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/2bbiobeauty.com\/vi\/thoi-quen-hang-ngay-cua-toi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trouver ma routine - 2bbiobeauty\" \/>\n<meta property=\"og:description\" content=\"R\u00e9pondez \u00e0 quelques questions sur votre peau et recevez la routine 2B Bio Beauty adapt\u00e9e \u00e0 vos besoins, \u00e9tape par \u00e9tape, du nettoyage \u00e0 la protection.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/2bbiobeauty.com\/vi\/thoi-quen-hang-ngay-cua-toi\/\" \/>\n<meta property=\"og:site_name\" content=\"2bbiobeauty\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/2bbiobeauty.official\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-17T10:59:12+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/ma-routine\\\/\",\"url\":\"https:\\\/\\\/2bbiobeauty.com\\\/ma-routine\\\/\",\"name\":\"Trouver ma routine - 2bbiobeauty\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/#website\"},\"datePublished\":\"2026-08-10T20:36:29+00:00\",\"dateModified\":\"2026-08-17T10:59:12+00:00\",\"description\":\"R\u00e9pondez \u00e0 quelques questions sur votre peau et recevez la routine 2B Bio Beauty adapt\u00e9e \u00e0 vos besoins, \u00e9tape par \u00e9tape, du nettoyage \u00e0 la protection.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/ma-routine\\\/#breadcrumb\"},\"inLanguage\":\"vi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/2bbiobeauty.com\\\/ma-routine\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/ma-routine\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/2bbiobeauty.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trouver ma routine\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/#website\",\"url\":\"https:\\\/\\\/2bbiobeauty.com\\\/\",\"name\":\"2bbiobeauty.com\",\"description\":\"Reverse your age\",\"publisher\":{\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/2bbiobeauty.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"vi\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/#organization\",\"name\":\"2bbiobeauty\",\"url\":\"https:\\\/\\\/2bbiobeauty.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"vi\",\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/2bbiobeauty.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/2B-Bio-Beauty-logo-couleur-site-RVB.png\",\"contentUrl\":\"https:\\\/\\\/2bbiobeauty.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/2B-Bio-Beauty-logo-couleur-site-RVB.png\",\"width\":1611,\"height\":1502,\"caption\":\"2bbiobeauty\"},\"image\":{\"@id\":\"https:\\\/\\\/2bbiobeauty.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/2bbiobeauty.official\\\/\",\"https:\\\/\\\/www.instagram.com\\\/2bbiobeauty.official\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"T\u00ecm ra th\u00f3i quen ch\u0103m s\u00f3c da c\u1ee7a m\u00ecnh - 2bbiobeauty","description":"H\u00e3y tr\u1ea3 l\u1eddi m\u1ed9t v\u00e0i c\u00e2u h\u1ecfi v\u1ec1 l\u00e0n da c\u1ee7a b\u1ea1n v\u00e0 nh\u1eadn ngay quy tr\u00ecnh ch\u0103m s\u00f3c da 2B Bio Beauty ph\u00f9 h\u1ee3p v\u1edbi nhu c\u1ea7u c\u1ee7a b\u1ea1n, t\u1eebng b\u01b0\u1edbc m\u1ed9t, t\u1eeb l\u00e0m s\u1ea1ch \u0111\u1ebfn b\u1ea3o v\u1ec7.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/2bbiobeauty.com\/vi\/thoi-quen-hang-ngay-cua-toi\/","og_locale":"vi_VN","og_type":"article","og_title":"Trouver ma routine - 2bbiobeauty","og_description":"R\u00e9pondez \u00e0 quelques questions sur votre peau et recevez la routine 2B Bio Beauty adapt\u00e9e \u00e0 vos besoins, \u00e9tape par \u00e9tape, du nettoyage \u00e0 la protection.","og_url":"https:\/\/2bbiobeauty.com\/vi\/thoi-quen-hang-ngay-cua-toi\/","og_site_name":"2bbiobeauty","article_publisher":"https:\/\/www.facebook.com\/2bbiobeauty.official\/","article_modified_time":"2026-08-17T10:59:12+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/2bbiobeauty.com\/ma-routine\/","url":"https:\/\/2bbiobeauty.com\/ma-routine\/","name":"T\u00ecm ra th\u00f3i quen ch\u0103m s\u00f3c da c\u1ee7a m\u00ecnh - 2bbiobeauty","isPartOf":{"@id":"https:\/\/2bbiobeauty.com\/#website"},"datePublished":"2026-08-10T20:36:29+00:00","dateModified":"2026-08-17T10:59:12+00:00","description":"H\u00e3y tr\u1ea3 l\u1eddi m\u1ed9t v\u00e0i c\u00e2u h\u1ecfi v\u1ec1 l\u00e0n da c\u1ee7a b\u1ea1n v\u00e0 nh\u1eadn ngay quy tr\u00ecnh ch\u0103m s\u00f3c da 2B Bio Beauty ph\u00f9 h\u1ee3p v\u1edbi nhu c\u1ea7u c\u1ee7a b\u1ea1n, t\u1eebng b\u01b0\u1edbc m\u1ed9t, t\u1eeb l\u00e0m s\u1ea1ch \u0111\u1ebfn b\u1ea3o v\u1ec7.","breadcrumb":{"@id":"https:\/\/2bbiobeauty.com\/ma-routine\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/2bbiobeauty.com\/ma-routine\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/2bbiobeauty.com\/ma-routine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/2bbiobeauty.com\/"},{"@type":"ListItem","position":2,"name":"Trouver ma routine"}]},{"@type":"WebSite","@id":"https:\/\/2bbiobeauty.com\/#website","url":"https:\/\/2bbiobeauty.com\/","name":"2bbiobeauty.com","description":"Tr\u1ebb l\u1ea1i","publisher":{"@id":"https:\/\/2bbiobeauty.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/2bbiobeauty.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/2bbiobeauty.com\/#organization","name":"2bbiobeauty","url":"https:\/\/2bbiobeauty.com\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/2bbiobeauty.com\/#\/schema\/logo\/image\/","url":"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/2B-Bio-Beauty-logo-couleur-site-RVB.png","contentUrl":"https:\/\/2bbiobeauty.com\/wp-content\/uploads\/2026\/08\/2B-Bio-Beauty-logo-couleur-site-RVB.png","width":1611,"height":1502,"caption":"2bbiobeauty"},"image":{"@id":"https:\/\/2bbiobeauty.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/2bbiobeauty.official\/","https:\/\/www.instagram.com\/2bbiobeauty.official\/"]}]}},"_links":{"self":[{"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/pages\/10526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/comments?post=10526"}],"version-history":[{"count":1,"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/pages\/10526\/revisions"}],"predecessor-version":[{"id":10560,"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/pages\/10526\/revisions\/10560"}],"wp:attachment":[{"href":"https:\/\/2bbiobeauty.com\/vi\/wp-json\/wp\/v2\/media?parent=10526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}