{"id":1182,"date":"2026-09-10T10:55:44","date_gmt":"2026-09-10T08:55:44","guid":{"rendered":"https:\/\/www.xn--hypno-thrapie-ihb.com\/?page_id=1182"},"modified":"2026-09-10T11:02:21","modified_gmt":"2026-09-10T09:02:21","slug":"reservation","status":"publish","type":"page","link":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/","title":{"rendered":"R\u00e9servation"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1182\" class=\"elementor elementor-1182\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8bece1 e-flex e-con-boxed e-con e-parent\" data-id=\"e8bece1\" 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-b58d9ca elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu\" data-id=\"b58d9ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;layout&quot;:&quot;horizontal&quot;,&quot;submenu_icon&quot;:{&quot;value&quot;:&quot;&lt;svg aria-hidden=\\&quot;true\\&quot; class=\\&quot;e-font-icon-svg e-fas-caret-down\\&quot; viewBox=\\&quot;0 0 320 512\\&quot; xmlns=\\&quot;http:\\\/\\\/www.w3.org\\\/2000\\\/svg\\&quot;&gt;&lt;path d=\\&quot;M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\&quot;&gt;&lt;\\\/path&gt;&lt;\\\/svg&gt;&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;toggle&quot;:&quot;burger&quot;}\" data-widget_type=\"nav-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<nav aria-label=\"Menu\" class=\"elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade\">\n\t\t\t\t<ul id=\"menu-1-b58d9ca\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-28\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/\" class=\"elementor-item\">Page d\u2019accueil<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-94\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnotherapie\/\" class=\"elementor-item\">Hypnoth\u00e9rapie<span class=\"sub-arrow\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-caret-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"><\/path><\/svg><\/span><\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-131\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-pour-maigrir\/\" class=\"elementor-sub-item\">Perte de poids par hypnose<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-187\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/arret-du-tabac\/\" class=\"elementor-sub-item\">Arr\u00eat du tabac<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1122\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/comment-sendormir-rapidement\/\" class=\"elementor-sub-item\">Sommeil et insomnie<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-225\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/gestion-du-stress-et-anxiete\/\" class=\"elementor-sub-item\">Gestion du stress et Anxi\u00e9t\u00e9<span class=\"sub-arrow\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-caret-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"><\/path><\/svg><\/span><\/a>\n\t<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1114\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/gestion-anti-stress\/\" class=\"elementor-sub-item\">Gestion anti stress<\/a><\/li>\n\t<\/ul>\n<\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-318\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/phobies-hypnose\/\" class=\"elementor-sub-item\">Phobies<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-264\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-en-entreprise\/\" class=\"elementor-item\">Hypnose pour entreprise<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-400\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-sportive\/\" class=\"elementor-item\">Hypnose Sportive<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-590\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-spirituelle\/\" class=\"elementor-item\">Hypnose Spirituelle<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-696\"><a href=\"https:\/\/www.spectacledhypnose.com\/\" class=\"elementor-item\">Hypnose de Spectacle<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-510\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/contact\/\" class=\"elementor-item\">Contact<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1184\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/\" class=\"elementor-item\">R\u00e9servation<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\t\t\t<div class=\"elementor-menu-toggle\" role=\"button\" tabindex=\"0\" aria-label=\"Permuter le menu\" aria-expanded=\"false\">\n\t\t\t<svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--open e-font-icon-svg e-eicon-menu-bar\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M104 333H896C929 333 958 304 958 271S929 208 896 208H104C71 208 42 237 42 271S71 333 104 333ZM104 583H896C929 583 958 554 958 521S929 458 896 458H104C71 458 42 487 42 521S71 583 104 583ZM104 833H896C929 833 958 804 958 771S929 708 896 708H104C71 708 42 737 42 771S71 833 104 833Z\"><\/path><\/svg><svg aria-hidden=\"true\" role=\"presentation\" class=\"elementor-menu-toggle__icon--close e-font-icon-svg e-eicon-close\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z\"><\/path><\/svg>\t\t<\/div>\n\t\t\t\t\t<nav class=\"elementor-nav-menu--dropdown elementor-nav-menu__container\" aria-hidden=\"true\">\n\t\t\t\t<ul id=\"menu-2-b58d9ca\" class=\"elementor-nav-menu\"><li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-28\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/\" class=\"elementor-item\" tabindex=\"-1\">Page d\u2019accueil<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-94\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnotherapie\/\" class=\"elementor-item\" tabindex=\"-1\">Hypnoth\u00e9rapie<span class=\"sub-arrow\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-caret-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"><\/path><\/svg><\/span><\/a>\n<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-131\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-pour-maigrir\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Perte de poids par hypnose<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-187\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/arret-du-tabac\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Arr\u00eat du tabac<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1122\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/comment-sendormir-rapidement\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Sommeil et insomnie<\/a><\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-225\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/gestion-du-stress-et-anxiete\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Gestion du stress et Anxi\u00e9t\u00e9<span class=\"sub-arrow\"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-caret-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"><\/path><\/svg><\/span><\/a>\n\t<ul class=\"sub-menu elementor-nav-menu--dropdown\">\n\t\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1114\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/gestion-anti-stress\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Gestion anti stress<\/a><\/li>\n\t<\/ul>\n<\/li>\n\t<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-318\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/phobies-hypnose\/\" class=\"elementor-sub-item\" tabindex=\"-1\">Phobies<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-264\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-en-entreprise\/\" class=\"elementor-item\" tabindex=\"-1\">Hypnose pour entreprise<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-400\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-sportive\/\" class=\"elementor-item\" tabindex=\"-1\">Hypnose Sportive<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-590\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/hypnose-spirituelle\/\" class=\"elementor-item\" tabindex=\"-1\">Hypnose Spirituelle<\/a><\/li>\n<li class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-696\"><a href=\"https:\/\/www.spectacledhypnose.com\/\" class=\"elementor-item\" tabindex=\"-1\">Hypnose de Spectacle<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-510\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/contact\/\" class=\"elementor-item\" tabindex=\"-1\">Contact<\/a><\/li>\n<li class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1184\"><a href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/\" class=\"elementor-item\" tabindex=\"-1\">R\u00e9servation<\/a><\/li>\n<\/ul>\t\t\t<\/nav>\n\t\t\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<div class=\"elementor-element elementor-element-ee61ff0 e-flex e-con-boxed e-con e-parent\" data-id=\"ee61ff0\" 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-879d9ab elementor-widget elementor-widget-html\" data-id=\"879d9ab\" 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<!-- =========================================================\r\n     HYPNOWELLNESS - MOTEUR DE R\u00c9SERVATION V3 RESPONSIVE\r\n     \u00c0 coller dans un widget HTML Elementor\r\n     ========================================================= -->\r\n\r\n<style>\r\n:root{\r\n  --hw-bg:#f5f2e9;\r\n  --hw-card:#fffdf8;\r\n  --hw-text:#153f46;\r\n  --hw-muted:#667b78;\r\n  --hw-border:#d9dfd6;\r\n  --hw-primary:#1c5961;\r\n  --hw-primary-2:#123f46;\r\n  --hw-success:#648f7d;\r\n  --hw-gold:#c4a46a;\r\n  --hw-radius:18px;\r\n  --hw-shadow:0 14px 38px rgba(21,63,70,.10);\r\n}\r\n\r\n*{\r\n  box-sizing:border-box;\r\n}\r\n\r\nhtml{\r\n  -webkit-text-size-adjust:100%;\r\n}\r\n\r\nbody{\r\n  margin:0;\r\n}\r\n\r\nbutton,\r\ninput,\r\nselect,\r\ntextarea{\r\n  font:inherit;\r\n}\r\n\r\n.hw-app{\r\n  width:100%;\r\n  max-width:1180px;\r\n  margin:28px auto;\r\n  padding:0 18px;\r\n  font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\r\n  color:var(--hw-text);\r\n}\r\n\r\n.hw-shell{\r\n  width:100%;\r\n  background:var(--hw-card);\r\n  border:1px solid #d6d8cc;\r\n  border-radius:24px;\r\n  box-shadow:var(--hw-shadow);\r\n  overflow:hidden;\r\n}\r\n\r\n.hw-topbar{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  gap:14px;\r\n  flex-wrap:wrap;\r\n  padding:18px 22px;\r\n  border-bottom:1px solid var(--hw-border);\r\n  background:linear-gradient(90deg,#fffdf8 0%,#f7f3e8 100%);\r\n}\r\n\r\n.hw-brand{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:12px;\r\n  font-weight:800;\r\n  font-size:20px;\r\n}\r\n\r\n.hw-logo{\r\n  width:42px;\r\n  height:42px;\r\n  border-radius:50%;\r\n  overflow:hidden;\r\n  flex:0 0 auto;\r\n  background:#1c5961;\r\n}\r\n\r\n.hw-logo img{\r\n  width:100%;\r\n  height:100%;\r\n  object-fit:cover;\r\n  display:block;\r\n}\r\n\r\n.hw-tabs{\r\n  display:flex;\r\n  gap:8px;\r\n  flex-wrap:wrap;\r\n}\r\n\r\n.hw-tab{\r\n  border:0;\r\n  background:#f3f4f2;\r\n  padding:10px 14px;\r\n  border-radius:12px;\r\n  cursor:pointer;\r\n  font-weight:700;\r\n  color:#374151;\r\n  min-height:44px;\r\n}\r\n\r\n.hw-tab.active{\r\n  background:#e5efea;\r\n  color:var(--hw-primary);\r\n}\r\n\r\n.hw-main{\r\n  padding:22px;\r\n}\r\n\r\n.hw-section{\r\n  display:none;\r\n}\r\n\r\n.hw-section.active{\r\n  display:block;\r\n}\r\n\r\n.hw-title{\r\n  font-size:clamp(24px,3vw,34px);\r\n  margin:0 0 8px;\r\n  color:#153f46;\r\n}\r\n\r\n.hw-sub{\r\n  margin:0 0 22px;\r\n  color:var(--hw-muted);\r\n}\r\n\r\n.hw-stepbar{\r\n  display:grid;\r\n  grid-template-columns:repeat(5,1fr);\r\n  gap:8px;\r\n  margin:18px 0 24px;\r\n}\r\n\r\n.hw-step{\r\n  height:8px;\r\n  border-radius:99px;\r\n  background:#e4e7e0;\r\n}\r\n\r\n.hw-step.done,\r\n.hw-step.active{\r\n  background:linear-gradient(90deg,#1c5961,#83a794);\r\n}\r\n\r\n.hw-grid{\r\n  display:grid;\r\n  grid-template-columns:repeat(2,minmax(0,1fr));\r\n  gap:14px;\r\n}\r\n\r\n.hw-service{\r\n  border:1px solid var(--hw-border);\r\n  border-radius:16px;\r\n  padding:18px;\r\n  cursor:pointer;\r\n  transition:.18s;\r\n  background:#fff;\r\n  min-height:160px;\r\n  -webkit-tap-highlight-color:transparent;\r\n}\r\n\r\n.hw-service:hover{\r\n  transform:translateY(-2px);\r\n  box-shadow:0 8px 22px rgba(17,24,39,.08);\r\n}\r\n\r\n.hw-service.selected{\r\n  border-color:var(--hw-gold);\r\n  box-shadow:0 0 0 3px rgba(196,164,106,.17);\r\n}\r\n\r\n.hw-service h3{\r\n  margin:0 0 8px;\r\n  color:#153f46;\r\n}\r\n\r\n.hw-price{\r\n  font-weight:800;\r\n  color:#b18a4e;\r\n  font-size:20px;\r\n}\r\n\r\n.hw-meta{\r\n  color:var(--hw-muted);\r\n  font-size:14px;\r\n  margin-top:8px;\r\n}\r\n\r\n.hw-actions{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  gap:10px;\r\n  margin-top:22px;\r\n  flex-wrap:wrap;\r\n}\r\n\r\n.hw-btn{\r\n  border:0;\r\n  border-radius:12px;\r\n  padding:12px 18px;\r\n  font-weight:800;\r\n  cursor:pointer;\r\n  min-height:44px;\r\n  -webkit-tap-highlight-color:transparent;\r\n}\r\n\r\n.hw-btn.primary{\r\n  background:var(--hw-primary);\r\n  color:#fff;\r\n}\r\n\r\n.hw-btn.primary:hover{\r\n  background:var(--hw-primary-2);\r\n}\r\n\r\n.hw-btn.secondary{\r\n  background:#f3f4f2;\r\n  color:#374151;\r\n}\r\n\r\n.hw-btn.danger{\r\n  background:#fff0ee;\r\n  color:#c0392b;\r\n}\r\n\r\n.hw-btn:disabled{\r\n  opacity:.45;\r\n  cursor:not-allowed;\r\n}\r\n\r\n.hw-calendar{\r\n  border:1px solid var(--hw-border);\r\n  border-radius:16px;\r\n  overflow:hidden;\r\n}\r\n\r\n.hw-calhead{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  padding:14px 16px;\r\n  border-bottom:1px solid var(--hw-border);\r\n}\r\n\r\n.hw-calgrid{\r\n  display:grid;\r\n  grid-template-columns:repeat(7,1fr);\r\n  min-width:0;\r\n}\r\n\r\n.hw-dow,\r\n.hw-day{\r\n  min-height:72px;\r\n  border-right:1px solid var(--hw-border);\r\n  border-bottom:1px solid var(--hw-border);\r\n  padding:8px;\r\n}\r\n\r\n.hw-dow{\r\n  min-height:auto;\r\n  font-size:13px;\r\n  font-weight:800;\r\n  background:#fafafa;\r\n  color:#6b7280;\r\n  text-align:center;\r\n}\r\n\r\n.hw-day:nth-child(7n){\r\n  border-right:0;\r\n}\r\n\r\n.hw-day.muted{\r\n  color:#c3c7cf;\r\n  background:#fbfbfc;\r\n}\r\n\r\n.hw-day.available{\r\n  cursor:pointer;\r\n  background:#f8f6ef;\r\n}\r\n\r\n.hw-day.available:hover{\r\n  background:#edf3ef;\r\n}\r\n\r\n.hw-day.selected{\r\n  background:#e5efea;\r\n  box-shadow:inset 0 0 0 2px #1c5961;\r\n}\r\n\r\n.hw-day.blocked{\r\n  background:repeating-linear-gradient(\r\n    135deg,\r\n    #fafafa,\r\n    #fafafa 8px,\r\n    #f1f1f1 8px,\r\n    #f1f1f1 16px\r\n  );\r\n  color:#aaa;\r\n}\r\n\r\n.hw-badge{\r\n  display:inline-block;\r\n  margin-top:8px;\r\n  font-size:11px;\r\n  padding:4px 7px;\r\n  border-radius:99px;\r\n  background:#e8f1eb;\r\n  color:var(--hw-success);\r\n  font-weight:800;\r\n}\r\n\r\n.hw-slots{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:10px;\r\n  margin-top:16px;\r\n}\r\n\r\n.hw-slot{\r\n  border:1px solid var(--hw-border);\r\n  background:#fff;\r\n  padding:11px 15px;\r\n  border-radius:12px;\r\n  cursor:pointer;\r\n  font-weight:800;\r\n  min-height:44px;\r\n  -webkit-tap-highlight-color:transparent;\r\n}\r\n\r\n.hw-slot:hover,\r\n.hw-slot.selected{\r\n  border-color:var(--hw-gold);\r\n  background:#fbf5e8;\r\n  color:#153f46;\r\n}\r\n\r\n.hw-form{\r\n  display:grid;\r\n  grid-template-columns:1fr 1fr;\r\n  gap:14px;\r\n}\r\n\r\n.hw-field{\r\n  display:flex;\r\n  flex-direction:column;\r\n  gap:7px;\r\n}\r\n\r\n.hw-field.full{\r\n  grid-column:1\/-1;\r\n}\r\n\r\n.hw-field label{\r\n  font-weight:700;\r\n  font-size:14px;\r\n}\r\n\r\n.hw-field input,\r\n.hw-field select,\r\n.hw-field textarea{\r\n  border:1px solid var(--hw-border);\r\n  border-radius:12px;\r\n  padding:12px 13px;\r\n  background:#fff;\r\n}\r\n\r\n.hw-summary{\r\n  border:1px solid var(--hw-border);\r\n  background:#fbfaf5;\r\n  border-radius:16px;\r\n  padding:18px;\r\n}\r\n\r\n.hw-summary-row{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  gap:16px;\r\n  padding:9px 0;\r\n  border-bottom:1px dashed #e5e7eb;\r\n}\r\n\r\n.hw-summary-row:last-child{\r\n  border-bottom:0;\r\n}\r\n\r\n.hw-summary-row strong{\r\n  text-align:right;\r\n}\r\n\r\n.hw-program{\r\n  display:grid;\r\n  gap:10px;\r\n  margin-top:14px;\r\n}\r\n\r\n.hw-program-item{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  border:1px solid var(--hw-border);\r\n  border-radius:12px;\r\n  padding:12px;\r\n  background:#fff;\r\n}\r\n\r\n.hw-program-item strong{\r\n  white-space:nowrap;\r\n}\r\n\r\n.hw-notice{\r\n  border-radius:12px;\r\n  padding:12px 14px;\r\n  margin:14px 0;\r\n  background:#eef3ef;\r\n  color:#315950;\r\n}\r\n\r\n.hw-successbox{\r\n  border-radius:16px;\r\n  padding:22px;\r\n  background:#effaf4;\r\n  border:1px solid #cdebd9;\r\n}\r\n\r\n.hw-admin-grid{\r\n  display:grid;\r\n  grid-template-columns:270px 1fr;\r\n  gap:18px;\r\n}\r\n\r\n.hw-panel{\r\n  border:1px solid var(--hw-border);\r\n  border-radius:16px;\r\n  padding:16px;\r\n  background:#fff;\r\n}\r\n\r\n.hw-admin-menu button{\r\n  width:100%;\r\n  text-align:left;\r\n  margin-bottom:8px;\r\n}\r\n\r\n.hw-week{\r\n  overflow:auto;\r\n  border:1px solid var(--hw-border);\r\n  border-radius:14px;\r\n}\r\n\r\n.hw-week-grid{\r\n  min-width:820px;\r\n  display:grid;\r\n  grid-template-columns:70px repeat(7,1fr);\r\n}\r\n\r\n.hw-week-grid > div{\r\n  border-right:1px solid var(--hw-border);\r\n  border-bottom:1px solid var(--hw-border);\r\n  min-height:56px;\r\n  padding:6px;\r\n  font-size:12px;\r\n}\r\n\r\n.hw-week-grid .head{\r\n  font-weight:800;\r\n  background:#fafafa;\r\n  text-align:center;\r\n  min-height:42px;\r\n}\r\n\r\n.hw-event{\r\n  border-radius:8px;\r\n  padding:6px;\r\n  background:#dff4d5;\r\n  border-left:4px solid #4eaa33;\r\n}\r\n\r\n.hw-block{\r\n  border-radius:8px;\r\n  padding:6px;\r\n  background:repeating-linear-gradient(\r\n    135deg,\r\n    #f1f1f1,\r\n    #f1f1f1 7px,\r\n    #e7e7e7 7px,\r\n    #e7e7e7 14px\r\n  );\r\n  color:#666;\r\n}\r\n\r\n.hw-small{\r\n  font-size:12px;\r\n  color:var(--hw-muted);\r\n}\r\n\r\n.hw-kpi{\r\n  display:grid;\r\n  grid-template-columns:repeat(3,1fr);\r\n  gap:12px;\r\n  margin-bottom:14px;\r\n}\r\n\r\n.hw-kpi > div{\r\n  border:1px solid var(--hw-border);\r\n  border-radius:14px;\r\n  padding:14px;\r\n  background:#fff;\r\n}\r\n\r\n.hw-kpi strong{\r\n  display:block;\r\n  font-size:24px;\r\n}\r\n\r\n.hw-hidden{\r\n  display:none!important;\r\n}\r\n\r\n.hw-service:focus-visible,\r\n.hw-btn:focus-visible,\r\n.hw-slot:focus-visible,\r\n.hw-tab:focus-visible,\r\ninput:focus-visible,\r\nselect:focus-visible,\r\ntextarea:focus-visible{\r\n  outline:3px solid rgba(28,89,97,.24);\r\n  outline-offset:2px;\r\n}\r\n\r\n@media(max-width:980px){\r\n  .hw-app{\r\n    margin:16px auto;\r\n    padding:0 12px;\r\n  }\r\n\r\n  .hw-main{\r\n    padding:18px;\r\n  }\r\n\r\n  .hw-grid{\r\n    grid-template-columns:1fr 1fr;\r\n  }\r\n\r\n  .hw-admin-grid{\r\n    grid-template-columns:220px 1fr;\r\n  }\r\n\r\n  .hw-title{\r\n    font-size:30px;\r\n  }\r\n}\r\n\r\n@media(max-width:760px){\r\n  .hw-app{\r\n    margin:0;\r\n    padding:0;\r\n  }\r\n\r\n  .hw-shell{\r\n    border-radius:0;\r\n    border-left:0;\r\n    border-right:0;\r\n    box-shadow:none;\r\n  }\r\n\r\n  .hw-topbar{\r\n    padding:14px 14px 12px;\r\n    align-items:flex-start;\r\n  }\r\n\r\n  .hw-brand{\r\n    font-size:18px;\r\n  }\r\n\r\n  .hw-logo{\r\n    width:36px;\r\n    height:36px;\r\n  }\r\n\r\n  .hw-tabs{\r\n    width:100%;\r\n    display:grid;\r\n    grid-template-columns:1fr 1fr;\r\n  }\r\n\r\n  .hw-tab{\r\n    width:100%;\r\n    padding:10px 8px;\r\n    font-size:14px;\r\n  }\r\n\r\n  .hw-main{\r\n    padding:16px 14px 22px;\r\n  }\r\n\r\n  .hw-title{\r\n    font-size:27px;\r\n    line-height:1.15;\r\n  }\r\n\r\n  .hw-sub{\r\n    font-size:15px;\r\n    line-height:1.45;\r\n    margin-bottom:18px;\r\n  }\r\n\r\n  .hw-stepbar{\r\n    gap:5px;\r\n    margin:14px 0 20px;\r\n  }\r\n\r\n  .hw-grid{\r\n    grid-template-columns:1fr;\r\n    gap:12px;\r\n  }\r\n\r\n  .hw-service{\r\n    min-height:auto;\r\n    padding:16px;\r\n  }\r\n\r\n  .hw-service h3{\r\n    font-size:18px;\r\n  }\r\n\r\n  .hw-price{\r\n    font-size:19px;\r\n  }\r\n\r\n  .hw-form{\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n  .hw-field.full{\r\n    grid-column:auto;\r\n  }\r\n\r\n  .hw-actions{\r\n    position:sticky;\r\n    bottom:0;\r\n    background:rgba(255,253,248,.96);\r\n    backdrop-filter:blur(8px);\r\n    -webkit-backdrop-filter:blur(8px);\r\n    margin-left:-14px;\r\n    margin-right:-14px;\r\n    margin-bottom:-22px;\r\n    padding:12px 14px calc(12px + env(safe-area-inset-bottom));\r\n    border-top:1px solid var(--hw-border);\r\n    z-index:5;\r\n  }\r\n\r\n  .hw-actions .hw-btn{\r\n    flex:1;\r\n  }\r\n\r\n  .hw-calendar{\r\n    border-radius:14px;\r\n  }\r\n\r\n  .hw-calhead{\r\n    padding:10px;\r\n  }\r\n\r\n  .hw-calhead .hw-btn{\r\n    min-width:44px;\r\n    padding:8px 12px;\r\n  }\r\n\r\n  .hw-dow{\r\n    font-size:11px;\r\n    padding:6px 2px;\r\n  }\r\n\r\n  .hw-day{\r\n    min-height:58px;\r\n    padding:5px 4px;\r\n    font-size:12px;\r\n  }\r\n\r\n  .hw-badge{\r\n    display:block;\r\n    margin-top:5px;\r\n    padding:3px 4px;\r\n    font-size:9px;\r\n    text-align:center;\r\n    white-space:normal;\r\n  }\r\n\r\n  .hw-slots{\r\n    display:grid;\r\n    grid-template-columns:repeat(3,1fr);\r\n    gap:8px;\r\n  }\r\n\r\n  .hw-slot{\r\n    width:100%;\r\n    padding:11px 6px;\r\n  }\r\n\r\n  .hw-summary{\r\n    padding:14px;\r\n  }\r\n\r\n  .hw-summary-row{\r\n    align-items:flex-start;\r\n    font-size:14px;\r\n  }\r\n\r\n  .hw-summary-row strong{\r\n    max-width:58%;\r\n    text-align:right;\r\n  }\r\n\r\n  .hw-program-item{\r\n    flex-direction:column;\r\n    gap:4px;\r\n  }\r\n\r\n  .hw-program-item strong{\r\n    font-size:16px;\r\n  }\r\n\r\n  .hw-admin-grid{\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n  .hw-kpi{\r\n    grid-template-columns:1fr 1fr;\r\n  }\r\n}\r\n\r\n@media(max-width:480px){\r\n  .hw-main{\r\n    padding-left:12px;\r\n    padding-right:12px;\r\n  }\r\n\r\n  .hw-title{\r\n    font-size:24px;\r\n  }\r\n\r\n  .hw-brand{\r\n    font-size:17px;\r\n  }\r\n\r\n  .hw-tabs{\r\n    gap:6px;\r\n  }\r\n\r\n  .hw-tab{\r\n    font-size:13px;\r\n  }\r\n\r\n  .hw-slots{\r\n    grid-template-columns:repeat(2,1fr);\r\n  }\r\n\r\n  .hw-day{\r\n    min-height:54px;\r\n  }\r\n\r\n  .hw-badge{\r\n    font-size:8px;\r\n  }\r\n\r\n  .hw-kpi{\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n  .hw-actions{\r\n    margin-left:-12px;\r\n    margin-right:-12px;\r\n    padding-left:12px;\r\n    padding-right:12px;\r\n  }\r\n}\r\n\r\n@media(hover:none){\r\n  .hw-service:hover{\r\n    transform:none;\r\n    box-shadow:none;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div class=\"hw-app\">\r\n  <div class=\"hw-shell\">\r\n\r\n    <div class=\"hw-topbar\">\r\n      <div class=\"hw-brand\">\r\n        <div class=\"hw-logo\">\r\n          <img decoding=\"async\"\r\n            src=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/wp-content\/uploads\/2024\/12\/Logo-Rond-HypnoWellness-300x300.webp\"\r\n            alt=\"Logo HypnoWellness\"\r\n          >\r\n        <\/div>\r\n        HypnoWellness\r\n      <\/div>\r\n\r\n      <div class=\"hw-tabs\">\r\n        <button class=\"hw-tab active\" data-tab=\"booking\">\r\n          R\u00e9servation en ligne\r\n        <\/button>\r\n\r\n        <button class=\"hw-tab\" data-tab=\"admin\">\r\n          Back-office\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <main class=\"hw-main\">\r\n\r\n      <!-- ====================================================\r\n           PARTIE CLIENT\r\n           ==================================================== -->\r\n\r\n      <section id=\"booking\" class=\"hw-section active\">\r\n\r\n        <h1 class=\"hw-title\">\r\n          R\u00e9server une s\u00e9ance\r\n        <\/h1>\r\n\r\n        <p class=\"hw-sub\">\r\n          Choisissez votre accompagnement puis un cr\u00e9neau disponible.\r\n        <\/p>\r\n\r\n        <div class=\"hw-stepbar\">\r\n          <div class=\"hw-step active\"><\/div>\r\n          <div class=\"hw-step\"><\/div>\r\n          <div class=\"hw-step\"><\/div>\r\n          <div class=\"hw-step\"><\/div>\r\n          <div class=\"hw-step\"><\/div>\r\n        <\/div>\r\n\r\n        <!-- \u00c9TAPE 1 -->\r\n\r\n        <div id=\"step1\">\r\n\r\n          <div id=\"services\" class=\"hw-grid\"><\/div>\r\n\r\n          <div class=\"hw-actions\">\r\n            <span><\/span>\r\n\r\n            <button\r\n              id=\"toStep2\"\r\n              class=\"hw-btn primary\"\r\n              disabled\r\n            >\r\n              Continuer\r\n            <\/button>\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <!-- \u00c9TAPE 2 -->\r\n\r\n        <div id=\"step2\" class=\"hw-hidden\">\r\n\r\n          <div class=\"hw-calendar\">\r\n\r\n            <div class=\"hw-calhead\">\r\n\r\n              <button\r\n                id=\"prevMonth\"\r\n                class=\"hw-btn secondary\"\r\n              >\r\n                \u2190\r\n              <\/button>\r\n\r\n              <strong id=\"monthLabel\"><\/strong>\r\n\r\n              <button\r\n                id=\"nextMonth\"\r\n                class=\"hw-btn secondary\"\r\n              >\r\n                \u2192\r\n              <\/button>\r\n\r\n            <\/div>\r\n\r\n            <div\r\n              class=\"hw-calgrid\"\r\n              id=\"calendarGrid\"\r\n            ><\/div>\r\n\r\n          <\/div>\r\n\r\n          <div\r\n            id=\"slotArea\"\r\n            class=\"hw-hidden\"\r\n          >\r\n\r\n            <h3 style=\"margin-top:18px\">\r\n              Choisissez une heure\r\n            <\/h3>\r\n\r\n            <div\r\n              id=\"slots\"\r\n              class=\"hw-slots\"\r\n            ><\/div>\r\n\r\n            <div id=\"stopProgramPreview\"><\/div>\r\n\r\n          <\/div>\r\n\r\n          <div class=\"hw-actions\">\r\n\r\n            <button\r\n              class=\"hw-btn secondary\"\r\n              data-back=\"1\"\r\n            >\r\n              Retour\r\n            <\/button>\r\n\r\n            <button\r\n              id=\"toStep3\"\r\n              class=\"hw-btn primary\"\r\n              disabled\r\n            >\r\n              Continuer\r\n            <\/button>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <!-- \u00c9TAPE 3 -->\r\n\r\n        <div id=\"step3\" class=\"hw-hidden\">\r\n\r\n          <div class=\"hw-form\">\r\n\r\n            <div class=\"hw-field\">\r\n              <label>Nom<\/label>\r\n              <input\r\n                id=\"name\"\r\n                autocomplete=\"name\"\r\n                required\r\n              >\r\n            <\/div>\r\n\r\n            <div class=\"hw-field\">\r\n              <label>T\u00e9l\u00e9phone<\/label>\r\n              <input\r\n                id=\"phone\"\r\n                autocomplete=\"tel\"\r\n                required\r\n              >\r\n            <\/div>\r\n\r\n            <div class=\"hw-field\">\r\n              <label>E-mail<\/label>\r\n              <input\r\n                id=\"email\"\r\n                type=\"email\"\r\n                autocomplete=\"email\"\r\n                required\r\n              >\r\n            <\/div>\r\n\r\n            <div class=\"hw-field\">\r\n\r\n              <label>\r\n                Mode de paiement sur place\r\n              <\/label>\r\n\r\n              <select id=\"payment\">\r\n\r\n                <option value=\"cash\">\r\n                  Esp\u00e8ces\r\n                <\/option>\r\n\r\n                <option value=\"payconiq\">\r\n                  Payconiq\r\n                <\/option>\r\n\r\n              <\/select>\r\n\r\n            <\/div>\r\n\r\n            <div class=\"hw-field full\">\r\n\r\n              <label>\r\n                Message facultatif\r\n              <\/label>\r\n\r\n              <textarea\r\n                id=\"note\"\r\n                rows=\"3\"\r\n                placeholder=\"Informations utiles concernant votre rendez-vous.\"\r\n              ><\/textarea>\r\n\r\n            <\/div>\r\n\r\n            <div class=\"hw-field full\">\r\n\r\n              <label\r\n                style=\"\r\n                  display:flex;\r\n                  gap:9px;\r\n                  align-items:flex-start;\r\n                  font-weight:500;\r\n                \"\r\n              >\r\n\r\n                <input\r\n                  id=\"privacy\"\r\n                  type=\"checkbox\"\r\n                  style=\"margin-top:3px\"\r\n                >\r\n\r\n                J\u2019accepte que mes donn\u00e9es soient utilis\u00e9es pour g\u00e9rer ma r\u00e9servation\r\n                et les communications li\u00e9es \u00e0 mon rendez-vous.\r\n\r\n              <\/label>\r\n\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n          <div class=\"hw-notice\">\r\n            Aucun paiement n\u2019est demand\u00e9 en ligne.\r\n            Le r\u00e8glement s\u2019effectue sur place le jour de la s\u00e9ance.\r\n          <\/div>\r\n\r\n          <div class=\"hw-actions\">\r\n\r\n            <button\r\n              class=\"hw-btn secondary\"\r\n              data-back=\"2\"\r\n            >\r\n              Retour\r\n            <\/button>\r\n\r\n            <button\r\n              id=\"toStep4\"\r\n              class=\"hw-btn primary\"\r\n            >\r\n              Voir le r\u00e9capitulatif\r\n            <\/button>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <!-- \u00c9TAPE 4 -->\r\n\r\n        <div\r\n          id=\"step4\"\r\n          class=\"hw-hidden\"\r\n        >\r\n\r\n          <div\r\n            id=\"summary\"\r\n            class=\"hw-summary\"\r\n          ><\/div>\r\n\r\n          <div class=\"hw-actions\">\r\n\r\n            <button\r\n              class=\"hw-btn secondary\"\r\n              data-back=\"3\"\r\n            >\r\n              Retour\r\n            <\/button>\r\n\r\n            <button\r\n              id=\"confirmBooking\"\r\n              class=\"hw-btn primary\"\r\n            >\r\n              Confirmer la r\u00e9servation\r\n            <\/button>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <!-- \u00c9TAPE 5 -->\r\n\r\n        <div\r\n          id=\"step5\"\r\n          class=\"hw-hidden\"\r\n        >\r\n\r\n          <div class=\"hw-successbox\">\r\n\r\n            <h2 style=\"margin-top:0\">\r\n              Votre rendez-vous est confirm\u00e9\r\n            <\/h2>\r\n\r\n            <p id=\"successText\"><\/p>\r\n\r\n            <p class=\"hw-small\">\r\n              Cette version fonctionne en mode d\u00e9monstration.\r\n              L\u2019envoi r\u00e9el des e-mails et la synchronisation Google Calendar\r\n              seront ajout\u00e9s dans la version WordPress connect\u00e9e.\r\n            <\/p>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n      <\/section>\r\n\r\n      <!-- ====================================================\r\n           BACK-OFFICE\r\n           ==================================================== -->\r\n\r\n      <section\r\n        id=\"admin\"\r\n        class=\"hw-section\"\r\n      >\r\n\r\n        <div id=\"adminLocked\">\r\n\r\n          <h1 class=\"hw-title\">\r\n            Back-office\r\n          <\/h1>\r\n\r\n          <p class=\"hw-sub\">\r\n            D\u00e9mo prot\u00e9g\u00e9e par code.\r\n          <\/p>\r\n\r\n          <div\r\n            class=\"hw-form\"\r\n            style=\"max-width:420px\"\r\n          >\r\n\r\n            <div class=\"hw-field full\">\r\n\r\n              <label>\r\n                Code administrateur\r\n              <\/label>\r\n\r\n              <input\r\n                id=\"adminCode\"\r\n                type=\"password\"\r\n                placeholder=\"Code d\u00e9mo : 2468\"\r\n              >\r\n\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n          <div class=\"hw-actions\">\r\n\r\n            <span><\/span>\r\n\r\n            <button\r\n              id=\"unlockAdmin\"\r\n              class=\"hw-btn primary\"\r\n            >\r\n              Ouvrir\r\n            <\/button>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div\r\n          id=\"adminOpen\"\r\n          class=\"hw-hidden\"\r\n        >\r\n\r\n          <div class=\"hw-kpi\">\r\n\r\n            <div>\r\n              <span class=\"hw-small\">\r\n                R\u00e9servations d\u00e9mo\r\n              <\/span>\r\n\r\n              <strong id=\"kpiBookings\">\r\n                0\r\n              <\/strong>\r\n            <\/div>\r\n\r\n            <div>\r\n              <span class=\"hw-small\">\r\n                Cr\u00e9neaux bloqu\u00e9s\r\n              <\/span>\r\n\r\n              <strong id=\"kpiBlocks\">\r\n                0\r\n              <\/strong>\r\n            <\/div>\r\n\r\n            <div>\r\n              <span class=\"hw-small\">\r\n                Jour d\u2019ouverture\r\n              <\/span>\r\n\r\n              <strong>\r\n                Samedi\r\n              <\/strong>\r\n\r\n              <span class=\"hw-small\">\r\n                09:00\u201314:00\r\n              <\/span>\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n          <div class=\"hw-admin-grid\">\r\n\r\n            <div class=\"hw-panel hw-admin-menu\">\r\n\r\n              <h3>\r\n                Gestion\r\n              <\/h3>\r\n\r\n              <button\r\n                class=\"hw-btn secondary\"\r\n                id=\"showBlockForm\"\r\n              >\r\n                + Bloquer une p\u00e9riode\r\n              <\/button>\r\n\r\n              <button\r\n                class=\"hw-btn secondary\"\r\n                id=\"clearDemo\"\r\n              >\r\n                R\u00e9initialiser les donn\u00e9es d\u00e9mo\r\n              <\/button>\r\n\r\n              <p class=\"hw-small\">\r\n                Motifs disponibles :\r\n                cong\u00e9, spectacle, formation,\r\n                d\u00e9placement, personnel, autre.\r\n              <\/p>\r\n\r\n            <\/div>\r\n\r\n            <div>\r\n\r\n              <div\r\n                id=\"blockForm\"\r\n                class=\"hw-panel hw-hidden\"\r\n                style=\"margin-bottom:16px\"\r\n              >\r\n\r\n                <h3>\r\n                  Nouvelle indisponibilit\u00e9\r\n                <\/h3>\r\n\r\n                <div class=\"hw-form\">\r\n\r\n                  <div class=\"hw-field\">\r\n\r\n                    <label>\r\n                      Type\r\n                    <\/label>\r\n\r\n                    <select id=\"blockType\">\r\n                      <option>Cong\u00e9<\/option>\r\n                      <option>Spectacle<\/option>\r\n                      <option>Formation<\/option>\r\n                      <option>D\u00e9placement<\/option>\r\n                      <option>Personnel<\/option>\r\n                      <option>Autre<\/option>\r\n                    <\/select>\r\n\r\n                  <\/div>\r\n\r\n                  <div class=\"hw-field\">\r\n\r\n                    <label>\r\n                      Date\r\n                    <\/label>\r\n\r\n                    <input\r\n                      id=\"blockDate\"\r\n                      type=\"date\"\r\n                    >\r\n\r\n                  <\/div>\r\n\r\n                  <div class=\"hw-field\">\r\n\r\n                    <label>\r\n                      D\u00e9but\r\n                    <\/label>\r\n\r\n                    <input\r\n                      id=\"blockStart\"\r\n                      type=\"time\"\r\n                      value=\"09:00\"\r\n                    >\r\n\r\n                  <\/div>\r\n\r\n                  <div class=\"hw-field\">\r\n\r\n                    <label>\r\n                      Fin\r\n                    <\/label>\r\n\r\n                    <input\r\n                      id=\"blockEnd\"\r\n                      type=\"time\"\r\n                      value=\"14:00\"\r\n                    >\r\n\r\n                  <\/div>\r\n\r\n                <\/div>\r\n\r\n                <div class=\"hw-actions\">\r\n\r\n                  <button\r\n                    id=\"cancelBlock\"\r\n                    class=\"hw-btn secondary\"\r\n                  >\r\n                    Annuler\r\n                  <\/button>\r\n\r\n                  <button\r\n                    id=\"saveBlock\"\r\n                    class=\"hw-btn primary\"\r\n                  >\r\n                    Enregistrer\r\n                  <\/button>\r\n\r\n                <\/div>\r\n\r\n              <\/div>\r\n\r\n              <div class=\"hw-panel\">\r\n\r\n                <div\r\n                  style=\"\r\n                    display:flex;\r\n                    justify-content:space-between;\r\n                    align-items:center;\r\n                    gap:10px;\r\n                    margin-bottom:12px;\r\n                    flex-wrap:wrap;\r\n                  \"\r\n                >\r\n\r\n                  <h3 style=\"margin:0\">\r\n                    Vue semaine\r\n                  <\/h3>\r\n\r\n                  <span class=\"hw-small\">\r\n                    Interface inspir\u00e9e d\u2019un agenda professionnel\r\n                  <\/span>\r\n\r\n                <\/div>\r\n\r\n                <div\r\n                  id=\"weekView\"\r\n                  class=\"hw-week\"\r\n                ><\/div>\r\n\r\n              <\/div>\r\n\r\n            <\/div>\r\n\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n      <\/section>\r\n\r\n    <\/main>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\nconst HW_CONFIG = {\r\n\r\n  timezone:\"Europe\/Brussels\",\r\n\r\n  bufferMinutes:15,\r\n\r\n  regularAvailability:{\r\n    6:[\r\n      [\"09:00\",\"14:00\"]\r\n    ]\r\n  },\r\n\r\n  stopTobaccoSpecialAvailability:{\r\n    0:[\r\n      [\"09:00\",\"14:00\"]\r\n    ]\r\n  },\r\n\r\n  services:[\r\n\r\n    {\r\n      id:\"therapy\",\r\n      name:\"Hypnoth\u00e9rapie\",\r\n      price:70,\r\n      duration:90,\r\n      description:\"S\u00e9ance individuelle d\u2019hypnoth\u00e9rapie.\"\r\n    },\r\n\r\n    {\r\n      id:\"spiritual\",\r\n      name:\"Hypnose r\u00e9gressive \/ spirituelle\",\r\n      price:90,\r\n      duration:90,\r\n      description:\"S\u00e9ance d\u2019exploration en hypnose spirituelle.\"\r\n    },\r\n\r\n    {\r\n      id:\"online\",\r\n      name:\"Hypnose en ligne\",\r\n      price:null,\r\n      duration:90,\r\n      description:\"S\u00e9ance \u00e0 distance. Tarif \u00e0 pr\u00e9ciser.\"\r\n    },\r\n\r\n    {\r\n      id:\"stop\",\r\n      name:\"Arr\u00eat du tabac\",\r\n      price:280,\r\n      unitPrice:70,\r\n      duration:90,\r\n      description:\"Programme complet de 4 s\u00e9ances \u00e0 70 \u20ac chacune : J, J+1, J+7 et J+21.\",\r\n      multi:true\r\n    }\r\n\r\n  ],\r\n\r\n  adminDemoCode:\"2468\",\r\n\r\n  apiEndpoint:\"\"\r\n\r\n};\r\n\r\nconst state={\r\n\r\n  service:null,\r\n\r\n  selectedDate:null,\r\n\r\n  selectedTime:null,\r\n\r\n  currentMonth:new Date(\r\n    new Date().getFullYear(),\r\n    new Date().getMonth(),\r\n    1\r\n  ),\r\n\r\n  blocks:JSON.parse(\r\n    localStorage.getItem(\"hw_blocks\") || \"[]\"\r\n  ),\r\n\r\n  demoBookings:JSON.parse(\r\n    localStorage.getItem(\"hw_bookings\") || \"[]\"\r\n  )\r\n\r\n};\r\n\r\nfunction formatPrice(value){\r\n\r\n  if(value===null || value===undefined){\r\n    return \"Tarif \u00e0 pr\u00e9ciser\";\r\n  }\r\n\r\n  return value+\" \u20ac\";\r\n\r\n}\r\n\r\nfunction pad(number){\r\n\r\n  return String(number).padStart(2,\"0\");\r\n\r\n}\r\n\r\nfunction ymd(date){\r\n\r\n  return (\r\n    date.getFullYear()\r\n    + \"-\"\r\n    + pad(date.getMonth()+1)\r\n    + \"-\"\r\n    + pad(date.getDate())\r\n  );\r\n\r\n}\r\n\r\nfunction formatDate(date){\r\n\r\n  return new Intl.DateTimeFormat(\r\n    \"fr-BE\",\r\n    {\r\n      weekday:\"long\",\r\n      day:\"numeric\",\r\n      month:\"long\",\r\n      year:\"numeric\"\r\n    }\r\n  ).format(date);\r\n\r\n}\r\n\r\nfunction toMin(time){\r\n\r\n  const parts=time.split(\":\");\r\n\r\n  return (\r\n    Number(parts[0])*60\r\n    +\r\n    Number(parts[1])\r\n  );\r\n\r\n}\r\n\r\nfunction toTime(minutes){\r\n\r\n  return (\r\n    pad(Math.floor(minutes\/60))\r\n    +\r\n    \":\"\r\n    +\r\n    pad(minutes%60)\r\n  );\r\n\r\n}\r\n\r\nfunction addDays(date,number){\r\n\r\n  const copy=new Date(date);\r\n\r\n  copy.setDate(\r\n    copy.getDate()+number\r\n  );\r\n\r\n  return copy;\r\n\r\n}\r\n\r\nfunction renderServices(){\r\n\r\n  const container=\r\n    document.getElementById(\"services\");\r\n\r\n  container.innerHTML=\r\n    HW_CONFIG.services\r\n      .map(function(service){\r\n\r\n        return `\r\n          <article\r\n            class=\"\r\n              hw-service\r\n              ${\r\n                state.service &&\r\n                state.service.id===service.id\r\n                ? \"selected\"\r\n                : \"\"\r\n              }\r\n            \"\r\n            data-service=\"${service.id}\"\r\n          >\r\n\r\n            <h3>\r\n              ${service.name}\r\n            <\/h3>\r\n\r\n            <div class=\"hw-price\">\r\n              ${formatPrice(service.price)}\r\n            <\/div>\r\n\r\n            <div class=\"hw-meta\">\r\n\r\n              ${service.duration} min\r\n\r\n              ${\r\n                service.multi\r\n                ? \" \u2022 4 rendez-vous \u2022 \"\r\n                  + service.unitPrice\r\n                  + \" \u20ac \/ s\u00e9ance\"\r\n                : \"\"\r\n              }\r\n\r\n            <\/div>\r\n\r\n            <p>\r\n              ${service.description}\r\n            <\/p>\r\n\r\n          <\/article>\r\n        `;\r\n\r\n      })\r\n      .join(\"\");\r\n\r\n  container\r\n    .querySelectorAll(\".hw-service\")\r\n    .forEach(function(card){\r\n\r\n      card.addEventListener(\r\n        \"click\",\r\n        function(){\r\n\r\n          state.service=\r\n            HW_CONFIG.services.find(\r\n              function(service){\r\n\r\n                return (\r\n                  service.id===\r\n                  card.dataset.service\r\n                );\r\n\r\n              }\r\n            );\r\n\r\n          state.selectedDate=null;\r\n          state.selectedTime=null;\r\n\r\n          renderServices();\r\n\r\n          document\r\n            .getElementById(\"toStep2\")\r\n            .disabled=false;\r\n\r\n        }\r\n      );\r\n\r\n    });\r\n\r\n}\r\n\r\nfunction isBlocked(\r\n  date,\r\n  start,\r\n  end\r\n){\r\n\r\n  const day=ymd(date);\r\n\r\n  return state.blocks.some(\r\n    function(block){\r\n\r\n      if(block.date!==day){\r\n        return false;\r\n      }\r\n\r\n      if(\r\n        start===undefined ||\r\n        start===null\r\n      ){\r\n        return true;\r\n      }\r\n\r\n      return (\r\n        Math.max(\r\n          toMin(start),\r\n          toMin(block.start)\r\n        )\r\n        <\r\n        Math.min(\r\n          toMin(end),\r\n          toMin(block.end)\r\n        )\r\n      );\r\n\r\n    }\r\n  );\r\n\r\n}\r\n\r\nfunction isBooked(\r\n  date,\r\n  start,\r\n  end\r\n){\r\n\r\n  const day=ymd(date);\r\n\r\n  return state.demoBookings.some(\r\n    function(booking){\r\n\r\n      return (\r\n        booking.date===day\r\n        &&\r\n        Math.max(\r\n          toMin(start),\r\n          toMin(booking.start)\r\n        )\r\n        <\r\n        Math.min(\r\n          toMin(end),\r\n          toMin(booking.end)\r\n        )\r\n      );\r\n\r\n    }\r\n  );\r\n\r\n}\r\n\r\nfunction availabilityFor(\r\n  date,\r\n  service\r\n){\r\n\r\n  const day=\r\n    date.getDay();\r\n\r\n  let windows=\r\n    HW_CONFIG\r\n      .regularAvailability[day]\r\n    ||\r\n    [];\r\n\r\n  if(\r\n    service &&\r\n    service.id===\"stop\" &&\r\n    !windows.length\r\n  ){\r\n\r\n    windows=\r\n      HW_CONFIG\r\n        .stopTobaccoSpecialAvailability[day]\r\n      ||\r\n      [];\r\n\r\n  }\r\n\r\n  return windows;\r\n\r\n}\r\n\r\nfunction slotsFor(\r\n  date,\r\n  service\r\n){\r\n\r\n  const windows=\r\n    availabilityFor(\r\n      date,\r\n      service\r\n    );\r\n\r\n  const output=[];\r\n\r\n  windows.forEach(\r\n    function(window){\r\n\r\n      let current=\r\n        toMin(window[0]);\r\n\r\n      const end=\r\n        toMin(window[1]);\r\n\r\n      while(\r\n        current+\r\n        service.duration\r\n        <=\r\n        end\r\n      ){\r\n\r\n        const start=\r\n          toTime(current);\r\n\r\n        const finish=\r\n          toTime(\r\n            current+\r\n            service.duration\r\n          );\r\n\r\n        const bufferFinish=\r\n          toTime(\r\n            Math.min(\r\n              current+\r\n              service.duration+\r\n              HW_CONFIG.bufferMinutes,\r\n              1439\r\n            )\r\n          );\r\n\r\n        if(\r\n          !isBlocked(\r\n            date,\r\n            start,\r\n            bufferFinish\r\n          )\r\n          &&\r\n          !isBooked(\r\n            date,\r\n            start,\r\n            bufferFinish\r\n          )\r\n        ){\r\n\r\n          output.push(start);\r\n\r\n        }\r\n\r\n        current+=\r\n          service.duration\r\n          +\r\n          HW_CONFIG.bufferMinutes;\r\n\r\n      }\r\n\r\n    }\r\n  );\r\n\r\n  return output;\r\n\r\n}\r\n\r\nfunction stopProgram(\r\n  date,\r\n  time\r\n){\r\n\r\n  const offsets=[\r\n    0,\r\n    1,\r\n    7,\r\n    21\r\n  ];\r\n\r\n  return offsets.map(\r\n    function(offset,index){\r\n\r\n      const sessionDate=\r\n        addDays(\r\n          date,\r\n          offset\r\n        );\r\n\r\n      const available=\r\n        slotsFor(\r\n          sessionDate,\r\n          state.service\r\n        );\r\n\r\n      let chosen=\r\n        available.includes(time)\r\n        ? time\r\n        : null;\r\n\r\n      if(\r\n        !chosen &&\r\n        available.length\r\n      ){\r\n\r\n        chosen=\r\n          available\r\n            .slice()\r\n            .sort(\r\n              function(a,b){\r\n\r\n                return (\r\n                  Math.abs(\r\n                    toMin(a)\r\n                    -\r\n                    toMin(time)\r\n                  )\r\n                  -\r\n                  Math.abs(\r\n                    toMin(b)\r\n                    -\r\n                    toMin(time)\r\n                  )\r\n                );\r\n\r\n              }\r\n            )[0];\r\n\r\n      }\r\n\r\n      return {\r\n\r\n        index:index+1,\r\n\r\n        date:sessionDate,\r\n\r\n        time:chosen,\r\n\r\n        available:Boolean(chosen)\r\n\r\n      };\r\n\r\n    }\r\n  );\r\n\r\n}\r\n\r\nfunction renderCalendar(){\r\n\r\n  const label=\r\n    document.getElementById(\r\n      \"monthLabel\"\r\n    );\r\n\r\n  label.textContent=\r\n    new Intl.DateTimeFormat(\r\n      \"fr-BE\",\r\n      {\r\n        month:\"long\",\r\n        year:\"numeric\"\r\n      }\r\n    ).format(\r\n      state.currentMonth\r\n    );\r\n\r\n  const grid=\r\n    document.getElementById(\r\n      \"calendarGrid\"\r\n    );\r\n\r\n  const dows=[\r\n    \"Lun\",\r\n    \"Mar\",\r\n    \"Mer\",\r\n    \"Jeu\",\r\n    \"Ven\",\r\n    \"Sam\",\r\n    \"Dim\"\r\n  ];\r\n\r\n  let html=\r\n    dows\r\n      .map(\r\n        function(day){\r\n\r\n          return (\r\n            '<div class=\"hw-dow\">'\r\n            +\r\n            day\r\n            +\r\n            '<\/div>'\r\n          );\r\n\r\n        }\r\n      )\r\n      .join(\"\");\r\n\r\n  const first=\r\n    new Date(\r\n      state.currentMonth.getFullYear(),\r\n      state.currentMonth.getMonth(),\r\n      1\r\n    );\r\n\r\n  const startOffset=\r\n    (first.getDay()+6)%7;\r\n\r\n  const start=\r\n    new Date(first);\r\n\r\n  start.setDate(\r\n    first.getDate()\r\n    -\r\n    startOffset\r\n  );\r\n\r\n  const today=\r\n    new Date();\r\n\r\n  today.setHours(\r\n    0,\r\n    0,\r\n    0,\r\n    0\r\n  );\r\n\r\n  for(\r\n    let i=0;\r\n    i<42;\r\n    i++\r\n  ){\r\n\r\n    const date=\r\n      new Date(start);\r\n\r\n    date.setDate(\r\n      start.getDate()+i\r\n    );\r\n\r\n    const sameMonth=\r\n      date.getMonth()\r\n      ===\r\n      state.currentMonth.getMonth();\r\n\r\n    const slots=\r\n      slotsFor(\r\n        date,\r\n        state.service\r\n      );\r\n\r\n    const past=\r\n      date<today;\r\n\r\n    const blocked=\r\n      isBlocked(date)\r\n      &&\r\n      !slots.length;\r\n\r\n    const available=\r\n      slots.length>0\r\n      &&\r\n      !past;\r\n\r\n    const selected=\r\n      state.selectedDate\r\n      &&\r\n      ymd(state.selectedDate)\r\n      ===\r\n      ymd(date);\r\n\r\n    html+=`\r\n      <div\r\n        class=\"\r\n          hw-day\r\n          ${!sameMonth ? \"muted\" : \"\"}\r\n          ${blocked ? \"blocked\" : \"\"}\r\n          ${available ? \"available\" : \"\"}\r\n          ${selected ? \"selected\" : \"\"}\r\n        \"\r\n        data-date=\"${ymd(date)}\"\r\n      >\r\n\r\n        <strong>\r\n          ${date.getDate()}\r\n        <\/strong>\r\n\r\n        ${\r\n          available\r\n          ?\r\n          `\r\n            <div class=\"hw-badge\">\r\n\r\n              ${slots.length}\r\n\r\n              ${\r\n                slots.length>1\r\n                ? \" cr\u00e9neaux\"\r\n                : \" cr\u00e9neau\"\r\n              }\r\n\r\n            <\/div>\r\n          `\r\n          :\r\n          \"\"\r\n        }\r\n\r\n      <\/div>\r\n    `;\r\n\r\n  }\r\n\r\n  grid.innerHTML=html;\r\n\r\n  grid\r\n    .querySelectorAll(\r\n      \".hw-day.available\"\r\n    )\r\n    .forEach(\r\n      function(day){\r\n\r\n        day.addEventListener(\r\n          \"click\",\r\n          function(){\r\n\r\n            state.selectedDate=\r\n              new Date(\r\n                day.dataset.date\r\n                +\r\n                \"T12:00:00\"\r\n              );\r\n\r\n            state.selectedTime=null;\r\n\r\n            renderCalendar();\r\n            renderSlots();\r\n\r\n            document\r\n              .getElementById(\r\n                \"slotArea\"\r\n              )\r\n              .classList\r\n              .remove(\r\n                \"hw-hidden\"\r\n              );\r\n\r\n            document\r\n              .getElementById(\r\n                \"toStep3\"\r\n              )\r\n              .disabled=true;\r\n\r\n          }\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n}\r\n\r\nfunction renderSlots(){\r\n\r\n  const slots=\r\n    slotsFor(\r\n      state.selectedDate,\r\n      state.service\r\n    );\r\n\r\n  const container=\r\n    document.getElementById(\r\n      \"slots\"\r\n    );\r\n\r\n  container.innerHTML=\r\n    slots\r\n      .map(\r\n        function(time){\r\n\r\n          return `\r\n            <button\r\n              class=\"\r\n                hw-slot\r\n                ${\r\n                  state.selectedTime===time\r\n                  ?\r\n                  \"selected\"\r\n                  :\r\n                  \"\"\r\n                }\r\n              \"\r\n              data-time=\"${time}\"\r\n            >\r\n\r\n              ${time}\r\n\r\n            <\/button>\r\n          `;\r\n\r\n        }\r\n      )\r\n      .join(\"\");\r\n\r\n  container\r\n    .querySelectorAll(\r\n      \".hw-slot\"\r\n    )\r\n    .forEach(\r\n      function(button){\r\n\r\n        button.addEventListener(\r\n          \"click\",\r\n          function(){\r\n\r\n            state.selectedTime=\r\n              button.dataset.time;\r\n\r\n            renderSlots();\r\n\r\n            let valid=true;\r\n\r\n            if(\r\n              state.service.id===\"stop\"\r\n            ){\r\n\r\n              const program=\r\n                stopProgram(\r\n                  state.selectedDate,\r\n                  state.selectedTime\r\n                );\r\n\r\n              valid=\r\n                program.every(\r\n                  function(session){\r\n\r\n                    return session.available;\r\n\r\n                  }\r\n                );\r\n\r\n              document\r\n                .getElementById(\r\n                  \"stopProgramPreview\"\r\n                )\r\n                .innerHTML=`\r\n\r\n                  <div class=\"hw-notice\">\r\n\r\n                    <strong>\r\n                      Programme Stop Tabac\r\n                    <\/strong>\r\n\r\n                    <div class=\"hw-program\">\r\n\r\n                      ${\r\n                        program\r\n                          .map(\r\n                            function(session){\r\n\r\n                              return `\r\n                                <div class=\"hw-program-item\">\r\n\r\n                                  <span>\r\n\r\n                                    S\u00e9ance\r\n                                    ${session.index}\r\n                                    \u2014\r\n                                    ${formatDate(session.date)}\r\n\r\n                                  <\/span>\r\n\r\n                                  <strong>\r\n\r\n                                    ${\r\n                                      session.time\r\n                                      ||\r\n                                      \"Aucun cr\u00e9neau\"\r\n                                    }\r\n\r\n                                  <\/strong>\r\n\r\n                                <\/div>\r\n                              `;\r\n\r\n                            }\r\n                          )\r\n                          .join(\"\")\r\n                      }\r\n\r\n                    <\/div>\r\n\r\n                    ${\r\n                      valid\r\n                      ?\r\n                      \"\"\r\n                      :\r\n                      `\r\n                        <p>\r\n                          <strong>\r\n                            Cette combinaison n\u2019est pas compl\u00e8te.\r\n                          <\/strong>\r\n                          Choisissez un autre cr\u00e9neau initial.\r\n                        <\/p>\r\n                      `\r\n                    }\r\n\r\n                  <\/div>\r\n                `;\r\n\r\n            }\r\n            else{\r\n\r\n              document\r\n                .getElementById(\r\n                  \"stopProgramPreview\"\r\n                )\r\n                .innerHTML=\"\";\r\n\r\n            }\r\n\r\n            document\r\n              .getElementById(\r\n                \"toStep3\"\r\n              )\r\n              .disabled=\r\n                !valid;\r\n\r\n          }\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n}\r\n\r\nfunction goStep(number){\r\n\r\n  for(\r\n    let i=1;\r\n    i<=5;\r\n    i++\r\n  ){\r\n\r\n    document\r\n      .getElementById(\r\n        \"step\"+i\r\n      )\r\n      .classList\r\n      .toggle(\r\n        \"hw-hidden\",\r\n        i!==number\r\n      );\r\n\r\n  }\r\n\r\n  document\r\n    .querySelectorAll(\r\n      \".hw-step\"\r\n    )\r\n    .forEach(\r\n      function(step,index){\r\n\r\n        step.classList.toggle(\r\n          \"done\",\r\n          index<number-1\r\n        );\r\n\r\n        step.classList.toggle(\r\n          \"active\",\r\n          index===number-1\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n  if(number===2){\r\n\r\n    renderCalendar();\r\n\r\n    document\r\n      .getElementById(\r\n        \"slotArea\"\r\n      )\r\n      .classList\r\n      .add(\r\n        \"hw-hidden\"\r\n      );\r\n\r\n  }\r\n\r\n  const bookingSection=\r\n    document.querySelector(\r\n      \".hw-shell\"\r\n    );\r\n\r\n  if(bookingSection){\r\n\r\n    bookingSection.scrollIntoView({\r\n      behavior:\"smooth\",\r\n      block:\"start\"\r\n    });\r\n\r\n  }\r\n\r\n}\r\n\r\nfunction buildSummary(){\r\n\r\n  const payment=\r\n    document\r\n      .getElementById(\r\n        \"payment\"\r\n      )\r\n      .value\r\n    ===\r\n    \"cash\"\r\n    ?\r\n    \"Esp\u00e8ces\"\r\n    :\r\n    \"Payconiq\";\r\n\r\n  let details=`\r\n\r\n    <div class=\"hw-summary-row\">\r\n\r\n      <span>\r\n        Service\r\n      <\/span>\r\n\r\n      <strong>\r\n        ${state.service.name}\r\n      <\/strong>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"hw-summary-row\">\r\n\r\n      <span>\r\n        Tarif\r\n      <\/span>\r\n\r\n      <strong>\r\n\r\n        ${\r\n          state.service.id===\"stop\"\r\n          ?\r\n          \"280 \u20ac (4 \u00d7 70 \u20ac)\"\r\n          :\r\n          formatPrice(\r\n            state.service.price\r\n          )\r\n        }\r\n\r\n      <\/strong>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"hw-summary-row\">\r\n\r\n      <span>\r\n        Paiement\r\n      <\/span>\r\n\r\n      <strong>\r\n        ${payment} sur place\r\n      <\/strong>\r\n\r\n    <\/div>\r\n  `;\r\n\r\n  if(\r\n    state.service.id===\"stop\"\r\n  ){\r\n\r\n    const program=\r\n      stopProgram(\r\n        state.selectedDate,\r\n        state.selectedTime\r\n      );\r\n\r\n    details+=`\r\n\r\n      <div style=\"margin-top:14px\">\r\n\r\n        <strong>\r\n          Vos 4 rendez-vous\r\n        <\/strong>\r\n\r\n        <div class=\"hw-program\">\r\n\r\n          ${\r\n            program\r\n              .map(\r\n                function(session){\r\n\r\n                  return `\r\n\r\n                    <div class=\"hw-program-item\">\r\n\r\n                      <span>\r\n\r\n                        S\u00e9ance\r\n                        ${session.index}\r\n                        \u2014\r\n                        ${formatDate(session.date)}\r\n\r\n                      <\/span>\r\n\r\n                      <strong>\r\n                        ${session.time}\r\n                      <\/strong>\r\n\r\n                    <\/div>\r\n\r\n                  `;\r\n\r\n                }\r\n              )\r\n              .join(\"\")\r\n          }\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n    `;\r\n\r\n  }\r\n  else{\r\n\r\n    details+=`\r\n\r\n      <div class=\"hw-summary-row\">\r\n\r\n        <span>\r\n          Date\r\n        <\/span>\r\n\r\n        <strong>\r\n          ${formatDate(state.selectedDate)}\r\n        <\/strong>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"hw-summary-row\">\r\n\r\n        <span>\r\n          Heure\r\n        <\/span>\r\n\r\n        <strong>\r\n          ${state.selectedTime}\r\n        <\/strong>\r\n\r\n      <\/div>\r\n    `;\r\n\r\n  }\r\n\r\n  document\r\n    .getElementById(\r\n      \"summary\"\r\n    )\r\n    .innerHTML=\r\n      details;\r\n\r\n}\r\n\r\nfunction validateCustomer(){\r\n\r\n  const email=\r\n    document\r\n      .getElementById(\r\n        \"email\"\r\n      )\r\n      .value\r\n      .trim();\r\n\r\n  return (\r\n\r\n    document\r\n      .getElementById(\r\n        \"name\"\r\n      )\r\n      .value\r\n      .trim()\r\n\r\n    &&\r\n\r\n    document\r\n      .getElementById(\r\n        \"phone\"\r\n      )\r\n      .value\r\n      .trim()\r\n\r\n    &&\r\n\r\n    \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(\r\n      email\r\n    )\r\n\r\n    &&\r\n\r\n    document\r\n      .getElementById(\r\n        \"privacy\"\r\n      )\r\n      .checked\r\n\r\n  );\r\n\r\n}\r\n\r\nasync function confirmBooking(){\r\n\r\n  const customer={\r\n\r\n    name:\r\n      document\r\n        .getElementById(\r\n          \"name\"\r\n        )\r\n        .value\r\n        .trim(),\r\n\r\n    phone:\r\n      document\r\n        .getElementById(\r\n          \"phone\"\r\n        )\r\n        .value\r\n        .trim(),\r\n\r\n    email:\r\n      document\r\n        .getElementById(\r\n          \"email\"\r\n        )\r\n        .value\r\n        .trim(),\r\n\r\n    payment:\r\n      document\r\n        .getElementById(\r\n          \"payment\"\r\n        )\r\n        .value,\r\n\r\n    note:\r\n      document\r\n        .getElementById(\r\n          \"note\"\r\n        )\r\n        .value\r\n        .trim()\r\n\r\n  };\r\n\r\n  let sessions=[];\r\n\r\n  if(\r\n    state.service.id===\"stop\"\r\n  ){\r\n\r\n    sessions=\r\n      stopProgram(\r\n        state.selectedDate,\r\n        state.selectedTime\r\n      )\r\n      .map(\r\n        function(session){\r\n\r\n          return {\r\n\r\n            date:\r\n              ymd(session.date),\r\n\r\n            start:\r\n              session.time,\r\n\r\n            duration:\r\n              state.service.duration\r\n\r\n          };\r\n\r\n        }\r\n      );\r\n\r\n  }\r\n  else{\r\n\r\n    sessions=[\r\n      {\r\n\r\n        date:\r\n          ymd(\r\n            state.selectedDate\r\n          ),\r\n\r\n        start:\r\n          state.selectedTime,\r\n\r\n        duration:\r\n          state.service.duration\r\n\r\n      }\r\n    ];\r\n\r\n  }\r\n\r\n  const payload={\r\n\r\n    service:\r\n      state.service,\r\n\r\n    customer:\r\n      customer,\r\n\r\n    sessions:\r\n      sessions,\r\n\r\n    timezone:\r\n      HW_CONFIG.timezone\r\n\r\n  };\r\n\r\n  if(\r\n    HW_CONFIG.apiEndpoint\r\n  ){\r\n\r\n    const response=\r\n      await fetch(\r\n        HW_CONFIG.apiEndpoint,\r\n        {\r\n\r\n          method:\"POST\",\r\n\r\n          headers:{\r\n            \"Content-Type\":\"application\/json\"\r\n          },\r\n\r\n          body:\r\n            JSON.stringify(\r\n              payload\r\n            )\r\n\r\n        }\r\n      );\r\n\r\n    if(\r\n      !response.ok\r\n    ){\r\n\r\n      throw new Error(\r\n        \"La r\u00e9servation n\u2019a pas pu \u00eatre enregistr\u00e9e.\"\r\n      );\r\n\r\n    }\r\n\r\n  }\r\n  else{\r\n\r\n    sessions.forEach(\r\n      function(session){\r\n\r\n        state.demoBookings.push({\r\n\r\n          service:\r\n            state.service.name,\r\n\r\n          customer:\r\n            customer.name,\r\n\r\n          date:\r\n            session.date,\r\n\r\n          start:\r\n            session.start,\r\n\r\n          end:\r\n            toTime(\r\n              toMin(\r\n                session.start\r\n              )\r\n              +\r\n              session.duration\r\n            )\r\n\r\n        });\r\n\r\n      }\r\n    );\r\n\r\n    localStorage.setItem(\r\n      \"hw_bookings\",\r\n      JSON.stringify(\r\n        state.demoBookings\r\n      )\r\n    );\r\n\r\n  }\r\n\r\n  document\r\n    .getElementById(\r\n      \"successText\"\r\n    )\r\n    .innerHTML=\r\n\r\n      \"Merci <strong>\"\r\n      +\r\n      customer.name\r\n      +\r\n      \"<\/strong>. Une confirmation doit \u00eatre envoy\u00e9e \u00e0 <strong>\"\r\n      +\r\n      customer.email\r\n      +\r\n      \"<\/strong>. Le paiement est pr\u00e9vu <strong>\"\r\n      +\r\n      (\r\n        customer.payment===\"cash\"\r\n        ?\r\n        \"en esp\u00e8ces\"\r\n        :\r\n        \"via Payconiq\"\r\n      )\r\n      +\r\n      \"<\/strong> sur place.\";\r\n\r\n  updateAdmin();\r\n\r\n  goStep(5);\r\n\r\n}\r\n\r\nfunction updateAdmin(){\r\n\r\n  document\r\n    .getElementById(\r\n      \"kpiBookings\"\r\n    )\r\n    .textContent=\r\n      state.demoBookings.length;\r\n\r\n  document\r\n    .getElementById(\r\n      \"kpiBlocks\"\r\n    )\r\n    .textContent=\r\n      state.blocks.length;\r\n\r\n  renderWeek();\r\n\r\n}\r\n\r\nfunction renderWeek(){\r\n\r\n  const now=\r\n    new Date();\r\n\r\n  const monday=\r\n    new Date(now);\r\n\r\n  monday.setDate(\r\n    now.getDate()\r\n    -\r\n    (\r\n      (now.getDay()+6)%7\r\n    )\r\n  );\r\n\r\n  monday.setHours(\r\n    12,\r\n    0,\r\n    0,\r\n    0\r\n  );\r\n\r\n  const days=\r\n    Array.from(\r\n      {length:7},\r\n      function(_,index){\r\n\r\n        return addDays(\r\n          monday,\r\n          index\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n  let html=`\r\n\r\n    <div class=\"hw-week-grid\">\r\n\r\n      <div class=\"head\"><\/div>\r\n\r\n      ${\r\n        days\r\n          .map(\r\n            function(date){\r\n\r\n              return `\r\n\r\n                <div class=\"head\">\r\n\r\n                  ${\r\n                    new Intl.DateTimeFormat(\r\n                      \"fr-BE\",\r\n                      {\r\n                        weekday:\"short\",\r\n                        day:\"numeric\",\r\n                        month:\"numeric\"\r\n                      }\r\n                    ).format(date)\r\n                  }\r\n\r\n                <\/div>\r\n\r\n              `;\r\n\r\n            }\r\n          )\r\n          .join(\"\")\r\n      }\r\n  `;\r\n\r\n  for(\r\n    let hour=8;\r\n    hour<=15;\r\n    hour++\r\n  ){\r\n\r\n    html+=`\r\n\r\n      <div class=\"head\">\r\n        ${pad(hour)}:00\r\n      <\/div>\r\n    `;\r\n\r\n    days.forEach(\r\n      function(date){\r\n\r\n        const booking=\r\n          state.demoBookings.find(\r\n            function(item){\r\n\r\n              return (\r\n\r\n                item.date===\r\n                ymd(date)\r\n\r\n                &&\r\n\r\n                toMin(item.start)\r\n                >=\r\n                hour*60\r\n\r\n                &&\r\n\r\n                toMin(item.start)\r\n                <\r\n                (hour+1)*60\r\n\r\n              );\r\n\r\n            }\r\n          );\r\n\r\n        const block=\r\n          state.blocks.find(\r\n            function(item){\r\n\r\n              return (\r\n\r\n                item.date===\r\n                ymd(date)\r\n\r\n                &&\r\n\r\n                toMin(item.start)\r\n                <\r\n                (hour+1)*60\r\n\r\n                &&\r\n\r\n                toMin(item.end)\r\n                >\r\n                hour*60\r\n\r\n              );\r\n\r\n            }\r\n          );\r\n\r\n        html+=\"<div>\";\r\n\r\n        if(booking){\r\n\r\n          html+=`\r\n\r\n            <div class=\"hw-event\">\r\n\r\n              <strong>\r\n                ${booking.customer}\r\n              <\/strong>\r\n\r\n              <br>\r\n\r\n              ${booking.service}\r\n\r\n              <br>\r\n\r\n              ${booking.start}\r\n\r\n            <\/div>\r\n          `;\r\n\r\n        }\r\n        else if(block){\r\n\r\n          html+=`\r\n\r\n            <div class=\"hw-block\">\r\n\r\n              <strong>\r\n                ${block.type}\r\n              <\/strong>\r\n\r\n              <br>\r\n\r\n              ${block.start}\r\n              \u2013\r\n              ${block.end}\r\n\r\n            <\/div>\r\n          `;\r\n\r\n        }\r\n\r\n        html+=\"<\/div>\";\r\n\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n  html+=\"<\/div>\";\r\n\r\n  document\r\n    .getElementById(\r\n      \"weekView\"\r\n    )\r\n    .innerHTML=\r\n      html;\r\n\r\n}\r\n\r\n\/* =========================================================\r\n   NAVIGATION PRINCIPALE\r\n   ========================================================= *\/\r\n\r\ndocument\r\n  .querySelectorAll(\r\n    \".hw-tab\"\r\n  )\r\n  .forEach(\r\n    function(tab){\r\n\r\n      tab.addEventListener(\r\n        \"click\",\r\n        function(){\r\n\r\n          document\r\n            .querySelectorAll(\r\n              \".hw-tab\"\r\n            )\r\n            .forEach(\r\n              function(item){\r\n\r\n                item\r\n                  .classList\r\n                  .remove(\r\n                    \"active\"\r\n                  );\r\n\r\n              }\r\n            );\r\n\r\n          document\r\n            .querySelectorAll(\r\n              \".hw-section\"\r\n            )\r\n            .forEach(\r\n              function(section){\r\n\r\n                section\r\n                  .classList\r\n                  .remove(\r\n                    \"active\"\r\n                  );\r\n\r\n              }\r\n            );\r\n\r\n          tab\r\n            .classList\r\n            .add(\r\n              \"active\"\r\n            );\r\n\r\n          document\r\n            .getElementById(\r\n              tab.dataset.tab\r\n            )\r\n            .classList\r\n            .add(\r\n              \"active\"\r\n            );\r\n\r\n          if(\r\n            tab.dataset.tab\r\n            ===\r\n            \"admin\"\r\n          ){\r\n\r\n            updateAdmin();\r\n\r\n          }\r\n\r\n        }\r\n      );\r\n\r\n    }\r\n  );\r\n\r\n\/* =========================================================\r\n   BOUTONS \u00c9TAPES CLIENT\r\n   ========================================================= *\/\r\n\r\ndocument\r\n  .getElementById(\r\n    \"toStep2\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      goStep(2);\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"toStep3\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      goStep(3);\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"toStep4\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      if(\r\n        !validateCustomer()\r\n      ){\r\n\r\n        alert(\r\n          \"Merci de compl\u00e9ter vos coordonn\u00e9es et d\u2019accepter la gestion des donn\u00e9es li\u00e9es \u00e0 la r\u00e9servation.\"\r\n        );\r\n\r\n        return;\r\n\r\n      }\r\n\r\n      buildSummary();\r\n\r\n      goStep(4);\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .querySelectorAll(\r\n    \"[data-back]\"\r\n  )\r\n  .forEach(\r\n    function(button){\r\n\r\n      button.addEventListener(\r\n        \"click\",\r\n        function(){\r\n\r\n          goStep(\r\n            Number(\r\n              button.dataset.back\r\n            )\r\n          );\r\n\r\n        }\r\n      );\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"confirmBooking\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      confirmBooking()\r\n        .catch(\r\n          function(error){\r\n\r\n            alert(\r\n              error.message\r\n            );\r\n\r\n          }\r\n        );\r\n\r\n    }\r\n  );\r\n\r\n\/* =========================================================\r\n   CALENDRIER\r\n   ========================================================= *\/\r\n\r\ndocument\r\n  .getElementById(\r\n    \"prevMonth\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      state.currentMonth=\r\n        new Date(\r\n          state.currentMonth.getFullYear(),\r\n          state.currentMonth.getMonth()-1,\r\n          1\r\n        );\r\n\r\n      renderCalendar();\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"nextMonth\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      state.currentMonth=\r\n        new Date(\r\n          state.currentMonth.getFullYear(),\r\n          state.currentMonth.getMonth()+1,\r\n          1\r\n        );\r\n\r\n      renderCalendar();\r\n\r\n    }\r\n  );\r\n\r\n\/* =========================================================\r\n   BACK-OFFICE\r\n   ========================================================= *\/\r\n\r\ndocument\r\n  .getElementById(\r\n    \"unlockAdmin\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      const code=\r\n        document\r\n          .getElementById(\r\n            \"adminCode\"\r\n          )\r\n          .value;\r\n\r\n      if(\r\n        code!==\r\n        HW_CONFIG.adminDemoCode\r\n      ){\r\n\r\n        alert(\r\n          \"Code incorrect.\"\r\n        );\r\n\r\n        return;\r\n\r\n      }\r\n\r\n      document\r\n        .getElementById(\r\n          \"adminLocked\"\r\n        )\r\n        .classList\r\n        .add(\r\n          \"hw-hidden\"\r\n        );\r\n\r\n      document\r\n        .getElementById(\r\n          \"adminOpen\"\r\n        )\r\n        .classList\r\n        .remove(\r\n          \"hw-hidden\"\r\n        );\r\n\r\n      updateAdmin();\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"showBlockForm\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      document\r\n        .getElementById(\r\n          \"blockForm\"\r\n        )\r\n        .classList\r\n        .remove(\r\n          \"hw-hidden\"\r\n        );\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"cancelBlock\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      document\r\n        .getElementById(\r\n          \"blockForm\"\r\n        )\r\n        .classList\r\n        .add(\r\n          \"hw-hidden\"\r\n        );\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"saveBlock\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      const date=\r\n        document\r\n          .getElementById(\r\n            \"blockDate\"\r\n          )\r\n          .value;\r\n\r\n      const start=\r\n        document\r\n          .getElementById(\r\n            \"blockStart\"\r\n          )\r\n          .value;\r\n\r\n      const end=\r\n        document\r\n          .getElementById(\r\n            \"blockEnd\"\r\n          )\r\n          .value;\r\n\r\n      if(\r\n        !date\r\n        ||\r\n        !start\r\n        ||\r\n        !end\r\n        ||\r\n        toMin(end)\r\n        <=\r\n        toMin(start)\r\n      ){\r\n\r\n        alert(\r\n          \"V\u00e9rifiez la date et les heures.\"\r\n        );\r\n\r\n        return;\r\n\r\n      }\r\n\r\n      state.blocks.push({\r\n\r\n        type:\r\n          document\r\n            .getElementById(\r\n              \"blockType\"\r\n            )\r\n            .value,\r\n\r\n        date:\r\n          date,\r\n\r\n        start:\r\n          start,\r\n\r\n        end:\r\n          end\r\n\r\n      });\r\n\r\n      localStorage.setItem(\r\n        \"hw_blocks\",\r\n        JSON.stringify(\r\n          state.blocks\r\n        )\r\n      );\r\n\r\n      document\r\n        .getElementById(\r\n          \"blockForm\"\r\n        )\r\n        .classList\r\n        .add(\r\n          \"hw-hidden\"\r\n        );\r\n\r\n      updateAdmin();\r\n\r\n    }\r\n  );\r\n\r\ndocument\r\n  .getElementById(\r\n    \"clearDemo\"\r\n  )\r\n  .addEventListener(\r\n    \"click\",\r\n    function(){\r\n\r\n      if(\r\n        !confirm(\r\n          \"R\u00e9initialiser les r\u00e9servations et indisponibilit\u00e9s de d\u00e9monstration ?\"\r\n        )\r\n      ){\r\n\r\n        return;\r\n\r\n      }\r\n\r\n      state.blocks=[];\r\n      state.demoBookings=[];\r\n\r\n      localStorage.removeItem(\r\n        \"hw_blocks\"\r\n      );\r\n\r\n      localStorage.removeItem(\r\n        \"hw_bookings\"\r\n      );\r\n\r\n      updateAdmin();\r\n\r\n    }\r\n  );\r\n\r\n\/* =========================================================\r\n   INITIALISATION\r\n   ========================================================= *\/\r\n\r\nrenderServices();\r\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>HypnoWellness R\u00e9servation en ligne Back-office R\u00e9server une s\u00e9ance Choisissez votre accompagnement puis un cr\u00e9neau disponible. Continuer \u2190 \u2192 Choisissez une heure Retour Continuer Nom T\u00e9l\u00e9phone E-mail Mode de paiement sur place Esp\u00e8ces Payconiq Message facultatif J\u2019accepte que mes donn\u00e9es soient utilis\u00e9es pour g\u00e9rer ma r\u00e9servation et les communications li\u00e9es \u00e0 mon rendez-vous. Aucun paiement n\u2019est [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1182","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>R\u00e9servation - HypnoWellness<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"R\u00e9servation - HypnoWellness\" \/>\n<meta property=\"og:description\" content=\"HypnoWellness R\u00e9servation en ligne Back-office R\u00e9server une s\u00e9ance Choisissez votre accompagnement puis un cr\u00e9neau disponible. Continuer \u2190 \u2192 Choisissez une heure Retour Continuer Nom T\u00e9l\u00e9phone E-mail Mode de paiement sur place Esp\u00e8ces Payconiq Message facultatif J\u2019accepte que mes donn\u00e9es soient utilis\u00e9es pour g\u00e9rer ma r\u00e9servation et les communications li\u00e9es \u00e0 mon rendez-vous. Aucun paiement n\u2019est [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/\" \/>\n<meta property=\"og:site_name\" content=\"HypnoWellness\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/HypnoWellness.be\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-10T09:02:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.xn--hypno-thrapie-ihb.com\/wp-content\/uploads\/2024\/12\/symbole-serenite-hypnotherapie-relaxation-nature.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/index.php\\\/reservation\\\/\",\"url\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/index.php\\\/reservation\\\/\",\"name\":\"R\u00e9servation - HypnoWellness\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/#website\"},\"datePublished\":\"2026-09-10T08:55:44+00:00\",\"dateModified\":\"2026-09-10T09:02:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/index.php\\\/reservation\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/index.php\\\/reservation\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/index.php\\\/reservation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"R\u00e9servation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/#website\",\"url\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/\",\"name\":\"HypnoWellness\",\"description\":\"By Ludovic Corvilain\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/#organization\",\"name\":\"HypnoWellness\",\"url\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/hypnowellness-neder-over-heembeek-cabinet-hypnotherapie.webp\",\"contentUrl\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/hypnowellness-neder-over-heembeek-cabinet-hypnotherapie.webp\",\"width\":1024,\"height\":1024,\"caption\":\"HypnoWellness\"},\"image\":{\"@id\":\"https:\\\/\\\/www.xn--hypno-thrapie-ihb.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/HypnoWellness.be\",\"https:\\\/\\\/www.instagram.com\\\/ludovic_corvilain\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"R\u00e9servation - HypnoWellness","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:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/","og_locale":"fr_FR","og_type":"article","og_title":"R\u00e9servation - HypnoWellness","og_description":"HypnoWellness R\u00e9servation en ligne Back-office R\u00e9server une s\u00e9ance Choisissez votre accompagnement puis un cr\u00e9neau disponible. Continuer \u2190 \u2192 Choisissez une heure Retour Continuer Nom T\u00e9l\u00e9phone E-mail Mode de paiement sur place Esp\u00e8ces Payconiq Message facultatif J\u2019accepte que mes donn\u00e9es soient utilis\u00e9es pour g\u00e9rer ma r\u00e9servation et les communications li\u00e9es \u00e0 mon rendez-vous. Aucun paiement n\u2019est [&hellip;]","og_url":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/","og_site_name":"HypnoWellness","article_publisher":"https:\/\/www.facebook.com\/HypnoWellness.be","article_modified_time":"2026-09-10T09:02:21+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.xn--hypno-thrapie-ihb.com\/wp-content\/uploads\/2024\/12\/symbole-serenite-hypnotherapie-relaxation-nature.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/","url":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/","name":"R\u00e9servation - HypnoWellness","isPartOf":{"@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/#website"},"datePublished":"2026-09-10T08:55:44+00:00","dateModified":"2026-09-10T09:02:21+00:00","breadcrumb":{"@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/reservation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.xn--hypno-thrapie-ihb.com\/"},{"@type":"ListItem","position":2,"name":"R\u00e9servation"}]},{"@type":"WebSite","@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/#website","url":"https:\/\/www.xn--hypno-thrapie-ihb.com\/","name":"HypnoWellness","description":"By Ludovic Corvilain","publisher":{"@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.xn--hypno-thrapie-ihb.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/#organization","name":"HypnoWellness","url":"https:\/\/www.xn--hypno-thrapie-ihb.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.xn--hypno-thrapie-ihb.com\/wp-content\/uploads\/2024\/12\/hypnowellness-neder-over-heembeek-cabinet-hypnotherapie.webp","contentUrl":"https:\/\/www.xn--hypno-thrapie-ihb.com\/wp-content\/uploads\/2024\/12\/hypnowellness-neder-over-heembeek-cabinet-hypnotherapie.webp","width":1024,"height":1024,"caption":"HypnoWellness"},"image":{"@id":"https:\/\/www.xn--hypno-thrapie-ihb.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/HypnoWellness.be","https:\/\/www.instagram.com\/ludovic_corvilain\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/pages\/1182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/comments?post=1182"}],"version-history":[{"count":7,"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/pages\/1182\/revisions"}],"predecessor-version":[{"id":1191,"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/pages\/1182\/revisions\/1191"}],"wp:attachment":[{"href":"https:\/\/www.xn--hypno-thrapie-ihb.com\/index.php\/wp-json\/wp\/v2\/media?parent=1182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}