{"id":2457,"date":"2026-08-20T20:44:12","date_gmt":"2026-08-20T19:44:12","guid":{"rendered":"https:\/\/www.lasergame-geneve.ch\/?page_id=2457"},"modified":"2026-10-20T20:41:17","modified_gmt":"2026-10-20T19:41:17","slug":"chance","status":"publish","type":"page","link":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/","title":{"rendered":"Roulette"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2457\" class=\"elementor elementor-2457\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f68ee89 e-flex e-con-boxed e-con e-parent\" data-id=\"f68ee89\" 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-ed6aaea elementor-widget elementor-widget-html\" data-id=\"ed6aaea\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* --- Compl\u00e9ments CSS pour ce bloc (le reste vient de votre feuille) --- *\/\n.lgw-alert{\n  margin:0 0 18px; padding:12px 14px; border-radius:12px;\n  border:1px solid rgba(255,138,122,.5); background:rgba(255,138,122,.10);\n  color:#ffd9d2; font-size:12.5px; line-height:1.5; text-align:left;\n}\n.lgw-alert[hidden]{ display:none; }\n.lgw-check--optin{ margin-top:6px; }\n.lgw-check__txt a{ color:#38bdf8; }\n.lgw-privacy{ font-size:11px; line-height:1.5; color:#6f6392; margin:14px 0 0; }\n.lgw-privacy a{ color:#a855f7; }\n.lgw-app .lgw-submit:disabled{ opacity:.7; cursor:progress; transform:none; }\n.lgw-app .lgw-spin:disabled{ opacity:.75; }\n\n\/* ------------------- ANNIVERSAIRE DE L'ENFANT -------------------- *\/\n.lgw-child{\n  text-align:left;\n  border:1px solid var(--lgw-line);\n  border-radius:16px;\n  background:rgba(255,255,255,.03);\n  padding:18px 18px 16px;\n  margin:0 0 18px;\n}\n.lgw-child[hidden]{ display:none; }\n.lgw-child__title{\n  font-family:'Space Grotesk',sans-serif;\n  font-size:14.5px; font-weight:600; color:#fff; margin:0 0 5px;\n}\n.lgw-child__text{ font-size:12.5px; line-height:1.5; color:var(--lgw-dim); margin:0 0 14px; }\n\n.lgw-app .lgw-child__form input[type=\"text\"]{\n  width:100%;\n  background:rgba(6,3,16,.72);\n  border:1px solid var(--lgw-line);\n  border-radius:12px;\n  color:#fff;\n  font-family:'Inter',sans-serif; font-size:14px;\n  padding:11px 14px;\n  transition:border-color .22s ease, box-shadow .22s ease;\n}\n.lgw-app .lgw-child__form input:focus,\n.lgw-app .lgw-child__form select:focus{\n  outline:none;\n  border-color:rgba(56,189,248,.85);\n  box-shadow:0 0 0 3px rgba(56,189,248,.14);\n}\n\n.lgw-child__date{ display:grid; grid-template-columns:1fr 1.5fr 1fr; gap:7px; margin-top:9px; }\n.lgw-app .lgw-child__date select{\n  width:100%;\n  background:rgba(6,3,16,.72);\n  border:1px solid var(--lgw-line);\n  border-radius:12px;\n  color:#fff;\n  font-family:'Inter',sans-serif; font-size:13.5px;\n  padding:11px 9px;\n  -webkit-appearance:none; appearance:none;\n  background-image:linear-gradient(45deg,transparent 50%,#6f6392 50%),linear-gradient(135deg,#6f6392 50%,transparent 50%);\n  background-position:calc(100% - 15px) 50%, calc(100% - 10px) 50%;\n  background-size:5px 5px, 5px 5px;\n  background-repeat:no-repeat;\n}\n.lgw-app .lgw-child__date select option{ background:#150a30; color:#fff; }\n\n.lgw-check--child{ margin:14px 0 4px; }\n.lgw-check--child .lgw-check__txt{ font-size:11.5px; }\n\n.lgw-app .lgw-child__btn{\n  width:100%; min-height:44px; margin-top:12px;\n  border:1px solid rgba(56,189,248,.5) !important;\n  border-radius:12px !important;\n  background:rgba(56,189,248,.10) !important;\n  color:#9fe0ff !important;\n  font-family:'Space Grotesk',sans-serif; font-size:13.5px; font-weight:600;\n  cursor:pointer;\n  transition:background .2s ease, color .2s ease, border-color .2s ease;\n}\n.lgw-app .lgw-child__btn:hover{\n  background:rgba(56,189,248,.2) !important;\n  color:#fff !important; border-color:rgba(56,189,248,.9) !important;\n}\n.lgw-app .lgw-child__btn:disabled{ opacity:.6; cursor:progress; }\n\n.lgw-child__done{\n  margin:0; font-size:13px; line-height:1.5; color:var(--lgw-green);\n  display:flex; align-items:flex-start; gap:7px;\n}\n.lgw-child__done[hidden]{ display:none; }\n.lgw-child__done::before{ content:\"\\2713\"; font-weight:700; }\n.lgw-skeleton{\n  position:absolute; inset:9px; border-radius:50%;\n  background:radial-gradient(circle at 50% 50%, #1b0e40, #120726);\n  display:grid; place-items:center; color:#6f6392; font-size:13px;\n}\n\n\/* --- Bouton de fermeture ---------------------------------------------\n   Le th\u00e8me applique son propre padding et sa propre hauteur aux <button>,\n   ce qui \u00e9crasait le cercle en ellipse. Chaque propri\u00e9t\u00e9 de gabarit est\n   donc verrouill\u00e9e ; seules les couleurs restent souples. *\/\n.lgw-app .lgw-close{\n  position:absolute !important;\n  top:15px !important; right:15px !important;\n  width:38px !important; height:38px !important;\n  min-width:0 !important; max-width:none !important;\n  min-height:0 !important; max-height:none !important;\n  padding:0 !important; margin:0 !important;\n  flex:0 0 auto !important;\n  display:inline-flex !important;\n  align-items:center !important; justify-content:center !important;\n  border-radius:50% !important;\n  border:1px solid rgba(168,85,247,.30) !important;\n  background:rgba(255,255,255,.05) !important;\n  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);\n  color:#b9addc !important;\n  font-size:0 !important; line-height:0 !important;\n  letter-spacing:normal !important; text-transform:none !important;\n  text-indent:0 !important;\n  box-shadow:none !important;\n  cursor:pointer; overflow:visible; z-index:6;\n  transition:color .22s ease, background .22s ease, border-color .22s ease,\n             transform .3s cubic-bezier(.2,.8,.25,1), box-shadow .22s ease;\n}\n\/* Certains th\u00e8mes injectent une croix en pseudo-\u00e9l\u00e9ment : on la neutralise. *\/\n.lgw-app .lgw-close::before,\n.lgw-app .lgw-close::after{ content:none !important; display:none !important; }\n\n.lgw-app .lgw-close svg{\n  width:15px !important; height:15px !important;\n  display:block !important;\n  fill:none !important; stroke:currentColor !important; stroke-width:2 !important;\n}\n\n.lgw-app .lgw-close:hover{\n  color:#fff !important;\n  background:rgba(236,72,153,.16) !important;\n  border-color:rgba(236,72,153,.7) !important;\n  transform:rotate(90deg) scale(1.06);\n  box-shadow:0 0 0 4px rgba(236,72,153,.10),\n             0 8px 20px -8px rgba(236,72,153,.75) !important;\n}\n.lgw-app .lgw-close:active{ transform:rotate(90deg) scale(.94); }\n\n.lgw-app .lgw-close:focus-visible{\n  outline:none !important;\n  color:#fff !important;\n  border-color:rgba(56,189,248,.9) !important;\n  box-shadow:0 0 0 3px rgba(56,189,248,.22) !important;\n}\n\n@media (max-width:600px){\n  .lgw-app .lgw-close{ width:36px !important; height:36px !important; top:12px !important; right:12px !important; }\n}\n@media (prefers-reduced-motion:reduce){\n  .lgw-app .lgw-close:hover,\n  .lgw-app .lgw-close:active{ transform:none; }\n}\n\n\/* ===================================================================\n   FEN\u00caTRE DE R\u00c9SULTAT \u2014 reprise compl\u00e8te\n   Plac\u00e9e en fin de feuille : ces r\u00e8gles priment sur celles d'origine.\n   =================================================================== *\/\n\n\/* D\u00e9filement r\u00e9tabli. Deux r\u00e8gles se contredisaient sur le m\u00eame \u00e9l\u00e9ment :\n   .lgw-modal__box posait overflow-y:auto, .lgw-win le rempla\u00e7ait par\n   overflow:visible, rendant le bas de la fen\u00eatre inatteignable sur petit \u00e9cran. *\/\n.lgw-app .lgw-modal__box.lgw-win{\n  overflow:hidden auto;\n  max-height:92vh;\n  max-height:min(92vh, 92dvh);\n  overscroll-behavior:contain;\n  scrollbar-width:thin;\n  scrollbar-color:rgba(168,85,247,.5) transparent;\n}\n.lgw-app .lgw-modal__box.lgw-win::-webkit-scrollbar{ width:6px; }\n.lgw-app .lgw-modal__box.lgw-win::-webkit-scrollbar-thumb{\n  background:rgba(168,85,247,.45); border-radius:999px;\n}\n\n\/* ---- M\u00e9daillon du lot ---------------------------------------------- *\/\n.lgw-app .lgw-win__emoji{\n  width:78px; height:78px;\n  margin:4px auto 16px;\n  display:grid; place-items:center;\n  font-size:38px; line-height:1;\n  border-radius:50%;\n  background:\n    radial-gradient(circle at 50% 32%, rgba(245,179,27,.24), rgba(255,255,255,.03) 72%);\n  border:1px solid rgba(245,179,27,.38);\n  box-shadow:0 14px 34px -14px rgba(245,179,27,.6), inset 0 1px 0 rgba(255,255,255,.14);\n}\n.lgw-win.is-jackpot .lgw-win__emoji{\n  border-color:rgba(245,179,27,.75);\n  box-shadow:0 14px 40px -10px rgba(245,179,27,.85), inset 0 1px 0 rgba(255,255,255,.2);\n}\n\n.lgw-app .lgw-win__kicker{ margin-bottom:10px; }\n.lgw-app .lgw-win__title{ font-size:24px; margin-bottom:12px; }\n.lgw-app .lgw-win__sub{ margin-bottom:20px; }\n\n\/* ---- Coupon : composition verticale, type billet ------------------- *\/\n.lgw-app .lgw-coupon{\n  display:block;\n  text-align:center;\n  padding:18px 20px 16px;\n  border:1px dashed rgba(245,179,27,.5);\n  border-radius:16px;\n  background:linear-gradient(180deg, rgba(245,179,27,.13), rgba(245,179,27,.04));\n  margin-bottom:12px;\n}\n.lgw-app .lgw-coupon__label{\n  display:block; width:auto;\n  font-size:10.5px; letter-spacing:.2em; text-transform:uppercase;\n  color:#c8b98e; white-space:normal; text-align:center;\n  margin:0 0 10px;\n}\n\/* Le code ne doit jamais se couper en deux : il r\u00e9tr\u00e9cit au lieu de passer\n   \u00e0 la ligne, et les codes tr\u00e8s longs s'abr\u00e8gent proprement. *\/\n.lgw-app .lgw-coupon__code{\n  display:block; width:100%; flex:none;\n  font-family:'Space Grotesk',sans-serif;\n  font-size:clamp(17px,5.6vw,25px);\n  font-weight:700; letter-spacing:.05em; line-height:1.2;\n  color:#f7d774;\n  text-align:center;\n  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;\n  text-shadow:0 0 26px rgba(247,215,116,.28);\n  padding-bottom:14px; margin-bottom:13px;\n  border-bottom:1px dashed rgba(245,179,27,.32);\n}\n.lgw-app .lgw-coupon__copy{\n  min-width:112px;\n  padding:8px 18px !important;\n  font-size:12.5px;\n}\n\n.lgw-app .lgw-win__valid{ margin-bottom:22px; }\n\n\/* ---- Bloc anniversaire : une proposition, pas un second formulaire -- *\/\n.lgw-app .lgw-child{\n  border:0; background:none;\n  border-radius:0;\n  padding:0; margin:22px 0 20px;\n}\n.lgw-child__sep{\n  display:flex; align-items:center; gap:12px;\n  margin:0 0 16px;\n  font-family:'Space Grotesk',sans-serif;\n  font-size:10px; letter-spacing:.2em; text-transform:uppercase;\n  color:#7a6fa0; white-space:nowrap;\n}\n.lgw-child__sep::before,\n.lgw-child__sep::after{\n  content:\"\"; flex:1 1 auto; height:1px;\n  background:linear-gradient(90deg, transparent, rgba(255,255,255,.16), transparent);\n}\n.lgw-app .lgw-child__title{\n  display:flex; align-items:center; justify-content:center;\n  flex-wrap:wrap; gap:8px;\n  font-size:15px; margin:0 0 6px; text-align:center;\n}\n.lgw-child__badge{\n  font-style:normal; font-family:'Inter',sans-serif;\n  font-size:9.5px; font-weight:600; letter-spacing:.12em; text-transform:uppercase;\n  color:#9fe0ff;\n  border:1px solid rgba(56,189,248,.45);\n  background:rgba(56,189,248,.1);\n  border-radius:999px; padding:3px 9px; line-height:1.4;\n}\n.lgw-child__badge[hidden]{ display:none; }\n.lgw-app .lgw-child__text{ text-align:center; margin-bottom:16px; }\n.lgw-app .lgw-check--child .lgw-check__txt{ font-size:11.5px; line-height:1.45; }\n.lgw-app .lgw-child__done{ justify-content:center; text-align:left; }\n\n\/* ---- Actions -------------------------------------------------------- *\/\n.lgw-app .lgw-cta{ min-height:56px; font-size:16px; margin-bottom:6px; }\n.lgw-app .lgw-ghost{\n  min-height:38px;\n  border:0 !important; background:none !important;\n  color:#8d81b0 !important;\n  font-size:13px;\n  text-decoration:underline; text-underline-offset:3px;\n  text-decoration-color:rgba(141,129,176,.4);\n}\n.lgw-app .lgw-ghost:hover{ color:#fff !important; text-decoration-color:currentColor; }\n.lgw-app .lgw-win__foot{ margin-top:16px; }\n\n\/* ---- \u00c9crans \u00e9troits -------------------------------------------------- *\/\n@media (max-width:430px){\n  .lgw-modal{ padding:10px; }\n  .lgw-app .lgw-modal__box{ padding:28px 18px 20px; border-radius:20px; }\n  .lgw-app .lgw-win__emoji{ width:64px; height:64px; font-size:32px; margin-bottom:12px; }\n  .lgw-app .lgw-win__title{ font-size:20px; }\n  .lgw-app .lgw-coupon{ padding:16px 14px 14px; }\n  .lgw-app .lgw-coupon__code{ letter-spacing:.03em; }\n  .lgw-app .lgw-child__date{ gap:6px; }\n  .lgw-app .lgw-child__date select{ padding:10px 5px; font-size:12.5px; background-position:calc(100% - 11px) 50%, calc(100% - 7px) 50%; }\n  .lgw-app .lgw-cta{ min-height:52px; font-size:15px; }\n}\n\n\/* ---- \u00c9crans peu hauts : t\u00e9l\u00e9phone couch\u00e9, petits portables ---------- *\/\n@media (max-height:740px){\n  .lgw-app .lgw-modal__box{ padding-top:24px; padding-bottom:18px; }\n  .lgw-app .lgw-win__emoji{ width:58px; height:58px; font-size:29px; margin:0 auto 10px; }\n  .lgw-app .lgw-win__title{ font-size:20px; margin-bottom:8px; }\n  .lgw-app .lgw-win__sub{ margin-bottom:14px; }\n  .lgw-app .lgw-coupon{ padding:14px 16px 12px; }\n  .lgw-app .lgw-win__valid{ margin-bottom:16px; }\n  .lgw-app .lgw-child{ margin:16px 0 16px; }\n  .lgw-app .lgw-win__foot{ margin-top:12px; }\n}\n<\/style>\n\n<!-- data-lgw-v=\"2\" : signature de ce bloc. Le script ci-dessous ne s'initialise\n     que sur les conteneurs portant cet attribut, afin qu'un ancien bloc rest\u00e9\n     sur la page ne puisse pas s'approprier celui-ci. -->\n<div class=\"lgw-app\" id=\"lgwApp\" data-lgw-v=\"2\">\n\n  <!-- ===================== D\u00c9COR ===================== -->\n  <div class=\"lgw-bg\" aria-hidden=\"true\">\n    <span class=\"lgw-aurora lgw-aurora--1\"><\/span>\n    <span class=\"lgw-aurora lgw-aurora--2\"><\/span>\n    <span class=\"lgw-aurora lgw-aurora--3\"><\/span>\n    <span class=\"lgw-spot\"><\/span>\n    <span class=\"lgw-dots\"><\/span>\n    <span class=\"lgw-vignette\"><\/span>\n  <\/div>\n\n  <div class=\"lgw-shell\">\n\n    <!-- ===================== EN-T\u00caTE ===================== -->\n    <header class=\"lgw-head\">\n      <h1 class=\"lgw-title\">Tentez votre <span class=\"lgw-grad\">chance<\/span><\/h1>\n      <p class=\"lgw-sub\">\n        Faites tourner la roue et repartez avec un cadeau.\n        <strong>Chaque case est gagnante<\/strong> \u2014 et un gros lot se cache dedans.\n      <\/p>\n    <\/header>\n\n    <!-- ===================== ROUE ===================== -->\n    <div class=\"lgw-stage\">\n      <div class=\"lgw-pointer\" id=\"lgwPointer\" aria-hidden=\"true\">\n        <svg viewBox=\"0 0 40 52\"><path d=\"M20 50 L4 12 A18 18 0 0 1 36 12 Z\"\/><\/svg>\n        <span class=\"lgw-pointer__knob\"><\/span>\n      <\/div>\n\n      <div class=\"lgw-wheelwrap\">\n        <span class=\"lgw-halo\" aria-hidden=\"true\"><\/span>\n        <div class=\"lgw-wheelhost\" id=\"lgwWheelHost\">\n          <div class=\"lgw-disc\"><div class=\"lgw-ring\"><\/div><div class=\"lgw-skeleton\">Chargement\u2026<\/div><\/div>\n        <\/div>\n        <div class=\"lgw-hub\" aria-hidden=\"true\">\n          <span class=\"lgw-hub__ring\"><\/span>\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n            <circle cx=\"12\" cy=\"12\" r=\"9\"\/><circle cx=\"12\" cy=\"12\" r=\"4.6\"\/>\n            <path d=\"M12 1.5v4M12 18.5v4M1.5 12h4M18.5 12h4\" stroke-linecap=\"round\"\/>\n          <\/svg>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- ===================== ACTION ===================== -->\n    <div class=\"lgw-actions\">\n      <button type=\"button\" class=\"lgw-spin\" id=\"lgwSpin\" disabled>\n        <span class=\"lgw-spin__shine\" aria-hidden=\"true\"><\/span>\n        <span class=\"lgw-spin__label\">Chargement\u2026<\/span>\n      <\/button>\n\n      <p class=\"lgw-note\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\n             stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <rect x=\"4\" y=\"10.5\" width=\"16\" height=\"10\" rx=\"2.5\"\/>\n          <path d=\"M8 10.5V7.5a4 4 0 0 1 8 0v3\"\/>\n        <\/svg>\n        <span><strong>Un code de participation est n\u00e9cessaire.<\/strong> Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro.<\/span>\n      <\/p>\n    <\/div>\n\n    <!-- ===================== LOTS ===================== -->\n    <div class=\"lgw-prizes\">\n      <p class=\"lgw-prizes__title\">Les lots en jeu<\/p>\n      <ul class=\"lgw-legend\" id=\"lgwLegend\"><\/ul>\n    <\/div>\n\n  <\/div>\n\n  <!-- ===================== MODALE : FORMULAIRE ===================== -->\n  <div class=\"lgw-modal\" id=\"lgwModal\" hidden>\n    <div class=\"lgw-modal__veil\" data-close><\/div>\n    <div class=\"lgw-modal__box\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"lgwModalTitle\">\n      <button type=\"button\" class=\"lgw-close\" data-close aria-label=\"Fermer\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n          <path d=\"M6 6l12 12M18 6L6 18\"\/>\n        <\/svg>\n      <\/button>\n\n      <span class=\"lgw-modal__emoji\" aria-hidden=\"true\">&#127873;<\/span>\n      <h2 id=\"lgwModalTitle\">Plus qu'une \u00e9tape<\/h2>\n      <p class=\"lgw-modal__sub\">\n        Vos coordonn\u00e9es nous servent \u00e0 vous envoyer votre lot et \u00e0 garantir\n        <strong>une seule participation par personne<\/strong>.\n      <\/p>\n\n      <div class=\"lgw-alert\" id=\"lgwAlert\" hidden><\/div>\n\n      <form class=\"lgw-form\" id=\"lgwForm\" novalidate>\n\n        <div class=\"lgw-field lgw-field--code\" id=\"lgwCodeWrap\">\n          <label for=\"lgwCode\">Code de participation <i>*<\/i><\/label>\n          <input type=\"text\" id=\"lgwCode\" name=\"code\" placeholder=\"LGW-XXXX-XXXX\"\n                 autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" maxlength=\"24\">\n          <span class=\"lgw-err\" data-for=\"code\"><\/span>\n        <\/div>\n\n        <div class=\"lgw-field\">\n          <label for=\"lgwNom\">Nom et pr\u00e9nom <i>*<\/i><\/label>\n          <input type=\"text\" id=\"lgwNom\" name=\"nom\" autocomplete=\"name\" placeholder=\"Marie Dupont\" maxlength=\"120\">\n          <span class=\"lgw-err\" data-for=\"nom\"><\/span>\n        <\/div>\n\n        <div class=\"lgw-field\">\n          <label for=\"lgwMail\">Adresse e-mail <i>*<\/i><\/label>\n          <input type=\"email\" id=\"lgwMail\" name=\"email\" autocomplete=\"email\" placeholder=\"marie@exemple.ch\" maxlength=\"180\">\n          <span class=\"lgw-err\" data-for=\"email\"><\/span>\n        <\/div>\n\n        <div class=\"lgw-field\">\n          <label for=\"lgwTel\">T\u00e9l\u00e9phone <i>*<\/i><\/label>\n          <input type=\"tel\" id=\"lgwTel\" name=\"tel\" autocomplete=\"tel\" placeholder=\"+41 79 123 45 67\" maxlength=\"30\">\n          <span class=\"lgw-err\" data-for=\"tel\"><\/span>\n        <\/div>\n\n        <label class=\"lgw-check\">\n          <input type=\"checkbox\" id=\"lgwOk\">\n          <span class=\"lgw-check__box\" aria-hidden=\"true\"><\/span>\n          <span class=\"lgw-check__txt\" id=\"lgwConsentTxt\">\n            J'accepte le r\u00e8glement du jeu et d'\u00eatre recontact\u00e9 au sujet de mon lot. <i>*<\/i>\n          <\/span>\n        <\/label>\n        <span class=\"lgw-err lgw-err--block\" data-for=\"ok\"><\/span>\n\n        <label class=\"lgw-check lgw-check--optin\" id=\"lgwOptinWrap\" hidden>\n          <input type=\"checkbox\" id=\"lgwOptin\">\n          <span class=\"lgw-check__box\" aria-hidden=\"true\"><\/span>\n          <span class=\"lgw-check__txt\" id=\"lgwOptinTxt\"><\/span>\n        <\/label>\n\n        <button type=\"submit\" class=\"lgw-submit\" id=\"lgwSubmit\">\n          <span class=\"lgw-submit__shine\" aria-hidden=\"true\"><\/span>\n          <span id=\"lgwSubmitLabel\">Lancer la roue<\/span>\n        <\/button>\n\n        <p class=\"lgw-privacy\" id=\"lgwPrivacy\" hidden><\/p>\n\n        <input type=\"text\" name=\"_hp\" class=\"lgw-hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">\n      <\/form>\n    <\/div>\n  <\/div>\n\n  <!-- ===================== MODALE : R\u00c9SULTAT ===================== -->\n  <div class=\"lgw-modal lgw-modal--result\" id=\"lgwResult\" hidden>\n    <div class=\"lgw-modal__veil\"><\/div>\n    <div class=\"lgw-modal__box lgw-win\" role=\"dialog\" aria-modal=\"true\" aria-live=\"polite\">\n      <div class=\"lgw-confetti\" id=\"lgwConfetti\" aria-hidden=\"true\"><\/div>\n\n      <span class=\"lgw-win__emoji\" id=\"lgwWinEmoji\" aria-hidden=\"true\">&#127919;<\/span>\n      <p class=\"lgw-win__kicker\" id=\"lgwWinKicker\">Vous avez gagn\u00e9<\/p>\n      <h2 class=\"lgw-win__title\" id=\"lgwWinTitle\"><\/h2>\n      <p class=\"lgw-win__sub\" id=\"lgwWinSub\"><\/p>\n\n      <div class=\"lgw-coupon\">\n        <span class=\"lgw-coupon__label\">Votre code<\/span>\n        <span class=\"lgw-coupon__code\" id=\"lgwCoupon\">\u2014<\/span>\n        <button type=\"button\" class=\"lgw-coupon__copy\" id=\"lgwCopy\">Copier<\/button>\n      <\/div>\n      <p class=\"lgw-win__valid\" id=\"lgwValid\"><\/p>\n\n      <!-- Anniversaire de l'enfant : demand\u00e9 apr\u00e8s le gain, enti\u00e8rement facultatif. -->\n      <div class=\"lgw-child\" id=\"lgwChild\" hidden>\n        <p class=\"lgw-child__sep\"><span>Encore une chose<\/span><\/p>\n        <p class=\"lgw-child__title\">\n          <span id=\"lgwChildTitle\"><\/span>\n          <em class=\"lgw-child__badge\" id=\"lgwChildBadge\" hidden>mode test<\/em>\n        <\/p>\n        <p class=\"lgw-child__text\" id=\"lgwChildText\"><\/p>\n\n        <form class=\"lgw-child__form\" id=\"lgwChildForm\" novalidate>\n          <input type=\"text\" id=\"lgwChildName\" placeholder=\"Pr\u00e9nom de l'enfant\" maxlength=\"80\" autocomplete=\"off\">\n          <div class=\"lgw-child__date\">\n            <select id=\"lgwChildDay\" aria-label=\"Jour\"><\/select>\n            <select id=\"lgwChildMonth\" aria-label=\"Mois\"><\/select>\n            <select id=\"lgwChildYear\" aria-label=\"Ann\u00e9e\"><\/select>\n          <\/div>\n          <label class=\"lgw-check lgw-check--child\">\n            <input type=\"checkbox\" id=\"lgwChildOk\">\n            <span class=\"lgw-check__box\" aria-hidden=\"true\"><\/span>\n            <span class=\"lgw-check__txt\" id=\"lgwChildConsent\"><\/span>\n          <\/label>\n          <span class=\"lgw-err lgw-err--block\" data-for=\"child\"><\/span>\n          <button type=\"submit\" class=\"lgw-child__btn\" id=\"lgwChildBtn\">Enregistrer la date<\/button>\n          <input type=\"text\" id=\"lgwChildHp\" class=\"lgw-hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">\n        <\/form>\n\n        <p class=\"lgw-child__done\" id=\"lgwChildDone\" hidden><\/p>\n      <\/div>\n\n      <a class=\"lgw-cta\" id=\"lgwBook\" href=\"#\" target=\"_blank\" rel=\"noopener noreferrer\">\n        <span class=\"lgw-cta__shine\" aria-hidden=\"true\"><\/span>\n        R\u00e9server ma partie\n      <\/a>\n      <button type=\"button\" class=\"lgw-ghost\" data-close-result>Fermer<\/button>\n\n      <p class=\"lgw-win__foot\">Un r\u00e9capitulatif vous est envoy\u00e9 par e-mail. Pr\u00e9sentez ce code \u00e0 l'accueil.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  \/* Deux formes d'URL possibles selon les r\u00e9glages de permaliens du site.\n     La premi\u00e8re est essay\u00e9e, la seconde sert de secours automatique. *\/\n  var BASES = [\n    window.location.origin + '\/wp-json\/lgw\/v1\/',\n    window.location.origin + '\/?rest_route=\/lgw\/v1\/'\n  ];\n  var baseIdx = 0;\n\n  function endpoint(name, extra) {\n    var u = BASES[baseIdx] + name;\n    if (extra) { u += (baseIdx === 0 ? '?' : '&') + extra; }\n    return u;\n  }\n\n  function apiGet(name, extra) {\n    return fetch(endpoint(name, extra), {\n      credentials: 'same-origin',\n      headers: { 'Accept': 'application\/json' }\n    }).then(function (r) {\n      if (!r.ok && r.status === 404 && baseIdx === 0) {\n        baseIdx = 1;               \/\/ Permaliens simples : on bascule sur ?rest_route=\n        return apiGet(name, extra);\n      }\n      return r.json();\n    });\n  }\n\n  function init(app) {\n    \/* Drapeau propre \u00e0 cette version : un ancien bloc utilisant \u00ab lgwReady \u00bb\n       ne peut donc pas emp\u00eacher l'initialisation de celui-ci. *\/\n    if (!app || app.dataset.lgwV2) { return; }\n    app.dataset.lgwV2 = '1';\n\n    var host     = app.querySelector('#lgwWheelHost');\n    var legend   = app.querySelector('#lgwLegend');\n    var spinBtn  = app.querySelector('#lgwSpin');\n    var spinLbl  = spinBtn.querySelector('.lgw-spin__label');\n    var pointer  = app.querySelector('#lgwPointer');\n    var modal    = app.querySelector('#lgwModal');\n    var result   = app.querySelector('#lgwResult');\n    var form     = app.querySelector('#lgwForm');\n    var alertBox = app.querySelector('#lgwAlert');\n    var submit   = app.querySelector('#lgwSubmit');\n    var submitLb = app.querySelector('#lgwSubmitLabel');\n\n    var CONF = null, PRIZES = [], N = 0, SEG = 45, rotor = null;\n    var rotation = 0, spinning = false, sending = false, session = null;\n\n    \/* ---------------- utilitaires ---------------- *\/\n    function esc(s) {\n      return String(s === undefined || s === null ? '' : s)\n        .replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;')\n        .replace(\/\"\/g, '&quot;');\n    }\n    function open(el)  { el.hidden = false; requestAnimationFrame(function(){ el.classList.add('is-open'); }); document.body.style.overflow = 'hidden'; }\n    function close(el) { el.classList.remove('is-open'); document.body.style.overflow = ''; setTimeout(function(){ el.hidden = true; }, 320); }\n    function showAlert(msg) { if (alertBox) { alertBox.textContent = msg; alertBox.hidden = false; } }\n    function clearAlert()   { if (alertBox) { alertBox.hidden = true; alertBox.textContent = ''; } }\n\n    function err(name, msg) {\n      var el = form.querySelector('.lgw-err[data-for=\"' + name + '\"]');\n      if (el) { el.textContent = msg || ''; }\n      var field = el && el.closest('.lgw-field');\n      if (field) { field.classList.toggle('has-err', !!msg); }\n      return !msg;\n    }\n    function clearErrors() {\n      ['code', 'nom', 'email', 'tel', 'ok'].forEach(function (f) { err(f, ''); });\n      clearAlert();\n    }\n\n    \/* ---------------- chargement de la configuration ---------------- *\/\n    apiGet('wheel', '_=' + Date.now())\n      .then(function (conf) {\n        if (!conf || !conf.prizes || !conf.prizes.length) { throw new Error('config'); }\n        CONF   = conf;\n        PRIZES = conf.prizes;\n        N      = PRIZES.length;\n        SEG    = 360 \/ N;\n        build();\n        applyTexts();\n\n        if (!conf.enabled) {\n          spinBtn.disabled = true;\n          spinBtn.classList.add('is-done');\n          spinLbl.textContent = 'Jeu momentan\u00e9ment suspendu';\n          return;\n        }\n        spinBtn.disabled = false;\n        spinLbl.textContent = 'Faire tourner la roue';\n      })\n      .catch(function () {\n        spinBtn.disabled = true;\n        spinBtn.classList.add('is-done');\n        spinLbl.textContent = 'Jeu indisponible';\n        var note = app.querySelector('.lgw-note span');\n        if (note) {\n          note.innerHTML = '<strong>Le jeu est momentan\u00e9ment indisponible.<\/strong> Merci de r\u00e9essayer dans quelques instants.';\n        }\n      });\n\n    \/* ---------------- construction de la roue ---------------- *\/\n    function build() {\n      var stops = [], segs = [], bulbs = [];\n\n      PRIZES.forEach(function (p, i) {\n        var c = p.jackpot ? '#e8ae1e' : (i % 2 ? '#2a1560' : '#1b0e40');\n        stops.push(c + ' ' + (i * SEG) + 'deg ' + ((i + 1) * SEG) + 'deg');\n        segs.push(\n          '<div class=\"lgw-seg' + (p.jackpot ? ' is-jackpot' : '') +\n          '\" style=\"transform:rotate(' + (i * SEG + SEG \/ 2) + 'deg)\">' +\n            '<div class=\"lgw-seg__in\">' +\n              '<span class=\"lgw-seg__emo\">' + esc(p.emo) + '<\/span>' +\n              '<b>' + esc(p.l1) + '<\/b><i>' + esc(p.l2) + '<\/i>' +\n            '<\/div>' +\n          '<\/div>'\n        );\n      });\n\n      for (var b = 0; b < 24; b++) {\n        bulbs.push('<div class=\"lgw-bulb\" style=\"transform:rotate(' + (b * 15) + 'deg)\">' +\n                   '<i style=\"animation-delay:' + (b * 0.08).toFixed(2) + 's\"><\/i><\/div>');\n      }\n\n      host.innerHTML =\n        '<div class=\"lgw-disc\">' +\n          '<div class=\"lgw-ring\"><\/div>' +\n          '<div class=\"lgw-rotor\" id=\"lgwRotor\">' +\n            '<div class=\"lgw-face\" style=\"background:conic-gradient(from 0deg,' + stops.join(',') + ')\"><\/div>' +\n            '<div class=\"lgw-lines\"><\/div>' +\n            segs.join('') +\n          '<\/div>' +\n          '<div class=\"lgw-gloss\"><\/div>' +\n          '<div class=\"lgw-bulbs\">' + bulbs.join('') + '<\/div>' +\n        '<\/div>';\n\n      rotor = host.querySelector('#lgwRotor');\n\n      legend.innerHTML = PRIZES.map(function (p) {\n        return '<li class=\"lgw-chip' + (p.jackpot ? ' is-jackpot' : '') + '\">' +\n               '<span class=\"lgw-chip__emo\">' + esc(p.emo) + '<\/span>' +\n               '<span>' + esc(p.l1) + ' ' + esc(p.l2) + '<\/span><\/li>';\n      }).join('');\n    }\n\n    \/* ---------------- textes pilot\u00e9s par l'intranet ---------------- *\/\n    function applyTexts() {\n      var consent = app.querySelector('#lgwConsentTxt');\n      if (consent && CONF.consentText) {\n        consent.innerHTML = esc(CONF.consentText) + ' <i>*<\/i>' +\n          (CONF.rulesUrl ? ' <a href=\"' + esc(CONF.rulesUrl) + '\" target=\"_blank\" rel=\"noopener\">R\u00e8glement<\/a>' : '');\n      }\n\n      if (CONF.optin) {\n        app.querySelector('#lgwOptinWrap').hidden = false;\n        app.querySelector('#lgwOptinTxt').textContent = CONF.optinText || '';\n      }\n\n      if (CONF.privacyUrl) {\n        var pr = app.querySelector('#lgwPrivacy');\n        pr.hidden = false;\n        pr.innerHTML = 'Vos donn\u00e9es sont trait\u00e9es conform\u00e9ment \u00e0 notre ' +\n          '<a href=\"' + esc(CONF.privacyUrl) + '\" target=\"_blank\" rel=\"noopener\">politique de confidentialit\u00e9<\/a>. ' +\n          'Vous pouvez demander leur suppression \u00e0 tout moment.';\n      }\n\n      if (CONF.bookingUrl) { app.querySelector('#lgwBook').href = CONF.bookingUrl; }\n    }\n\n    \/* ---------------- jeton anti-automatisation ---------------- *\/\n    function fetchToken() {\n      return apiGet('token', '_=' + Date.now())\n        .then(function (j) { session = j; return j; })\n        .catch(function () { session = null; return null; });\n    }\n\n    \/* ---------------- ouverture du formulaire ---------------- *\/\n    spinBtn.addEventListener('click', function () {\n      if (spinning || sending || !CONF) { return; }\n      clearErrors();\n      fetchToken();\n      open(modal);\n      setTimeout(function () {\n        var first = app.querySelector('#lgwCode');\n        if (first) { first.focus(); }\n      }, 350);\n    });\n\n    Array.prototype.forEach.call(modal.querySelectorAll('[data-close]'), function (el) {\n      el.addEventListener('click', function () { if (!sending) { close(modal); } });\n    });\n    result.querySelector('[data-close-result]').addEventListener('click', function () { close(result); });\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape' && !modal.hidden && !sending) { close(modal); }\n    });\n\n    \/* Le champ code se met en majuscules \u00e0 la saisie. *\/\n    var codeField = app.querySelector('#lgwCode');\n    codeField.addEventListener('input', function () {\n      var pos = this.selectionStart;\n      this.value = this.value.toUpperCase();\n      this.setSelectionRange(pos, pos);\n    });\n\n    \/* ---------------- envoi ---------------- *\/\n    form.addEventListener('submit', function (e) {\n      e.preventDefault();\n      if (sending || spinning || !CONF) { return; }\n      clearErrors();\n\n      var code  = form.code.value.trim();\n      var nom   = form.nom.value.trim();\n      var mail  = form.email.value.trim();\n      var tel   = form.tel.value.trim();\n      var okBox = app.querySelector('#lgwOk');\n      var optin = app.querySelector('#lgwOptin');\n\n      \/* Contr\u00f4les c\u00f4t\u00e9 navigateur : confort uniquement, le serveur revalide tout. *\/\n      var good = true;\n      good = err('code',  code.length >= 4 ? '' : 'Saisissez votre code de participation.') && good;\n      good = err('nom',   nom.length >= 3 ? '' : 'Indiquez votre nom et pr\u00e9nom.') && good;\n      good = err('email', \/^[^\\s@]+@[^\\s@]+\\.[a-z]{2,}$\/i.test(mail) ? '' : 'Adresse e-mail invalide.') && good;\n      good = err('tel',   \/^[+0-9 ().-]{9,20}$\/.test(tel) ? '' : 'Num\u00e9ro de t\u00e9l\u00e9phone invalide.') && good;\n      good = err('ok',    okBox.checked ? '' : 'Merci d\\'accepter le r\u00e8glement pour participer.') && good;\n      if (!good) { return; }\n\n      var ready = session ? Promise.resolve(session) : fetchToken();\n\n      sending = true;\n      submit.disabled = true;\n      submitLb.textContent = 'V\u00e9rification\u2026';\n\n      ready.then(function () {\n        return fetch(endpoint('spin'), {\n          method: 'POST',\n          credentials: 'same-origin',\n          headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\n          body: JSON.stringify({\n            code: code,\n            nom: nom,\n            email: mail,\n            tel: tel,\n            consent: okBox.checked ? 1 : 0,\n            marketing: (optin && optin.checked) ? 1 : 0,\n            source: 'roue',\n            seed: randomSeed(),\n            ts: session ? session.ts : 0,\n            token: session ? session.token : '',\n            _hp: form._hp.value\n          })\n        });\n      })\n      .then(function (r) { return r.json().then(function (j) { return { status: r.status, body: j }; }); })\n      .then(function (res) {\n        sending = false;\n        submit.disabled = false;\n        submitLb.textContent = 'Lancer la roue';\n\n        var b = res.body || {};\n        if (!b.ok) {\n          \/* Sur \u00ab trop rapide \u00bb, le jeton reste valable : il suffit de patienter. *\/\n          if (b.code === 'token' || b.code === 'rate_limited') {\n            session = null;\n            fetchToken();\n          }\n          if (b.field) { err(b.field, b.message || 'Champ invalide.'); }\n          else { showAlert(b.message || 'Une erreur est survenue. Merci de r\u00e9essayer.'); }\n          return;\n        }\n\n        close(modal);\n        setTimeout(function () { spin(b); }, 400);\n      })\n      .catch(function () {\n        sending = false;\n        submit.disabled = false;\n        submitLb.textContent = 'Lancer la roue';\n        showAlert('Connexion impossible. V\u00e9rifiez votre r\u00e9seau et r\u00e9essayez.');\n      });\n    });\n\n    function randomSeed() {\n      if (window.crypto && window.crypto.getRandomValues) {\n        var a = new Uint8Array(8);\n        window.crypto.getRandomValues(a);\n        return Array.prototype.map.call(a, function (x) {\n          return ('0' + x.toString(16)).slice(-2);\n        }).join('');\n      }\n      return String(Date.now()) + Math.random().toString(36).slice(2, 10);\n    }\n\n    \/* ---------------- animation vers l'index impos\u00e9 par le serveur ---------------- *\/\n    function spin(data) {\n      if (spinning || !rotor) { return; }\n      spinning = true;\n      spinBtn.disabled = true;\n      spinBtn.classList.add('is-spinning');\n      spinLbl.textContent = 'La roue tourne\u2026';\n      pointer.classList.add('is-active');\n\n      var idx = Math.max(0, Math.min(N - 1, parseInt(data.index, 10) || 0));\n      rotation += 360 * 6 + ((360 - (rotation % 360)) - (idx * SEG + SEG \/ 2) + 360) % 360;\n\n      var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      var dur    = reduce ? 2 : 6.2;\n\n      rotor.style.transition = 'transform ' + dur + 's cubic-bezier(.12,.72,.06,1)';\n      rotor.style.transform  = 'rotate(' + rotation + 'deg)';\n\n      setTimeout(function () {\n        pointer.classList.remove('is-active');\n        reveal(data);\n      }, dur * 1000 + 150);\n    }\n\n    function reveal(data) {\n      var p = data.prize || {};\n\n      app.querySelector('#lgwWinEmoji').textContent  = p.emoji || '';\n      app.querySelector('#lgwWinKicker').textContent = p.jackpot ? 'INCROYABLE \u2014 vous d\u00e9crochez' : 'Vous avez gagn\u00e9';\n      app.querySelector('#lgwWinTitle').textContent  = p.title || '';\n      app.querySelector('#lgwWinSub').textContent    = p.sub || '';\n      app.querySelector('#lgwCoupon').textContent    = data.coupon || '\u2014';\n      app.querySelector('#lgwValid').textContent     = data.expires_txt\n        ? 'Valable jusqu\\'au ' + data.expires_txt + '.' : '';\n      if (data.booking_url) { app.querySelector('#lgwBook').href = data.booking_url; }\n      result.querySelector('.lgw-win').classList.toggle('is-jackpot', !!p.jackpot);\n\n      spinning = false;\n      spinBtn.classList.remove('is-spinning');\n\n      if (data.test) {\n        spinBtn.disabled = false;\n        spinLbl.textContent = 'Relancer la roue (mode test)';\n      } else {\n        spinBtn.classList.add('is-done');\n        spinLbl.textContent = 'Vous avez d\u00e9j\u00e0 particip\u00e9';\n        var note = app.querySelector('.lgw-note span');\n        if (note) {\n          note.innerHTML = '<strong>Participation enregistr\u00e9e.<\/strong> Votre lot : ' +\n            esc(p.emoji) + ' ' + esc(p.title) + ' \u2014 code <b>' + esc(data.coupon) + '<\/b>.';\n        }\n      }\n\n      childSetup(data.child);\n      open(result);\n      confetti(!!p.jackpot);\n    }\n\n    \/* ---------- anniversaire de l'enfant (apr\u00e8s le gain) ---------- *\/\n    var MOIS = ['janvier', 'f\u00e9vrier', 'mars', 'avril', 'mai', 'juin',\n                'juillet', 'ao\u00fbt', 'septembre', 'octobre', 'novembre', 'd\u00e9cembre'];\n    var childCtx = null;\n\n    function childSetup(ctx) {\n      var box = app.querySelector('#lgwChild');\n      if (!box) { return; }\n      \/* pid vaut 0 en mode test : on compare au type, pas \u00e0 la valeur,\n         sinon l'encart resterait masqu\u00e9 pour l'\u00e9quipe. *\/\n      if (!ctx || typeof ctx.pid === 'undefined') { box.hidden = true; return; }\n\n      childCtx = ctx;\n      app.querySelector('#lgwChildTitle').textContent   = ctx.titre || '';\n      app.querySelector('#lgwChildText').textContent    = ctx.texte || '';\n      app.querySelector('#lgwChildConsent').textContent = ctx.consent || '';\n\n      \/* La mention \u00ab mode test \u00bb est une pastille \u00e0 part : accol\u00e9e au titre,\n         elle le faisait passer \u00e0 la ligne. *\/\n      var badge = app.querySelector('#lgwChildBadge');\n      if (badge) { badge.hidden = !ctx.demo; }\n\n      fillSelect('#lgwChildDay', 1, 31, 'Jour', function (n) { return n; });\n      fillSelect('#lgwChildMonth', 1, 12, 'Mois', function (n) { return MOIS[n - 1]; });\n\n      var cette = new Date().getFullYear();\n      fillSelect('#lgwChildYear', cette - 17, cette, 'Ann\u00e9e', function (n) { return n; }, true);\n\n      box.hidden = false;\n      app.querySelector('#lgwChildForm').hidden = false;\n      app.querySelector('#lgwChildDone').hidden = true;\n    }\n\n    function fillSelect(sel, from, to, label, fmt, desc) {\n      var el = app.querySelector(sel);\n      if (!el) { return; }\n      var html = '<option value=\"\">' + label + '<\/option>';\n      var vals = [];\n      for (var n = from; n <= to; n++) { vals.push(n); }\n      if (desc) { vals.reverse(); }\n      vals.forEach(function (n) {\n        html += '<option value=\"' + n + '\">' + esc(fmt(n)) + '<\/option>';\n      });\n      el.innerHTML = html;\n    }\n\n    var childForm = app.querySelector('#lgwChildForm');\n    if (childForm) {\n      childForm.addEventListener('submit', function (e) {\n        e.preventDefault();\n        if (!childCtx) { return; }\n\n        var btn  = app.querySelector('#lgwChildBtn');\n        var errEl = childForm.querySelector('.lgw-err[data-for=\"child\"]');\n        function setErr(m) { if (errEl) { errEl.textContent = m || ''; } }\n        setErr('');\n\n        var nom   = app.querySelector('#lgwChildName').value.trim();\n        var jour  = app.querySelector('#lgwChildDay').value;\n        var mois  = app.querySelector('#lgwChildMonth').value;\n        var annee = app.querySelector('#lgwChildYear').value;\n        var ok    = app.querySelector('#lgwChildOk').checked;\n\n        if (nom.length < 2)              { return setErr('Indiquez le pr\u00e9nom de votre enfant.'); }\n        if (!jour || !mois || !annee)    { return setErr('Indiquez la date de naissance compl\u00e8te.'); }\n        if (!ok)                         { return setErr('Merci de confirmer que vous \u00eates le repr\u00e9sentant l\u00e9gal de cet enfant.'); }\n\n        btn.disabled = true;\n        btn.textContent = 'Enregistrement\u2026';\n\n        fetch(CONF.rest + 'child', {\n          method: 'POST',\n          credentials: 'same-origin',\n          headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\n          body: JSON.stringify({\n            pid: childCtx.pid, cts: childCtx.cts, ctoken: childCtx.token,\n            child_name: nom, day: jour, month: mois, year: annee,\n            adult: 1, _hp: app.querySelector('#lgwChildHp').value\n          })\n        })\n        .then(function (r) { return r.json(); })\n        .then(function (b) {\n          btn.disabled = false;\n          btn.textContent = 'Enregistrer la date';\n          if (!b || !b.ok) { return setErr((b && b.message) || 'Enregistrement impossible.'); }\n          childForm.hidden = true;\n          var done = app.querySelector('#lgwChildDone');\n          done.textContent = b.message || 'C\\'est not\u00e9.';\n          done.hidden = false;\n        })\n        .catch(function () {\n          btn.disabled = false;\n          btn.textContent = 'Enregistrer la date';\n          setErr('Connexion impossible. R\u00e9essayez.');\n        });\n      });\n    }\n\n    \/* ---------------- copie du coupon ---------------- *\/\n    app.querySelector('#lgwCopy').addEventListener('click', function () {\n      var txt = app.querySelector('#lgwCoupon').textContent;\n      var btn = this;\n      function done() {\n        btn.textContent = 'Copi\u00e9 !';\n        btn.classList.add('is-ok');\n        setTimeout(function () { btn.textContent = 'Copier'; btn.classList.remove('is-ok'); }, 2200);\n      }\n      if (navigator.clipboard && navigator.clipboard.writeText) {\n        navigator.clipboard.writeText(txt).then(done).catch(done);\n      } else { done(); }\n    });\n\n    \/* ---------------- confettis ---------------- *\/\n    function confetti(big) {\n      var box = app.querySelector('#lgwConfetti');\n      if (!box) { return; }\n      box.innerHTML = '';\n      var colors = big\n        ? ['#f7d774', '#e0a020', '#fff3c4', '#f5b31b', '#ffe9a8']\n        : ['#a855f7', '#38bdf8', '#ec4899', '#f5b31b', '#4ade80'];\n      var n = big ? 60 : 32;\n      for (var k = 0; k < n; k++) {\n        var el = document.createElement('i');\n        el.style.left = (4 + Math.random() * 92) + '%';\n        el.style.background = colors[k % colors.length];\n        el.style.animationDelay = (Math.random() * 0.5) + 's';\n        el.style.animationDuration = (1.3 + Math.random() * 1.1) + 's';\n        el.style.setProperty('--x', (Math.random() * 200 - 100) + 'px');\n        el.style.setProperty('--r', (Math.random() * 900 - 450) + 'deg');\n        box.appendChild(el);\n      }\n      setTimeout(function () { box.innerHTML = ''; }, 3400);\n    }\n  }\n\n  function boot() {\n    Array.prototype.forEach.call(document.querySelectorAll('.lgw-app[data-lgw-v=\"2\"]'), init);\n  }\n  if (document.readyState !== 'loading') { boot(); }\n  else { document.addEventListener('DOMContentLoaded', boot); }\n  if (window.jQuery) { jQuery(window).on('elementor\/frontend\/init', boot); }\n})();\n<\/script>\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>Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-2457","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.lasergame-geneve.ch\/en\/chance\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Laser Game Gen\u00e8ve | Anniversaire &amp; Team Building - Adr\u00e9naline, strat\u00e9gie et fun au c\u0153ur de Gen\u00e8ve.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Roulette - Laser Game Gen\u00e8ve | Anniversaire &amp; Team Building\" \/>\n\t\t<meta property=\"og:description\" content=\"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.lasergame-geneve.ch\/en\/chance\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-20T19:44:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-20T19:41:17+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Roulette - Laser Game Gen\u00e8ve | Anniversaire &amp; Team Building\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/chance\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/chance\\\/#listItem\",\"name\":\"Roulette\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/chance\\\/#listItem\",\"position\":2,\"name\":\"Roulette\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/#organization\",\"name\":\"Laser Game Gen\\u00e8ve | Anniversaire & Team Building\",\"description\":\"Adr\\u00e9naline, strat\\u00e9gie et fun au c\\u0153ur de Gen\\u00e8ve.\",\"url\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/chance\\\/#webpage\",\"url\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/chance\\\/\",\"name\":\"Roulette - Laser Game Gen\\u00e8ve | Anniversaire & Team Building\",\"description\":\"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \\u2014 et un gros lot se cache dedans. Chargement\\u2026 Chargement\\u2026 Un code de participation est n\\u00e9cessaire. Une seule participation par personne : vos coordonn\\u00e9es sont v\\u00e9rifi\\u00e9es c\\u00f4t\\u00e9 serveur, impossible de rejouer avec le m\\u00eame e-mail ou le m\\u00eame num\\u00e9ro.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/chance\\\/#breadcrumblist\"},\"datePublished\":\"2026-08-20T20:44:12+01:00\",\"dateModified\":\"2026-10-20T20:41:17+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/\",\"name\":\"Laser Game Gen\\u00e8ve | Anniversaire & Team Building\",\"description\":\"Adr\\u00e9naline, strat\\u00e9gie et fun au c\\u0153ur de Gen\\u00e8ve.\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lasergame-geneve.ch\\\/en\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Roulette - Laser Game Geneva | Birthday &amp; Team Building","description":"Try your luck. Spin the wheel and walk away with a gift. Every space is a winner \u2014 and a grand prize is hidden inside. Loading... Loading... An entry code is required. Only one entry per person: your details are verified server-side, making it impossible to play again with the same email or phone number.","canonical_url":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.lasergame-geneve.ch\/en\/#listItem","position":1,"name":"Home","item":"https:\/\/www.lasergame-geneve.ch\/en\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/#listItem","name":"Roulette"}},{"@type":"ListItem","@id":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/#listItem","position":2,"name":"Roulette","previousItem":{"@type":"ListItem","@id":"https:\/\/www.lasergame-geneve.ch\/en\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/www.lasergame-geneve.ch\/en\/#organization","name":"Laser Game Gen\u00e8ve | Anniversaire & Team Building","description":"Adr\u00e9naline, strat\u00e9gie et fun au c\u0153ur de Gen\u00e8ve.","url":"https:\/\/www.lasergame-geneve.ch\/en\/"},{"@type":"WebPage","@id":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/#webpage","url":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/","name":"Roulette - Laser Game Gen\u00e8ve | Anniversaire & Team Building","description":"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.lasergame-geneve.ch\/en\/#website"},"breadcrumb":{"@id":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/#breadcrumblist"},"datePublished":"2026-08-20T20:44:12+01:00","dateModified":"2026-10-20T20:41:17+01:00"},{"@type":"WebSite","@id":"https:\/\/www.lasergame-geneve.ch\/en\/#website","url":"https:\/\/www.lasergame-geneve.ch\/en\/","name":"Laser Game Gen\u00e8ve | Anniversaire & Team Building","description":"Adr\u00e9naline, strat\u00e9gie et fun au c\u0153ur de Gen\u00e8ve.","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.lasergame-geneve.ch\/en\/#organization"}}]},"og:locale":"en_US","og:site_name":"Laser Game Gen\u00e8ve | Anniversaire &amp; Team Building - Adr\u00e9naline, strat\u00e9gie et fun au c\u0153ur de Gen\u00e8ve.","og:type":"article","og:title":"Roulette - Laser Game Gen\u00e8ve | Anniversaire &amp; Team Building","og:description":"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro.","og:url":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/","article:published_time":"2026-08-20T19:44:12+00:00","article:modified_time":"2026-10-20T19:41:17+00:00","twitter:card":"summary_large_image","twitter:title":"Roulette - Laser Game Gen\u00e8ve | Anniversaire &amp; Team Building","twitter:description":"Tentez votre chance Faites tourner la roue et repartez avec un cadeau. Chaque case est gagnante \u2014 et un gros lot se cache dedans. Chargement\u2026 Chargement\u2026 Un code de participation est n\u00e9cessaire. Une seule participation par personne : vos coordonn\u00e9es sont v\u00e9rifi\u00e9es c\u00f4t\u00e9 serveur, impossible de rejouer avec le m\u00eame e-mail ou le m\u00eame num\u00e9ro."},"aioseo_meta_data":{"post_id":"2457","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-08-20 19:44:13","updated":"2026-10-20 19:42:36","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.lasergame-geneve.ch\/en\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tRoulette\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.lasergame-geneve.ch\/en\/"},{"label":"Roulette","link":"https:\/\/www.lasergame-geneve.ch\/en\/chance\/"}],"_links":{"self":[{"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/pages\/2457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/comments?post=2457"}],"version-history":[{"count":67,"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/pages\/2457\/revisions"}],"predecessor-version":[{"id":2748,"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/pages\/2457\/revisions\/2748"}],"wp:attachment":[{"href":"https:\/\/www.lasergame-geneve.ch\/en\/wp-json\/wp\/v2\/media?parent=2457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}