{"id":84,"date":"2026-08-04T02:57:53","date_gmt":"2026-08-04T02:57:53","guid":{"rendered":"https:\/\/dgold.online\/?page_id=84"},"modified":"2026-08-04T02:59:02","modified_gmt":"2026-08-04T02:59:02","slug":"before-you-change-anything","status":"publish","type":"page","link":"https:\/\/dgold.online\/?page_id=84","title":{"rendered":"Before You Change Anything"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"84\" class=\"elementor elementor-84\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cff45d8 e-flex e-con-boxed e-con e-parent\" data-id=\"cff45d8\" 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-ccd95c4 elementor-widget elementor-widget-html\" data-id=\"ccd95c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Which Room Is It? \u2014 A diagnostic from Before You Change Anything<\/title>\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,400;1,9..144,500&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;1,6..72,400&family=IBM+Plex+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n  :root{\r\n    --paper:#E7E9E3;\r\n    --paper-2:#EEF0EA;\r\n    --ink:#1B2A2E;\r\n    --ink-soft:#54635F;\r\n    --hair:#C6C9BF;\r\n    --madder:#7A322C;\r\n    --madder-soft:#9a4a41;\r\n    --field: \"Newsreader\", Georgia, serif;\r\n    --display: \"Fraunces\", Georgia, serif;\r\n    --mono: \"IBM Plex Mono\", ui-monospace, monospace;\r\n  }\r\n  *{box-sizing:border-box}\r\n  html,body{margin:0;padding:0}\r\n  body{\r\n    background:var(--paper);\r\n    color:var(--ink);\r\n    font-family:var(--field);\r\n    font-size:18px;\r\n    line-height:1.55;\r\n    -webkit-font-smoothing:antialiased;\r\n    text-rendering:optimizeLegibility;\r\n    min-height:100vh;\r\n  }\r\n  .frame{\r\n    max-width:660px;\r\n    margin:0 auto;\r\n    padding:0 26px 64px;\r\n    min-height:100vh;\r\n    display:flex;\r\n    flex-direction:column;\r\n  }\r\n \r\n  \/* instrument header *\/\r\n  header.bar{\r\n    display:flex;justify-content:space-between;align-items:center;\r\n    padding:22px 0 14px;\r\n    font-family:var(--mono);\r\n    font-size:11px;letter-spacing:.14em;text-transform:uppercase;\r\n    color:var(--ink-soft);\r\n  }\r\n  header.bar .rule{\r\n    height:1px;background:var(--hair);position:relative;margin-top:0;\r\n  }\r\n  .progresswrap{position:relative}\r\n  .progresswrap .rule{height:1px;background:var(--hair)}\r\n  .progresswrap .fill{\r\n    position:absolute;top:0;left:0;height:1px;background:var(--madder);\r\n    width:0;transition:width .5s cubic-bezier(.4,0,.1,1);\r\n  }\r\n \r\n  main{flex:1;display:flex;flex-direction:column;justify-content:center;padding:30px 0}\r\n  .screen{animation:rise .5s cubic-bezier(.2,.7,.2,1)}\r\n  @keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}\r\n \r\n  .eyebrow{\r\n    font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;\r\n    color:var(--madder);margin:0 0 20px;\r\n  }\r\n  h1{\r\n    font-family:var(--display);font-weight:500;\r\n    font-size:clamp(34px,7vw,52px);line-height:1.02;letter-spacing:-.01em;\r\n    margin:0 0 22px;\r\n  }\r\n  .lede{font-size:19px;color:var(--ink);margin:0 0 16px}\r\n  .lede.soft{color:var(--ink-soft);font-size:17px}\r\n  .stmt{\r\n    font-family:var(--display);font-weight:400;\r\n    font-size:clamp(23px,4.4vw,30px);line-height:1.22;letter-spacing:-.005em;\r\n    margin:6px 0 30px;\r\n  }\r\n  .qmark{font-family:var(--mono);font-size:11px;letter-spacing:.18em;color:var(--ink-soft);text-transform:uppercase;margin-bottom:14px}\r\n \r\n  \/* buttons + options *\/\r\n  button{font-family:inherit;cursor:pointer;color:inherit}\r\n  .btn{\r\n    font-family:var(--mono);font-size:13px;letter-spacing:.08em;text-transform:uppercase;\r\n    background:var(--ink);color:var(--paper);border:none;\r\n    padding:15px 26px;border-radius:0;transition:background .2s;\r\n  }\r\n  .btn:hover{background:var(--madder)}\r\n  .btn:disabled{opacity:.35;cursor:not-allowed}\r\n  .btn:disabled:hover{background:var(--ink)}\r\n \r\n  .opts{display:flex;flex-direction:column;gap:10px;margin-top:6px}\r\n  .opt{\r\n    display:flex;align-items:center;gap:16px;width:100%;text-align:left;\r\n    background:var(--paper-2);border:1px solid var(--hair);\r\n    padding:16px 18px;font-family:var(--field);font-size:18px;color:var(--ink);\r\n    transition:border-color .18s, background .18s, transform .06s;\r\n  }\r\n  .opt:hover{border-color:var(--ink)}\r\n  .opt:active{transform:translateY(1px)}\r\n  .opt .tick{\r\n    font-family:var(--mono);font-size:12px;color:var(--ink-soft);\r\n    min-width:26px;height:26px;display:flex;align-items:center;justify-content:center;\r\n    border:1px solid var(--hair);\r\n  }\r\n  .opt.chosen{border-color:var(--madder);background:#e9e3df}\r\n  .opt.chosen .tick{background:var(--madder);color:var(--paper);border-color:var(--madder)}\r\n \r\n  .scale{display:flex;flex-direction:column;gap:9px;margin-top:4px}\r\n  .scale .opt .tick{border-radius:0}\r\n \r\n  .nav{display:flex;justify-content:space-between;align-items:center;margin-top:30px}\r\n  .back{\r\n    font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;\r\n    background:none;border:none;color:var(--ink-soft);padding:8px 0;\r\n  }\r\n  .back:hover{color:var(--ink)}\r\n  .back[hidden]{visibility:hidden}\r\n \r\n  \/* house schematic *\/\r\n  .house{width:100%;max-width:420px;margin:0 auto 8px;display:block}\r\n  .house .wall{fill:none;stroke:var(--ink);stroke-width:1.4}\r\n  .house .room{fill:var(--paper-2);stroke:var(--ink);stroke-width:1.1;transition:fill .8s ease}\r\n  .house .room.lit{fill:var(--madder)}\r\n  .house .rlabel{font-family:var(--mono);font-size:8.5px;letter-spacing:.06em;fill:var(--ink-soft);transition:fill .8s ease}\r\n  .house .rlabel.lit{fill:var(--paper)}\r\n  .house .rname{font-family:var(--mono);font-size:6.2px;letter-spacing:.1em;fill:var(--ink-soft);text-transform:uppercase;transition:fill .8s ease}\r\n  .house .rname.lit{fill:var(--paper)}\r\n \r\n  \/* result *\/\r\n  .law{\r\n    font-family:var(--display);font-style:italic;font-weight:400;\r\n    font-size:clamp(22px,4.2vw,28px);line-height:1.28;\r\n    border-left:2px solid var(--madder);padding:2px 0 2px 20px;margin:26px 0;\r\n  }\r\n  .block{margin:22px 0}\r\n  .block .k{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:8px}\r\n  .block p{margin:0}\r\n  .sit{background:var(--paper-2);border:1px solid var(--hair);padding:20px 22px}\r\n  .sit p{font-family:var(--display);font-size:20px;line-height:1.35}\r\n  .handoff{border-top:1px solid var(--hair);margin-top:34px;padding-top:26px}\r\n  .handoff .cta{font-family:var(--display);font-size:22px;margin:0 0 18px}\r\n  .signpost{background:#e9e3df;border:1px solid var(--madder-soft);padding:18px 20px;margin:24px 0;font-size:16.5px;color:var(--ink)}\r\n  .signpost .k{color:var(--madder)}\r\n  .restart{margin-top:30px}\r\n  .restart button{font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;background:none;border:1px solid var(--hair);padding:11px 18px;color:var(--ink-soft)}\r\n  .restart button:hover{border-color:var(--ink);color:var(--ink)}\r\n \r\n  .computing{text-align:center}\r\n  .computing .dot{font-family:var(--mono);color:var(--madder);letter-spacing:.3em}\r\n \r\n  a{color:var(--madder)}\r\n  :focus-visible{outline:2px solid var(--madder);outline-offset:3px}\r\n \r\n  @media (max-width:480px){\r\n    body{font-size:17px}\r\n    .frame{padding:0 18px 48px}\r\n  }\r\n  @media (prefers-reduced-motion:reduce){\r\n    .screen{animation:none}\r\n    .progresswrap .fill,.house .room,.house .rlabel,.house .rname{transition:none}\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"frame\">\r\n  <header class=\"bar\">\r\n    <span>Before You Change Anything<\/span>\r\n    <span id=\"count\">\u2014<\/span>\r\n  <\/header>\r\n  <div class=\"progresswrap\"><div class=\"rule\"><\/div><div class=\"fill\" id=\"fill\"><\/div><\/div>\r\n \r\n  <main id=\"main\"><!-- screens render here --><\/main>\r\n<\/div>\r\n \r\n<script>\r\n\/* ---------- content ---------- *\/\r\nconst ORDER = [\"I\",\"V\",\"C\",\"S\",\"E\",\"X\",\"K\"];\r\n \r\nconst ROOMS = {\r\n  I:{name:\"Identity\", code:\"ID\",\r\n     law:\"Every other pillar inherits the self that stands in it.\",\r\n     mask:\"The wrongness has probably been reaching you disguised \u2014 as a vision that won't come into focus, a plan that keeps failing for reasons you can't name, a discipline you somehow can't hold. You've been renovating those rooms while the draft came from this one.\",\r\n     talk:\"Who have you quietly become, because of the life you've been living? And is that person carrying you toward the future you actually want \u2014 or further from it?\"},\r\n  V:{name:\"Vision\", code:\"VI\",\r\n     law:\"A destination you did not choose cannot satisfy you when you reach it.\",\r\n     mask:\"It's likely been wearing other masks \u2014 a motivation problem you can't seem to muster, a discipline problem with no cause you can name, a strategy you keep tearing up and starting over. You can't out-motivate a destination you never actually wanted.\",\r\n     talk:\"Strip away the applause \u2014 no audience, no proof for anyone. What would you still want to build? And how much of your current plan survives that question?\"},\r\n  C:{name:\"Capacity\", code:\"CA\",\r\n     law:\"A vision without the capacity beneath it is just pressure.\",\r\n     mask:\"It almost never looks like what it is. It looks like inadequacy \u2014 the quiet private verdict that something is simply wrong with you. It isn't a character flaw. It's a supply that was never matched to the demand.\",\r\n     talk:\"What is your vision actually asking of you \u2014 in skill, in energy, in resource? And which of the three have you been pretending you already have?\"},\r\n  S:{name:\"Strategy\", code:\"ST\",\r\n     law:\"You cannot execute your way out of the wrong plan.\",\r\n     mask:\"It disguises itself as a work-ethic problem. It tells you to try harder, do more, wake earlier \u2014 to climb a too-short ladder faster. You cannot out-work a plan that cannot reach.\",\r\n     talk:\"If you ran your current plan flawlessly for five years \u2014 no slip-ups, no wasted days \u2014 would it produce the future you want? Or only more of what it produces now?\"},\r\n  E:{name:\"Environment\", code:\"EN\",\r\n     law:\"Given enough time, your environment becomes your character.\",\r\n     mask:\"It hides as a permanent personal flaw \u2014 you decide you're simply a smaller person, and carry that verdict everywhere. But this one stays behind the moment you leave the room that produced it. That's how you know it was never you.\",\r\n     talk:\"Look at who you become in your worst room. Is that the person your vision needs \u2014 or the person your environment keeps producing?\"},\r\n  X:{name:\"Execution\", code:\"EX\",\r\n     law:\"You do not get the life you intend. You get the life you repeat.\",\r\n     mask:\"This is the one room that's genuinely yours to answer \u2014 and the rarest true verdict in the house. You checked the other six honestly and they held. So this isn't a broken character. It's a set of inputs that drifted from a life you still, genuinely, want. The fix is smaller than resolve: shrink the action until an ordinary, unmotivated day can hold it.\",\r\n     talk:\"Forget what you say matters. Look at your last ordinary week \u2014 the hours, the attention, the actual choices. What would a stranger conclude your real priorities are? And how far is that from the ones you'd name out loud?\"},\r\n  K:{name:\"Contribution\", code:\"CO\",\r\n     law:\"Meaning is the one thing you cannot keep for yourself.\",\r\n     mask:\"It's the most expensive disguise of all: it whispers 'not enough yet,' so you chase more of the exact thing that already rang hollow. The win was real. It just reached no one but you.\",\r\n     talk:\"If your life's work reached its fullest version, who \u2014 besides you \u2014 would be better for it? If the honest answer is 'no one in particular,' is that the life you actually meant to build?\"}\r\n};\r\n \r\n\/\/ Stage 0 \u2014 symptom entry (not scored; the empathy hook)\r\nconst SYMPTOMS = [\r\n  \"Good things happen \u2014 and I feel nothing.\",\r\n  \"I can't say where I'm actually trying to get to. I don't have a clear direction.\",\r\n  \"Everything costs more than it used to, and rest doesn't fix it.\",\r\n  \"I'm working harder and the goal isn't getting closer.\",\r\n  \"I'm a smaller version of myself in one particular place.\",\r\n  \"I know what to do. I just don't do it.\",\r\n  \"Things are going well and it still feels like it doesn't matter.\"\r\n];\r\n \r\n\/\/ Act 1 \u2014 recognition items (scattered so no two neighbours share a room)\r\nconst REC = [\r\n  {room:\"I\", key:\"I1\", t:\"Something good happens \u2014 the kind of thing I used to want \u2014 and I feel nothing.\"},\r\n  {room:\"V\", key:\"V1\", t:\"I couldn't really tell you where I'm trying to get to. I don't have a clear destination of my own.\"},\r\n  {room:\"C\", key:\"C1\", t:\"Everything costs more than it used to. The same effort gets me less and less.\"},\r\n  {room:\"S\", key:\"S1\", t:\"I'm putting in more, and the goal isn't getting any closer.\"},\r\n  {room:\"E\", key:\"E1\", t:\"In one particular place, I turn into a smaller version of myself.\"},\r\n  {room:\"X\", key:\"X1\", t:\"I stay busy and I do what I say I'll do \u2014 but I can't remember the last time I touched the thing that actually matters. Only the things around it.\"},\r\n  {room:\"K\", key:\"K1\", t:\"Something goes well \u2014 something I genuinely wanted \u2014 and it still lands flat.\"},\r\n  {room:\"I\", key:\"I2\", t:\"On paper I'm doing well. But the life I'm succeeding at doesn't feel like mine, and I can't say why.\"},\r\n  {room:\"V\", key:\"V2\", t:\"I can tell you what I'm supposed to want. But when I ask what I actually want, I go quiet.\"},\r\n  {room:\"C\", key:\"C2\", t:\"Rest doesn't refill me anymore. What's being asked of me is more than I have to give.\"},\r\n  {room:\"S\", key:\"S2\", t:\"I'm clearly better than I was a year ago \u2014 and the goal is no closer than it was back then.\"},\r\n  {room:\"E\", key:\"E2\", t:\"When I leave that place, the smaller version of me stays behind. It doesn't follow me everywhere I go.\"},\r\n  {room:\"X\", key:\"X2\", t:\"I've honestly checked everything else \u2014 I want this, the plan makes sense, the people and place are fine \u2014 and my days still don't add up to it.\"},\r\n  {room:\"K\", key:\"K2\", t:\"I've caught myself thinking 'is this all?' at the exact moment I expected to feel full.\"}\r\n];\r\nconst SCALE = [\"Not me\",\"Rarely\",\"Often\",\"That's exactly me\"]; \/\/ 0..3\r\n \r\n\/\/ Act 2 \u2014 the isolating \/ source test (cascade order)\r\nconst ISO = [\r\n  {room:\"I\", t:\"If who you are today were honestly running your life \u2014 not who you used to be, not a role you've kept playing \u2014 would this stuck feeling go away?\"},\r\n  {room:\"V\", t:\"If you had a destination that was truly yours \u2014 one you actually wanted, and could clearly name \u2014 would this stuck feeling go away?\"},\r\n  {room:\"C\", t:\"If you had everything this actually takes of you \u2014 the skill, the energy, the time and money \u2014 with nothing missing, would this stuck feeling go away?\"},\r\n  {room:\"S\", t:\"If your current plan could actually get you where you want to go \u2014 if the path were long enough to reach it \u2014 would this stuck feeling go away?\"},\r\n  {room:\"E\", t:\"If you were somewhere that brought out your best, day after day, would this stuck feeling go away?\"},\r\n  {room:\"X\", t:\"If your normal days \u2014 even the ones you don't feel like it \u2014 reliably did the thing that matters, would this stuck feeling go away?\"},\r\n  {room:\"K\", t:\"If your life clearly made things better for someone besides you, would this stuck feeling go away?\"}\r\n];\r\nconst ISO_OPTS = [[\"Yes\",\"Yes \u2014 that would settle it\",2],[\"Partly\",\"Partly \u2014 some of it\",1],[\"No\",\"No \u2014 it'd still be there\",0]];\r\n \r\n\/* ---------- state ---------- *\/\r\nconst S = { symptoms:new Set(), rec:{}, iso:{} };\r\nlet phase = \"welcome\";      \/\/ welcome | symptom | rec | shift | iso | computing | result\r\nlet recIdx = 0, isoIdx = 0;\r\n \r\nconst main = document.getElementById(\"main\");\r\nconst countEl = document.getElementById(\"count\");\r\nconst fillEl = document.getElementById(\"fill\");\r\nconst TOTAL = REC.length + ISO.length; \/\/ 21 rated items\r\n \r\nfunction progress(){\r\n  let done = 0;\r\n  if(phase===\"rec\") done = recIdx;\r\n  else if(phase===\"shift\") done = REC.length;\r\n  else if(phase===\"iso\") done = REC.length + isoIdx;\r\n  else if(phase===\"computing\"||phase===\"result\") done = TOTAL;\r\n  const inItems = (phase===\"rec\"||phase===\"iso\");\r\n  countEl.textContent = inItems ? String(done+1).padStart(2,\"0\")+\" \/ \"+TOTAL\r\n                       : (phase===\"result\"?\"COMPLETE\":\"\u2014\");\r\n  fillEl.style.width = (done\/TOTAL*100)+\"%\";\r\n}\r\n \r\n\/* ---------- renderers ---------- *\/\r\nfunction el(html){ const d=document.createElement(\"div\"); d.className=\"screen\"; d.innerHTML=html; return d; }\r\nfunction paint(node){ main.innerHTML=\"\"; main.appendChild(node); progress(); window.scrollTo(0,0); }\r\n \r\nfunction houseSVG(litCodes){\r\n  const lit = new Set(litCodes||[]);\r\n  \/\/ room: [x,y,w,h,code,name]\r\n  const R = [\r\n    [60,30,80,44,\"VI\",\"Vision\"],[150,30,80,44,\"CA\",\"Capacity\"],[240,30,80,44,\"ST\",\"Strategy\"],\r\n    [60,84,80,44,\"EN\",\"Environ.\"],[150,84,80,44,\"EX\",\"Execution\"],[240,84,80,44,\"CO\",\"Contrib.\"],\r\n    [60,138,260,34,\"ID\",\"Identity\"]\r\n  ];\r\n  let rooms = R.map(([x,y,w,h,code,name])=>{\r\n    const on = lit.has(code);\r\n    return `<rect class=\"room${on?' lit':''}\" x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\"\/>\r\n      <text class=\"rlabel${on?' lit':''}\" x=\"${x+w\/2}\" y=\"${y+h\/2-1}\" text-anchor=\"middle\">${code}<\/text>\r\n      <text class=\"rname${on?' lit':''}\" x=\"${x+w\/2}\" y=\"${y+h\/2+9}\" text-anchor=\"middle\">${name}<\/text>`;\r\n  }).join(\"\");\r\n  return `<svg class=\"house\" viewBox=\"0 0 380 190\" role=\"img\" aria-label=\"A cutaway of the seven-room house\">\r\n    <polyline class=\"wall\" points=\"46,30 190,4 334,30\"\/>\r\n    ${rooms}\r\n    <rect class=\"wall\" x=\"46\" y=\"30\" width=\"288\" height=\"142\"\/>\r\n  <\/svg>`;\r\n}\r\n \r\nfunction renderWelcome(){\r\n  phase=\"welcome\";\r\n  const n = el(`\r\n    ${houseSVG([])}\r\n    <p class=\"eyebrow\">A diagnostic \u00b7 Before You Change Anything<\/p>\r\n    <h1>Which room is it?<\/h1>\r\n    <p class=\"lede\">Most people change the wrong thing. They fix the room where the problem shows up \u2014 not the room where it actually lives. So the fresh start ends exactly where the last one did.<\/p>\r\n    <p class=\"lede soft\">This won't score you. In about four minutes it locates the one room your fault is most likely coming from, and names the disguise it's been wearing. Answer honestly. That's the only requirement.<\/p>\r\n    <div class=\"nav\"><span><\/span><button class=\"btn\" id=\"go\">Begin<\/button><\/div>\r\n  `);\r\n  paint(n);\r\n  document.getElementById(\"go\").onclick = renderSymptom;\r\n}\r\n \r\nfunction renderSymptom(){\r\n  phase=\"symptom\";\r\n  const rows = SYMPTOMS.map((s,i)=>`\r\n    <button class=\"opt${S.symptoms.has(i)?' chosen':''}\" data-i=\"${i}\">\r\n      <span class=\"tick\">${S.symptoms.has(i)?'\u2713':''}<\/span><span>${s}<\/span>\r\n    <\/button>`).join(\"\");\r\n  const n = el(`\r\n    <p class=\"eyebrow\">First \u2014 the feeling<\/p>\r\n    <p class=\"stmt\">Which of these is true for you right now?<\/p>\r\n    <p class=\"qmark\">Choose all that land \u00b7 or none, if none fit<\/p>\r\n    <div class=\"opts\">${rows}<\/div>\r\n    <div class=\"nav\">\r\n      <button class=\"back\" id=\"back\">\u2190 Back<\/button>\r\n      <button class=\"btn\" id=\"go\">Continue<\/button>\r\n    <\/div>\r\n  `);\r\n  paint(n);\r\n  n.querySelectorAll(\".opt\").forEach(b=>{\r\n    b.onclick=()=>{ const i=+b.dataset.i;\r\n      if(S.symptoms.has(i)){S.symptoms.delete(i);} else {S.symptoms.add(i);}\r\n      renderSymptom();\r\n    };\r\n  });\r\n  document.getElementById(\"back\").onclick = renderWelcome;\r\n  document.getElementById(\"go\").onclick = ()=>{ recIdx=0; renderRec(); };\r\n}\r\n \r\nfunction renderRec(){\r\n  phase=\"rec\";\r\n  const item = REC[recIdx];\r\n  const cur = S.rec[item.key];\r\n  const opts = SCALE.map((lbl,v)=>`\r\n    <button class=\"opt${cur===v?' chosen':''}\" data-v=\"${v}\">\r\n      <span class=\"tick\">${cur===v?'\u25cf':''}<\/span><span>${lbl}<\/span>\r\n    <\/button>`).join(\"\");\r\n  const first = recIdx===0;\r\n  const n = el(`\r\n    <p class=\"eyebrow\">${recIdx===0?'Now \u2014 plain statements':'How true of you?'}<\/p>\r\n    <p class=\"stmt\">${item.t}<\/p>\r\n    <div class=\"scale\">${opts}<\/div>\r\n    <div class=\"nav\">\r\n      <button class=\"back\" id=\"back\" ${first? '' : ''}>\u2190 Back<\/button>\r\n      <span><\/span>\r\n    <\/div>\r\n  `);\r\n  paint(n);\r\n  n.querySelectorAll(\".opt\").forEach(b=>{\r\n    b.onclick=()=>{\r\n      S.rec[item.key]=+b.dataset.v;\r\n      b.classList.add(\"chosen\");\r\n      setTimeout(()=>{\r\n        if(recIdx < REC.length-1){ recIdx++; renderRec(); }\r\n        else renderShift();\r\n      }, reduceMotion()?0:300);\r\n    };\r\n  });\r\n  document.getElementById(\"back\").onclick = ()=>{\r\n    if(recIdx>0){ recIdx--; renderRec(); } else renderSymptom();\r\n  };\r\n}\r\n \r\nfunction renderShift(){\r\n  phase=\"shift\";\r\n  const n = el(`\r\n    <p class=\"eyebrow\">One last pass<\/p>\r\n    <h1 style=\"font-size:clamp(28px,5.5vw,40px)\">Now, where does it come from?<\/h1>\r\n    <p class=\"lede\">You've said where it hurts. That's not the same as where the problem starts. A problem often shows up in the loudest part of your life while it's actually coming from somewhere quieter.<\/p>\r\n    <p class=\"lede soft\">So for the next seven, imagine that one part of your life were completely sorted \u2014 that problem, gone. Then ask one simple thing: would the stuck feeling go away?<\/p>\r\n    <div class=\"nav\">\r\n      <button class=\"back\" id=\"back\">\u2190 Back<\/button>\r\n      <button class=\"btn\" id=\"go\">Run the test<\/button>\r\n    <\/div>\r\n  `);\r\n  paint(n);\r\n  document.getElementById(\"back\").onclick = ()=>{ recIdx=REC.length-1; renderRec(); };\r\n  document.getElementById(\"go\").onclick = ()=>{ isoIdx=0; renderIso(); };\r\n}\r\n \r\nfunction renderIso(){\r\n  phase=\"iso\";\r\n  const item = ISO[isoIdx];\r\n  const cur = S.iso[item.room];\r\n  const opts = ISO_OPTS.map(([short,lbl,v])=>`\r\n    <button class=\"opt${cur===v?' chosen':''}\" data-v=\"${v}\">\r\n      <span class=\"tick\">${cur===v?'\u25cf':''}<\/span><span>${lbl}<\/span>\r\n    <\/button>`).join(\"\");\r\n  const n = el(`\r\n    <p class=\"eyebrow\">Source test \u00b7 ${isoIdx+1} of 7<\/p>\r\n    <p class=\"stmt\">${item.t}<\/p>\r\n    <div class=\"scale\">${opts}<\/div>\r\n    <div class=\"nav\">\r\n      <button class=\"back\" id=\"back\">\u2190 Back<\/button>\r\n      <span><\/span>\r\n    <\/div>\r\n  `);\r\n  paint(n);\r\n  n.querySelectorAll(\".opt\").forEach(b=>{\r\n    b.onclick=()=>{\r\n      S.iso[item.room]=+b.dataset.v;\r\n      b.classList.add(\"chosen\");\r\n      setTimeout(()=>{\r\n        if(isoIdx < ISO.length-1){ isoIdx++; renderIso(); }\r\n        else renderComputing();\r\n      }, reduceMotion()?0:300);\r\n    };\r\n  });\r\n  document.getElementById(\"back\").onclick = ()=>{\r\n    if(isoIdx>0){ isoIdx--; renderIso(); } else renderShift();\r\n  };\r\n}\r\n \r\nfunction renderComputing(){\r\n  phase=\"computing\";\r\n  const n = el(`\r\n    <div class=\"computing\">\r\n      <p class=\"eyebrow\" style=\"color:var(--ink-soft)\">Reading the house<\/p>\r\n      <p class=\"stmt\">Tracing the fault to its room<span class=\"dot\" id=\"dot\"><\/span><\/p>\r\n    <\/div>`);\r\n  paint(n);\r\n  if(reduceMotion()){ setTimeout(()=>renderResult(diagnose()),200); return; }\r\n  const dot=document.getElementById(\"dot\"); let k=0;\r\n  const iv=setInterval(()=>{ k=(k+1)%4; dot.textContent=\" \"+\".\".repeat(k); },300);\r\n  setTimeout(()=>{ clearInterval(iv); renderResult(diagnose()); }, 1400);\r\n}\r\n \r\n\/* ---------- the routing engine (implements the item-bank spec) ---------- *\/\r\nfunction diagnose(){\r\n  const r=(k)=>S.rec[k]??0;\r\n  const presence={ I:r(\"I1\")+r(\"I2\"), V:r(\"V1\")+r(\"V2\"), C:r(\"C1\")+r(\"C2\"),\r\n                   S:r(\"S1\")+r(\"S2\"), E:r(\"E1\")+r(\"E2\"), X:r(\"X1\")+r(\"X2\"), K:r(\"K1\")+r(\"K2\") };\r\n  const source={}; ORDER.forEach(o=>source[o]=S.iso[o]??0);\r\n \r\n  \/\/ qualification: presence>=4 AND source>=1; Environment also needs E2>=2 (the discriminator)\r\n  const qualifies={};\r\n  ORDER.forEach(o=>{\r\n    let ok = presence[o]>=4 && source[o]>=1;\r\n    if(o===\"E\" && r(\"E2\")<2) ok=false;\r\n    qualifies[o]=ok;\r\n  });\r\n  let cand = ORDER.filter(o=>qualifies[o]);\r\n \r\n  \/\/ Step 2 \u2014 Execution suppression\r\n  const upstream5=[\"I\",\"V\",\"C\",\"S\",\"E\"];\r\n  let execMask=false;\r\n  if(cand.includes(\"X\") && upstream5.some(o=>cand.includes(o))){ cand=cand.filter(o=>o!==\"X\"); execMask=true; }\r\n \r\n  \/\/ Step 3 \u2014 Contribution gate\r\n  let contribGate=false;\r\n  if(cand.includes(\"K\") && (cand.includes(\"I\")||cand.includes(\"V\"))){ cand=cand.filter(o=>o!==\"K\"); contribGate=true; }\r\n \r\n  \/\/ Step 7 \u2014 crisis-sensitive flag\r\n  const crisis = (r(\"C2\")===3) || (r(\"K2\")===3);\r\n \r\n  \/\/ Step 6 \u2014 tangled \/ low-signal\r\n  if(cand.length===0){\r\n    const anyPresence = ORDER.some(o=>presence[o]>=4);\r\n    const kind = (anyPresence || S.symptoms.size>0) ? \"tangled\" : \"quiet\";\r\n    return { kind, crisis };\r\n  }\r\n \r\n  \/\/ Step 4 \u2014 cascade: primary = furthest upstream\r\n  const primary = ORDER.find(o=>cand.includes(o));\r\n  const pIdx = ORDER.indexOf(primary);\r\n \r\n  \/\/ Step 5 \u2014 honest tie-break: a downstream room answered \"Yes\" while primary only \"Partly\"\r\n  let co=null;\r\n  if(source[primary]===1){\r\n    co = cand.find(o=>ORDER.indexOf(o)>pIdx && source[o]===2) || null;\r\n  }\r\n \r\n  return { kind:\"located\", primary, co, execMask, contribGate, crisis };\r\n}\r\n \r\n\/* ---------- result screen ---------- *\/\r\nfunction renderResult(d){\r\n  phase=\"result\";\r\n  let inner=\"\";\r\n \r\n  if(d.kind===\"located\"){\r\n    const P=ROOMS[d.primary];\r\n    const lit=[P.code].concat(d.co?[ROOMS[d.co].code]:[]);\r\n    const twoRooms = d.co ? `<p class=\"lede soft\">Two rooms are speaking at once \u2014 ${P.name}, and ${ROOMS[d.co].name} answering just as clearly. That's the honest edge of what an instrument can do from the outside. Which one is truly upstream is the exact thing a live conversation is built to settle.<\/p>` : \"\";\r\n    inner = `\r\n      ${houseSVG(lit)}\r\n      <p class=\"eyebrow\">The instrument's read<\/p>\r\n      <h1>The room is most likely ${P.name}.<\/h1>\r\n      ${twoRooms}\r\n      <div class=\"block\"><div class=\"k\">The disguise it was wearing<\/div><p>${P.mask}<\/p><\/div>\r\n      <p class=\"law\">${P.law}<\/p>\r\n      <div class=\"block\"><div class=\"k\">Sit with this \u2014 don't solve it<\/div>\r\n        <div class=\"sit\"><p>${P.talk}<\/p><\/div><\/div>\r\n    `;\r\n  } else if(d.kind===\"tangled\"){\r\n    inner = `\r\n      ${houseSVG([])}\r\n      <p class=\"eyebrow\">The instrument's read<\/p>\r\n      <h1>No single room is announcing itself cleanly.<\/h1>\r\n      <p class=\"lede\">That's a real result, not a failure. Something is off \u2014 but it's showing up in one part of your life while coming from another, and no single room passed the source test cleanly.<\/p>\r\n      <p class=\"lede soft\">This is the hardest kind to sort out on your own. The very closeness that lets you feel that something's wrong is what hides where it's coming from. It's the exact thing a second set of eyes is for.<\/p>\r\n    `;\r\n  } else { \/\/ quiet\r\n    inner = `\r\n      ${houseSVG([])}\r\n      <p class=\"eyebrow\">The instrument's read<\/p>\r\n      <h1>Nothing surfaced strongly today.<\/h1>\r\n      <p class=\"lede\">On these answers, no room is clearly out of alignment \u2014 which is worth taking at face value, not explaining away.<\/p>\r\n      <p class=\"lede soft\">If something still feels off underneath, it may just be sitting below what a short set of questions can catch. Come back to it on a harder week, or bring it to a conversation where it can be drawn out slowly.<\/p>\r\n    `;\r\n  }\r\n \r\n  if(d.crisis){\r\n    inner += `\r\n      <div class=\"signpost\">\r\n        <div class=\"k\">One thing, said plainly<\/div>\r\n        A couple of your answers point to something heavier than a misaligned room \u2014 the kind of depletion or flatness a diagnostic isn't built to carry. If that's where you are, a conversation with a doctor or a licensed professional belongs alongside anything else you do next. That isn't a detour from this work. It's the ground it stands on.\r\n      <\/div>`;\r\n  }\r\n \r\n  inner += `\r\n    <div class=\"handoff\">\r\n      <p class=\"lede soft\">This instrument reads your house from the outside. The one house it can never fully read is your own \u2014 your own masquerades are the ones you're standing inside of. The next move isn't a plan. It's a second set of eyes on the room you just found.<\/p>\r\n      <p class=\"cta\">That's what Talk to Titi is for.<\/p>\r\n      <button class=\"btn\" id=\"book\">Book the conversation<\/button>\r\n    <\/div>\r\n    <div class=\"restart\"><button id=\"again\">Start over<\/button><\/div>\r\n  `;\r\n \r\n  const n=el(inner);\r\n  paint(n);\r\n  \/\/ light the room after a beat for the \"marking\" effect\r\n  document.getElementById(\"book\").onclick=()=>{ \/* wire to booking URL *\/ alert(\"Wire this button to the Talk to Titi booking link.\"); };\r\n  document.getElementById(\"again\").onclick=()=>{ S.symptoms=new Set(); S.rec={}; S.iso={}; recIdx=0; isoIdx=0; renderWelcome(); };\r\n}\r\n \r\nfunction reduceMotion(){ return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches; }\r\n \r\n\/* ---------- go ---------- *\/\r\nrenderWelcome();\r\n<\/script>\r\n<\/body>\r\n<\/html>\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>Which Room Is It? \u2014 A diagnostic from Before You Change Anything Before You Change Anything \u2014<\/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-84","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dgold.online\/index.php?rest_route=\/wp\/v2\/pages\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dgold.online\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dgold.online\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dgold.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dgold.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=84"}],"version-history":[{"count":5,"href":"https:\/\/dgold.online\/index.php?rest_route=\/wp\/v2\/pages\/84\/revisions"}],"predecessor-version":[{"id":89,"href":"https:\/\/dgold.online\/index.php?rest_route=\/wp\/v2\/pages\/84\/revisions\/89"}],"wp:attachment":[{"href":"https:\/\/dgold.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}