1) Click “copy” code

2) Add code block into the section you’d want this in

3) Paste the code into the code block and make sure the “display source code” is toggled off.

Adding Sliding Scale Widget into a page on your Squarespace Website


<style>
  .ss-wrap {
    max-width: 560px;
    margin: 0 auto;
    padding: 2rem 1rem;
    font-family: inherit;
    color: #2a2318;
  }
  .ss-progress {
    display: flex;
    gap: 4px;
    margin-bottom: 2rem;
  }
  .ss-prog-dot {
    height: 3px;
    flex: 1;
    border-radius: 2px;
    background: #2a2318;
    opacity: 0.15;
    transition: opacity 0.2s;
  }
  .ss-prog-dot.done { opacity: 0.45; }
  .ss-counter {
    font-size: 12px;
    color: #2a2318;
    opacity: 1;
    margin-bottom: 0.5rem;
    letter-spacing: 0.03em;
  }
  .ss-q-text {
    font-size: 16px;
    font-weight: 500;
    color: #2a2318;
    margin-bottom: 0.5rem;
    line-height: 1.5;
  }
  .ss-q-sub {
    font-size: 13px;
    color: #2a2318;
    opacity: 0.65;
    margin-bottom: 1.25rem;
    line-height: 1.6;
  }
  .ss-options {
    display: flex;
    flex-direction: column;
    gap: 8px;
  }
  .ss-opt {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 12px 14px;
    border-radius: 8px;
    border: 1px solid #2a2318;
    opacity: 1;
    cursor: pointer;
    transition: opacity 0.15s;
    background: transparent;
  }
  .ss-opt:hover { opacity: 0.7; }
  .ss-opt.selected { opacity: 1; }
  .ss-opt input[type=radio] {
    margin-top: 3px;
    flex-shrink: 0;
    cursor: pointer;
  }
  .ss-opt-label {
    font-size: 14px;
    color: #2a2318;
    line-height: 1.5;
  }
  .ss-opt-sub {
    font-size: 12px;
    color: #2a2318;
    opacity: 0.65;
    margin-top: 3px;
    line-height: 1.4;
  }
  .ss-actions {
    display: flex;
    gap: 10px;
    margin-top: 1.5rem;
  }
  .ss-btn {
    padding: 9px 18px;
    border-radius: 6px;
    border: 1px solid #2a2318;
    background: transparent;
    font-size: 14px;
    cursor: pointer;
    color: #2a2318;
    font-family: inherit;
    opacity: 0.5;
    transition: opacity 0.15s;
  }
  .ss-btn:hover:not(:disabled) { opacity: 1; }
  .ss-btn:disabled {
    opacity: 0.35;
    cursor: not-allowed;
  }
  .ss-result {
    padding: 1.5rem;
    border-radius: 8px;
    border: 1px solid rgba(42,35,24,0.25);
    background: transparent;
  }
  .ss-result-label {
    font-size: 11px;
    color: #2a2318;
    opacity: 1;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    margin-bottom: 0.5rem;
  }
  .ss-result-tier {
    font-size: 22px;
    font-weight: 500;
    color: #2a2318;
    margin-bottom: 0.75rem;
    line-height: 1.3;
  }
  .ss-result-text {
    font-size: 14px;
    color: #2a2318;
    opacity: 0.7;
    line-height: 1.7;
  }
  .ss-result-note {
    font-size: 13px;
    color: #2a2318;
    opacity: 0.8;
    margin-top: 1rem;
    line-height: 1.6;
    border-top: 1px solid rgba(26,26,26,0.15);
    padding-top: 0.75rem;
  }
  .ss-reset {
    margin-top: 1rem;
    font-size: 13px;
    color: #2a2318;
    opacity: 1;
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
    text-decoration: underline;
    font-family: inherit;
    transition: opacity 0.15s;
  }
  .ss-reset:hover { opacity: 0.7; }
  .ss-credit {
    margin-top: 2rem;
    font-size: 11px;
    color: #2a2318;
    opacity: 0.3;
    text-align: right;
    letter-spacing: 0.03em;
  }
  .ss-credit a {
    color: #2a2318;
    text-decoration: none;
  }
  .ss-credit a:hover { text-decoration: underline; }
