{"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":"recension","status":"publish","type":"page","link":"https:\/\/stockholmnature.com\/sv\/review\/","title":{"rendered":"Granska"},"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>Stockholms Natur Hur var din upplevelse? Tryck p\u00e5 en stj\u00e4rna f\u00f6r att betygs\u00e4tta din tur. Din feedback hj\u00e4lper oss att f\u00f6rb\u00e4ttra v\u00e5ra friluftsupplevelser. \u2605 \u2605 \u2605 \u2605 \u2605 V\u00e4lj ditt betyg Forts\u00e4tt G\u00e4strecensioner<\/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\/sv\/wp-json\/wp\/v2\/pages\/10595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/comments?post=10595"}],"version-history":[{"count":14,"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/pages\/10595\/revisions"}],"predecessor-version":[{"id":10629,"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/pages\/10595\/revisions\/10629"}],"wp:attachment":[{"href":"https:\/\/stockholmnature.com\/sv\/wp-json\/wp\/v2\/media?parent=10595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}