{"id":10595,"date":"2026-05-17T09:14:40","date_gmt":"2026-05-17T07:14:40","guid":{"rendered":"https:\/\/stockholmnature.com\/?page_id=10595"},"modified":"2026-05-19T07:22:32","modified_gmt":"2026-05-19T05:22:32","slug":"avis","status":"publish","type":"page","link":"https:\/\/stockholmnature.com\/fr\/review\/","title":{"rendered":"Revue"},"content":{"rendered":"<section class=\"bde-section-10595-100 bde-section\">\n  \n  \n\t\n\n\n\n<div class=\"section-container\"><div class=\"bde-code-block-10595-101 bde-code-block\">\n\n  <div class=\"sn-review-interface\">\n  <div class=\"sn-review-card\">\n    <p class=\"sn-review-eyebrow\">Stockholm Nature<\/p>\n\n    <h2>How was your experience?<\/h2>\n\n    <p class=\"sn-review-text\">\n      Tap a star to rate your tour. Your feedback helps us improve our outdoor experiences.\n    <\/p>\n\n    <div class=\"sn-stars\" id=\"snStars\" aria-label=\"Choose your rating\">\n      <button type=\"button\" data-rating=\"1\" aria-label=\"1 star\">\u2605<\/button>\n      <button type=\"button\" data-rating=\"2\" aria-label=\"2 stars\">\u2605<\/button>\n      <button type=\"button\" data-rating=\"3\" aria-label=\"3 stars\">\u2605<\/button>\n      <button type=\"button\" data-rating=\"4\" aria-label=\"4 stars\">\u2605<\/button>\n      <button type=\"button\" data-rating=\"5\" aria-label=\"5 stars\">\u2605<\/button>\n    <\/div>\n\n    <div class=\"sn-rating-label\" id=\"snRatingLabel\">\n      Select your rating\n    <\/div>\n\n    <button type=\"button\" class=\"sn-continue-button\" id=\"snContinueButton\" disabled>\n      Continue\n    <\/button>\n  <\/div>\n<\/div>\n\n<style>\n  .sn-review-interface {\n    width: 100%;\n    padding: 32px 16px;\n    display: flex;\n    justify-content: center;\n  }\n\n  .sn-review-card {\n    width: 100%;\n    max-width: 620px;\n    text-align: center;\n    background: #ffffff;\n    border-radius: 24px;\n    padding: 36px 24px;\n    box-shadow: 0 14px 40px rgba(0, 0, 0, 0.08);\n  }\n\n  .sn-review-eyebrow {\n    margin: 0 0 10px;\n    font-size: 14px;\n    font-weight: 700;\n    letter-spacing: 0.04em;\n    text-transform: uppercase;\n    color: #2f6b4f;\n  }\n\n  .sn-review-card h2 {\n    margin: 0 0 12px;\n    font-size: 32px;\n    line-height: 1.2;\n    color: #1d1d1f;\n  }\n\n  .sn-review-text {\n    max-width: 460px;\n    margin: 0 auto 26px;\n    font-size: 17px;\n    line-height: 1.55;\n    color: #555;\n  }\n\n  .sn-stars {\n    display: flex;\n    justify-content: center;\n    gap: 8px;\n    margin: 0 0 18px;\n  }\n\n  .sn-stars button {\n    appearance: none;\n    border: 0;\n    background: transparent;\n    color: #d7d7d7;\n    font-size: 56px;\n    line-height: 1;\n    padding: 4px;\n    cursor: pointer;\n    transition: color 0.15s ease, transform 0.15s ease;\n  }\n\n  .sn-stars button.is-active {\n    color: #f5b301;\n  }\n\n  .sn-stars button:hover,\n  .sn-stars button:focus {\n    transform: scale(1.08);\n    outline: none;\n  }\n\n  .sn-rating-label {\n    min-height: 28px;\n    margin-bottom: 22px;\n    font-size: 18px;\n    font-weight: 700;\n    color: #1d1d1f;\n  }\n\n  .sn-continue-button {\n    border: 0;\n    border-radius: 999px;\n    padding: 15px 34px;\n    font-size: 16px;\n    font-weight: 700;\n    background: #2f6b4f;\n    color: #ffffff;\n    cursor: pointer;\n    transition: opacity 0.15s ease, transform 0.15s ease;\n  }\n\n  .sn-continue-button:disabled {\n    opacity: 0.45;\n    cursor: not-allowed;\n  }\n\n  .sn-continue-button:not(:disabled):hover {\n    transform: translateY(-1px);\n  }\n\n  @media (max-width: 480px) {\n    .sn-review-card {\n      padding: 30px 18px;\n      border-radius: 20px;\n    }\n\n    .sn-review-card h2 {\n      font-size: 26px;\n    }\n\n    .sn-review-text {\n      font-size: 16px;\n    }\n\n    .sn-stars {\n      gap: 4px;\n    }\n\n    .sn-stars button {\n      font-size: 44px;\n      padding: 3px;\n    }\n  }\n<\/style>\n\n<script>\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    const starsWrapper = document.getElementById(\"snStars\");\n    const stars = starsWrapper.querySelectorAll(\"button\");\n    const ratingLabel = document.getElementById(\"snRatingLabel\");\n    const continueButton = document.getElementById(\"snContinueButton\");\n\n    let selectedRating = 0;\n\n    const labels = {\n      1: \"Very poor\",\n      2: \"Poor\",\n      3: \"Okay\",\n      4: \"Great\",\n      5: \"Excellent\"\n    };\n\n    function updateStars(rating) {\n      stars.forEach(function (star) {\n        const starRating = Number(star.dataset.rating);\n        star.classList.toggle(\"is-active\", starRating <= rating);\n      });\n    }\n\n    function selectRating(rating) {\n      selectedRating = rating;\n      updateStars(selectedRating);\n      ratingLabel.textContent = labels[selectedRating];\n      continueButton.disabled = false;\n    }\n\n    stars.forEach(function (star) {\n      const rating = Number(star.dataset.rating);\n\n      star.addEventListener(\"mouseenter\", function () {\n        updateStars(rating);\n        ratingLabel.textContent = labels[rating];\n      });\n\n      star.addEventListener(\"click\", function () {\n        selectRating(rating);\n      });\n\n      star.addEventListener(\"focus\", function () {\n        updateStars(rating);\n        ratingLabel.textContent = labels[rating];\n      });\n    });\n\n    starsWrapper.addEventListener(\"mouseleave\", function () {\n      updateStars(selectedRating);\n      ratingLabel.textContent = selectedRating ? labels[selectedRating] : \"Select your rating\";\n    });\n\n    continueButton.addEventListener(\"click\", function () {\n      if (!selectedRating) return;\n\n      const params = new URLSearchParams(window.location.search);\n      const token = params.get(\"token\") || \"\";\n\n      if (!token) {\n        alert(\"Review link is missing. Please open the link from your email again.\");\n        return;\n      }\n\n      continueButton.disabled = true;\n      continueButton.textContent = \"Saving...\";\n\n      fetch(\"\/wp-json\/sn-reviews\/v1\/save-rating\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application\/json\"\n        },\n        body: JSON.stringify({\n          token: token,\n          rating: selectedRating\n        })\n      })\n        .then(function (response) {\n          if (!response.ok) {\n            throw new Error(\"Server error\");\n          }\n\n          return response.json();\n        })\n        .then(function (data) {\n          if (!data.success) {\n            throw new Error(data.message || \"Could not save rating.\");\n          }\n\n          const targetUrl = data.redirect\n            + \"?rating=\" + encodeURIComponent(selectedRating)\n            + \"&token=\" + encodeURIComponent(token);\n\n          window.location.href = targetUrl;\n        })\n        .catch(function () {\n          continueButton.disabled = false;\n          continueButton.textContent = \"Continue\";\n          alert(\"Sorry, your rating could not be saved. Please try again.\");\n        });\n    });\n  });\n<\/script>\n\n\n<\/div><\/div>\n<\/section><section class=\"bde-section-10595-103 bde-section\">\n  \n  \n\t\n\n\n\n<div class=\"section-container\"><div class=\"bde-div-10595-104 bde-div\">\n  \n  \n\t\n\n\n\n<h2 class=\"bde-heading-10595-105 bde-heading\">\nGuest Reviews\n<\/h2><div class=\"bde-code-block-10595-107 bde-code-block\">\n\n  <script defer async src='https:\/\/cdn.trustindex.io\/loader.js?0c1cc9f72b8a233bcf56dbf5b1e'><\/script>\n\n\n<\/div>\n<\/div><\/div>\n<\/section>","protected":false},"excerpt":{"rendered":"<p>Nature \u00e0 Stockholm Comment s'est pass\u00e9e votre exp\u00e9rience ? Appuyez sur une \u00e9toile pour \u00e9valuer votre visite. Vos commentaires nous aident \u00e0 am\u00e9liorer nos exp\u00e9riences en plein air. \u2605 \u2605 \u2605 \u2605 \u2605 S\u00e9lectionnez votre note Continuer Avis des clients<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"ai_generated_summary":"","_breakdance_hide_in_design_set":false,"_breakdance_tags":"","footnotes":""},"class_list":["post-10595","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/pages\/10595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/comments?post=10595"}],"version-history":[{"count":14,"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/pages\/10595\/revisions"}],"predecessor-version":[{"id":10629,"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/pages\/10595\/revisions\/10629"}],"wp:attachment":[{"href":"https:\/\/stockholmnature.com\/fr\/wp-json\/wp\/v2\/media?parent=10595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}