</style>

<div class="ss-wrap">
  <div id="quiz-view">
    <div class="ss-progress" id="progress-dots"></div>
    <div id="question-area"></div>
    <div class="ss-actions">
      <button class="ss-btn" id="back-btn" style="display:none;"
        onclick="goBack()">← Back</button>
      <button class="ss-btn" id="next-btn" disabled
        onclick="goNext()">Next →</button>
    </div>
  </div>
  <div id="result-view" style="display:none;">
    <div class="ss-result" id="result-box"></div>
    <button class="ss-reset" onclick="ssReset()">Start over</button>
  </div>
  <div class="ss-credit">
    © <a href="https://www.rasareka.studio/" target="_blank"
      rel="noopener">Rasareka Studio</a>
  </div>
</div>

<script>
(function() {
  var questions = [
    {
      q: "Are your basic needs covered this month without stress?",
      sub: "Housing, food, utilities, transport — the essentials.",
      opts: [
        { label: "Yes, without much worry",
          sub: "", val: 2 },
        { label: "Mostly, but it's tight",
          sub: "Some months feel more precarious than others", val: 1 },
        { label: "Not really",
          sub: "I'm managing, but the basics feel uncertain", val: 0 }
      ]
    },
    {
      q: "Do you have savings or a financial cushion you could " +
         "draw on in an emergency?",
      sub: "This includes family support, a safety net, or inherited " +
           "stability — not just your bank balance right now.",
      opts: [
        { label: "Yes, I have some cushion",
          sub: "", val: 2 },
        { label: "A little, but not much",
          sub: "", val: 1 },
        { label: "No, I'm living pretty close to the edge",
          sub: "", val: 0 }
      ]
    },
    {
      q: "Does the money you earn stay mostly yours, or does it " +
         "support others?",
      sub: "Think about dependents, family you send money to, or a " +
           "household where you're the primary earner.",
      opts: [
        { label: "It's mostly mine to manage",
          sub: "", val: 2 },
        { label: "I support some others, but I have some flexibility",
          sub: "", val: 1 },
        { label: "A significant portion goes to others",
          sub: "", val: 0 }
      ]
    },
    {
      q: "If you paid the full price, what would that actually " +
         "mean for you?",
      sub: "Be honest with yourself here — there's no wrong answer.",
      opts: [
        { label: "It would be fine — maybe uncomfortable, but " +
                 "nothing goes without",
          sub: "", val: 2 },
        { label: "Something else would have to shift",
          sub: "I'd need to skip or delay something else", val: 1 },
        { label: "It would create real hardship",
          sub: "Not just discomfort — genuine strain", val: 0 }
      ]
    },
    {
      q: "How do you relate to money generally?",
      sub: "This one is worth sitting with — discomfort around " +
           "spending isn't the same as not being able to spend.",
      opts: [
        { label: "Spending money tends to feel uncomfortable, " +
                 "even when I have it",
          sub: "I often choose the lowest price as a habit", val: 1 },
        { label: "I have a pretty clear sense of what I can " +
                 "and can't afford",
          sub: "", val: 2 },
        { label: "Money is genuinely stretched and that shapes " +
                 "most of my choices",
          sub: "", val: 0 }
      ]
    }
  ];

  var results = [
    {
      range: [0, 3],
      tier: "Lower tier",
      text: "Based on what you shared, the lower tier seems like " +
            "an honest fit. That's what it's there for — real " +
            "financial constraint, not just preference. Choosing " +
            "it when you need to is exactly right.",
      note: "If your situation changes, revisiting your tier in " +
            "the future is always welcome."
    },
    {
      range: [4, 6],
      tier: "Middle tier",
      text: "It sounds like you have some financial flexibility, " +
            "but your resources are genuinely limited. The middle " +
            "tier acknowledges that — it's a real contribution, " +
            "not a discount.",
      note: "Choosing the middle tier when you're in this position " +
            "helps the scale work the way it's intended to."
    },
    {
      range: [7, 10],
      tier: "Full price or pay-it-forward",
      text: "Based on what you shared, you're in a position where " +
            "paying the full price — or adding a little more — is " +
            "the most honest choice. It's also what makes the " +
            "lower tiers possible for others.",
      note: "The pay-it-forward option, if available, is a small " +
            "way to extend access to someone else while investing " +
            "in your own practice."
    }
  ];

  var answers = [];
  var current = 0;

  function buildDots() {
    var d = document.getElementById('progress-dots');
    d.innerHTML = '';
    questions.forEach(function(_, i) {
      var dot = document.createElement('div');
      dot.className = 'ss-prog-dot' + (i < answers.length ? ' done' : '');
      d.appendChild(dot);
    });
  }

  function renderQuestion() {
    var q = questions[current];
    var selected = answers[current];

    var html = '<p class="ss-counter">' + (current + 1) +
      ' of ' + questions.length + '</p>' +
      '<p class="ss-q-text">' + q.q + '</p>';

    if (q.sub) {
      html += '<p class="ss-q-sub">' + q.sub + '</p>';
    }

    html += '<div class="ss-options" id="opts-' + current + '">';

    q.opts.forEach(function(o, i) {
      var isSel = (selected !== undefined && selected.idx === i);
      html += '<label class="ss-opt' + (isSel ? ' selected' : '') + '">' +
        '<input type="radio" name="q' + current + '"' +
        ' value="' + o.val + '" data-idx="' + i + '"' +
        (isSel ? ' checked' : '') +
        ' onchange="ssSelect(this)">' +
        '<div><div class="ss-opt-label">' + o.label + '</div>';
      if (o.sub) {
        html += '<div class="ss-opt-sub">' + o.sub + '</div>';
      }
      html += '</div></label>';
    });

    html += '</div>';

    document.getElementById('question-area').innerHTML = html;

    var nextBtn = document.getElementById('next-btn');
    nextBtn.disabled = (selected === undefined);
    nextBtn.style.opacity = (selected === undefined) ? '0.5' : '1';
    nextBtn.textContent = (current < questions.length - 1)
      ? 'Next \u2192'
      : 'See my result \u2192';

    document.getElementById('back-btn').style.display =
      (current > 0) ? 'inline-block' : 'none';

    buildDots();
  }

  function showResult() {
    var score = answers.reduce(function(s, a) {
      return s + a.val;
    }, 0);

    var result = results.find(function(r) {
      return score >= r.range[0] && score <= r.range[1];
    });

    document.getElementById('quiz-view').style.display = 'none';
    document.getElementById('result-view').style.display = 'block';

    document.getElementById('result-box').innerHTML =
      '<div class="ss-result-label">A suggested starting point</div>' +
      '<div class="ss-result-tier">' + result.tier + '</div>' +
      '<div class="ss-result-text">' + result.text + '</div>' +
      '<div class="ss-result-note">' + result.note +
      '<br><br>This is a guide, not a rule. ' +
      'You know your situation best.</div>';
  }

  window.ssSelect = function(el) {
    answers[current] = {
      val: parseInt(el.value),
      idx: parseInt(el.dataset.idx)
    };
    var opts = document.querySelectorAll(
      '#opts-' + current + ' .ss-opt'
    );
    opts.forEach(function(o) {
      o.classList.remove('selected');
    });
    el.closest('.ss-opt').classList.add('selected');
    var btn = document.getElementById('next-btn');
    btn.disabled = false;
    btn.style.opacity = '1';
  };

  window.goNext = function() {
    if (answers[current] === undefined) return;
    if (current < questions.length - 1) {
      current++;
      renderQuestion();
    } else {
      showResult();
    }
  };

  window.goBack = function() {
    if (current > 0) {
      current--;
      renderQuestion();
    }
  };

  window.ssReset = function() {
    answers = [];
    current = 0;
    document.getElementById('result-view').style.display = 'none';
    document.getElementById('quiz-view').style.display = 'block';
    renderQuestion();
  };

  renderQuestion();
})();
</script>